【Haskell】mapとfilterをfoldrで書く

map関数というのは、関数fとリスト[x0, x1, x2, ...]を引数にとって、[f x0, f x1, f x2, ...]を返す関数です。
filter関数というのは、関数pとリストLを引数にとって、Lの要素xiにpを作用させたものp xiがTrueのものだけを集めたリストL'を返す関数です。まさにフィルターです。
これらをfoldrを用いて書いてみました。(プログラミングHaskellの7章の問題)

map' :: (a -> b) -> [a] -> [b]
map' f = foldr (\x y -> (f x) : y) []

filter' :: (a -> Bool) -> [a] -> [a]
filter' p = foldr (\x y -> if p x then x : y else y) []

filterが結構難しかったです。