diff --git a/Streaming.hs b/Streaming.hs
--- a/Streaming.hs
+++ b/Streaming.hs
@@ -59,8 +59,6 @@
    liftA2,
    liftA3,
    void,
-   (&),
-   (-->)
    )
    where
 import Streaming.Internal 
@@ -70,9 +68,6 @@
 import Control.Applicative
 import Control.Monad.Trans
 import Data.Functor.Compose 
-import Data.Function ((&))
-infixl 6 -->
-(-->) = flip (.) 
 
 {- $stream
 
diff --git a/Streaming/Internal.hs b/Streaming/Internal.hs
--- a/Streaming/Internal.hs
+++ b/Streaming/Internal.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE RankNTypes, StandaloneDeriving,DeriveDataTypeable, BangPatterns #-}
-{-# LANGUAGE UndecidableInstances #-} -- for show, data instances
+{-# LANGUAGE UndecidableInstances, CPP #-} -- for show, data instances
 {-#LANGUAGE MultiParamTypeClasses, FunctionalDependencies #-}
 module Streaming.Internal (
     -- * The free monad transformer
@@ -57,7 +57,7 @@
 import Control.Monad.Trans
 import Control.Monad.Trans.Class
 import Control.Applicative
-import Data.Foldable ( Foldable )
+import Data.Foldable ( Foldable(..) )
 import Data.Traversable
 import Control.Monad.Morph
 import Data.Monoid
@@ -90,15 +90,17 @@
 data Stream f m r = Step !(f (Stream f m r))
                   | Delay (m (Stream f m r))
                   | Return r
+#if __GLASGOW_HASKELL__ >= 710
                   deriving (Typeable)
-
+#endif
 deriving instance (Show r, Show (m (Stream f m r))
                   , Show (f (Stream f m r))) => Show (Stream f m r)
 deriving instance (Eq r, Eq (m (Stream f m r))
                   , Eq (f (Stream f m r))) => Eq (Stream f m r)
+#if __GLASGOW_HASKELL__ >= 710
 deriving instance (Typeable f, Typeable m, Data r, Data (m (Stream f m r))
                   , Data (f (Stream f m r))) => Data (Stream f m r)
-
+#endif
 instance (Functor f, Monad m) => Functor (Stream f m) where
   fmap f = loop where
     loop stream = case stream of
diff --git a/Streaming/Prelude.hs b/Streaming/Prelude.hs
--- a/Streaming/Prelude.hs
+++ b/Streaming/Prelude.hs
@@ -150,7 +150,9 @@
 import Data.Data ( Data, Typeable )
 import Data.Functor.Identity
 import Control.Monad.Trans
-import qualified Prelude as Prelude                      
+import qualified Prelude as Prelude                
+import Data.Foldable (Foldable)
+import Data.Traversable (Traversable)
 import qualified Data.Foldable as Foldable
 import Text.Read (readMaybe)
 import Prelude hiding (map, mapM, mapM_, filter, drop, dropWhile, take, sum, product
@@ -255,7 +257,7 @@
 --
 -}
 
-concat :: (Monad m, Foldable f) => Stream (Of (f a)) m r -> Stream (Of a) m r
+concat :: (Monad m, Foldable.Foldable f) => Stream (Of (f a)) m r -> Stream (Of a) m r
 concat str = for str each
 {-# INLINE concat #-}
 
@@ -689,7 +691,7 @@
 '2'
 
 -}
-mapFoldable :: (Monad m, Foldable t) => (a -> t b) -> Stream (Of a) m r -> Stream (Of b) m r
+mapFoldable :: (Monad m, Foldable.Foldable t) => (a -> t b) -> Stream (Of a) m r -> Stream (Of b) m r
 mapFoldable f str = for str (\a -> each (f a)) -- as in pipes
 
 -- | Replace each element of a stream with the result of a monadic action
diff --git a/streaming.cabal b/streaming.cabal
--- a/streaming.cabal
+++ b/streaming.cabal
@@ -1,5 +1,5 @@
 name:                streaming
-version:             0.1.0.9
+version:             0.1.0.10
 cabal-version:       >=1.10
 build-type:          Simple
 synopsis:            A free monad transformer optimized for streaming applications.
@@ -61,13 +61,13 @@
                        Streaming.Internal
 
     -- other-modules:       
-  other-extensions:    LambdaCase, RankNTypes, EmptyCase, 
+  other-extensions:    RankNTypes, CPP,
                        StandaloneDeriving, FlexibleContexts, 
                        DeriveDataTypeable, DeriveFoldable, 
                        DeriveFunctor, DeriveTraversable, 
                        UndecidableInstances
   
-  build-depends:       base >=4.7 && <4.9
+  build-depends:       base >=4.6 && <4.9
                      , mtl >=2.1 && <2.3
                      , mmorph >=1.0 && <1.2
                      , transformers >=0.3 && <0.5
