Add the (=$=) operator for composing enumeratees.
diff --git a/lib/Data/Enumerator.hs b/lib/Data/Enumerator.hs
index 0a9f482..f35e780 100644
--- a/lib/Data/Enumerator.hs
+++ b/lib/Data/Enumerator.hs
@@ -34,6 +34,7 @@
 	, (<==<)
 	, (=$)
 	, ($=)
+	, (=$=)
 	
 	-- * Error handling
 	, throwError
@@ -307,6 +308,30 @@
      -> Enumerator ai m b
 ($=) = joinE
 
+-- | Composes two enumeratees.
+--
+-- Note that if the inner enumeratee yields left-over input, this will be
+-- discarded.
+--
+-- Example: converting bytes into lower-case text:
+--
+-- > import Data.ByteString
+-- > import Data.Text
+-- > import Data.Enumerator.List as EnumList
+-- > import Data.Enumerator.Text
+-- >
+-- > decodeAndLower :: Monad m => Enumeratee ByteString Text m b
+-- > decodeAndLower = decode utf8 =$= EnumList.map toLower
+--
+-- Since: 0.4.17
+(=$=) :: Monad m
+      => Enumeratee a1 a2 m (Step a3 m b)
+      -> Enumeratee a2 a3 m b
+      -> Enumeratee a1 a3 m b
+e1 =$= e2 = \s -> joinI (e1 $$ e2 s)
+
+infixl 1 =$=
+
 -- | Feeds outer input elements into the provided iteratee until it yields
 -- an inner input, passes that to the inner iteratee, and then loops.
 sequence :: Monad m => Iteratee ao m ai