implement intersect()
implement difference()