monad-supply-0.7: Stateful supply monad.

Safe HaskellNone
LanguageHaskell98

Control.Monad.Supply

Description

Support for computations which consume values from a (possibly infinite) supply. See http://www.haskell.org/haskellwiki/New_monads/MonadSupply for details.

Synopsis

Documentation

class Monad m => MonadSupply s m | m -> s where Source #

Minimal complete definition

supply, peek, exhausted

Methods

supply :: m s Source #

peek :: m s Source #

exhausted :: m Bool Source #

data SupplyT s m a Source #

Supply monad transformer.

Instances

Monad m => MonadSupply s (SupplyT s m) Source # 
MonadTrans (SupplyT s) Source # 

Methods

lift :: Monad m => m a -> SupplyT s m a #

Monad m => Monad (SupplyT s m) Source # 

Methods

(>>=) :: SupplyT s m a -> (a -> SupplyT s m b) -> SupplyT s m b #

(>>) :: SupplyT s m a -> SupplyT s m b -> SupplyT s m b #

return :: a -> SupplyT s m a #

fail :: String -> SupplyT s m a #

Functor m => Functor (SupplyT s m) Source # 

Methods

fmap :: (a -> b) -> SupplyT s m a -> SupplyT s m b #

(<$) :: a -> SupplyT s m b -> SupplyT s m a #

MonadFix m => MonadFix (SupplyT s m) Source # 

Methods

mfix :: (a -> SupplyT s m a) -> SupplyT s m a #

Monad m => Applicative (SupplyT s m) Source # 

Methods

pure :: a -> SupplyT s m a #

(<*>) :: SupplyT s m (a -> b) -> SupplyT s m a -> SupplyT s m b #

liftA2 :: (a -> b -> c) -> SupplyT s m a -> SupplyT s m b -> SupplyT s m c #

(*>) :: SupplyT s m a -> SupplyT s m b -> SupplyT s m b #

(<*) :: SupplyT s m a -> SupplyT s m b -> SupplyT s m a #

MonadIO m => MonadIO (SupplyT s m) Source # 

Methods

liftIO :: IO a -> SupplyT s m a #

data Supply s a Source #

Supply monad.

Instances

MonadSupply s (Supply s) Source # 
Monad (Supply s) Source # 

Methods

(>>=) :: Supply s a -> (a -> Supply s b) -> Supply s b #

(>>) :: Supply s a -> Supply s b -> Supply s b #

return :: a -> Supply s a #

fail :: String -> Supply s a #

Functor (Supply s) Source # 

Methods

fmap :: (a -> b) -> Supply s a -> Supply s b #

(<$) :: a -> Supply s b -> Supply s a #

MonadFix (Supply s) Source # 

Methods

mfix :: (a -> Supply s a) -> Supply s a #

Applicative (Supply s) Source # 

Methods

pure :: a -> Supply s a #

(<*>) :: Supply s (a -> b) -> Supply s a -> Supply s b #

liftA2 :: (a -> b -> c) -> Supply s a -> Supply s b -> Supply s c #

(*>) :: Supply s a -> Supply s b -> Supply s b #

(<*) :: Supply s a -> Supply s b -> Supply s a #

Semigroup a => Semigroup (Supply s a) Source # 

Methods

(<>) :: Supply s a -> Supply s a -> Supply s a #

sconcat :: NonEmpty (Supply s a) -> Supply s a #

stimes :: Integral b => b -> Supply s a -> Supply s a #

(Semigroup a, Monoid a) => Monoid (Supply s a) Source # 

Methods

mempty :: Supply s a #

mappend :: Supply s a -> Supply s a -> Supply s a #

mconcat :: [Supply s a] -> Supply s a #

evalSupplyT :: Monad m => SupplyT s m a -> [s] -> m a Source #

evalSupply :: Supply s a -> [s] -> a Source #

runSupplyT :: Monad m => SupplyT s m a -> [s] -> m (a, [s]) Source #

runSupply :: Supply s a -> [s] -> (a, [s]) Source #

supplies :: MonadSupply s m => Int -> m [s] Source #

Get n supplies.