<div dir="ltr"><span style="font-size:12.8000001907349px">Right now the type of deleteBy is:</span><div style="font-size:12.8000001907349px"><br></div><div style="font-size:12.8000001907349px">(a -> a -> Bool) -> a -> [a] -> [a]</div><div style="font-size:12.8000001907349px"><br></div><div style="font-size:12.8000001907349px">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.</div><div style="font-size:12.8000001907349px"><br></div><div style="font-size:12.8000001907349px">This can be generalized to:</div><div style="font-size:12.8000001907349px"><br></div><div style="font-size:12.8000001907349px">(a -> b -> Bool) -> a -> [b] -> [b]</div><div style="font-size:12.8000001907349px"><br></div><div style="font-size:12.8000001907349px"><br></div><div style="font-size:12.8000001907349px">Example use case:</div><div style="font-size:12.8000001907349px"><br></div><div style="font-size:12.8000001907349px">keyValues :: [(a, b)]</div><div style="font-size:12.8000001907349px"><br></div><div style="font-size:12.8000001907349px">key :: a</div><div style="font-size:12.8000001907349px"><br></div><div style="font-size:12.8000001907349px">deleteBy (\x (y, _) -> x == y) key keyValues</div><div style="font-size:12.8000001907349px"><br></div><div style="font-size:12.8000001907349px"><br></div><div style="font-size:12.8000001907349px"><br></div><div style="font-size:12.8000001907349px">Thanks</div><div style="font-size:12.8000001907349px"><br></div><div style="font-size:12.8000001907349px">Grant Slatton</div></div>