main = putStrLn $ show $ take 8 $ iterate2 (+ 1) 0 fix :: (a -> a) -> a fix f = f $ fix f iterate2 f x = flip fix x (\u x -> x : u (f x))