Why Haskell's Data.List.deleteBy takes in input a comparison function (a -> a -> Bool) and a value instead of a predicate (a -> Bool)? -


i have question related data.list , signature of deleteby. ideally function should take in input predicate , delete first element predicate true. like:

deleteby :: (a -> bool) -> [a] -> [a] deleteby p = go     go []                   = []           go (x:xs) | p x         = xs                     | otherwise   = x:go xs 

instead function defined in library takes both predicate , value:

deleteby                :: (a -> -> bool) -> -> [a] -> [a] deleteby _  _ []        = [] deleteby eq x (y:ys)    = if x `eq` y ys else y : deleteby eq x ys 

it's easy see eq used x first argument , x fixed in deleteby, there no reason both eq , x instead of eq x. on contrary, taking predicate working on single element can pass predicates don't compare 2 values, such function works on part of type a or trivial function cons true. question is: why deleteby has been implemented in way?

the deleteby function generalization of delete, it's helpful take @ delete first.

delete :: eq => -> [a] -> [a] 

delete takes value eq => a, deletes first occurance of value [a] using (==) eq instance.

as *by functions in data.list, eq constraint removed , programmer required provide own replacement (==) function.

so removing eq constraint delete , replacing type of (==), namely a -> -> bool, gives type of deleteby.

in other words, it's consistency rest of *by operations in data.list.


Comments

Popular posts from this blog

apache - Remove .php and add trailing slash in url using htaccess not loading css -

javascript - jQuery show full size image on click -