Safe Haskell | Safe |
---|---|
Language | Haskell98 |
Like Streaming.Eversion, but for Producer folds and transformations.
- 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
Producer folds
:: (forall t r. (MonadTrans t, Monad (t m)) => Producer a (t m) r -> t m (x, r)) | |
-> EversibleM m a x |
:: (forall t r. (MonadTrans t, Monad (t m)) => Producer a (t m) r -> t m r) | |
-> EversibleM m a () |
:: (forall t r. (MonadTrans t, MonadIO (t m)) => Producer a (t m) r -> t m (x, r)) | |
-> EversibleMIO m a x |
:: (forall t r. (MonadTrans t, MonadIO (t m)) => Producer a (t m) r -> t m r) | |
-> EversibleMIO m a () |
Producer transformations
:: (forall m r. Monad m => Producer a m r -> Producer b m r) | |
-> Transvertible a b |
:: (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 Source #
:: (forall t r. (MonadTrans t, MonadIO (t m)) => Producer a (t m) r -> Producer b (t m) r) | |
-> TransvertibleMIO m a b |
:: MonadIO m | |
=> TransvertibleMIO m b a | |
-> forall x. FoldM m a x -> FoldM m b x |
Examples
Creating a TransvertibleM
out a decoder from Pipes.Text.Encoding. In
case the decoding fails, part of the leftovers are read in order to build
the error value.
>>>
:{
let trans = transvertM (pipeTransvertibleM (\producer -> do result <- PT.decode (PT.utf8 . PT.eof) producer lift (case result of Left ls -> sample ls >>= lift . throwE Right r -> return r))) sample leftovers = L.purely P.fold L.mconcat (void (view (PB.splitAt 5) leftovers)) in runExceptT $ L.foldM (trans (L.generalize L.mconcat)) ["decode","this"] :} Right "decodethis"
>>>
:{
let trans = transvertM (pipeTransvertibleM (\producer -> do result <- PT.decode (PT.utf8 . PT.eof) producer lift (case result of Left ls -> sample ls >>= lift . throwE Right r -> return r))) sample leftovers = L.purely P.fold L.mconcat (void (view (PB.splitAt 8) leftovers)) in runExceptT $ L.foldM (trans (L.generalize L.mconcat)) ["invalid \xc3\x28","sequence"] :} Left "\195(sequen"
Note that the errors are thrown in an ExceptT
layer below the Producer
and the polymorphic transformer.