Project Euler Problem 2

http://projecteuler.net/index.php?section=problems&id=2

400万を超えない範囲のフィボナッチ数列で値が偶数である項の総和。

main = print $ foldl (+) 0 $ evenNumbers $ fib 1 2

evenNumbers :: [Int] -> [Int]
evenNumbers xs = [x | x <- xs, x `mod` 2 == 0]

fib :: Int -> Int -> [Int]
fib x y = [x, y] ++ (f x y)
           where f x y = let z = x + y
                         in if z < 4000000 then z:f y z else []


1行でフィボナッチ(http://d.hatena.ne.jp/rst76/20080313/1205413744)
すごいなぁ

fibs :: [Int]
fibs = 1:2:(zipWith (+) fibs (tail fibs))


これぐらいは覚えとかんと