             // - https://bugs.swift.org/browse/SR-2290
             // - https://github.com/norio-nomura/Nimble/pull/5#issuecomment-237835873
             if let number = actualValue as? NSNumber {
-                return number.boolValue == false
+                return Satisfiability(bool: number.boolValue == false)
             }
 
-            return actualValue == (false as T)
+            return Satisfiability(bool: actualValue == (false as T))
         }
-        return actualValue == nil
-    }.predicate
+        return Satisfiability(bool: actualValue == nil)
+    }
 }
 
 #if _runtime(_ObjC)

            // - https://bugs.swift.org/browse/SR-2290
            // - https://github.com/norio-nomura/Nimble/pull/5#issuecomment-237835873
            if let number = actualValue as? NSNumber {
                return number.boolValue == true
            }

            return actualValue == (true as T)
        }
        return actualValue != nil
    }
}

/// A Nimble matcher that succeeds when the actual value is logically false.
/// This matcher will match against nils.
public func beFalsy<T: ExpressibleByBooleanLiteral & Equatable>() -> Predicate<T> {
    return Predicate.fromBoolResult { actualExpression, failureMessage in
        failureMessage.postfixMessage = "be falsy"
        let actualValue = try actualExpression.evaluate()
        if let actualValue = actualValue {
            // FIXME: This is a workaround to SR-2290.


/// A Nimble matcher that succeeds when the actual value is not logically false.
public func beTruthy<T: ExpressibleByBooleanLiteral & Equatable>() -> Predicate<T> {
    return Predicate.defineNilable("be truthy") { actualExpression -> Satisfiability in
        let actualValue = try actualExpression.evaluate()
        if let actualValue = actualValue {
            // FIXME: This is a workaround to SR-2290.
