diff --git a/simple-pipe.cabal b/simple-pipe.cabal
--- a/simple-pipe.cabal
+++ b/simple-pipe.cabal
@@ -2,7 +2,7 @@
 cabal-version:	>= 1.8
 
 name:		simple-pipe
-version:	0.0.0.23
+version:	0.0.0.24
 stability:	Experimental
 author:		Yoshikuni Jujo <PAF01143@nifty.ne.jp>
 maintainer:	Yoshikuni Jujo <PAF01143@nifty.ne.jp>
@@ -80,7 +80,7 @@
 source-repository	this
     type:	git
     location:	git://github.com/YoshikuniJujo/simple-pipe.git
-    tag:	simple-pipe-0.0.0.23
+    tag:	simple-pipe-0.0.0.24
 
 library
     hs-source-dirs:	src
diff --git a/src/Data/Pipe/Flow.hs b/src/Data/Pipe/Flow.hs
--- a/src/Data/Pipe/Flow.hs
+++ b/src/Data/Pipe/Flow.hs
@@ -1,6 +1,6 @@
-module Data.Pipe.Flow (before, until) where
+module Data.Pipe.Flow (before, until, filter) where
 
-import Prelude hiding (until)
+import Prelude hiding (until, filter)
 import Control.Monad
 import Data.Pipe
 
@@ -10,3 +10,7 @@
 until :: (PipeClass p, Monad m, Monad (p a a m)) => (a -> Bool) -> p a a m ()
 until p = (await >>=) . maybe (return ()) $ \x ->
 	if p x then yield x else yield x >> before p
+
+filter :: (PipeClass p, Monad m, Monad (p a a m)) => (a -> Bool) -> p a a m ()
+filter p = (await >>=) . maybe (return ()) $ \x ->
+	if p x then yield x >> filter p else filter p
