module Foreign.Java.Control where
import Prelude hiding (pred, until)
when :: Monad m => m Bool -> m () -> m ()
when pred action = pred >>= (\p -> if p then action else return ())
unless :: Monad m => m Bool -> m () -> m ()
unless pred action = pred >>= (\p -> if not p then action else return ())
whether :: Monad m => m Bool -> m a -> m a -> m a
whether pred actionIf actionElse = do
cond <- pred
if cond then actionIf else actionElse
while :: Monad m => m Bool -> m () -> m ()
while pred action = do
cond <- pred
if cond then action >> while pred action
else return ()
for :: Monad m => a -> (a -> m Bool) -> (a -> m a) -> m a
for i pred action = do
continue <- pred i
if continue then action i >>= (\i' -> for i' pred action)
else return i
until :: Monad m => a -> (a -> m (Bool, a)) -> m a
until i action = do
(done, result) <- action i
if done then return result
else until result action