I implemented some common ruby list operations in haskell using foldr:

import Data.Maybe

-- find f [] = Nothing

-- find f (x:xs) = if f x then Just x else find f xs

find f = foldr (\a b -> if f a then Just a else b) Nothing

-- select f [] = []

-- select f (x:xs) = (if f x then [x] else []) ++ select f xs

select f = foldr (\a b -> if f a then a:b else b) []

-- collect f [] = []

-- collect f (x:xs) = (f x) : (collect f xs)

collect f = foldr (\a b -> f a : b) []

main = do

putStrLn $ show $ find (==1) ~~(\x -> x == 1)~~ [3, 3, 5, 6, 2]

putStrLn $ show $ find (==1) ~~(\x -> x == 1)~~ [3, 3, 5, 6, 2, 1]

putStrLn $ show $ select (==1) ~~(\x -> x == 1)~~ [2,3,3,33]

putStrLn $ show $ select (==1) ~~(\x -> x == 1)~~ [2,3,3,33,1]

putStrLn $ show $ collect (*2) ~~(\x -> x * 2)~~ [1,2,3]

The commented out lines are the normal way of implementing the function while the line below is the foldr way. All 3 of these functions are already available in the the standard library Data.List as find, filter, and map respectively.*Update: made use of sections to make the code prettier.*