/// Void union - only tag comparison needed.
union Color { Red, Green, Blue }

/// Union with one payload variant.
union MaybeInt { None, Some(i32) }

/// Union with multiple different payload types.
union Value { Empty, Int(i32), Byte(u8) }

/// Union with multi-field record payload.
union Shape { None, Point { x: i32, y: i32 } }

/// Compare void unions (tags only).
fn colorEq(a: Color, b: Color) -> bool {
    return a == b;
}

/// Compare unions with one payload type.
fn maybeIntEq(a: MaybeInt, b: MaybeInt) -> bool {
    return a == b;
}

/// Compare unions with multiple different payload types.
fn valueEq(a: Value, b: Value) -> bool {
    return a == b;
}

/// Compare unions with multi-field record payload.
fn shapeEq(a: Shape, b: Shape) -> bool {
    return a == b;
}
