     }
 
     // This `Deferred` has been resolved
-    return true
-  }
-
-  // FIXME: Should be a conditional extension
-  // Unfortunately, it should be `where Cancellation is Failure`,
-  // which is not (yet) a valid condition.
-  // It might be nice to conform to the `Cancellable` protocol defined by `Combine`.
-  // For the moment, this is `open` for the benefit of `DeferredHTTP`. Is it necessary?
-
-  /// Attempt to cancel this `Deferred`
-  ///
-  /// This method can only succeed if a `Cancellation` can be cast as a `Failure`.
-  ///
-  /// - parameter error: a `DeferredError` detailing the reason for the attempted cancellation.
-  /// - returns: whether the cancellation was performed successfully.
-
-  @discardableResult
-  open func cancel(_ error: Cancellation) -> Bool
-  {
-    guard let error = error as? Failure else { return false }
-    return resolve(.failure(error))
+  }
+
+  /// Find out whether a cancellation attempt should proceed.
+  ///
+  /// This is a customization point for subclasses of `Deferred`, and
+  /// should not be called by client code.
+  ///
+  /// As `Deferred`'s cancellation operation does not occur in this
+  /// function, calling this is likely useless for client code.
+  ///
+  /// - returns: whether the `cancel()` function should proceed.
+
+  open func attemptCancellation() -> Bool
+  {
+    return (Cancellation.canceled() is Failure)
   }
 
   // MARK: retain source

      {
        resolved.deinitialize(count: 1)
        resolved.deallocate()
        return false
      }
      // The atomic compare-and-swap operation uses memory order `.acqrel`.
      // "release" ordering ensures visibility of changes to `resolvedPointer(from:)` above to another thread.

  /// - parameter error: a `DeferredError` detailing the reason for the attempted cancellation.
  /// - returns: whether the cancellation was performed successfully.

  public func cancel(_ error: Cancellation)
  {
    deferred?.cancel(error)
  }
}

extension Resolver where Failure == Error
{
  /// Attempt to cancel the underlying `Deferred`, and report on whether cancellation happened successfully.
  ///
  /// A successful cancellation will result in a `Deferred` equivalent to as if it had been initialized as follows:
  /// ```
  /// Deferred<Success>(error: DeferredError.canceled(reason))
  /// ```
  ///
  /// - parameter reason: a `String` detailing the reason for the attempted cancellation. Defaults to an empty `String`.
  /// - returns: whether the cancellation was performed successfully.

  public func cancel(_ reason: String = "")
  {
    cancel(.canceled(reason))
  }

  /// Attempt to cancel the underlying `Deferred`, and report on whether cancellation happened successfully.
  ///
  /// - parameter error: a `DeferredError` detailing the reason for the attempted cancellation.
  /// - returns: whether the cancellation was performed successfully.

  public func cancel(_ error: Cancellation)
  {
    deferred?.cancel(error)
  }
}

