module Data.MQueue.MonadHelpers where

import Data.Function

with :: Monad m => m a -> (a -> m b) -> m a
with m f = do	ans <- m
		f ans
		return ans

when_ :: Monad m => Bool -> m a -> m ()
when_ True act = act >> return ()
when_ False _ = return ()

whileM :: Monad m => m Bool -> m a -> m ()
whileM cond act = fix (\ action -> cond >>= flip when_ (act >> action))