conduit 0.5.2.2 → 0.5.2.3
raw patch · 3 files changed
+18/−3 lines, 3 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
Files
- Data/Conduit/Internal.hs +2/−2
- conduit.cabal +1/−1
- test/main.hs +15/−0
Data/Conduit/Internal.hs view
@@ -326,7 +326,7 @@ pipe' final left right = case right of Done r2 -> PipeM (final >> return (Done r2))- HaveOutput p c o -> HaveOutput (pipe' final left p) c o+ HaveOutput p c o -> HaveOutput (pipe' final left p) (c >> final) o PipeM mp -> PipeM (liftM (pipe' final left) mp) Leftover _ i -> absurd i NeedInput rp rc -> upstream rp rc@@ -357,7 +357,7 @@ pipe' final left right = case right of Done r2 -> PipeM (final >> return (Done r2))- HaveOutput p c o -> HaveOutput (pipe' final left p) c o+ HaveOutput p c o -> HaveOutput (pipe' final left p) (c >> final) o PipeM mp -> PipeM (liftM (pipe' final left) mp) Leftover right' i -> pipe' final (HaveOutput left final i) right' NeedInput rp rc ->
conduit.cabal view
@@ -1,5 +1,5 @@ Name: conduit-Version: 0.5.2.2+Version: 0.5.2.3 Synopsis: Streaming data processing library. Description: @conduit@ is a solution to the streaming data problem, allowing for production, transformation, and consumption of streams of data in constant memory. It is an alternative to lazy I\/O which guarantees deterministic resource handling, and fits in the same general solution space as @enumerator@/@iteratee@ and @pipes@. For a brief tutorial, please see the "Data.Conduit" module.
test/main.hs view
@@ -26,6 +26,8 @@ import Control.Monad.Trans.Resource (runExceptionT_, allocate, resourceForkIO) import Control.Concurrent (threadDelay, killThread) import Control.Monad.IO.Class (liftIO)+import Control.Monad.Trans.Class (lift)+import Control.Monad.Trans.Writer (execWriter, tell) import Control.Applicative (pure, (<$>), (<*>)) import Data.Functor.Identity (runIdentity) import Control.Monad (forever)@@ -770,6 +772,19 @@ C.yield i res <- (src C.>+> C.injectLeftovers conduit) C.$$ CL.consume res `shouldBe` [1..10]+ describe "up-upstream finalizers" $ do+ let p1 = C.await >>= maybe (return ()) C.yield+ p2 = idMsg "p2-final"+ p3 = idMsg "p3-final"+ idMsg msg = C.addCleanup (const $ tell [msg]) $ C.awaitForever C.yield+ printer = C.awaitForever $ lift . tell . return . show+ src = CL.sourceList [1 :: Int ..]+ it "pipe" $ do+ let run p = execWriter $ C.runPipe $ printer C.<+< p C.<+< src+ run (p1 C.<+< (p2 C.<+< p3)) `shouldBe` run ((p1 C.<+< p2) C.<+< p3)+ it "conduit" $ do+ let run p = execWriter $ src C.$$ p C.=$ printer+ run ((p3 C.=$= p2) C.=$= p1) `shouldBe` run (p3 C.=$= (p2 C.=$= p1)) it' :: String -> IO () -> Spec it' = it