[Haskell-beginners] short function to remove and replace an item

Vlad Skvortsov vss at 73rus.com
Wed Apr 1 21:01:55 EDT 2009


Prelude> let replaceItem p n = map (\x -> if p x then n else x)
Prelude> replaceItem odd 100 [1..10]
[100,2,100,4,100,6,100,8,100,10]

Michael P Mossey wrote:
> What if I have a list xs, and I want to remove one item and replace it 
> with another? The item to remove can be detected by a predicate 
> function. The order of the items doesn't matter. How about this:
>
> replaceItem :: (a -> Bool) -> a -> [a] -> [a]
> replaceItem p new xs = new : snd (partition p xs)
>
> This will actually replace all items that match the predicate with one 
> copy of 'new'. It will also prepend 'new' even if no items match the 
> predicate.
>
> For another challenge, can someone explain to me how to write this in 
> point-free style?

-- 
Vlad Skvortsov, vss at 73rus.com, http://vss.73rus.com



More information about the Beginners mailing list