Right now the type of deleteBy is:

(a -> a -> Bool) -> a -> [a] -> [a]

That is, it takes an equality predicate, a value, and a list, and deletes the first element in the list such that the equality predicate returns true for the given value and the element.

This can be generalized to:

(a -> b -> Bool) -> a -> [b] -> [b]


Example use case:

keyValues :: [(a, b)]

key :: a

deleteBy (\x (y, _) -> x == y) key keyValues



Thanks

Grant Slatton