-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | YieldT monad transformer -- -- This package defines a class MonadYield a for monads that can -- emit values values of type a while they run, and a monad -- transformer YieldT a which implements this class such that -- the emitted values can be captured in a streaming manner. -- -- This is an amalgamation of concepts from pipes, -- conduit, foldl, and kan-extensions, -- combined into a small self-contained package. @package yield @version 0.0.0.0 module Control.Monad.Yield.Aggregation -- | An effectful stream consumer -- -- The type parameter x represents the consumer's internal -- state. data Aggregation m a b Aggregation :: m x -> (x -> a -> m x) -> (x -> m b) -> Aggregation m a b -- | Produce the initial state [begin] :: Aggregation m a b -> m x -- | Consume one item from the stream [step] :: Aggregation m a b -> x -> a -> m x -- | Produce the final result [done] :: Aggregation m a b -> x -> m b noAggregation :: Applicative m => Aggregation m a () seqAggregation :: Applicative m => Aggregation m a (Seq a) listAggregation :: Applicative m => Aggregation m a [a] instance GHC.Base.Functor m => GHC.Base.Functor (Control.Monad.Yield.Aggregation.Aggregation m a) module Control.Monad.Yield.Class class Monad m => MonadYield (a :: Type) (m :: Type -> Type) | m -> a yield :: MonadYield a m => a -> m () module Control.Monad.Trans.Yield -- | Monad transformer that adds dynamically interpretable -- MonadYield support data YieldT a m r -- | Runs a YieldT computation in the base monad runYieldT :: forall a b m r. Monad m => Aggregation m a b -> YieldT a m r -> m (b, r) -- | Transforms a YieldT's base monad actions hoistYieldT :: forall m n a r. Monad m => (forall x. m x -> n x) -> YieldT a m r -> YieldT a n r instance GHC.Base.Functor m => GHC.Base.Functor (Control.Monad.Trans.Yield.Yielder a m) instance GHC.Base.Monad (Control.Monad.Trans.Yield.YieldT a m) instance GHC.Base.Applicative (Control.Monad.Trans.Yield.YieldT a m) instance GHC.Base.Functor (Control.Monad.Trans.Yield.YieldT a m) instance Control.Monad.IO.Class.MonadIO m => Control.Monad.IO.Class.MonadIO (Control.Monad.Trans.Yield.YieldT a m) instance GHC.Base.Functor m => Control.Monad.Yield.Class.MonadYield a (Control.Monad.Trans.Yield.YieldT a m) instance Control.Monad.Reader.Class.MonadReader r m => Control.Monad.Reader.Class.MonadReader r (Control.Monad.Trans.Yield.YieldT a m) instance Control.Monad.State.Class.MonadState s m => Control.Monad.State.Class.MonadState s (Control.Monad.Trans.Yield.YieldT a m) instance Control.Monad.Trans.Class.MonadTrans (Control.Monad.Trans.Yield.YieldT a) instance GHC.Base.Functor m => GHC.Base.Applicative (Control.Monad.Trans.Yield.Yielder a m) instance GHC.Base.Functor m => GHC.Base.Monad (Control.Monad.Trans.Yield.Yielder a m) instance GHC.Base.Functor m => Control.Monad.Yield.Class.MonadYield a (Control.Monad.Trans.Yield.Yielder a m) instance Control.Monad.Trans.Class.MonadTrans (Control.Monad.Trans.Yield.Yielder a) instance Control.Monad.IO.Class.MonadIO m => Control.Monad.IO.Class.MonadIO (Control.Monad.Trans.Yield.Yielder a m) instance Control.Monad.Reader.Class.MonadReader r m => Control.Monad.Reader.Class.MonadReader r (Control.Monad.Trans.Yield.Yielder a m) instance Control.Monad.State.Class.MonadState s m => Control.Monad.State.Class.MonadState s (Control.Monad.Trans.Yield.Yielder a m) module Control.Monad.Yield class Monad m => MonadYield (a :: Type) (m :: Type -> Type) | m -> a yield :: MonadYield a m => a -> m () -- | Monad transformer that adds dynamically interpretable -- MonadYield support data YieldT a m r -- | Runs a YieldT computation in the base monad runYieldT :: forall a b m r. Monad m => Aggregation m a b -> YieldT a m r -> m (b, r) -- | Transforms a YieldT's base monad actions hoistYieldT :: forall m n a r. Monad m => (forall x. m x -> n x) -> YieldT a m r -> YieldT a n r -- | An effectful stream consumer -- -- The type parameter x represents the consumer's internal -- state. data Aggregation m a b Aggregation :: m x -> (x -> a -> m x) -> (x -> m b) -> Aggregation m a b -- | Produce the initial state [begin] :: Aggregation m a b -> m x -- | Consume one item from the stream [step] :: Aggregation m a b -> x -> a -> m x -- | Produce the final result [done] :: Aggregation m a b -> x -> m b noAggregation :: Applicative m => Aggregation m a () seqAggregation :: Applicative m => Aggregation m a (Seq a) listAggregation :: Applicative m => Aggregation m a [a]