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