 
 let DoesntContainUsername: String -> Bool = { _ in return true }
 let val = try? "password"
-    .tested(by: .`in`(5...10))
+    .tested(by: StringLength.`in`(5...10))
     .tested(by: { $0.characters.contains(nonAlphanumeric) })
     .tested(by: { $0 != lastPassword })
     .tested(by: DoesntContainUsername)

 validated by Tester -> Verified<T: Tester>
 validated by TestSuite -> Verified<T: TestSuite>

 tested with (Self -> Bool) -> Self
 tested with Tester -> Self
 tested with TestSuite -> Self
 */

// MARK: Validators

public protocol Validator {
    associatedtype InputType: Validatable
    func test(input value: InputType) throws -> Bool
}

public protocol ValidationSuite: Validator {
    associatedtype InputType: Validatable
    static func test(input value: InputType) throws -> Bool
}

extension ValidationSuite {
    public func test(input value: InputType) throws -> Bool {
        return try self.dynamicType.test(input: value)
    }
}


    }
}

public class EmailValidator: ValidationSuite {
    public static func test(input value: String) -> Bool {
        return true
    }
}
