úÎï     joeyadams3.14159@gmail.comNone < is a monad transformer for the loop body. It provides two  capabilities:   to the next iteration.   the whole loop. DCall a loop body, passing it a continuation for the next iteration. H This can be used to construct custom looping constructs. For example,  here is the definition of : foreach list body = loop list  where loop [] = return () 9 loop (x:xs) = stepLoopT (body x) (\_ -> loop xs) =Skip the rest of the loop body and go to the next iteration.  Break out of the loop entirely. Like ), but return a value from the loop body. Like /, but return a value from the loop as a whole.  See the documentation of   for an example. /Call the loop body with each item in the list. If you do not need to  or  the loop, consider using   instead. 8Repeat the loop body while the predicate holds. Like a while loop in C,  the condition is tested first. Like a do while0 loop in C, where the condition is tested after  the loop body.  = returns the result of the last iteration. This is possible  because, unlike  and  $, the loop body is guaranteed to be  executed at least once. IExecute the loop body once. This is a convenient way to introduce early " exit support to a block of code.  and  do the same thing inside of  . =Execute the loop body again and again. The only way to exit    is to call  or . JCall the loop body again and again, passing it the result of the previous 3 iteration each time around. The only way to exit   is to call   or .  Example: count :: Int -> IO Int !count n = iterateLoopT 0 $ \i ->  if i < n  then do  lift $ print i  return $ i+1  else exitWith i Lift a function like  or  .          control-monad-loop-0.1Control.Monad.Trans.Loop Control.MonadforM_Control.Monad.Trans.ReaderlocalControl.Exceptionmask_LoopTrunLoopT stepLoopTcontinueexit continueWithexitWithforeachwhiledoWhileonce repeatLoopT iterateLoopTliftLocalLoopT$fMonadBasebLoopT$fMonadIOLoopT$fMonadTransLoopT $fMonadLoopT$fApplicativeLoopT$fFunctorLoopT