diff --git a/Sources/Tagged/Tagged.swift b/Sources/Tagged/Tagged.swift index 2c2f0c8..715f3d8 100644 --- a/Sources/Tagged/Tagged.swift +++ b/Sources/Tagged/Tagged.swift @@ -186,3 +186,10 @@ extension Tagged: SignedNumeric where RawValue: SignedNumeric { // self.init(rawValue: f(elements)) // } //} + +// MARK: - Coerce +extension Tagged { + public func coerced(to type: Tag2.Type) -> Tagged { + return unsafeBitCast(self, to: Tagged.self) + } +} diff --git a/Tests/TaggedTests/TaggedTests.swift b/Tests/TaggedTests/TaggedTests.swift index 83ad513..0362688 100644 --- a/Tests/TaggedTests/TaggedTests.swift +++ b/Tests/TaggedTests/TaggedTests.swift @@ -88,4 +88,13 @@ final class TaggedTests: XCTestCase { XCTAssertEqual(containers.first?.id.rawValue, nil) }()) } + + func testCoerce() { + let x: Tagged = 1 + + enum Tag2 {} + let x2: Tagged = x.coerced(to: Tag2.self) + + XCTAssertEqual(1, x2.rawValue) + } }