Blame Data/Conduit/Foldl.hs
|
Packit |
4b2029 |
{-# LANGUAGE RankNTypes #-}
|
|
Packit |
4b2029 |
-- | Adapter module to work with the <https://hackage.haskell.org/package/foldl foldl> package.
|
|
Packit |
4b2029 |
--
|
|
Packit |
4b2029 |
-- @since 1.1.16
|
|
Packit |
4b2029 |
module Data.Conduit.Foldl where
|
|
Packit |
4b2029 |
|
|
Packit |
4b2029 |
import Data.Conduit
|
|
Packit |
4b2029 |
import Control.Monad.Trans.Class (lift)
|
|
Packit |
4b2029 |
import qualified Data.Conduit.List as CL
|
|
Packit |
4b2029 |
|
|
Packit |
4b2029 |
-- | Convert a left fold into a 'Consumer'. This function is intended
|
|
Packit |
4b2029 |
-- to be used with @purely@ from the
|
|
Packit |
4b2029 |
-- <https://hackage.haskell.org/package/foldl foldl> package.
|
|
Packit |
4b2029 |
--
|
|
Packit |
4b2029 |
-- @since 1.1.16
|
|
Packit |
4b2029 |
sinkFold :: Monad m => (x -> a -> x) -> x -> (x -> b) -> Consumer a m b
|
|
Packit |
4b2029 |
sinkFold combine seed extract = fmap extract (CL.fold combine seed)
|
|
Packit |
4b2029 |
|
|
Packit |
4b2029 |
-- | Convert a monadic left fold into a 'Consumer'. This function is
|
|
Packit |
4b2029 |
-- intended to be used with @impurely@ from the
|
|
Packit |
4b2029 |
-- <https://hackage.haskell.org/package/foldl foldl> package.
|
|
Packit |
4b2029 |
--
|
|
Packit |
4b2029 |
-- @since 1.1.16
|
|
Packit |
4b2029 |
sinkFoldM :: Monad m => (x -> a -> m x) -> m x -> (x -> m b) -> Consumer a m b
|
|
Packit |
4b2029 |
sinkFoldM combine seed extract =
|
|
Packit |
4b2029 |
lift . extract =<< CL.foldM combine =<< lift seed
|