
Hello Dougal, Friday, November 24, 2006, 12:34:49 AM, you wrote:
Is there some sort of equivalent of the if/then/else construct for use in the IO monad? For instance the following can get quite tedious:
just a list of my control structures: whenM cond action = do allow <- cond when allow action unlessM = whenM . liftM not whenJustM x action = x >>= maybe (return Nothing) action whenJustM_ x action = x >>= maybe (return ()) (action .>> return ()) foreach = flip mapM for = flip mapM_ on = flip when repeat_foreverM action = do action repeat_foreverM action repeat_whileM inp cond out = do x <- inp if (cond x) then do out x repeat_whileM inp cond out else return x repeat_untilM action = do done <- action when (not done) $ do repeat_untilM action doChunks size chunk action = case size of 0 -> return () _ -> do let n = minI size chunk action (fromIntegral n) doChunks (size-n) chunk action recursiveM action x = action x >>= mapM_ (recursiveM action) -- Best regards, Bulat mailto:Bulat.Ziganshin@gmail.com