Finally, what I ended up doing:f :: Integer -> Integer -> Integer
f acc xg :: Integer -> (Integer, Integer)
| x == 1 = acc
| even x = f (acc + 1) (x `div` 2)
| otherwise = f (acc + 1) (3 * x + 1)
g x = (f 1 x, x)
answer = (foldl' max (0,0)) $ map g [1 .. 999999]
main = putStrLn( show answer)