ISet<A> intersection(ISet<A> other) => other._tree.foldLeft(new ISet.empty(_tree._order), (p, A a) => contains(a) ? p.insert(a) : p);