refactoring
add union/intersect/diff