monad-supply-0.5: 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

Methods

supply :: m s Source

peek :: m s Source

exhausted :: m Bool Source

Instances

MonadSupply s (Supply s) 
(Monoid w, MonadSupply s m) => MonadSupply s (WriterT w m) 
MonadSupply s m => MonadSupply s (ReaderT r m) 
MonadSupply s m => MonadSupply s (StateT st m) 
MonadSupply s m => MonadSupply s (ExceptT e m) 
Monad m => MonadSupply s (SupplyT s m) 

data SupplyT s m a Source

Supply monad transformer.

Instances

Monad m => MonadSupply s (SupplyT s m) 
MonadTrans (SupplyT s) 
Monad m => Monad (SupplyT s m) 
Functor m => Functor (SupplyT s m) 
MonadFix m => MonadFix (SupplyT s m) 
(Monad m, Functor m) => Applicative (SupplyT s m) 
MonadIO m => MonadIO (SupplyT s m) 

data Supply s a Source

Supply monad.

Instances

MonadSupply s (Supply s) 
Monad (Supply s) 
Functor (Supply s) 
MonadFix (Supply s) 
Applicative (Supply s) 
Monoid a => Monoid (Supply s a)

Monoid instance for the supply monad. Actually any monad/monoid pair gives rise to this monoid instance, but we can't write its type like that because it would conflict with existing instances provided by Data.Monoid. instance (Monoid a, Monad m) => Monoid (m a) where

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.