still need to add intersection unions and difference function