deferred-folds-0.4: Abstractions over deferred folds

Safe HaskellNone
LanguageHaskell2010

DeferredFolds.UnfoldM

Synopsis

Documentation

newtype UnfoldM m input Source #

A monadic variation of DeferredFolds.Unfold

Constructors

UnfoldM (forall output. (output -> input -> m output) -> output -> m output) 

Instances

Monad m => Monad (UnfoldM m) Source # 

Methods

(>>=) :: UnfoldM m a -> (a -> UnfoldM m b) -> UnfoldM m b #

(>>) :: UnfoldM m a -> UnfoldM m b -> UnfoldM m b #

return :: a -> UnfoldM m a #

fail :: String -> UnfoldM m a #

Functor m => Functor (UnfoldM m) Source # 

Methods

fmap :: (a -> b) -> UnfoldM m a -> UnfoldM m b #

(<$) :: a -> UnfoldM m b -> UnfoldM m a #

Monad m => Applicative (UnfoldM m) Source # 

Methods

pure :: a -> UnfoldM m a #

(<*>) :: UnfoldM m (a -> b) -> UnfoldM m a -> UnfoldM m b #

liftA2 :: (a -> b -> c) -> UnfoldM m a -> UnfoldM m b -> UnfoldM m c #

(*>) :: UnfoldM m a -> UnfoldM m b -> UnfoldM m b #

(<*) :: UnfoldM m a -> UnfoldM m b -> UnfoldM m a #

Monad m => Alternative (UnfoldM m) Source # 

Methods

empty :: UnfoldM m a #

(<|>) :: UnfoldM m a -> UnfoldM m a -> UnfoldM m a #

some :: UnfoldM m a -> UnfoldM m [a] #

many :: UnfoldM m a -> UnfoldM m [a] #

Monad m => MonadPlus (UnfoldM m) Source # 

Methods

mzero :: UnfoldM m a #

mplus :: UnfoldM m a -> UnfoldM m a -> UnfoldM m a #

Monad m => Semigroup (UnfoldM m a) Source # 

Methods

(<>) :: UnfoldM m a -> UnfoldM m a -> UnfoldM m a #

sconcat :: NonEmpty (UnfoldM m a) -> UnfoldM m a #

stimes :: Integral b => b -> UnfoldM m a -> UnfoldM m a #

Monad m => Monoid (UnfoldM m a) Source # 

Methods

mempty :: UnfoldM m a #

mappend :: UnfoldM m a -> UnfoldM m a -> UnfoldM m a #

mconcat :: [UnfoldM m a] -> UnfoldM m a #

foldl' :: (output -> input -> output) -> output -> UnfoldM Identity input -> output Source #

Perform a strict left fold

foldlM' :: Monad m => (output -> input -> m output) -> output -> UnfoldM m input -> m output Source #

Perform a monadic strict left fold

fold :: Fold input output -> UnfoldM Identity input -> output Source #

Apply a Gonzalez fold

foldM :: Monad m => FoldM m input output -> UnfoldM m input -> m output Source #

Apply a monadic Gonzalez fold

foldable :: (Monad m, Foldable foldable) => foldable a -> UnfoldM m a Source #

Construct from any foldable

intsInRange :: Monad m => Int -> Int -> UnfoldM m Int Source #

Ints in the specified inclusive range