diff --git a/CHANGES.md b/CHANGES.md
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -1,6 +1,11 @@
 Changes
 =======
 
+Version 0.2.0.4
+---------------
+
+Update to build with ghc 8
+
 Version 0.2.0.3
 ---------------
 
diff --git a/Data/Generics/Traversable.hs b/Data/Generics/Traversable.hs
--- a/Data/Generics/Traversable.hs
+++ b/Data/Generics/Traversable.hs
@@ -1,4 +1,9 @@
-{-# LANGUAGE ConstraintKinds, KindSignatures, MultiParamTypeClasses, RankNTypes, UndecidableInstances, ImplicitParams, ScopedTypeVariables, FlexibleContexts, FlexibleInstances #-}
+{-# LANGUAGE ConstraintKinds, KindSignatures, MultiParamTypeClasses, RankNTypes, UndecidableInstances, ImplicitParams, ScopedTypeVariables, FlexibleContexts, FlexibleInstances, CPP #-}
+
+#if __GLASGOW_HASKELL__ >= 800
+{-# LANGUAGE UndecidableSuperClasses #-}
+#endif
+
 -- | All of the functions below work only on «interesting» subterms.
 -- It is up to the instance writer to decide which subterms are
 -- interesting and which subterms should count as immediate. This can
diff --git a/Data/Generics/Traversable/TH.hs b/Data/Generics/Traversable/TH.hs
--- a/Data/Generics/Traversable/TH.hs
+++ b/Data/Generics/Traversable/TH.hs
@@ -26,8 +26,13 @@
 
   return $
     case decl of
-      DataD    _ n ps cs _ -> (n, map varName ps, map conA cs)
-      NewtypeD _ n ps c  _ -> (n, map varName ps, [conA c])
+#if MIN_VERSION_template_haskell(2,11,0)
+      DataD    _ n ps _ cs _ -> (n, map varName ps, map conA cs)
+      NewtypeD _ n ps _ c  _ -> (n, map varName ps, [conA c])
+#else
+      DataD    _ n ps   cs _ -> (n, map varName ps, map conA cs)
+      NewtypeD _ n ps   c  _ -> (n, map varName ps, [conA c])
+#endif
       _ -> err ("not a data type declaration: " ++ show decl)
 
 -- | Return a lambda expression which implements 'gtraverse' for the given
diff --git a/traverse-with-class.cabal b/traverse-with-class.cabal
--- a/traverse-with-class.cabal
+++ b/traverse-with-class.cabal
@@ -2,7 +2,7 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                traverse-with-class
-version:             0.2.0.3
+version:             0.2.0.4
 synopsis:            Generic applicative traversals
 description:         This is a generic programming library in the spirit of
                      \"Scrap your boilerplate with class\", but with several
