     init(_ t10: T10)
     func infer() -> T10?
 }
+
+/// Construct a `OneOf10Type` from T10.
+@inlinable public func oneOf<T: OneOf10Type>(_ value: T.T10) -> T { .init(value) }
 
 public extension OneOf10Type {
     @inlinable var v10: T10? { get { return infer() } set { if let newValue = newValue { self = Self.init(newValue)} } }

    init(_ t8: T8)
    func infer() -> T8?
}

public extension OneOf8Type {
    @inlinable var v8: T8? { get { return infer() } set { if let newValue = newValue { self = Self.init(newValue)} } }

    @inlinable var v4: T4? { get { return infer() } set { if let newValue = newValue { self = Self.init(newValue)} } }
}

/// Construct a `OneOf4Type` from T4.
@inlinable public func oneOf<T: OneOf4Type>(_ value: T.T4) -> T { .init(value) }

/// A simple union type that can be one of either T1 or T2 or T3 or T4
public indirect enum OneOf4<T1, T2, T3, T4> : OneOf4Type {
