         self.buildMetadata = buildMetadata
     }
     
-    init?(string: String) {
+    public init?(string: String) {
         guard
             let regex = try? NSRegularExpression(pattern: "\\A\(Version.semanticVersioningPattern)\\z", options: []),
             let match = regex.firstMatchInString(string, options: [], range: NSRange(location: 0, length: string.characters.count)),

}

extension Version : CustomStringConvertible {
    var description: String {
        var description = "\(self.major).\(self.minor).\(self.patch)"
        if let prerelease = self.prerelease {
            description += "-\(prerelease)"

extension Version : Equatable {
}

public func ==(lhs: Version, rhs: Version) -> Bool {
    return lhs.major == rhs.major && lhs.minor == rhs.minor && lhs.patch == rhs.patch && lhs.prerelease == rhs.prerelease
}

extension Version : Comparable {
}

public func <(lhs: Version, rhs: Version) -> Bool {
    if lhs.major < rhs.major {
        return true
    } else if lhs.minor < rhs.minor {
