diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,8 +1,13 @@
 # Changelog
 
+#### 0.2.0.8
+
+* Fix compilation on GHC 8.
+
 #### 0.2.0.7
 
 * Allow `generic-deriving 1.8.*`
+* Allow `vector 0.11.*`
 
 #### 0.2.0.6
 
diff --git a/generic-aeson.cabal b/generic-aeson.cabal
--- a/generic-aeson.cabal
+++ b/generic-aeson.cabal
@@ -1,5 +1,5 @@
 name:                generic-aeson
-version:             0.2.0.7
+version:             0.2.0.8
 synopsis:            Derivation of Aeson instances using GHC generics.
 description:         Derivation of Aeson instances using GHC generics.
 author:              Silk
@@ -27,14 +27,14 @@
     Generics.Generic.Aeson.Util
     Generics.Generic.IsEnum
   build-depends:
-      base >= 4.4 && < 4.9
-    , aeson >= 0.6 && < 0.10
+      base >= 4.4 && < 4.10
+    , aeson >= 0.6 && < 0.12
     , attoparsec >= 0.11 && < 0.14
-    , generic-deriving >= 1.6 && < 1.9
+    , generic-deriving >= 1.6 && < 1.11
     , mtl >= 2.0 && < 2.3
     , tagged >= 0.2 && < 0.9
     , text >= 0.11 && < 1.3
     , unordered-containers == 0.2.*
-    , vector == 0.10.*
+    , vector >= 0.10 && < 0.12
   if impl(ghc < 7.6)
     build-depends: ghc-prim
diff --git a/src/Generics/Generic/Aeson.hs b/src/Generics/Generic/Aeson.hs
--- a/src/Generics/Generic/Aeson.hs
+++ b/src/Generics/Generic/Aeson.hs
@@ -2,12 +2,14 @@
     CPP
   , FlexibleContexts
   , FlexibleInstances
-  , OverlappingInstances
   , OverloadedStrings
   , ScopedTypeVariables
   , TupleSections
   , TypeOperators
   #-}
+#if __GLASGOW_HASKELL__ < 710
+{-# LANGUAGE OverlappingInstances #-}
+#endif
 -- | This module offers generic conversions to an from JSON 'Value's
 -- for data types with a 'Generic' instance.
 --
@@ -201,12 +203,21 @@
     where
       propName = selNameT set (undefined :: M1 S c f p)
 
+#if __GLASGOW_HASKELL__ >= 710
+instance {-# OVERLAPPING #-} (Selector c, ToJSON a) => GtoJson (M1 S c (K1 i (Maybe a))) where
+#else
 instance (Selector c, ToJSON a) => GtoJson (M1 S c (K1 i (Maybe a))) where
+#endif
   gtoJSONf set   _  _   (M1 (K1 n@Nothing)) = case selNameT set (undefined :: M1 S c f p) of
     Nothing -> Left [toJSON n]
     Just _  -> Right []
   gtoJSONf set mc enm (M1 (K1 (Just x))) = gtoJSONf set mc enm (M1 (K1 x) :: (M1 S c (K1 i a)) p)
+
+#if __GLASGOW_HASKELL__ >= 710
+instance {-# OVERLAPPING #-} (Selector c, FromJSON a) => GfromJson (M1 S c (K1 i (Maybe a))) where
+#else
 instance (Selector c, FromJSON a) => GfromJson (M1 S c (K1 i (Maybe a))) where
+#endif
   gparseJSONf set mc smf enm =
     do M1 (K1 x) <- parser
        return (M1 (K1 (Just x)))
diff --git a/src/Generics/Generic/Aeson/Util.hs b/src/Generics/Generic/Aeson/Util.hs
--- a/src/Generics/Generic/Aeson/Util.hs
+++ b/src/Generics/Generic/Aeson/Util.hs
@@ -3,7 +3,11 @@
   , OverloadedStrings
   , ScopedTypeVariables
   , TypeFamilies
+  , CPP
   #-}
+#if MIN_VERSION_base(4,9,0)
+{-# LANGUAGE DataKinds #-}
+#endif
 -- | Helper functions that can be reused by libraries interoperating with generic-aeson.
 module Generics.Generic.Aeson.Util
   ( formatLabel
@@ -24,10 +28,18 @@
 
 import Generics.Generic.IsEnum
 
+#if MIN_VERSION_base(4,9,0)
+conNameT :: forall (t :: * -> Meta -> (* -> *) -> * -> *) i c (f :: * -> *) p. Constructor c => Settings -> t i c f p -> Text
+#else
 conNameT :: forall c (t :: * -> (* -> *) -> * -> *) (f :: * -> *) a. Constructor c => Settings -> t c f a -> Text
+#endif
 conNameT set x = formatLabel set . T.pack . conName $ x
 
+#if MIN_VERSION_base(4,9,0)
+selNameT :: forall (t :: * -> Meta -> (* -> *) -> * -> *) i s (f :: * -> *) p. Selector s => Settings -> t i s f p -> Maybe Text
+#else
 selNameT :: forall s (t :: * -> (* -> *) -> * -> *) (f :: * -> *) a. Selector s => Settings -> t s f a -> Maybe Text
+#endif
 selNameT set x = case formatLabel set . T.pack . selName $ x of
   "" -> Nothing
   n  -> Just n
