packages feed

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 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 ())