------------------------------------------------------------------------------- -- | -- Module : Control.Monad.Trans.Supply -- Copyright : (C) 2013 Merijn Verstraaten -- License : BSD-style (see the file LICENSE) -- Maintainer : Merijn Verstraaten -- Stability : experimental -- Portability : non-portable -- -- [Computation type:] Computations that require a supply of values. -- -- [Binding strategy:] Applicative values are functions that consume an input -- from a supply to produce a value. -- -- [Useful for:] Providing a supply of unique names or other values to -- computations needing them. -- -- [Zero and plus:] Identical to the underlying implementations (if any) of -- 'empty', '<|>', 'mzero' and 'mplus'. -- -- The @'Supply' s a@ monad represents a computation that consumes a supply of -- @s@'s to produce a value of type @a@. One example use is to simplify -- computations that require the generation of unique names. The 'Supply' monad -- can be used to provide a stream of unique names to such a computation. ------------------------------------------------------------------------------- module Control.Monad.Supply ( -- * The MonadSupply Class MonadSupply (..) , demand -- * The Supply Monad , Supply , withSupply , runSupply , runListSupply , runMonadSupply -- * The Supply Monad Transformer , SupplyT , withSupplyT , runSupplyT , runListSupplyT , runMonadSupplyT , module Control.Monad , module Control.Monad.Trans ) where import Control.Monad.Supply.Class import Control.Monad.Trans.Supply ( Supply , SupplyT , withSupply , withSupplyT , runSupply , runSupplyT , runListSupply , runListSupplyT , runMonadSupply , runMonadSupplyT ) import Control.Monad import Control.Monad.Trans