packages feed

streaming-eversion 0.3.0.1 → 0.3.1.0

raw patch · 4 files changed

+54/−10 lines, 4 files

Files

CHANGELOG view
@@ -1,12 +1,15 @@+0.3.1.0++- Added functions with MonadResource contraints.+ 0.3.0.0-=======+ - Implemented the improvements suggested by Michael Thompson here : https://groups.google.com/forum/#!topic/haskell-pipes/7n6NPTmxPKY by M.T. - Removed the newtypes. I mistakenly believed that they were needed to avoid having to enable -XImpredicativeTypes.  0.2.0.0-=======  - Eversible, not Evertible! - Removed special purpose error functions.
src/Streaming/Eversion.hs view
@@ -5,7 +5,7 @@ {-| Most pull-to-push transformations in this module require functions that are      polymorphic over a monad transformer.       -    Because of this, some of the type signatures look internals, but actually many+    Because of this, some of the type signatures look scary, but actually many     (suitably polymorphic) operations on 'Stream's will unify with them.         To get "interruptible" operations that can exit early with an error, put a@@ -24,10 +24,13 @@     ,   evertM_     ,   evertMIO     ,   evertMIO_+    ,   evertMR+    ,   evertMR_         -- * Stream transformations      ,   transvert     ,   transvertM     ,   transvertMIO+    ,   transvertMR         -- * Internals --    ,   Feed(..)     ,   generalEvertM@@ -36,7 +39,7 @@  import           Prelude  import           Control.Foldl (Fold(..),FoldM(..),generalize,simplify)-import           Streaming (Stream,Of(..),Sum(..),inspect,unseparate)+import           Streaming (Stream,Of(..),Sum(..),inspect,unseparate,MonadResource) import           Streaming.Internal import           Control.Monad.IO.Class import           Control.Monad.Trans.Class@@ -47,7 +50,7 @@ >>> import           Control.Monad.Trans.Identity >>> import           Control.Foldl (Fold(..),FoldM(..)) >>> import qualified Control.Foldl as L->>> import           Streaming (Stream,Of(..))+>>> import           Streaming (Stream,Of(..),MonadResource,runResourceT) >>> import           Streaming.Prelude (yield,next,for) >>> import qualified Streaming.Prelude as S -}@@ -116,6 +119,20 @@           -> FoldM m a () -- ^ evertMIO_ phi = evertMIO (fmap (fmap ((:>) ())) phi) +evertMR :: MonadResource m => (forall t r. (MonadTrans t, MonadResource (t m)) => Stream (Of a) (t m) r -> t m (Of x r)) +       -> FoldM m a x -- ^+evertMR phi = generalEvertM phi++{-| + +>>> runResourceT (L.foldM (evertMR_ (S.writeFile "/dev/null")) ["aaa","bbb"]) ++-}+evertMR_ :: MonadResource m => (forall t r. (MonadTrans t, MonadResource (t m)) => Stream (Of a) (t m) r -> t m r) +        -> FoldM m a () -- ^+evertMR_ phi = evertMR (fmap (fmap ((:>) ())) phi)++ generalEvertM :: (Monad m)                => (forall r. Stream (Of a) (Stream ((->) (Feed a)) m) r -> Stream ((->) (Feed a)) m (Of b r))               -> FoldM m a b -- ^@@ -152,6 +169,12 @@              -> FoldM m b x -- ^              -> FoldM m a x transvertMIO phi = generalTransvertM phi++transvertMR  :: MonadResource m +            => (forall t r. (MonadTrans t, MonadResource (t m)) => Stream (Of a) (t m) r -> Stream (Of b) (t m) r)+            -> FoldM m b x -- ^+            -> FoldM m a x+transvertMR phi = generalTransvertM phi  data Pair a b = Pair !a !b 
src/Streaming/Eversion/Pipes.hs view
@@ -10,10 +10,13 @@     ,   evertM_     ,   evertMIO     ,   evertMIO_+--    ,   evertMR+--    ,   evertMR_         -- * Producer transformations      ,   transvert     ,   transvertM     ,   transvertMIO+--    ,   transvertMR         -- * Examples         -- $examples     ) where@@ -21,7 +24,7 @@ import           Control.Monad.IO.Class import           Control.Monad.Trans.Class -import           Streaming(Of(..))+import           Streaming(MonadResource,strictly) import qualified Streaming.Prelude import qualified Streaming.Eversion import           Pipes@@ -49,11 +52,11 @@  evert :: (forall m r. Monad m => Producer a m r -> m (x,r))        -> Fold a x -- ^-evert phi = Streaming.Eversion.evert (\stream -> fmap (\(x,r) -> x :> r) (phi (Pipes.Prelude.unfoldr Streaming.Prelude.next stream)))+evert phi = Streaming.Eversion.evert (\stream -> fmap strictly (phi (Pipes.Prelude.unfoldr Streaming.Prelude.next stream)))  evertM :: Monad m => (forall t r. (MonadTrans t, Monad (t m)) => Producer a (t m) r -> t m (x,r))         -> FoldM m a x -- ^-evertM phi = Streaming.Eversion.evertM (\stream -> fmap (\(x,r) -> x :> r) (phi (Pipes.Prelude.unfoldr Streaming.Prelude.next stream)))+evertM phi = Streaming.Eversion.evertM (\stream -> fmap strictly (phi (Pipes.Prelude.unfoldr Streaming.Prelude.next stream)))  evertM_ :: Monad m => (forall t r. (MonadTrans t, Monad (t m)) => Producer a (t m) r -> t m r)          -> FoldM m a () -- ^@@ -61,12 +64,20 @@  evertMIO :: MonadIO m => (forall t r. (MonadTrans t, MonadIO (t m)) => Producer a (t m) r -> t m (x,r))           -> FoldM m a x -- ^-evertMIO phi = Streaming.Eversion.evertMIO (\stream -> fmap (\(x,r) -> x :> r) (phi (Pipes.Prelude.unfoldr Streaming.Prelude.next stream)))+evertMIO phi = Streaming.Eversion.evertMIO (\stream -> fmap strictly (phi (Pipes.Prelude.unfoldr Streaming.Prelude.next stream)))  evertMIO_ :: MonadIO m => (forall t r. (MonadTrans t, MonadIO (t m)) => Producer a (t m) r -> t m r)            -> FoldM m a () -- ^ evertMIO_ phi = Streaming.Eversion.evertMIO_ (\stream -> phi (Pipes.Prelude.unfoldr Streaming.Prelude.next stream)) +--evertMR :: MonadResource m => (forall t r. (MonadTrans t, MonadResource (t m)) => Producer a (t m) r -> t m (x,r)) +--         -> FoldM m a x -- ^+--evertMR phi = Streaming.Eversion.evertMR (\stream -> fmap strictly (phi (Pipes.Prelude.unfoldr Streaming.Prelude.next stream)))++--evertMR_ :: MonadResource m => (forall t r. (MonadTrans t, MonadResource (t m)) => Producer a (t m) r -> t m r) +--          -> FoldM m a () -- ^+--evertMR_ phi = Streaming.Eversion.evertMR_ (\stream -> phi (Pipes.Prelude.unfoldr Streaming.Prelude.next stream))+ transvert :: (forall m r. Monad m => Producer a m r -> Producer b m r)           -> Fold b x -- ^           -> Fold a x @@ -83,6 +94,13 @@              -> FoldM m b x -- ^              -> FoldM m a x transvertMIO phi = Streaming.Eversion.transvertMIO (\stream -> Streaming.Prelude.unfoldr Pipes.next (phi (Pipes.Prelude.unfoldr Streaming.Prelude.next stream)))++--transvertMR :: MonadResource m +--             => (forall t r. (MonadTrans t, MonadResource (t m)) => Producer a (t m) r -> Producer b (t m) r)+--             -> FoldM m b x -- ^+--             -> FoldM m a x+--transvertMR phi = Streaming.Eversion.transvertMR (\stream -> Streaming.Prelude.unfoldr Pipes.next (phi (Pipes.Prelude.unfoldr Streaming.Prelude.next stream)))+  {- $examples  
streaming-eversion.cabal view
@@ -1,5 +1,5 @@ Name: streaming-eversion-Version: 0.3.0.1+Version: 0.3.1.0 Cabal-Version: >=1.8.0.2 Build-Type: Simple License: BSD3