Though union defined below could be useful, obviously there's no method of constructing the second variant!
bug1 : % -> Union(Integer, Integer)
and the same here:
bug2 : % -> Union(a : Integer, b : Integer)
There's no mechanism to create one of the variants above. I'd expect either such a construct:
[a == 2] [b == 10]
... or for union to have extra implicitly defined functions:
a: Integer -> Union(a : Integer, b : Integer) b: Integer -> Union(a : Integer, b : Integer)