Zhanyong Wan writes: : | I can't help wondering why it isn't | | deleteBy' :: (a -> Bool) -> [a] -> [a] | deleteBy' f [] = [] | deleteBy' f (y:ys) = if f y then ys else | y : deleteBy' f ys deleteBy'' f = filter (not . f) Malcolm Wallace writes: : | > intersectBy :: (a -> b -> Bool) -> [a] -> [b] -> [a] | | Although curiously, its dual 'unionBy' cannot also take the more | general type | | unionBy :: (a -> b -> Bool) -> [a] -> [b] -> [a] | | at least, not with its current specification in terms of 'nubBy'. That suggests a reason to leave the type of intersectBy alone - the generalisation would arbitrarily favour the first list's type over the second list's type. To me, the word "intersect" implies symmetry. - Tom