packages feed

monad-extras 0.5.5 → 0.5.6

raw patch · 2 files changed

+17/−1 lines, 2 files

Files

Control/Monad/Extra.hs view
@@ -12,6 +12,7 @@ import Control.Monad.Trans.Control import Data.IORef import Data.Maybe (catMaybes)+import System.IO.Unsafe  -- | Synonym for @return ()@. skip :: Monad m => m ()@@ -209,3 +210,18 @@             as <- sequenceWhile p ms             return (a:as)         else return []++-- | Monadic equivalent to 'iterate'.  Note that it will not terminate, but may+--   still be useful in the main event loop of a program, for example.+iterateM :: Monad m => (a -> m a) -> a -> m [a]+iterateM f x = do+    x' <- f x+    (x':) `liftM` iterateM f x'++-- | A monadic version of 'iterate' which produces an infinite sequence of+--   values using lazy I/O.+lazyIterateM :: (Monad m, MonadBaseControl IO m) => (a -> m a) -> a -> m [a]+lazyIterateM f x = do+    y <- f x+    z <- control $ \run -> unsafeInterleaveIO $ run $ iterateM f y+    return (y:z)
monad-extras.cabal view
@@ -1,5 +1,5 @@ name:           monad-extras-version:        0.5.5+version:        0.5.6 synopsis:       Extra utility functions for working with monads -- description: homepage:       http://github.com/jwiegley/monad-extras