mapIf :: (Int -> Bool) -> (a -> a) -> [a] -> [a] mapIf pred f l = map (\(value,index) -> if (pred index) then f value else value) $ zip l [1..] mapEveryN :: Int -> (a -> a) -> [a] -> [a] mapEveryN n = mapIf (\x -> x `mod` n == 0) main = print $ mapEveryN 3 (*2) [1,1,1,1,1,1,1]