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

Zachary Turner divisortheory at gmail.com
Wed Apr 1 22:50:04 EDT 2009


On Wed, Apr 1, 2009 at 7:45 PM, Michael P Mossey <mpm at alumni.caltech.edu>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?
>

I used an intermediate helper function, but the replaceItem function is
point free

choose :: (a -> Bool) -> (a -> b) -> (a -> b) -> a -> b
choose pred yes _ val | (pred val) = yes val
choose _ _ no val = no val

replaceItem :: (a -> Bool) -> a -> [a] -> [a]
replaceItem pred rep = map (choose pred id (const rep))
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/beginners/attachments/20090401/aa44421e/attachment.htm


More information about the Beginners mailing list