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

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.
The unionBy function is the non-overloaded version of union.
The intersectBy function is the non-overloaded version of intersect.