Sorry for the late reply but I don’t get any notifications from discourse when someone writes something.
but to me it seems that the thing you actually want is ducktyping
Union typing is dynamic typing but its runtime polymorphism is bounded.
Rust can do this with existentials which may be possible in kotlin if kotlin adds typeclasses and typeclasses are first class.
But there are valid points for union type because operations which exists on all its element types are implicitly available for union types such that for a l1,l2:List<Union<Int,Float,Rational>> you can implicitly map(+,l1,l2) without to create a typeclass/trait for this.
Further, union types are structural and they subtype, does trait object sprovide the same?