{-# LANGUAGE MonadComprehensions #-} import Data.IORef import Control.Monad.Loops main :: IO () main = do r <- newIORef 1024 whileM_ [n > 0 | n <- readIORef r] $ do n <- readIORef r print n modifyIORef r (`div` 2)