GCamlでやってみた。自明な例ですが。
# let x = generic 1 | 1.0;;
val x : [| int | float |] = <generic>
# x;;
- : { 'a < [| int | float |] } => 'a = <generic>
# let y = generic 2 | 2.0;;
val y : [| int | float |] = <generic>
# x+y;;
- : int = 3
# x+.y;;
- : float = 3.
きもちわるー