-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/

-- | Anaphoric and miscellaneous useful control-flow
--   
--   Anaphoric and miscellaneous useful control-flow
@package IfElse
@version 0.85.0.0.1

-- | Library for control flow inside of monads with anaphoric variants on
--   if and when and a C-like "switch" function.
--   
--   Information:
--   
--   
--   
- Author Jeff Heard
--   
- Copyright 2008 Jeff Heard
--   
- License BSD
--   
- Version 1.0
--   
- Status Alpha
--   
module Control.Monad.IfElse

-- | A if with no else for unit returning thunks. Returns the value of the
--   test.
whenM :: Monad m => m Bool -> m () -> m ()

-- | Like a switch statement, and less cluttered than if else if
--   
--   
--   cond [ (t1,a1), (t2,a2), ... ]
--   
cond :: Monad m => [(Bool, m ())] -> m ()

-- | Like a switch statement, and less cluttered than if else if
--   
--   
--   condM [ (t1,a1), (t2,a2), ... ]
--   
condM :: Monad m => [(m Bool, m ())] -> m ()

-- | Chainable anaphoric when. Takes a maybe value.
--   
--   if the value is Just x then execute  action x  , then return
--    True  . otherwise return  False  .
awhen :: Monad m => Maybe a -> (a -> m ()) -> m ()

-- | Chainable anaphoric whenM.
awhenM :: Monad m => m (Maybe a) -> (a -> m ()) -> m ()

-- | Anaphoric when-else chain. Like a switch statement, but less cluttered
acond :: Monad m => [(Maybe a, a -> m ())] -> m ()

-- | Anaphoric if.
aif :: Monad m => Maybe a -> (a -> m b) -> m b -> m b

-- | Anaphoric if where the test is in Monad m.
aifM :: Monad m => m (Maybe a) -> (a -> m b) -> m b -> m b

-- | Contrapositive of whenM, if not x then do y
unlessM :: Monad m => m Bool -> m () -> m ()

-- | unless-else chain.
ncond :: Monad m => [(Bool, m ())] -> m ()

-- | monadic unless-else chain
ncondM :: Monad m => [(m Bool, m ())] -> m ()

-- | IO lifted  && 
(&&^) :: Monad m => m Bool -> m Bool -> m Bool

-- | IO lifted  || 
(||^) :: Monad m => m Bool -> m Bool -> m Bool

-- | Conditionally do the right action based on the truth value of the left
--   expression
(>>?) :: Applicative f => Bool -> f () -> f ()
infixl 1 >>?

-- | unless the left side is true, perform the right action
(>>!) :: Applicative f => Bool -> f () -> f ()
infixl 1 >>!

-- | unless the (monadic) left side is true, perform the right action
(>>=>>!) :: Monad m => m Bool -> m () -> m ()
infixl 1 >>=>>!

-- | Bind the result of the last expression in an anaphoric when.
(>>=?) :: Monad m => Maybe a -> (a -> m ()) -> m ()
infixl 1 >>=?

-- | composition of  >>=  and  >>? 
(>>=>>?) :: Monad m => m Bool -> m () -> m ()
infixl 1 >>=>>?

-- | composition of  >>=  and  >>=? 
(>>=>>=?) :: Monad m => m (Maybe a) -> (a -> m ()) -> m ()
infixl 1 >>=>>=?

-- | Execute a monadic action so long as a monadic boolean returns true.
whileM :: Monad m => m Bool -> m () -> m ()

-- | Negation of whileM: execute an action so long as the boolean
--   returns false.
untilM :: Monad m => m Bool -> m () -> m ()

-- | Strict version of return because usually we don't need that
--   extra thunk.
return' :: Monad m => a -> m a

-- | Take an action and make it into a side-effecting return.
--   Because I seem to keep running into m () and the like.
returning :: Monad m => (a -> m b) -> a -> m a
infixr 8 `returning`

-- | This conversion is common enough to make a name for.
maybeMP :: MonadPlus m => Maybe a -> m a
