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.4
+version:        0.0.0.5
 synopsis:       Primitive functions and data types
 description:    Primitive functions and data types.
 category:       Data
@@ -39,7 +39,7 @@
   build-depends:
       base            >= 4.8        && < 5
     , bytestring      >= 0.9        && < 0.11
-    , ghc-prim        >= 0.5.1.1    && < 0.6
+    , ghc-prim        >= 0.4        && < 0.6
     , hw-bits         >= 0.7.0.3    && < 0.8
     , hw-prim         >= 0.6.2.17   && < 0.7
     , mmap            >= 0.5        && < 0.6
@@ -72,7 +72,7 @@
   build-depends:
       base            >= 4.8        && < 5
     , bytestring      >= 0.9        && < 0.11
-    , ghc-prim        >= 0.5.1.1    && < 0.6
+    , ghc-prim        >= 0.4        && < 0.6
     , hw-bits         >= 0.7.0.3    && < 0.8
     , hw-prim         >= 0.6.2.17   && < 0.7
     , mmap            >= 0.5        && < 0.6
@@ -80,7 +80,7 @@
     , vector          >= 0.12       && < 0.13
     , semigroups      >= 0.8.4      && < 0.19
     , transformers    >= 0.4        && < 0.6
-    , QuickCheck          >= 2.10       && < 2.12
+    , QuickCheck          >= 2.10       && < 2.13
     , directory           >= 1.2        && < 1.4
     , exceptions          >= 0.8        && < 0.11
     , hedgehog            >= 0.5        && < 0.7
@@ -104,7 +104,7 @@
   build-depends:
       base            >= 4.8        && < 5
     , bytestring      >= 0.9        && < 0.11
-    , ghc-prim        >= 0.5.1.1    && < 0.6
+    , ghc-prim        >= 0.4        && < 0.6
     , hw-bits         >= 0.7.0.3    && < 0.8
     , hw-prim         >= 0.6.2.17   && < 0.7
     , mmap            >= 0.5        && < 0.6
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
@@ -1,6 +1,7 @@
-{-# LANGUAGE CPP        #-}
-{-# LANGUAGE GADTs      #-}
-{-# LANGUAGE RankNTypes #-}
+{-# LANGUAGE CPP                 #-}
+{-# LANGUAGE GADTs               #-}
+{-# LANGUAGE RankNTypes          #-}
+{-# LANGUAGE ScopedTypeVariables #-}
 
 module HaskellWorks.Data.Streams.Stream where
 
@@ -123,3 +124,14 @@
           Skip    stateB1 -> Skip     (stateA0, Just (Stream stepB stateB1 Unknown))
           Done            -> Skip     (stateA0, Nothing)
 {-# INLINE concatMap #-}
+
+dupMap :: forall a b. (a -> b) -> (a -> b) -> Stream a -> Stream b
+dupMap f g (Stream stepA stateA _) = Stream (mkStepB stepA) (stateA, Nothing) Unknown
+  where mkStepB :: (s -> Step s a) -> (s, Maybe b) -> Step (s, Maybe b) b
+        mkStepB step (s, mw) = case mw of
+          Nothing -> case step s of
+            Yield a t -> Yield (f a) (t, Just (g a))
+            Skip t    -> Skip (t, Nothing)
+            Done      -> Done
+          Just w -> Yield w (s, Nothing)
+{-# INLINE dupMap #-}
