Proposal to generalize the type of List's deleteBy function

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

+1. On 21.06.2015 08:32, Grant Slatton wrote:
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
_______________________________________________ Libraries mailing list Libraries@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
-- Andreas Abel <>< Du bist der geliebte Mensch. Department of Computer Science and Engineering Chalmers and Gothenburg University, Sweden andreas.abel@gu.se http://www2.tcs.ifi.lmu.de/~abel/

+1, but what's wrong with just
whatever::(a->Bool)->[a]->[a]
Is this some subtle efficiency thing relating to closure creation?
On Jun 21, 2015 2:32 AM, "Grant Slatton"
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
_______________________________________________ Libraries mailing list Libraries@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries

When I was talking about this on the IRC channel, I actually mentioned that
I'd prefer (a -> Bool) -> [a] -> [a]. I guess you'd call that filterFirst
or something.
Edward Kmett mentioned on IRC that all the fooBy functions follow
a pattern, which is why deleteBy isn't like that.
On Sunday, June 21, 2015, David Feuer
+1, but what's wrong with just
whatever::(a->Bool)->[a]->[a]
Is this some subtle efficiency thing relating to closure creation? On Jun 21, 2015 2:32 AM, "Grant Slatton"
javascript:_e(%7B%7D,'cvml','grantslatton@gmail.com');> wrote: 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
_______________________________________________ Libraries mailing list Libraries@haskell.org javascript:_e(%7B%7D,'cvml','Libraries@haskell.org'); http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
participants (3)
-
Andreas Abel
-
David Feuer
-
Grant Slatton