diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,3 +1,10 @@
+# Version 1.3.3.0
+  - Added a new convenience function, like `chunkList` but with a predicate for
+    when to split, taking current element and current chunk length:
+    ```haskell
+chunkListWith :: (a -> Int -> Bool) -> InputStream a -> IO (InputStream [a])
+    ```
+
 # Version 1.3.2.0
   - Dependency bump for attoparsec 0.13 (another location)
   - Dependency bump for vector 0.11
diff --git a/io-streams.cabal b/io-streams.cabal
--- a/io-streams.cabal
+++ b/io-streams.cabal
@@ -1,5 +1,5 @@
 Name:                io-streams
-Version:             1.3.2.0
+Version:             1.3.3.0
 License:             BSD3
 License-file:        LICENSE
 Category:            Data, Network, IO-Streams
diff --git a/src/System/IO/Streams/List.hs b/src/System/IO/Streams/List.hs
--- a/src/System/IO/Streams/List.hs
+++ b/src/System/IO/Streams/List.hs
@@ -11,6 +11,7 @@
 
    -- * Utility
  , chunkList
+ , chunkListWith
  , concatLists
  , listOutputStream
  ) where
@@ -154,6 +155,38 @@
         finish  = let l = dl []
                   in if null l then return $! () else yield l
         chunk x = go (k - 1) (dl . (x:))
+
+
+------------------------------------------------------------------------------
+-- | Splits an input stream into chunks whenever @p elt count@ returns true.
+--
+-- Example:
+--
+-- @
+-- ghci> 'fromList' [1..14::Int] >>= 'chunkListWith' (\x n -> n>=4) >>= 'toList'
+-- [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14]]
+-- ghci> 'fromList' ['a'..'z'] >>= 'chunkListWith' (\x n -> n>=4 && x `elem` "aeiouy") >>= 'toList'
+-- ["abcde","fghi","jklmno","pqrstu","vwxy","z"]
+-- @
+--
+-- /Since: 1.3.3.0./
+chunkListWith :: (a -> Int -> Bool)    -- ^ break predicate
+              -> InputStream a         -- ^ stream to process
+              -> IO (InputStream [a])
+chunkListWith p input =
+  fromGenerator $ go Nothing 0 id
+  where
+    go v !k dl
+      | Just x <- v, p x k = yield (dl []) >> go Nothing 0 id
+      | otherwise = do
+          liftIO (read input) >>= maybe finish chunk
+      where
+        finish =
+          let l = dl []
+          in if null l
+               then return $! ()
+               else yield l
+        chunk x = go (Just x) (k + 1) (dl . (x :))
 
 
 ------------------------------------------------------------------------------
diff --git a/test/System/IO/Streams/Tests/List.hs b/test/System/IO/Streams/Tests/List.hs
--- a/test/System/IO/Streams/Tests/List.hs
+++ b/test/System/IO/Streams/Tests/List.hs
@@ -14,9 +14,10 @@
 import           System.IO.Streams.Tests.Common (expectExceptionH)
 
 tests :: [Test]
-tests = [ testChunkJoin ]
+tests = [ testChunkJoin, testChunkWithJoin ]
 
 
+
 testChunkJoin :: Test
 testChunkJoin = testCase "list/chunkList and join" $ do
     expectExceptionH (fromList [1..10::Int] >>= chunkList 0 >>= toList)
@@ -32,3 +33,26 @@
                             >>= concatLists
                             >>= toList
                             >>= assertEqual "concatlists" [1..12]
+
+testChunkWithJoin :: Test
+testChunkWithJoin = testCase "list/chunkListWith and join" $ do
+    fromList [1..10 :: Int] >>= chunkListWith (\_ n -> n>=3)
+                            >>= toList
+                            >>= assertEqual "chunkListWith" [ [1,2,3]
+                                                        , [4,5,6]
+                                                        , [7,8,9]
+                                                        , [10]
+                                                        ]
+    fromList [1..12 :: Int] >>= chunkListWith (\_ n -> n>=3)
+                            >>= concatLists
+                            >>= toList
+                            >>= assertEqual "concatlists" [1..12]
+
+    fromList ['a'..'z' :: Char] >>= chunkListWith (\x n -> n>=4 && x `elem` "aeiouy")
+                            >>= toList
+                            >>= assertEqual "chunkListWith" ["abcde"
+                                                            ,"fghi"
+                                                            ,"jklmno"
+                                                            ,"pqrstu"
+                                                            ,"vwxy"
+                                                            ,"z"]
