問題 2:Fibonacci列偶数値項の和

Fibonacci数列の項はそれに先立つ2つの項を足すことで生成する.1,2 から始めて最初の 10 項は
1,2,3,5,8,13,21,34,55,89,...
である.4,000,000を超えない偶数の値をもつ項の和を求めよ.

HaskellだとエレガントにFibonacci数列が定義できてしまう.

main :: IO
main = print $ p0002 (4*10^6)

p0002 :: Integer -> Integer
p0002 u = sum $ filter even $ takeWhile (u>=) fibs

fibs :: [Integer]
fibs@(_:fibs') = 0:1:zipWith (+) fibs fibs'