foreverUntil :: IO Bool -> IO a -> IO ()
foreverUntil cond act = do tf <- cond 
                           if tf then act >> foreverUntil cond act else return ()
foreverUntil :: IO Bool -> IO a -> IO ()
foreverUntil cond act = do tf <- cond 
                           if tf then act >> foreverUntil cond act else return ()
foreverUntil cond act = do tf <- cond 
                           if tf then act >> foreverUntil cond act else return ()