simple-pipe 0.0.0.3 → 0.0.0.4
raw patch · 2 files changed
+13/−7 lines, 2 filesPVP: minor bump suggested
API additions: PVP suggests at least a minor version bump
API changes (from Hackage documentation)
+ Data.Pipe: onBreak :: Monad m => Pipe i o m r -> m b -> Pipe i o m r
Files
- simple-pipe.cabal +2/−2
- src/Data/Pipe.hs +11/−5
simple-pipe.cabal view
@@ -2,7 +2,7 @@ cabal-version: >= 1.8 name: simple-pipe-version: 0.0.0.3+version: 0.0.0.4 stability: Experimental author: Yoshikuni Jujo <PAF01143@nifty.ne.jp> maintainer: Yoshikuni Jujo <PAF01143@nifty.ne.jp>@@ -87,7 +87,7 @@ source-repository this type: git location: git://github.com/YoshikuniJujo/forest.git- tag: simple-pipe-0.0.0.3+ tag: simple-pipe-0.0.0.4 library hs-source-dirs: src
src/Data/Pipe.hs view
@@ -1,7 +1,7 @@ {-# LANGUAGE FlexibleContexts, RankNTypes, PackageImports #-} module Data.Pipe (- PipeClass(..), Pipe, runPipe, finalize, finally, bracket ) where+ PipeClass(..), Pipe, runPipe, onBreak, finalize, finally, bracket ) where import Control.Applicative import Control.Monad@@ -74,11 +74,17 @@ h <- liftP o p h `finally` (c h >> return ()) +onBreak :: Monad m => Pipe i o m r -> m b -> Pipe i o m r+onBreak (Ready f0 o p) f = Ready (f0 >> f >> return ()) o $ onBreak p f+onBreak (Need f0 n) f = Need (f0 >> f >> return ()) $ \i -> onBreak (n i) f+onBreak (Done f0 r) _ = Done f0 r+onBreak (Make f0 m) f = Make (f0 >> f >> return ()) $ flip onBreak f `liftM` m+ finalize :: Monad m => Pipe i o m r -> m b -> Pipe i o m r-finalize (Ready _ o p) f = Ready (f >> return ()) o $ finalize p f-finalize (Need _ n) f = Need (f >> return ()) $ \i -> finalize (n i) f-finalize (Done _ r) f = Done (f >> return ()) r-finalize (Make _ m) f = Make (f >> return ()) $ flip finalize f `liftM` m+finalize (Ready f0 o p) f = Ready (f0 >> f >> return ()) o $ finalize p f+finalize (Need f0 n) f = Need (f0 >> f >> return ()) $ \i -> finalize (n i) f+finalize (Done f0 r) f = Done (f0 >> f >> return ()) r+finalize (Make f0 m) f = Make (f0 >> f >> return ()) $ flip finalize f `liftM` m finally :: MonadBaseControl IO m => Pipe i o m r -> m b -> Pipe i o m r finally p f = finalize (mapMake (`onException` f) p) f