diff --git a/CHANGELOG.markdown b/CHANGELOG.markdown
--- a/CHANGELOG.markdown
+++ b/CHANGELOG.markdown
@@ -1,3 +1,7 @@
+0.7
+---
+* Build warning-free on GHC 7.10 and GHC 8.0-rc1
+
 0.6
 ---
 * Fixed the `dfs` `enterVertex` and `exitVertex` order, they were wrong before.
diff --git a/README.markdown b/README.markdown
--- a/README.markdown
+++ b/README.markdown
@@ -1,7 +1,7 @@
 graphs
 ==========
 
-[![Build Status](https://secure.travis-ci.org/ekmett/graphs.png?branch=master)](http://travis-ci.org/ekmett/graphs)
+[![Hackage](https://img.shields.io/hackage/v/graphs.svg)](https://hackage.haskell.org/package/graphs) [![Build Status](https://secure.travis-ci.org/ekmett/graphs.png?branch=master)](http://travis-ci.org/ekmett/graphs)
 
 This provides a "not-very-Haskelly" API for calculating traversals of graphs that may be too large to fit into memory.
 
diff --git a/graphs.cabal b/graphs.cabal
--- a/graphs.cabal
+++ b/graphs.cabal
@@ -1,6 +1,6 @@
 name:          graphs
 category:      Algorithms, Data Structures, Graphs
-version:       0.6.0.1
+version:       0.7
 license:       BSD3
 cabal-version: >= 1.6
 license-file:  LICENSE
@@ -11,7 +11,70 @@
 bug-reports:   http://github.com/ekmett/graphs/issues
 copyright:     Copyright (C) 2011-2013 Edward A. Kmett
 synopsis:      A simple monadic graph library
-description:   A simple monadic graph library
+description:
+  A \"not-very-Haskelly\" API for calculating traversals of graphs that may be too large to fit into memory.
+  The algorithms included are inspired by the visitor concept of the
+  <http://www.boost.org/doc/libs/1_57_0/libs/graph/doc/visitor_concepts.html Boost Graph Library>.
+  .
+  Here is a very simple example of how we might execute a depth-first-search. In this case the visitor simply collects the edges and vertices in the order that the corresponding functions get called. After the necessary imports,
+  .
+  > import Data.Array
+  > import Data.Monoid
+  > import Data.Graph.AdjacencyList
+  > import Data.Graph.Algorithm
+  > import Data.Graph.Algorithm.DepthFirstSearch
+  . 
+  create an adjacency list where the vertices are labeled with integers.
+  .
+  > graph :: Array Int [Int]
+  > graph = array (0, 3) [(0, [1,2]), (1, [3]), (2, [3]), (3, [])]
+  .
+  <<http://i.imgur.com/Pod1SH0.png>>
+  .
+  We need a data structure that instantiates `Monoid` to combine the results of
+  our visitor functions.
+  .
+  @
+    data Orderings = Orderings
+      &#32;&#32;&#123;&#32;&#32;enterV :: [Int]
+      &#32;&#32;,  enterE :: [(Int, Int)]
+      &#32;&#32;,  gray   :: [(Int, Int)]
+      &#32;&#32;,  exitV  :: [Int]
+      &#32;&#32;,  black  :: [(Int, Int)]
+      &#32;&#32;&#125;&#32;deriving Show
+    . 
+    instance Monoid Orderings where
+      &#32;mempty = Orderings [] [] [] [] []
+      &#32;mappend (Orderings a1 a2 a3 a4 a5)(Orderings b1 b2 b3 b4 b5) =
+      &#32;&#32;Orderings (a1 ++ b1) (a2 ++ b2) (a3 ++ b3) (a4 ++ b4) (a5 ++ b5)
+  @
+  . 
+  The `dfs` function's first argument is of type `GraphSearch` which is
+  a visitor containing the functions to be run at various times during the search.
+  The second argument is the starting vertex for the search.
+  .
+  @
+    orderings :: GraphSearch (AdjacencyList Int) Orderings
+    orderings = GraphSearch
+      &#32;&#32;(\v -> return $ mempty &#123;enterV = [v]&#125;
+      &#32;&#32;(\e -> return $ mempty &#123;enterE = [e]&#125;
+      &#32;&#32;(\e -> return $ mempty &#123;gray   = [e]&#125;
+      &#32;&#32;(\v -> return $ mempty &#123;exitV  = [v]&#125;
+      &#32;&#32;(\e -> return $ mempty &#123;black  = [e]&#125;
+  @
+  .   
+  Finally `runAdjacencylist` unwraps the function in the `Adjacencylist` newtype and runs
+  it on `graph`.
+  .
+  > dfsTest :: Orderings
+  > dfsTest = runAdjacencyList (dfs orderings 0) graph
+  .
+  Running `dfsTest` in ghci will yield:
+  .
+  @
+    Orderings &#123;enterV = [0,2,3,1], enterE = [(0,2),(2,3),(0,1)], gray = [], exitV = [3,2,1,0], black = [(1,3)]&#125;
+  @
+
 build-type:    Simple
 
 extra-source-files: .travis.yml CHANGELOG.markdown README.markdown
@@ -28,7 +91,8 @@
   build-depends:
     base         >= 4       && < 5,
     array        >= 0.3     && < 0.7,
-    transformers >= 0.2.2   && < 0.5,
+    transformers >= 0.2.2   && < 0.6,
+    transformers-compat >= 0.3 && < 1,
     containers   >= 0.3     && < 0.6,
     void         >= 0.5.5.1 && < 1
 
@@ -49,5 +113,10 @@
   other-modules:
     Data.Graph.Internal.Color
 
-  ghc-options: -Wall
+  ghc-options: -Wall -fno-warn-deprecations
+
+  -- hack around the buggy unused matches check for class associated types in ghc 8 rc1
+  if impl(ghc >= 8)
+    ghc-options: -fno-warn-unused-matches
+
   hs-source-dirs: src
diff --git a/src/Data/Graph/AdjacencyList.hs b/src/Data/Graph/AdjacencyList.hs
--- a/src/Data/Graph/AdjacencyList.hs
+++ b/src/Data/Graph/AdjacencyList.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE TypeFamilies, FlexibleContexts #-}
+{-# LANGUAGE CPP, TypeFamilies, FlexibleContexts #-}
 -----------------------------------------------------------------------------
 -- |
 -- Module      :  Data.Graph.Adjacency.List
@@ -17,7 +17,9 @@
   , ask
   ) where
 
+#if __GLASGOW_HASKELL__ < 710
 import Control.Applicative
+#endif
 import Data.Ix
 import Data.Array
 import Data.Graph.PropertyMap
diff --git a/src/Data/Graph/AdjacencyMatrix.hs b/src/Data/Graph/AdjacencyMatrix.hs
--- a/src/Data/Graph/AdjacencyMatrix.hs
+++ b/src/Data/Graph/AdjacencyMatrix.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE TypeFamilies, FlexibleContexts #-}
+{-# LANGUAGE CPP, TypeFamilies, FlexibleContexts #-}
 -----------------------------------------------------------------------------
 -- |
 -- Module      :  Data.Graph.Adjacency.Matrix
@@ -17,7 +17,9 @@
   , ask
   ) where
 
+#if __GLASGOW_HASKELL__ < 710
 import Control.Applicative
+#endif
 import Data.Ix
 import Data.Array.IArray
 import Data.Graph.PropertyMap
diff --git a/src/Data/Graph/Algorithm.hs b/src/Data/Graph/Algorithm.hs
--- a/src/Data/Graph/Algorithm.hs
+++ b/src/Data/Graph/Algorithm.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE CPP, TypeFamilies #-}
 -----------------------------------------------------------------------------
 -- |
 -- Module      :  Data.Graph.Algorithm
@@ -16,9 +16,11 @@
   ( GraphSearch(..)
   ) where
 
-import Control.Applicative
 import Control.Monad
+#if __GLASGOW_HASKELL__ < 710
+import Control.Applicative
 import Data.Monoid
+#endif
 
 import Data.Graph.Class
 
diff --git a/src/Data/Graph/Algorithm/BreadthFirstSearch.hs b/src/Data/Graph/Algorithm/BreadthFirstSearch.hs
--- a/src/Data/Graph/Algorithm/BreadthFirstSearch.hs
+++ b/src/Data/Graph/Algorithm/BreadthFirstSearch.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE CPP, TypeFamilies #-}
 -----------------------------------------------------------------------------
 -- |
 -- Module      :  Data.Graph.Algorithm.BreadthFirstSearch
@@ -20,7 +20,9 @@
 import Control.Monad.Trans.Class
 import Control.Monad.Trans.State.Strict
 import Data.Foldable
+#if __GLASGOW_HASKELL__ < 710
 import Data.Monoid
+#endif
 import Data.Sequence
 
 import Data.Graph.Algorithm
diff --git a/src/Data/Graph/Algorithm/DepthFirstSearch.hs b/src/Data/Graph/Algorithm/DepthFirstSearch.hs
--- a/src/Data/Graph/Algorithm/DepthFirstSearch.hs
+++ b/src/Data/Graph/Algorithm/DepthFirstSearch.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE CPP, TypeFamilies #-}
 -----------------------------------------------------------------------------
 -- |
 -- Module      :  Data.Graph.Algorithm.DepthFirstSearch
@@ -20,7 +20,9 @@
 import Control.Monad.Trans.Class
 import Control.Monad.Trans.State.Strict
 import Data.Foldable
+#if __GLASGOW_HASKELL__ < 710
 import Data.Monoid
+#endif
 
 import Data.Graph.Algorithm
 import Data.Graph.Class
diff --git a/src/Data/Graph/Class.hs b/src/Data/Graph/Class.hs
--- a/src/Data/Graph/Class.hs
+++ b/src/Data/Graph/Class.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE TypeFamilies, FlexibleContexts #-}
+{-# LANGUAGE CPP, TypeFamilies, FlexibleContexts #-}
 -----------------------------------------------------------------------------
 -- |
 -- Module      :  Data.Graph.Class
@@ -32,7 +32,9 @@
 import Control.Monad.Trans.Reader
 import Control.Monad.Trans.Class
 import Data.Functor.Identity
+#if __GLASGOW_HASKELL__ < 710
 import Data.Monoid
+#endif
 import Data.Graph.PropertyMap
 import Data.Void
 
diff --git a/src/Data/Graph/Class/AdjacencyList.hs b/src/Data/Graph/Class/AdjacencyList.hs
--- a/src/Data/Graph/Class/AdjacencyList.hs
+++ b/src/Data/Graph/Class/AdjacencyList.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE TypeFamilies, FlexibleInstances #-}
+{-# LANGUAGE CPP, TypeFamilies, FlexibleInstances #-}
 -----------------------------------------------------------------------------
 -- |
 -- Module      :  Data.Graph.Class.AdjacencyList
@@ -30,7 +30,9 @@
 import Control.Monad.Trans.Error
 import Control.Monad.Trans.Reader
 import Data.Functor.Identity
+#if __GLASGOW_HASKELL__ < 710
 import Data.Monoid
+#endif
 import Data.Graph.Class
 
 defaultOutEdges :: AdjacencyListGraph g => Vertex g -> g [(Vertex g, Vertex g)]
diff --git a/src/Data/Graph/Class/AdjacencyMatrix.hs b/src/Data/Graph/Class/AdjacencyMatrix.hs
--- a/src/Data/Graph/Class/AdjacencyMatrix.hs
+++ b/src/Data/Graph/Class/AdjacencyMatrix.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE TypeFamilies, FlexibleInstances #-}
+{-# LANGUAGE CPP, TypeFamilies, FlexibleInstances #-}
 -----------------------------------------------------------------------------
 -- |
 -- Module      :  Data.Graph.Class.AdjacencyMatrix
@@ -28,7 +28,9 @@
 import Control.Monad.Trans.Error
 import Control.Monad.Trans.Class
 import Data.Functor.Identity
+#if __GLASGOW_HASKELL__ < 710
 import Data.Monoid
+#endif
 import Data.Graph.Class
 
 class Graph g => AdjacencyMatrixGraph g where
diff --git a/src/Data/Graph/Class/Bidirectional.hs b/src/Data/Graph/Class/Bidirectional.hs
--- a/src/Data/Graph/Class/Bidirectional.hs
+++ b/src/Data/Graph/Class/Bidirectional.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE TypeFamilies, FlexibleInstances #-}
+{-# LANGUAGE CPP, TypeFamilies, FlexibleInstances #-}
 -----------------------------------------------------------------------------
 -- |
 -- Module      :  Data.Graph.Class.Bidirectional
@@ -29,7 +29,9 @@
 import Control.Monad.Trans.Maybe
 import Control.Monad.Trans.Error
 import Data.Functor.Identity
+#if __GLASGOW_HASKELL__ < 710
 import Data.Monoid
+#endif
 import Data.Graph.Class.AdjacencyList
 
 class AdjacencyListGraph g => BidirectionalGraph g where
diff --git a/src/Data/Graph/Class/EdgeEnumerable.hs b/src/Data/Graph/Class/EdgeEnumerable.hs
--- a/src/Data/Graph/Class/EdgeEnumerable.hs
+++ b/src/Data/Graph/Class/EdgeEnumerable.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE TypeFamilies, FlexibleContexts #-}
+{-# LANGUAGE CPP, TypeFamilies, FlexibleContexts #-}
 -----------------------------------------------------------------------------
 -- |
 -- Module      :  Data.Graph.Class.EdgeEnumerable
@@ -28,7 +28,9 @@
 import Control.Monad.Trans.Error
 import Control.Monad.Trans.Class
 import Data.Functor.Identity
+#if __GLASGOW_HASKELL__ < 710
 import Data.Monoid
+#endif
 import Data.Graph.Class
 
 class Graph g => EdgeEnumerableGraph g where
diff --git a/src/Data/Graph/Class/VertexEnumerable.hs b/src/Data/Graph/Class/VertexEnumerable.hs
--- a/src/Data/Graph/Class/VertexEnumerable.hs
+++ b/src/Data/Graph/Class/VertexEnumerable.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE TypeFamilies, FlexibleContexts #-}
+{-# LANGUAGE CPP, TypeFamilies, FlexibleContexts #-}
 -----------------------------------------------------------------------------
 -- |
 -- Module      :  Data.Graph.Class.VertexEnumerable
@@ -27,7 +27,9 @@
 import Control.Monad.Trans.Error
 import Control.Monad.Trans.Class
 import Control.Monad.Trans.Reader
+#if __GLASGOW_HASKELL__ < 710
 import Data.Monoid
+#endif
 import Data.Graph.Class
 import Data.Functor.Identity
 
diff --git a/src/Data/Graph/Dual.hs b/src/Data/Graph/Dual.hs
--- a/src/Data/Graph/Dual.hs
+++ b/src/Data/Graph/Dual.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE TypeFamilies, FlexibleContexts #-}
+{-# LANGUAGE CPP, TypeFamilies, FlexibleContexts #-}
 -----------------------------------------------------------------------------
 -- |
 -- Module      :  Data.Graph.Dual
@@ -15,7 +15,9 @@
   ( Dual(..)
   ) where
 
+#if __GLASGOW_HASKELL__ < 710
 import Control.Applicative
+#endif
 import Control.Monad
 import Control.Monad.Trans.Class
 import Data.Graph.PropertyMap
