diff --git a/hw-streams.cabal b/hw-streams.cabal
--- a/hw-streams.cabal
+++ b/hw-streams.cabal
@@ -3,7 +3,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           hw-streams
-version:        0.0.0.2
+version:        0.0.0.3
 synopsis:       Primitive functions and data types
 description:    Primitive functions and data types.
 category:       Data
diff --git a/src/HaskellWorks/Data/Streams/Stream.hs b/src/HaskellWorks/Data/Streams/Stream.hs
--- a/src/HaskellWorks/Data/Streams/Stream.hs
+++ b/src/HaskellWorks/Data/Streams/Stream.hs
@@ -102,10 +102,10 @@
 repeat n a = Stream step n 1
   where step i = if i > 0 then Yield a (i - 1) else Done
 
-transcribe :: (s -> a -> b) -> s -> Stream a -> Stream b
+transcribe :: (s -> a -> (b, s)) -> s -> Stream a -> Stream b
 transcribe f w (Stream step state size) = Stream step' (state, w) size
   where step' (t, x) = case step t of
-          Yield a s' -> let z = f x a in Yield z (s', x)
+          Yield a s' -> let (z, y) = f x a in Yield z (s', y)
           Skip    s' -> Skip (s', x)
           Done       -> Done
         {-# INLINE step' #-}
