-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Translate pull-based stream folds into push-based iteratees. -- -- Translate pull-based folds from the "streaming" package into -- push-based folds from the "foldl" package. @package streaming-eversion @version 0.2.0.0 -- | Most pull-to-push transformations in this module require functions -- that are polymorphic over a monad transformer. -- -- Because of this, some of the type signatures look scary, but actually -- many (suitably polymorphic) operations on Streams will unify -- with them. -- -- To get "interruptible" operations that can exit early with an error, -- put a ExceptT transformer just below the polymorphic monad -- transformer. In practice, that means lifting functions like -- throwE and hoistEither a number of times. -- -- Inspired by -- http://pchiusano.blogspot.com.es/2011/12/programmatic-translation-to-iteratees.html module Streaming.Eversion -- | A stream-folding function that can be turned into a pure, push-based -- fold. data Eversible a x eversible :: (forall m r. Monad m => Stream (Of a) m r -> m (Of x r)) -> Eversible a x evert :: Eversible a x -> Fold a x -- | Like Eversible, but gives the stream-folding function access to -- a base monad. -- --
--   >>> :{
--       let consume stream = lift (putStrLn "x") >> S.effects stream
--       in  L.foldM (evertM (eversibleM_ consume)) ["a","b","c"]
--       :}
--   x
--   
-- -- Note however that control operations can't be lifted through the -- transformer. data EversibleM m a x eversibleM :: (forall t r. (MonadTrans t, Monad (t m)) => Stream (Of a) (t m) r -> t m (Of x r)) -> EversibleM m a x eversibleM_ :: (forall t r. (MonadTrans t, Monad (t m)) => Stream (Of a) (t m) r -> t m r) -> EversibleM m a () evertM :: Monad m => EversibleM m a x -> FoldM m a x -- | Like EversibleM, but gives the stream-consuming function the -- ability to use liftIO. -- --
--   >>> L.foldM (evertMIO (eversibleMIO_ S.print)) ["a","b","c"]
--   "a"
--   "b"
--   "c"
--   
data EversibleMIO m a x eversibleMIO :: (forall t r. (MonadTrans t, MonadIO (t m)) => Stream (Of a) (t m) r -> t m (Of x r)) -> EversibleMIO m a x eversibleMIO_ :: (forall t r. (MonadTrans t, MonadIO (t m)) => Stream (Of a) (t m) r -> t m r) -> EversibleMIO m a () evertMIO :: MonadIO m => EversibleMIO m a x -> FoldM m a x -- | A stream-transforming function that can be turned into -- fold-transforming function. data Transvertible a b transvertible :: (forall m r. Monad m => Stream (Of a) m r -> Stream (Of b) m r) -> Transvertible a b transvert :: Transvertible b a -> (forall x. Fold a x -> Fold b x) -- | Like Transvertible, but gives the stream-transforming function -- access to a base monad. -- -- Note however that control operations can't be lifted through the -- transformer. data TransvertibleM m a b transvertibleM :: (forall t r. (MonadTrans t, Monad (t m)) => Stream (Of a) (t m) r -> Stream (Of b) (t m) r) -> TransvertibleM m a b -- | Recover the stored function, discarding the transformer. runTransvertibleM :: TransvertibleM m a b -> (forall r. Monad m => Stream (Of a) m r -> Stream (Of b) m r) transvertM :: Monad m => TransvertibleM m b a -> (forall x. FoldM m a x -> FoldM m b x) -- | Like TransvertibleM, but gives the stream-transforming function -- the ability to use liftIO. data TransvertibleMIO m a b transvertibleMIO :: (forall t r. (MonadTrans t, MonadIO (t m)) => Stream (Of a) (t m) r -> Stream (Of b) (t m) r) -> TransvertibleMIO m a b runTransvertibleMIO :: TransvertibleMIO m a b -> (forall r. MonadIO m => Stream (Of a) m r -> Stream (Of b) m r) transvertMIO :: (MonadIO m) => TransvertibleMIO m b a -> (forall x. FoldM m a x -> FoldM m b x) instance GHC.Base.Functor (Streaming.Eversion.Eversible a) instance Data.Profunctor.Unsafe.Profunctor Streaming.Eversion.Eversible instance GHC.Base.Functor (Streaming.Eversion.EversibleM m a) instance Data.Profunctor.Unsafe.Profunctor (Streaming.Eversion.EversibleM m) instance GHC.Base.Functor (Streaming.Eversion.EversibleMIO m a) instance Data.Profunctor.Unsafe.Profunctor (Streaming.Eversion.EversibleMIO m) instance GHC.Base.Functor (Streaming.Eversion.Transvertible a) instance Data.Profunctor.Unsafe.Profunctor Streaming.Eversion.Transvertible instance Control.Category.Category Streaming.Eversion.Transvertible instance Control.Category.Category (Streaming.Eversion.TransvertibleM m) instance GHC.Base.Functor (Streaming.Eversion.TransvertibleM m a) instance Data.Profunctor.Unsafe.Profunctor (Streaming.Eversion.TransvertibleM m) instance Control.Category.Category (Streaming.Eversion.TransvertibleMIO m) instance GHC.Base.Functor (Streaming.Eversion.TransvertibleMIO m a) instance Data.Profunctor.Unsafe.Profunctor (Streaming.Eversion.TransvertibleMIO m) -- | Like Streaming.Eversion, but for Producer folds and -- transformations. module Streaming.Eversion.Pipes pipeEversible :: (forall m r. Monad m => Producer a m r -> m (x, r)) -> Eversible a x evert :: Eversible a x -> Fold a x pipeEversibleM :: (forall t r. (MonadTrans t, Monad (t m)) => Producer a (t m) r -> t m (x, r)) -> EversibleM m a x pipeEversibleM_ :: (forall t r. (MonadTrans t, Monad (t m)) => Producer a (t m) r -> t m r) -> EversibleM m a () evertM :: Monad m => EversibleM m a x -> FoldM m a x pipeEversibleMIO :: (forall t r. (MonadTrans t, MonadIO (t m)) => Producer a (t m) r -> t m (x, r)) -> EversibleMIO m a x pipeEversibleMIO_ :: (forall t r. (MonadTrans t, MonadIO (t m)) => Producer a (t m) r -> t m r) -> EversibleMIO m a () evertMIO :: MonadIO m => EversibleMIO m a x -> FoldM m a x pipeTransvertible :: (forall m r. Monad m => Producer a m r -> Producer b m r) -> Transvertible a b transvert :: Transvertible b a -> (forall x. Fold a x -> Fold b x) pipeTransvertibleM :: (forall t r. (MonadTrans t, Monad (t m)) => Producer a (t m) r -> Producer b (t m) r) -> TransvertibleM m a b transvertM :: Monad m => TransvertibleM m b a -> (forall x. FoldM m a x -> FoldM m b x) pipeTransvertibleMIO :: (forall t r. (MonadTrans t, MonadIO (t m)) => Producer a (t m) r -> Producer b (t m) r) -> TransvertibleMIO m a b transvertMIO :: (MonadIO m) => TransvertibleMIO m b a -> (forall x. FoldM m a x -> FoldM m b x)