:: (a -> a -> Bool) -> [a] -> [a] -> [a] package:LambdaHack

The unionBy function is the non-overloaded version of union. Both arguments may be infinite.
The intersectBy function is the non-overloaded version of intersect. It is productive for infinite arguments only if the first one is a subset of the second.
The deleteFirstsBy function takes a predicate and two lists and returns the first list with the first occurrence of each element of the second list removed. This is the non-overloaded version of (\\). The second list must be finite, but the first may be infinite.