monad-extras 0.5.5 → 0.5.6
raw patch · 2 files changed
+17/−1 lines, 2 files
Files
- Control/Monad/Extra.hs +16/−0
- monad-extras.cabal +1/−1
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