diff --git a/Data/ByteString/Streaming/Internal.hs b/Data/ByteString/Streaming/Internal.hs
--- a/Data/ByteString/Streaming/Internal.hs
+++ b/Data/ByteString/Streaming/Internal.hs
@@ -222,7 +222,7 @@
 materialize :: (forall x . (r -> x) -> (S.ByteString -> x -> x) -> (m x -> x) -> x)
             -> ByteString m r
 materialize phi = phi Empty Chunk Go
-{-#INLINE materialize #-}
+{-#INLINE[0] materialize #-}
 
 -- | Resolve a succession of chunks into its Church encoding; this is
 -- not a safe operation; it is equivalent to exposing the constructors
@@ -235,7 +235,11 @@
      Empty r    -> nil r
      Chunk b bs -> cons b (loop SPEC bs )
      Go ms -> mwrap (liftM (loop SPEC) ms)
-{-# INLINABLE dematerialize #-}
+{-# INLINE [1] dematerialize #-}
+
+{-# RULES
+  "dematerialize/materialize" forall (phi :: forall b . (r -> b) -> (S.ByteString -> b -> b) -> (m b -> b)  -> b). dematerialize (materialize phi) = phi ;
+  #-}
 ------------------------------------------------------------------------
 
 -- The representation uses lists of packed chunks. When we have to convert from
diff --git a/streaming-bytestring.cabal b/streaming-bytestring.cabal
--- a/streaming-bytestring.cabal
+++ b/streaming-bytestring.cabal
@@ -1,5 +1,5 @@
 name:                streaming-bytestring
-version:             0.1.4.5
+version:             0.1.4.6
 synopsis:            effectful byte steams, or: bytestring io done right.
 
 description:         This is an implementation of effectful, memory-constrained 
@@ -184,7 +184,7 @@
                      , mmorph >=1.0 && <1.2
                      , transformers >=0.3 && <0.6
                      , transformers-base
-                     , streaming >=  0.1.4.0 && < 0.1.4.5
+                     , streaming >=  0.1.4.0 && < 0.1.4.8
                      , resourcet
                      , exceptions
   if impl(ghc < 7.8) 
