diff --git a/CHANGELOG.markdown b/CHANGELOG.markdown
--- a/CHANGELOG.markdown
+++ b/CHANGELOG.markdown
@@ -1,3 +1,13 @@
+3.11
+----
+* Cleaned up warnings on modern GHC versions
+* Disabled some rules that weren't firing
+
+3.10.1
+------
+* `instance MonadZip LZ78`
+* `instance MonadZip RLE`
+
 3.10
 ----
 * Updated dependencies
diff --git a/README.markdown b/README.markdown
--- a/README.markdown
+++ b/README.markdown
@@ -1,7 +1,7 @@
 compressed
 ==========
 
-[![Build Status](https://secure.travis-ci.org/ekmett/compressed.png?branch=master)](http://travis-ci.org/ekmett/compressed)
+[![Hackage](https://img.shields.io/hackage/v/compressed.svg)](https://hackage.haskell.org/package/compressed) [![Build Status](https://secure.travis-ci.org/ekmett/compressed.png?branch=master)](http://travis-ci.org/ekmett/compressed)
 
 This package provides compressed data structures for LZ78 and run length encoding. Their primary benefit is that if you go
 to decompress them you can decompress them in an arbitrary `Monoid`.
diff --git a/compressed.cabal b/compressed.cabal
--- a/compressed.cabal
+++ b/compressed.cabal
@@ -1,6 +1,6 @@
 name:          compressed
 category:      Data, Compression, MapReduce
-version:       3.10
+version:       3.11
 license:       BSD3
 cabal-version: >= 1.6
 license-file:  LICENSE
@@ -11,7 +11,7 @@
 bug-reports:   http://github.com/ekmett/compressed/issues
 copyright:     Copyright (C) 2011 Edward A. Kmett
 synopsis:      Compressed containers and reducers
-description:   Compressed containers and reducers
+description:   Compressed containers and reducers.
 build-type:    Simple
 extra-source-files:
   .ghci
@@ -34,9 +34,9 @@
     hashable               >= 1.1.2.1  && < 1.3,
     unordered-containers   >= 0.2.1    && < 0.3,
     semigroups             >= 0.8.3.1  && < 1,
-    semigroupoids          >= 4        && < 5,
-    comonad                >= 4        && < 5,
-    pointed                >= 4        && < 5,
+    semigroupoids          >= 4        && < 6,
+    comonad                >= 4        && < 6,
+    pointed                >= 4        && < 6,
     keys                   >= 3.10     && < 4,
     reducers               >= 3.10     && < 4
 
diff --git a/src/Data/Compressed/Internal/LZ78.hs b/src/Data/Compressed/Internal/LZ78.hs
--- a/src/Data/Compressed/Internal/LZ78.hs
+++ b/src/Data/Compressed/Internal/LZ78.hs
@@ -43,7 +43,11 @@
     , entries
     ) where
 
+#if __GLASGOW_HASKELL__ < 710
 import Control.Applicative
+import Data.Traversable
+#endif
+import Control.Monad.Zip
 import qualified Data.Sequence as Seq
 import Data.Sequence ((|>))
 import qualified Data.Map as Map
@@ -54,7 +58,6 @@
 import Data.Function (on)
 import Data.Key as Key
 import Data.Foldable
-import Data.Traversable
 import Data.Semigroup
 import Data.Pointed
 import Text.Read
@@ -214,6 +217,10 @@
     Entry i a <- decode (entries as)
     Entry j b <- decode (entries (k a))
     return $ Entry (i,j) b
+
+instance MonadZip LZ78 where
+  mzipWith = Key.zipWith
+  munzip as = (fmap fst as, fmap snd as)
 
 instance Adjustable LZ78 where
   adjust f i = fmap extract . encode . adjust (Entry (-1) . f . extract) i . decode . entries
diff --git a/src/Data/Compressed/RunLengthEncoding.hs b/src/Data/Compressed/RunLengthEncoding.hs
--- a/src/Data/Compressed/RunLengthEncoding.hs
+++ b/src/Data/Compressed/RunLengthEncoding.hs
@@ -28,6 +28,7 @@
     , runLength
     , decode
     , encode
+    , encodeList
     , recode
     , toRuns
     , fromRuns
@@ -47,7 +48,10 @@
 import Data.Generator
 import Data.Pointed
 import Data.Key
+#if __GLASGOW_HASKELL__ < 710
 import Control.Applicative
+#endif
+import Control.Monad.Zip
 
 -- | A single run with a strict length
 data Run a = Run {-# UNPACK #-} !Int a deriving (Eq,Show)
@@ -176,6 +180,16 @@
   (>>) = (*>)
   RLE xs >>= f = RLE $ mconcat [ mconcat $ replicate n (getRLE (f a)) | Run n a <- toList xs ]
 
+instance MonadZip RLE where
+  munzip as = (fmap fst as, fmap snd as)
+  mzipWith f (RLE as0) (RLE bs0) = RLE $ F.fromList $ go (toList as0) (toList bs0) where
+    go [] _ = []
+    go _ [] = []
+    go (Run n a : as) (Run m b : bs) = case compare n m of
+      LT -> Run n (f a b) : go as (Run (m-n) b:bs)
+      EQ -> Run n (f a b) : go as bs
+      GT -> Run m (f a b) : go (Run (n-m) a:as) bs
+
 instance Eq a => Reducer a (RLE a) where
   unit = pure
   cons a (RLE r) = case viewl r of
@@ -251,8 +265,9 @@
 
 encode :: (Generator c, Eq (Elem c)) => c -> RLE (Elem c)
 encode = reduce
-{-# RULES "encode/recode"     encode = recode #-}
-{-# RULES "encode/encodeList" encode = encodeList #-}
+
+-- {-# RULES "encode/recode"     encode = recode #-}
+-- {-# RULES "encode/encodeList" encode = encodeList #-}
 
 decode :: RLE a -> [a]
 decode = reduce
