import Foundation

public final class Tuple1<T0> {
    public let _0: T0
    
    public init(_ _0: T0) {
        self._0 = _0
    }
}

public final class Tuple2<T0, T1> {
    public let _0: T0
    public let _1: T1
    
    public init(_ _0: T0, _ _1: T1) {
        self._0 = _0
        self._1 = _1
    }
}

public final class Tuple3<T0, T1, T2> {
    public let _0: T0
    public let _1: T1
    public let _2: T2
    
    public init(_ _0: T0, _ _1: T1, _ _2: T2) {
        self._0 = _0
        self._1 = _1
        self._2 = _2
    }
}

public final class Tuple4<T0, T1, T2, T3> {
    public let _0: T0
    public let _1: T1
    public let _2: T2
    public let _3: T3
    
    public init(_ _0: T0, _ _1: T1, _ _2: T2, _ _3: T3) {
        self._0 = _0
        self._1 = _1
        self._2 = _2
        self._3 = _3
    }
}

public func Tuple<T0>(_ _0: T0) -> Tuple1<T0> {
    return Tuple1(_0)
}

public func Tuple<T0, T1>(_ _0: T0, _ _1: T1) -> Tuple2<T0, T1> {
    return Tuple2(_0, _1)
}

public func Tuple<T0, T1, T2>(_ _0: T0, _ _1: T1, _ _2: T2) -> Tuple3<T0, T1, T2> {
    return Tuple3(_0, _1, _2)
}

public func Tuple<T0, T1, T2, T3>(_ _0: T0, _ _1: T1, _ _2: T2, _ _3: T3) -> Tuple4<T0, T1, T2, T3> {
    return Tuple4(_0, _1, _2, _3)
}