     }
 }
 
+public extension Either2Type where Self : OneOf2Type, T1 == T2 {
+    /// The single value of all the underlying possibilities
+    @inlinable var oneOfValue: T1 {
+        switch oneOf2 {
+        case .v1(let x): return x
+        case .v2(let x): return x
+        }
+    }
+}
+
 public extension Either2Type where Self : RawIsomorphism, Self.RawValue : Either2Type {
     @inlinable func map2<U1, U2>(_ f1: (RawValue.T1) throws -> (U1), _ f2: (RawValue.T2) throws -> (U2)) rethrows -> OneOf2<U1, U2> {
         try rawValue.map2(f1, f2)

            case .v6(let x): self = .init(x)
            case .v7(let x): self = .init(x)
            }
        }
    }
}

            case .v7(let x): self = .init(x)
            case .v8(let x): self = .init(x)
            }
        }
    }
}

public extension Either8Type where Self : OneOf8Type, T1 == T2, T2 == T3, T3 == T4, T4 == T5, T5 == T6, T6 == T7, T7 == T8 {
    /// The single value of all the underlying possibilities
    @inlinable var oneOfValue: T1 {
        switch oneOf8 {
        case .v1(let x): return x
        case .v2(let x): return x
        case .v3(let x): return x
        case .v4(let x): return x
        case .v5(let x): return x
        case .v6(let x): return x
        case .v7(let x): return x
        case .v8(let x): return x
        }
    }
}
