class CommunitySetExprEvaluator implements CommunitySetExprVisitor<CommunitySet, CommunityContext> {

  @Override
  public @Nonnull CommunitySet visitCommunitySetDifference(
      CommunitySetDifference communitySetDifference, CommunityContext arg) {
    CommunitySet initial = communitySetDifference.getInitial().accept(this, arg);
    CommunityMatchExpr removalCriterion = communitySetDifference.getRemovalCriterion();
    return CommunitySet.of(
        initial.getCommunities().stream()
            .filter(c -> !removalCriterion.accept(arg.getCommunityMatchExprEvaluator(), c))
            .collect(ImmutableSet.toImmutableSet()));
  }

  private  CommunitySetExprEvaluator();

}