packages feed

simple-conduit 0.0.2 → 0.1.0

raw patch · 2 files changed

+23/−6 lines, 2 files

Files

Conduit/Simple.hs view
@@ -24,9 +24,10 @@ import           Control.Monad.Trans.Class import           Control.Monad.Trans.Control import           Control.Monad.Trans.Either+import           Control.Monad.Trans.State import           Data.Bifunctor import           Data.Builder-import           Data.ByteString hiding (hPut)+import           Data.ByteString hiding (hPut, putStrLn) import           Data.IOData import           Data.MonoTraversable import           Data.Monoid@@ -767,11 +768,27 @@ sequenceSources = getZipSource . sequenceA . fmap ZipSource  zipSinks :: Monad m-         => (Source m i rs  -> m r)-         -> (Source m i rs' -> m r')-         -> (forall s. Source m i s)+         => (Source (StateT (r', s) m) i s  -> StateT (r', s) m r)+         -> (Source (StateT (r', s) m) i s' -> StateT (r', s) m r')+         -> (forall t. Source (StateT (r', s) m) i t)          -> m (r, r')-zipSinks x y await = liftM2 (,) (x await) (y await)+zipSinks x y await = do+    let i = (error "accessing r", error "accessing r'")+    flip evalStateT i $ do+        r <- x $ \rx yieldx -> do+            r' <- lift $ y $ \ry yieldy -> EitherT $ do+                    eres <- runEitherT $ await (rx, ry) $ \(rx', ry') u -> do+                        x' <- rewrap (, ry') $ yieldx rx' u+                        y' <- rewrap (rx' ,) $ yieldy ry' u+                        return (fst x', snd y')+                    let (s, s') = either id id eres+                    modify (\(b, _) -> (b, s))+                    return $ Right s'+            lift $ do+                modify (\(_, b) -> (r', b))+                gets snd+        r' <- gets fst+        return (r, r')  newtype ZipSink i m r s = ZipSink { getZipSink :: Source m i r -> m s } 
simple-conduit.cabal view
@@ -1,5 +1,5 @@ Name:                simple-conduit-Version:             0.0.2+Version:             0.1.0 Synopsis:            A simple streaming library based on composing monadic folds. Description:     @simple-conduit@ follows a similar UI to the more capable @conduit@ library, but reduces the scope of what it can solve donw to what can be expressed by chaining monadic folds that allow for early termination.  This allows for more predictable resource management behavior, at the cost of not allowing scenarios that @conduit@ is better designed.