import Data.IORef ioRefTest r = do i <- readIORef r if i <= 0 then return () else do putStrLn (show i) writeIORef r (i - 1) ioRefTest r main = do r <- newIORef 10 ioRefTest r