foldl-transduce 0.4.0.1 → 0.4.1.0
raw patch · 5 files changed
+81/−1 lines, 5 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- Control.Foldl.Transduce: [getMooreM] :: MooreM m a b u -> Cofree ((->) u) (ReifiedTransductionM' m a b u)
- Control.Foldl.Transduce: [getMoore] :: Moore a b u -> Cofree ((->) u) (ReifiedTransduction' a b u)
- Control.Foldl.Transduce: [getTransduction'] :: ReifiedTransduction' a b r -> Transduction' a b r
- Control.Foldl.Transduce: [getTransductionM'] :: ReifiedTransductionM' m a b r -> TransductionM' m a b r
- Control.Foldl.Transduce: instance (GHC.Base.Functor m, GHC.Base.Monad m) => Data.Bifunctor.Bifunctor (Control.Foldl.Transduce.TransducerM m i)
- Control.Foldl.Transduce: instance (m ~ m') => Control.Foldl.Transduce.ToFoldM m (Control.Foldl.FoldM m')
- Control.Foldl.Transduce: instance (m ~ m') => Control.Foldl.Transduce.ToTransducerM m (Control.Foldl.Transduce.TransducerM m')
- Control.Foldl.Transduce: instance (m ~ m', GHC.Base.Monad m') => Control.Foldl.Transduce.ToTransductionsM' m (Control.Foldl.Transduce.MooreM m')
- Control.Foldl.Transduce: instance (m ~ m', GHC.Base.Monad m') => Control.Foldl.Transduce.ToTransductionsM' m (Control.Foldl.Transduce.ReifiedTransductionM' m')
- Control.Foldl.Transduce: instance (m ~ m', GHC.Base.Monad m') => Control.Foldl.Transduce.ToTransductionsM' m (Control.Foldl.Transduce.TransducerM m')
- Control.Foldl.Transduce: instance Control.Comonad.Comonad (Control.Foldl.Transduce.Transducer i o)
- Control.Foldl.Transduce: instance Control.Foldl.Transduce.ToFold (Control.Foldl.FoldM Data.Functor.Identity.Identity)
- Control.Foldl.Transduce: instance Control.Foldl.Transduce.ToFold Control.Foldl.Fold
- Control.Foldl.Transduce: instance Control.Foldl.Transduce.ToTransducer (Control.Foldl.Transduce.TransducerM Data.Functor.Identity.Identity)
- Control.Foldl.Transduce: instance Control.Foldl.Transduce.ToTransducer Control.Foldl.Transduce.Transducer
- Control.Foldl.Transduce: instance Control.Foldl.Transduce.ToTransductions' Control.Foldl.Transduce.Moore
- Control.Foldl.Transduce: instance Control.Foldl.Transduce.ToTransductions' Control.Foldl.Transduce.ReifiedTransduction'
- Control.Foldl.Transduce: instance Control.Foldl.Transduce.ToTransductions' Control.Foldl.Transduce.Transducer
- Control.Foldl.Transduce: instance Data.Bifunctor.Bifunctor (Control.Foldl.Transduce.Transducer i)
- Control.Foldl.Transduce: instance Data.Functor.Extend.Extend (Control.Foldl.Fold a)
- Control.Foldl.Transduce: instance Data.Functor.Extend.Extend (Control.Foldl.Transduce.Transducer i o)
- Control.Foldl.Transduce: instance GHC.Base.Functor (Control.Foldl.Transduce.Transducer i o)
- Control.Foldl.Transduce: instance GHC.Base.Monad m => Control.Foldl.Transduce.ToFoldM m Control.Foldl.Fold
- Control.Foldl.Transduce: instance GHC.Base.Monad m => Control.Foldl.Transduce.ToTransducerM m Control.Foldl.Transduce.Transducer
- Control.Foldl.Transduce: instance GHC.Base.Monad m => Control.Foldl.Transduce.ToTransductionsM' m Control.Foldl.Transduce.Transducer
- Control.Foldl.Transduce: instance GHC.Base.Monad m => Data.Functor.Extend.Extend (Control.Foldl.FoldM m a)
- Control.Foldl.Transduce: instance GHC.Base.Monad m => Data.Functor.Extend.Extend (Control.Foldl.Transduce.TransducerM m i o)
- Control.Foldl.Transduce: instance GHC.Base.Monad m => GHC.Base.Functor (Control.Foldl.Transduce.TransducerM m i o)
+ Control.Foldl.Transduce: getMoore :: Moore a b u -> Cofree ((->) u) (ReifiedTransduction' a b u)
+ Control.Foldl.Transduce: getMooreM :: MooreM m a b u -> Cofree ((->) u) (ReifiedTransductionM' m a b u)
+ Control.Foldl.Transduce: getTransduction' :: ReifiedTransduction' a b r -> Transduction' a b r
+ Control.Foldl.Transduce: getTransductionM' :: ReifiedTransductionM' m a b r -> TransductionM' m a b r
+ Control.Foldl.Transduce: instance (Functor m, Monad m) => Bifunctor (TransducerM m i)
+ Control.Foldl.Transduce: instance (m ~ m', Monad m') => ToTransductionsM' m (MooreM m')
+ Control.Foldl.Transduce: instance (m ~ m', Monad m') => ToTransductionsM' m (ReifiedTransductionM' m')
+ Control.Foldl.Transduce: instance (m ~ m', Monad m') => ToTransductionsM' m (TransducerM m')
+ Control.Foldl.Transduce: instance Bifunctor (Transducer i)
+ Control.Foldl.Transduce: instance Comonad (Fold a)
+ Control.Foldl.Transduce: instance Comonad (Transducer i o)
+ Control.Foldl.Transduce: instance Extend (Fold a)
+ Control.Foldl.Transduce: instance Extend (Transducer i o)
+ Control.Foldl.Transduce: instance Functor (Transducer i o)
+ Control.Foldl.Transduce: instance Monad m => Extend (FoldM m a)
+ Control.Foldl.Transduce: instance Monad m => Extend (TransducerM m i o)
+ Control.Foldl.Transduce: instance Monad m => Functor (TransducerM m i o)
+ Control.Foldl.Transduce: instance Monad m => ToFoldM m Fold
+ Control.Foldl.Transduce: instance Monad m => ToTransducerM m Transducer
+ Control.Foldl.Transduce: instance Monad m => ToTransductionsM' m Transducer
+ Control.Foldl.Transduce: instance ToFold (FoldM Identity)
+ Control.Foldl.Transduce: instance ToFold Fold
+ Control.Foldl.Transduce: instance ToTransducer (TransducerM Identity)
+ Control.Foldl.Transduce: instance ToTransducer Transducer
+ Control.Foldl.Transduce: instance ToTransductions' Moore
+ Control.Foldl.Transduce: instance ToTransductions' ReifiedTransduction'
+ Control.Foldl.Transduce: instance ToTransductions' Transducer
+ Control.Foldl.Transduce: instance m ~ m' => ToFoldM m (FoldM m')
+ Control.Foldl.Transduce: instance m ~ m' => ToTransducerM m (TransducerM m')
+ Control.Foldl.Transduce: unit :: Fold a ()
+ Control.Foldl.Transduce.ByteString.IO: driveHandle :: (MonadIO m, ToFoldM m f) => f ByteString r -> Int -> Handle -> m r
+ Control.Foldl.Transduce.ByteString.IO: toHandle :: MonadIO m => Handle -> FoldM m ByteString ()
+ Control.Foldl.Transduce.ByteString.IO: toHandleBuilder :: MonadIO m => Handle -> FoldM m Builder ()
- Control.Foldl.Transduce: transduceK :: (Monad m) => (i -> m [o]) -> TransductionM m i o
+ Control.Foldl.Transduce: transduceK :: Monad m => (i -> m [o]) -> TransductionM m i o
Files
- CHANGELOG +7/−0
- README.md +5/−0
- foldl-transduce.cabal +2/−1
- src/Control/Foldl/Transduce.hs +7/−0
- src/Control/Foldl/Transduce/ByteString/IO.hs +60/−0
CHANGELOG view
@@ -1,3 +1,10 @@+# 0.4.1.0++- Added module Control.Foldl.Transduce.ByteString.IO, to+ avoid having to depend on other packages for simple I/O tasks.++- Added "unit" fold.+ # 0.4.0.0 - Changed order of parameters for groups' and groupsM'. Hopefully the new one
README.md view
@@ -31,3 +31,8 @@ - You have more flexibility in pipes-group to decide how to delimit and fold the next group based on previous results.+++## Where can I find working examples for this library?++In the [examples](https://github.com/danidiaz/foldl-transduce/tree/master/examples) folder of the repo.
foldl-transduce.cabal view
@@ -1,5 +1,5 @@ Name: foldl-transduce-Version: 0.4.0.1+Version: 0.4.1.0 Cabal-Version: >=1.8.0.2 Build-Type: Simple License: BSD3@@ -37,6 +37,7 @@ Exposed-Modules: Control.Foldl.Transduce, Control.Foldl.Transduce.Text,+ Control.Foldl.Transduce.ByteString.IO, Control.Foldl.Transduce.Internal GHC-Options: -O2 -Wall
src/Control/Foldl/Transduce.hs view
@@ -74,6 +74,7 @@ , quiesce , quiesceWith , hoistFold+ , unit , ToFold(..) , ToFoldM(..) -- * Re-exports@@ -570,6 +571,12 @@ alternativeResult <- L.foldM fallbackFold [] return (Left (e,alternativeResult)) Right x'' -> return (Right x'')++{-| The "do-nothing" fold. ++-}+unit :: Fold a ()+unit = pure () ------------------------------------------------------------------------------
+ src/Control/Foldl/Transduce/ByteString/IO.hs view
@@ -0,0 +1,60 @@+{-# LANGUAGE RankNTypes #-}+{-# LANGUAGE ViewPatterns #-}++-- |+--+-- Pour handles into folds,+-- write to handles using folds. +module Control.Foldl.Transduce.ByteString.IO (+ driveHandle+ , toHandle+ , toHandleBuilder + ) where++import qualified Control.Foldl as L+import Control.Foldl.Transduce +import qualified Data.ByteString as B+import qualified Data.ByteString.Builder as B+import Control.Monad.IO.Class+import System.IO++{-| Feed a fold with bytes read from a 'Handle'.++-}+driveHandle :: (MonadIO m,ToFoldM m f) + => f B.ByteString r + -> Int -- ^ max chunk size+ -> Handle + -> m r +driveHandle (toFoldM -> f) chunkSize handle = + L.impurely consumeFunc f (B.hGetSome handle chunkSize,hIsEOF handle)+ where+ -- adapted from foldM in Pipes.Prelude+ consumeFunc step begin done (readChunk,checkEOF) = do+ x0 <- begin+ loop x0+ where+ loop x = do+ atEOF <- liftIO checkEOF+ if atEOF + then done x + else do+ chunk <- liftIO readChunk+ x' <- step x chunk+ loop $! x'+++toHandle :: (MonadIO m) => Handle -> L.FoldM m B.ByteString ()+toHandle handle = + L.FoldM + (\_ b -> liftIO (B.hPut handle b)) + (return ()) + (\_ -> return ())+++toHandleBuilder :: (MonadIO m) => Handle -> L.FoldM m B.Builder ()+toHandleBuilder handle = + L.FoldM+ (\_ b -> liftIO (B.hPutBuilder handle b)) + (return ()) + (\_ -> return ())