 ///
 /// If any of the elements resolves to an error, the resulting `Deferred` will contain that error.
 /// If the reducing function throws an error, the resulting `Deferred` will contain that error.
-/// The combined `Deferred` will use a new queue at the requested (or current) QoS.
+/// The combined `Deferred` will use a new queue at the requested QoS.
 ///
 /// - parameter qos: the QoS at which the `reduce` operation and its notifications should occur; defaults to the current QoS class
 /// - parameter deferreds: a `Sequence` of `Deferred`

  return combine(queue: queue, deferreds: deferreds)
}

public func combine<Value, S: Sequence>(_ deferreds: S) -> Deferred<[Value]>
  where S.Iterator.Element == Deferred<Value>
{
  return combine(qos: .current, deferreds: deferreds)
}

public func combine<Value, S: Sequence>(queue: DispatchQueue,
                                        deferreds: S) -> Deferred<[Value]>

  return combine(queue: queue, deferreds: deferreds)
}

/// Combine a Collection of `Deferred`s into a new `Deferred` whose value is an array.
/// The combined `Deferred` will become determined after every input `Deferred` is determined.
/// The combined `Deferred` will use a new queue at the current QoS.
///
/// If any of the elements resolves to an error, the combined `Deferred` will contain that error.
///
/// - parameter deferreds: a `Collection` of `Deferred`
/// - returns: a new `Deferred`

public func combine<Value, C: Collection>(_ deferreds: C) -> Deferred<[Value]>
  where C.Iterator.Element == Deferred<Value>
{
  return combine(qos: .current, deferreds: deferreds)
}

/// Combine a Collection of `Deferred`s into a new `Deferred` whose value is an array.
/// The combined `Deferred` will become determined after every input `Deferred` is determined.
/// The combined `Deferred` will use the supplied queue.
///
/// If any of the elements resolves to an error, the combined `Deferred` will contain that error.
///
/// - parameter queue: the queue onto which the `combine` operation and its notifications will occur
/// - parameter deferreds: a `Collection` of `Deferred`
/// - returns: a new `Deferred`

public func combine<Value, C: Collection>(queue: DispatchQueue,
                                          deferreds: C) -> Deferred<[Value]>
