     func testEvaluateShouldReturnASuccessfulResultWhenThereAreTwoKeyPathConstraintsFulfilled() {
         
         let input = FakeData(integer: 10, string: "Swift")
-        let integerConstraint = PredicateConstraint<Int, FakeError>(.block { $0 > 5}, error: .FailingCondition)
-        let stringConstraint = PredicateConstraint<String, FakeError>(.block { $0 == "Swift"}, error: .Invalid)
+        let integerConstraint = BlockConstraint<Int, FakeError> {
+            $0 > 5
+        } errorBuilder: {
+            .FailingCondition
+        }
+        let stringConstraint = BlockConstraint<String, FakeError> {
+            $0 == "Swift"
+        } errorBuilder: {
+            .Invalid
+        }
         
         var sut = TypeConstraint<FakeData, FakeError>()
         sut.set(for: \.integer, constraint: integerConstraint)

    func testEvaluateShouldReturnAFailureResultWhenThereAreOneFulfilledAndOneFailingKeyPathConstraints() {
        
        let input = FakeData(integer: 10, string: "Swift")
        let integerConstraint = PredicateConstraint<Int, FakeError>(.block { $0 > 5}, error: .FailingCondition)
        let stringConstraint = PredicateConstraint<String, FakeError>(.block { $0 != "Swift"}, error: .Invalid)
        
        var sut = TypeConstraint<FakeData, FakeError>()
        sut.set(for: \.integer, constraint: integerConstraint)

    func testEvaluateShouldReturnAFailureResultWhenThereAreTwoKeyPathConstraintsFailing() {
        
        let input = FakeData(integer: 10, string: "Swift")
        let integerConstraint = BlockConstraint<Int, FakeError> {
            $0 < 5
        } errorBuilder: {
            .FailingCondition
        }
        let stringConstraint = BlockConstraint<String, FakeError> {
            $0 != "Swift"
        } errorBuilder: {
            .Invalid
        }
        
        var sut = TypeConstraint<FakeData, FakeError>()
        sut.set(for: \.integer, constraint: integerConstraint)
