let union u v = if overlap u v < 0 then `Disjoint (u, v) else `Joint {lo = min u.lo v.lo; hi = max u.hi v.hi}