fun :: Num a => (a -> a) -> (a -> Bool) -> [a] -> [a] fun f p xs = map f (filter p xs) map' :: (a -> b) -> [a] -> [b] map' f xs = foldr ((:).f) [] xs filter' :: (a -> Bool) -> [a] -> [a] filter' p xs = foldr (\x xs -> if (p x) then x:xs else xs) [] xs altMap :: (a -> b) -> (a -> b) -> [a] -> [b] altMap fa fb xs = map (\(x, val) -> if x then fa val else fb val) (zip [x `mod` 2 == 1 | x <- [0..((length xs) - 1)]] xs)