{-# LANGUAGE BangPatterns #-}

fib :: Int -> Integer
fib 0 = 0
fib 1 = 1
fib n = fib' 0 1 2 where
    fib' _ y n' | n' > n = y
    fib' !x !y !n' = fib' y (x+y) (n'+1)

main = fib 1000000 `seq` return ()
