 }
 
 extension DotSeparatedValues : ArrayLiteralConvertible {
-    init(arrayLiteral elements: String...) {
+    public init(arrayLiteral elements: String...) {
         self.init(values: elements)
     }
 }
 
 extension DotSeparatedValues : StringLiteralConvertible {
-    init(unicodeScalarLiteral value: String) {
+    public init(unicodeScalarLiteral value: String) {
         self.init(string: value)
     }
     
-    init(extendedGraphemeClusterLiteral value: String) {
+    public init(extendedGraphemeClusterLiteral value: String) {
         self.init(string: value)
     }
     
-    init(stringLiteral value: String) {
+    public init(stringLiteral value: String) {
         self.init(string: value)
     }
 }
 
 extension DotSeparatedValues : CustomStringConvertible {
-    var description: String {
+    public var description: String {
         return self.values.joinWithSeparator(".")
     }
 }
 
-struct Version {
+public struct Version {
     // https://github.com/sindresorhus/semver-regex
     static let versionNumberPattern = "(?:0|[1-9][0-9]*)"
     static let prereleasePattern = "(?:-[0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*)"
     static let buildMetadataPattern = "(?:\\+[0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*)"
     static let semanticVersioningPattern = "\\A(\(versionNumberPattern))\\.(\(versionNumberPattern))\\.(\(versionNumberPattern))(\(prereleasePattern)?)(\(buildMetadataPattern)?)\\z"
     
-    let major: Int
-    let minor: Int
-    let patch: Int
-    let prerelease: DotSeparatedValues?
-    let buildMetadata: DotSeparatedValues?
+    public let major: Int
+    public let minor: Int
+    public let patch: Int
+    public let prerelease: DotSeparatedValues?
+    public let buildMetadata: DotSeparatedValues?
     
-    init(major: Int, minor: Int, patch: Int, prerelease: DotSeparatedValues? = nil, buildMetadata: DotSeparatedValues? = nil) {
+    public init(major: Int, minor: Int, patch: Int, prerelease: DotSeparatedValues? = nil, buildMetadata: DotSeparatedValues? = nil) {
         self.major = major
         self.minor = minor
         self.patch = patch

}

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


import Foundation

public struct DotSeparatedValues {
    public let values: [String]
    
    public init(values: [String]) {
        self.values = values
    }
    
    public init(string: String) {
        let values = string.characters.split(".").map(String.init)
        self.init(values: values)
    }
