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