How much worse is it to implement intersect in terms of diff?  I.e. (a intersect b) = a diff (b diff a)?  This is a lot of code duplication which is necessary for speed...unless the speed isn't actually needed.