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