diff --git a/CHANGELOG b/CHANGELOG
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,10 @@
+# 0.4.1.0
+
+- Added module Control.Foldl.Transduce.ByteString.IO, to
+  avoid having to depend on other packages for simple I/O tasks.
+
+- Added "unit" fold.
+
 # 0.4.0.0
 
 - Changed order of parameters for groups' and groupsM'. Hopefully the new one
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -31,3 +31,8 @@
 
 - You have more flexibility in pipes-group to decide how to delimit and fold
   the next group based on previous results.
+
+
+## Where can I find working examples for this library?
+
+In the [examples](https://github.com/danidiaz/foldl-transduce/tree/master/examples) folder of the repo.
diff --git a/foldl-transduce.cabal b/foldl-transduce.cabal
--- a/foldl-transduce.cabal
+++ b/foldl-transduce.cabal
@@ -1,5 +1,5 @@
 Name: foldl-transduce
-Version: 0.4.0.1
+Version: 0.4.1.0
 Cabal-Version: >=1.8.0.2
 Build-Type: Simple
 License: BSD3
@@ -37,6 +37,7 @@
     Exposed-Modules:
         Control.Foldl.Transduce,
         Control.Foldl.Transduce.Text,
+        Control.Foldl.Transduce.ByteString.IO,
         Control.Foldl.Transduce.Internal
     GHC-Options: -O2 -Wall
 
diff --git a/src/Control/Foldl/Transduce.hs b/src/Control/Foldl/Transduce.hs
--- a/src/Control/Foldl/Transduce.hs
+++ b/src/Control/Foldl/Transduce.hs
@@ -74,6 +74,7 @@
     ,   quiesce
     ,   quiesceWith
     ,   hoistFold
+    ,   unit
     ,   ToFold(..)
     ,   ToFoldM(..)
         -- * Re-exports
@@ -570,6 +571,12 @@
                         alternativeResult <- L.foldM fallbackFold []
                         return (Left (e,alternativeResult))
                     Right x'' -> return (Right x'')
+
+{-| The "do-nothing" fold.		
+
+-}
+unit :: Fold a ()
+unit = pure () 
 
 ------------------------------------------------------------------------------
 
diff --git a/src/Control/Foldl/Transduce/ByteString/IO.hs b/src/Control/Foldl/Transduce/ByteString/IO.hs
new file mode 100644
--- /dev/null
+++ b/src/Control/Foldl/Transduce/ByteString/IO.hs
@@ -0,0 +1,60 @@
+{-# LANGUAGE RankNTypes #-}
+{-# LANGUAGE ViewPatterns #-}
+
+-- |
+--
+-- Pour handles into folds,
+-- write to handles using folds. 
+module Control.Foldl.Transduce.ByteString.IO (
+        driveHandle
+    ,   toHandle
+    ,   toHandleBuilder  
+    ) where
+
+import qualified Control.Foldl as L
+import Control.Foldl.Transduce 
+import qualified Data.ByteString as B
+import qualified Data.ByteString.Builder as B
+import Control.Monad.IO.Class
+import System.IO
+
+{-| Feed a fold with bytes read from a 'Handle'.
+
+-}
+driveHandle :: (MonadIO m,ToFoldM m f) 
+            => f B.ByteString r 
+            -> Int -- ^ max chunk size
+            -> Handle 
+            -> m r 
+driveHandle (toFoldM -> f) chunkSize handle = 
+    L.impurely consumeFunc f (B.hGetSome handle chunkSize,hIsEOF handle)
+    where
+        -- adapted from foldM in Pipes.Prelude
+        consumeFunc step begin done (readChunk,checkEOF) = do
+            x0 <- begin
+            loop x0
+              where
+                loop x = do
+                    atEOF <- liftIO checkEOF
+                    if atEOF 
+                       then done x 
+                       else do
+                           chunk <- liftIO readChunk
+                           x' <- step x chunk
+                           loop $! x'
+
+
+toHandle :: (MonadIO m) => Handle -> L.FoldM m B.ByteString ()
+toHandle handle = 
+    L.FoldM 
+    (\_ b -> liftIO (B.hPut handle b))  
+    (return ()) 
+    (\_ -> return ())
+
+
+toHandleBuilder :: (MonadIO m) => Handle -> L.FoldM m B.Builder ()
+toHandleBuilder handle = 
+    L.FoldM
+    (\_ b -> liftIO (B.hPutBuilder handle b)) 
+    (return ()) 
+    (\_ -> return ())
