diff --git a/deferred-folds.cabal b/deferred-folds.cabal
--- a/deferred-folds.cabal
+++ b/deferred-folds.cabal
@@ -1,7 +1,7 @@
 name:
   deferred-folds
 version:
-  0.6
+  0.6.1
 category:
   Folding
 synopsis:
diff --git a/library/DeferredFolds/Prelude.hs b/library/DeferredFolds/Prelude.hs
--- a/library/DeferredFolds/Prelude.hs
+++ b/library/DeferredFolds/Prelude.hs
@@ -9,6 +9,7 @@
 -------------------------
 import Prelude as Exports hiding ((<>))
 import Foreign as Exports hiding (void)
+import Data.Bool as Exports
 import Data.Monoid as Exports hiding ((<>), First(..), Last(..))
 import Data.Semigroup as Exports
 import Data.Foldable as Exports
diff --git a/library/DeferredFolds/Unfold.hs b/library/DeferredFolds/Unfold.hs
--- a/library/DeferredFolds/Unfold.hs
+++ b/library/DeferredFolds/Unfold.hs
@@ -123,6 +123,10 @@
 foldable :: Foldable foldable => foldable a -> Unfold a
 foldable foldable = Unfold (\ step init -> A.foldl' step init foldable)
 
+{-# INLINE filter #-}
+filter :: (a -> Bool) -> Unfold a -> Unfold a
+filter test (Unfold run) = Unfold (\ step -> run (\ state element -> if test element then step state element else state))
+
 {-| Ints in the specified inclusive range -}
 {-# INLINE intsInRange #-}
 intsInRange :: Int -> Int -> Unfold Int
diff --git a/library/DeferredFolds/UnfoldM.hs b/library/DeferredFolds/UnfoldM.hs
--- a/library/DeferredFolds/UnfoldM.hs
+++ b/library/DeferredFolds/UnfoldM.hs
@@ -91,6 +91,10 @@
 foldable :: (Monad m, Foldable foldable) => foldable a -> UnfoldM m a
 foldable foldable = UnfoldM (\ step init -> A.foldlM step init foldable)
 
+{-# INLINE filter #-}
+filter :: Monad m => (a -> m Bool) -> UnfoldM m a -> UnfoldM m a
+filter test (UnfoldM run) = UnfoldM (\ step -> run (\ state element -> test element >>= bool (return state) (step state element)))
+
 {-| Ints in the specified inclusive range -}
 intsInRange :: Monad m => Int -> Int -> UnfoldM m Int
 intsInRange from to =
