             .toNotMatch,
             async(
                 style: .toNotMatch,
+                matchStyle: .eventually,
                 predicate: predicate,
                 timeout: timeout,
                 poll: pollInterval,

    public static var PollInterval: TimeInterval = 0.01
}

private func async<T>(style: ExpectationStyle, predicate: Predicate<T>, timeout: DispatchTimeInterval, poll: DispatchTimeInterval, fnName: String) -> Predicate<T> {
    return Predicate { actualExpression in
        let uncachedExpression = actualExpression.withoutCaching()
        let fnName = "expect(...).\(fnName)(...)"

                return lastPredicateResult!.toBoolean(expectation: style)
        }
        switch result {
        case .completed:
            switch matchStyle {
            case .eventually:
                return lastPredicateResult!
            case .never:
                return PredicateResult(
                    status: .fail,
                    message: lastPredicateResult?.message ?? .fail("matched the predicate when it shouldn't have")
                )
            }
        case .timedOut:
            switch matchStyle {
            case .eventually:
                let message = lastPredicateResult?.message ?? .fail("timed out before returning a value")
                return PredicateResult(status: .fail, message: message)
            case .never:
                return PredicateResult(status: .doesNotMatch, message: .expectedTo("never match the predicate"))
            }
        case let .errorThrown(error):
            return PredicateResult(status: .fail, message: .fail("unexpected error thrown: <\(error)>"))
        case let .raisedException(exception):
            return PredicateResult(status: .fail, message: .fail("unexpected exception raised: \(exception)"))
        case .blockedRunLoop:
            let message = lastPredicateResult?.message.appended(message: " (timed out, but main run loop was unresponsive).") ??
                .fail("main run loop was unresponsive")
            return PredicateResult(status: .fail, message: message)
