diff --git a/Data/Conduit/Combinators.hs b/Data/Conduit/Combinators.hs
--- a/Data/Conduit/Combinators.hs
+++ b/Data/Conduit/Combinators.hs
@@ -297,7 +297,7 @@
                       -> Producer m (Element mono)
 yieldManyC = ofoldMap yield
 {-# INLINE yieldManyC #-}
-STREAMING(yieldMany, x)
+STREAMING(yieldMany, yieldManyC, yieldManyS, x)
 
 -- | Generate a producer from a seed value.
 --
@@ -371,7 +371,7 @@
                   -> Producer m a
 repeatMC m = forever $ lift m >>= yield
 {-# INLINE repeatMC #-}
-STREAMING(repeatM, m)
+STREAMING(repeatM, repeatMC, repeatMS, m)
 
 -- | Repeatedly run the given action and yield all values it produces, until
 -- the provided predicate returns @False@.
@@ -389,7 +389,7 @@
     loop = do
         x <- lift m
         when (f x) $ yield x >> loop
-STREAMING(repeatWhileM, m f)
+STREAMING(repeatWhileM, repeatWhileMC, repeatWhileMS, m f)
 
 -- | Perform the given action n times, yielding each result.
 --
@@ -430,7 +430,7 @@
             then return ()
             else yield x >> loop
 {-# INLINEABLE sourceHandleC #-}
-STREAMING(sourceHandle, h)
+STREAMING(sourceHandle, sourceHandleC, sourceHandleS, h)
 
 -- | Open a @Handle@ using the given function and stream data from it.
 --
@@ -648,7 +648,7 @@
     await >>= maybe (return Nothing) loop
   where
     loop prev = await >>= maybe (return $ Just prev) (loop . f prev)
-STREAMING(foldl1, f)
+STREAMING(foldl1, foldl1C, foldl1S, f)
 
 -- | A strict left fold on a chunked stream, with no starting value.
 -- Returns 'Nothing' when the stream is empty.
@@ -687,7 +687,7 @@
           -> Consumer a m Bool
 allC f = fmap isNothing $ find (Prelude.not . f)
 {-# INLINE allC #-}
-STREAMING(all, f)
+STREAMING(all, allC, allS, f)
 
 -- | Check that all elements in the chunked stream return True.
 --
@@ -715,7 +715,7 @@
           -> Consumer a m Bool
 anyC = fmap isJust . find
 {-# INLINE anyC #-}
-STREAMING(any, f)
+STREAMING(any, anyC, anyS, f)
 
 -- | Check that at least one element in the chunked stream returns True.
 --
@@ -749,7 +749,12 @@
 -- Since 1.0.0
 andE :: (Monad m, MonoFoldable mono, Element mono ~ Bool)
      => Consumer mono m Bool
+#if __GLASGOW_HASKELL__ >= 706
 INLINE_RULE0(andE, allE id)
+#else
+andE = allE id
+{-# INLINE andE #-}
+#endif
 
 -- | Are any values in the stream True?
 --
@@ -770,7 +775,12 @@
 -- Since 1.0.0
 orE :: (Monad m, MonoFoldable mono, Element mono ~ Bool)
     => Consumer mono m Bool
+#if __GLASGOW_HASKELL__ >= 706
 INLINE_RULE0(orE, anyE id)
+#else
+orE = anyE id
+{-# INLINE orE #-}
+#endif
 
 -- | Are any values in the stream equal to the given value?
 --
@@ -829,7 +839,7 @@
                     => Consumer strict m lazy
 sinkLazyC = (fromChunks . ($ [])) <$> CL.fold (\front next -> front . (next:)) id
 {-# INLINE sinkLazyC #-}
-STREAMING0(sinkLazy)
+STREAMING0(sinkLazy, sinkLazyC, sinkLazyS)
 
 -- | Consume all values from the stream and return as a list. Note that this
 -- will pull all values into memory.
@@ -867,7 +877,7 @@
                     go maxSize (i + 1) mv
     go initSize 0 mv0
 {-# INLINEABLE sinkVectorC #-}
-STREAMING0(sinkVector)
+STREAMING0(sinkVector, sinkVectorC, sinkVectorS)
 
 -- | Sink incoming values into a vector, up until size @maxSize@.  Subsequent
 -- values will be left in the stream. If there are less than @maxSize@ values
@@ -894,7 +904,7 @@
                     go (i + 1)
     go 0
 {-# INLINEABLE sinkVectorNC #-}
-STREAMING(sinkVectorN, maxSize)
+STREAMING(sinkVectorN, sinkVectorNC, sinkVectorNS, maxSize)
 
 -- | Convert incoming values to a builder and fold together all builder values.
 --
@@ -925,7 +935,7 @@
                                   => Consumer a m lazy
 sinkLazyBuilderC = fmap builderToLazy sinkBuilder
 {-# INLINE sinkLazyBuilderC #-}
-STREAMING0(sinkLazyBuilder)
+STREAMING0(sinkLazyBuilder, sinkLazyBuilderC, sinkLazyBuilderS)
 
 -- | Consume and discard all remaining values in the stream.
 --
@@ -996,7 +1006,7 @@
     await >>= maybe (return Nothing) loop
   where
     loop prev = await >>= maybe (return $ Just prev) loop
-STREAMING0(last)
+STREAMING0(last, lastC, lastS)
 
 -- | Retrieve the last element in the chunked stream, if present.
 --
@@ -1008,7 +1018,7 @@
     awaitNonNull >>= maybe (return Nothing) (loop . NonNull.last)
   where
     loop prev = awaitNonNull >>= maybe (return $ Just prev) (loop . NonNull.last)
-STREAMING0(lastE)
+STREAMING0(lastE, lastEC, lastES)
 
 -- | Count how many values are in the stream.
 --
@@ -1143,7 +1153,7 @@
     loop = await >>= maybe (return Nothing) go
     go x = if f x then return (Just x) else loop
 {-# INLINE findC #-}
-STREAMING(find, f)
+STREAMING(find, findC, findS, f)
 
 -- | Apply the action to all values in the stream.
 --
@@ -1295,7 +1305,7 @@
                       -> Conduit a m (Element mono)
 concatMapC f = awaitForever (yieldMany . f)
 {-# INLINE concatMapC #-}
-STREAMING(concatMap, f)
+STREAMING(concatMap, concatMapC, concatMapS, f)
 
 -- | Apply the function to each element in the chunked stream, resulting in a
 -- foldable value (e.g., a list). Then yield each of the individual values in
@@ -1432,7 +1442,7 @@
 concat, concatC :: (Monad m, MonoFoldable mono)
                 => Conduit mono m (Element mono)
 concatC = awaitForever yieldMany
-STREAMING0(concat)
+STREAMING0(concat, concatC, concatS)
 
 -- | Keep only values in the stream passing a given predicate.
 --
@@ -1498,7 +1508,7 @@
             let seed' = f seed b
             seed' `seq` yield seed
             loop seed'
-STREAMING(scanl, f x)
+STREAMING(scanl, scanlC, scanlS, f x)
 
 -- | 'concatMap' with an accumulator.
 --
@@ -1518,7 +1528,7 @@
     await >>= omapM_ go
   where
     go y = yield y >> concatMap (\z -> [x, z])
-STREAMING(intersperse, x)
+STREAMING(intersperse, intersperseC, intersperseS, x)
 
 -- | Sliding window of values
 -- 1,2,3,4,5 with window size 2 gives
@@ -1542,7 +1552,7 @@
                      case m of
                        Nothing -> yield st
                        Just x -> go (n-1) (Seq.snoc st x)
-STREAMING(slidingWindow, sz)
+STREAMING(slidingWindow, slidingWindowC, slidingWindowS, sz)
 
 codeWith :: Monad m
          => Int
@@ -1685,7 +1695,7 @@
                         => (a -> m mono)
                         -> Conduit a m (Element mono)
 concatMapMC f = awaitForever (lift . f >=> yieldMany)
-STREAMING(concatMapM, f)
+STREAMING(concatMapM, concatMapMC, concatMapMS, f)
 
 -- | Keep only values in the stream passing a given monadic predicate.
 --
@@ -1701,7 +1711,7 @@
     go x = do
         b <- lift $ f x
         when b $ yield x
-STREAMING(filterM, f)
+STREAMING(filterM, filterMC, filterMS, f)
 
 -- | Keep only elements in the chunked stream passing a given monadic predicate.
 --
@@ -1740,7 +1750,7 @@
             seed' <- lift $ f seed b
             seed' `seq` yield seed
             loop seed'
-STREAMING(scanlM, f x)
+STREAMING(scanlM, scanlMC, scanlMS, f x)
 
 -- | 'concatMapM' with an accumulator.
 --
@@ -1824,7 +1834,12 @@
 --
 -- Since 1.0.0
 unlines :: (Monad m, Seq.IsSequence seq, Element seq ~ Char) => Conduit seq m seq
+#if __GLASGOW_HASKELL__ >= 706
 INLINE_RULE0(unlines, concatMap (:[Seq.singleton '\n']))
+#else
+unlines = concatMap (:[Seq.singleton '\n'])
+{-# INLINE unlines #-}
+#endif
 
 -- | Same as 'unlines', but operates on ASCII/binary data.
 --
@@ -1832,7 +1847,11 @@
 --
 -- Since 1.0.0
 unlinesAscii :: (Monad m, Seq.IsSequence seq, Element seq ~ Word8) => Conduit seq m seq
+#if __GLASGOW_HASKELL__ >= 706
 INLINE_RULE0(unlinesAscii, concatMap (:[Seq.singleton 10]))
+#else
+unlinesAscii = concatMap (:[Seq.singleton 10])
+#endif
 
 -- | Split a stream of arbitrarily-chunked data, based on a predicate
 -- on elements.  Elements that satisfy the predicate will cause chunks
@@ -1858,7 +1877,7 @@
             else yield x >> loop (Seq.drop 1 y)
       where
         (x, y) = Seq.break f t
-STREAMING(splitOnUnboundedE, f)
+STREAMING(splitOnUnboundedE, splitOnUnboundedEC, splitOnUnboundedES, f)
 
 -- | Convert a stream of arbitrarily-chunked textual data into a stream of data
 -- where each chunk represents a single line. Note that, if you have
@@ -1870,7 +1889,11 @@
 -- Since 1.0.0
 linesUnbounded :: (Monad m, Seq.IsSequence seq, Element seq ~ Char)
                => Conduit seq m seq
+#if __GLASGOW_HASKELL__ >= 706
 INLINE_RULE0(linesUnbounded, splitOnUnboundedE (== '\n'))
+#else
+linesUnbounded = splitOnUnboundedE (== '\n')
+#endif
 
 -- | Same as 'linesUnbounded', but for ASCII/binary data.
 --
@@ -1879,7 +1902,11 @@
 -- Since 1.0.0
 linesUnboundedAscii :: (Monad m, Seq.IsSequence seq, Element seq ~ Word8)
                     => Conduit seq m seq
+#if __GLASGOW_HASKELL__ >= 706
 INLINE_RULE0(linesUnboundedAscii, splitOnUnboundedE (== 10))
+#else
+linesUnboundedAscii = splitOnUnboundedE (== 10)
+#endif
 
 -- | Generally speaking, yielding values from inside a Conduit requires
 -- some allocation for constructors. This can introduce an overhead,
diff --git a/Data/Conduit/Combinators/Internal.hs b/Data/Conduit/Combinators/Internal.hs
--- a/Data/Conduit/Combinators/Internal.hs
+++ b/Data/Conduit/Combinators/Internal.hs
@@ -30,7 +30,7 @@
     seed <- lift mseed
     replicateM_ cnt (lift (f seed) >>= yield)
 {-# INLINE [1] initReplicateC #-}
-STREAMING(initReplicate, mseed f cnt)
+STREAMING(initReplicate, initReplicateC, initReplicateS, mseed f cnt)
 
 -- | Optimized version of initReplicate for the special case of connecting with
 -- a @Sink@.
@@ -73,7 +73,7 @@
     seed <- lift mseed
     forever $ lift (f seed) >>= yield
 {-# INLINE [1] initRepeatC #-}
-STREAMING(initRepeat, mseed f)
+STREAMING(initRepeat, initRepeatC, initRepeatS, mseed f)
 
 -- | Optimized version of initRepeat for the special case of connecting with
 -- a @Sink@.
diff --git a/conduit-combinators.cabal b/conduit-combinators.cabal
--- a/conduit-combinators.cabal
+++ b/conduit-combinators.cabal
@@ -1,5 +1,5 @@
 name:                conduit-combinators
-version:             0.3.0
+version:             0.3.0.1
 synopsis:            Commonly used conduit functions, for both chunked and unchunked data
 description:         Provides a replacement for Data.Conduit.List, as well as a convenient Conduit module.
 homepage:            https://github.com/fpco/conduit-combinators
diff --git a/fusion-macros.h b/fusion-macros.h
--- a/fusion-macros.h
+++ b/fusion-macros.h
@@ -8,16 +8,16 @@
     {-# INLINE [0] new #-}                                  ;\
     {-# RULES "inline new" forall vars. new vars = body #-}
 
-#define STREAMING0(name)                                 ;\
-    name = name/**/C                                     ;\
+#define STREAMING0(name, nameC, nameS)                   ;\
+    name = nameC                                         ;\
     {-# INLINE [0] name #-}                              ;\
     {-# RULES "unstream name"                             \
-      name = unstream (streamConduit name/**/C name/**/S) \
+      name = unstream (streamConduit nameC nameS)         \
       #-}
 
-#define STREAMING(name,vars)                                                ;\
-    name = name/**/C                                                        ;\
+#define STREAMING(name, nameC, nameS, vars)                                 ;\
+    name = nameC                                                            ;\
     {-# INLINE [0] name #-}                                                 ;\
     {-# RULES "unstream name" forall vars.                                   \
-      name vars = unstream (streamConduit (name/**/C vars) (name/**/S vars)) \
+      name vars = unstream (streamConduit (nameC vars) (nameS vars))         \
       #-}
