let
union u v =
if
overlap u v < 0
then
[u;v]
else
[{lo = min u.lo v.lo; hi = max u.hi v.hi}]