map function if a predicate holds

If you don't want to define separate function, then use lambda.

map (\x -> if (even x) then (x `div` 2) else x) [1,2,3,4]

Or instead of a map, list comprehension, bit more readable I think.

[if (even x) then (x `div` 2) else x | x <- [1,2,3,4]]

mapIf p f = map (\x -> if p x then f x else x)

In addition to the answer of PiotrLegnica: Often, it's easier to read if you declare a helper function instead of using a lambda. Consider this:

map helper [1..4] where
  helper x | even x    = x `div` 2
           | otherwise = x

([1..4] is sugar for [1,2,3,4])

If you want to remove all the other elements instead, consider using filter. filter removes all elements that don't satisfy the predicate:

filter even [1..4] -> [2,4]

So you can build a pipe of mapand filter than or use list-comprehension instead:

map (`div` 2) $ filter even [1..4]
[x `div` 2 | x <- [1..4], even x]

Choose whatever you like best.