diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,13 @@
+0.3.1.1 (2017-08-14)
+====================
+
+* GHC 8.2 compatibility.
+
+0.3.1 (2016-06-21)
+==================
+
+* GHC 8.0 compatibility.
+
 0.3 (2014-07-23)
 ================
 
diff --git a/ixset-typed.cabal b/ixset-typed.cabal
--- a/ixset-typed.cabal
+++ b/ixset-typed.cabal
@@ -1,5 +1,5 @@
 name:                ixset-typed
-version:             0.3.1
+version:             0.3.1.1
 synopsis:            Efficient relational queries on Haskell sets.
 description:
     This Haskell package provides a data structure of sets that are indexed
@@ -26,7 +26,7 @@
 build-type:          Simple
 cabal-version:       >= 1.10
 extra-source-files:  CHANGELOG.md
-tested-with:         GHC == 7.6.3, GHC == 7.8.4, GHC == 7.10.3, GHC == 8.0.1
+tested-with:         GHC == 7.6.3, GHC == 7.8.4, GHC == 7.10.3, GHC == 8.0.1, GHC == 8.2.1
 
 source-repository head
   type:              git
@@ -38,7 +38,7 @@
                      deepseq          >= 1.3 && < 2,
                      safecopy         >= 0.8 && < 1,
                      syb              >= 0.4 && < 1,
-                     template-haskell >= 2.8 && < 2.12
+                     template-haskell >= 2.8 && < 2.13
 
   hs-source-dirs:    src
   exposed-modules:
diff --git a/src/Data/IxSet/Typed.hs b/src/Data/IxSet/Typed.hs
--- a/src/Data/IxSet/Typed.hs
+++ b/src/Data/IxSet/Typed.hs
@@ -1,10 +1,13 @@
-{-# LANGUAGE UndecidableInstances, OverlappingInstances, FlexibleInstances,
+{-# LANGUAGE UndecidableInstances, FlexibleInstances,
              MultiParamTypeClasses, TemplateHaskell, RankNTypes,
              FunctionalDependencies, DeriveDataTypeable,
              GADTs, CPP, ScopedTypeVariables, KindSignatures,
              DataKinds, TypeOperators, StandaloneDeriving,
              TypeFamilies, ScopedTypeVariables, ConstraintKinds,
              FunctionalDependencies, FlexibleContexts, BangPatterns #-}
+#if __GLASGOW_HASKELL__ < 710
+{-# LANGUAGE OverlappingInstances #-}
+#endif
 #if __GLASGOW_HASKELL__ >= 800
 {-# LANGUAGE UndecidableSuperClasses #-}
 #endif
@@ -308,11 +311,19 @@
               -- ^ what to do with the other indices
         -> IxList ixs a -> IxList ixs a
 
-instance Ord ix => IsIndexOf ix (ix ': ixs) where
+instance
+#if __GLASGOW_HASKELL__ >= 710
+  {-# OVERLAPPING #-}
+#endif
+  Ord ix => IsIndexOf ix (ix ': ixs) where
   access (x ::: _xs)     = x
   mapAt fh ft (x ::: xs) = fh x ::: mapIxList ft xs
 
-instance IsIndexOf ix ixs => IsIndexOf ix (ix' ': ixs) where
+instance
+#if __GLASGOW_HASKELL__ >= 710
+  {-# OVERLAPPABLE #-}
+#endif
+  IsIndexOf ix ixs => IsIndexOf ix (ix' ': ixs) where
   access (_x ::: xs)     = access xs
   mapAt fh ft (x ::: xs) = ft x ::: mapAt fh ft xs
 
@@ -358,9 +369,11 @@
                -> IxList ixs a -> IxList ixs a -> IxList ixs a
 zipWithIxList' _ Nil        Nil        = Nil
 zipWithIxList' f (x ::: xs) (y ::: ys) = f x y !::: zipWithIxList' f xs ys
+#if __GLASGOW_HASKELL__ < 800
 zipWithIxList' _ _          _          = error "Data.IxSet.Typed.zipWithIxList: impossible"
   -- the line above is actually impossible by the types; it's just there
   -- to please avoid the warning resulting from the exhaustiveness check
+#endif
 
 --------------------------------------------------------------------------
 -- Various instances for 'IxSet'
@@ -554,7 +567,11 @@
              names = map tyVarBndrToName binders
 
              typeCon = List.foldl' appT (conT typeName) (map varT names)
+#if MIN_VERSION_template_haskell(2,10,0)
+             mkCtx c = List.foldl' appT (conT c)
+#else
              mkCtx = classP
+#endif
              dataCtxConQ = concat [[mkCtx ''Data [varT name], mkCtx ''Ord [varT name]] | name <- names]
              fullContext = do
                 dataCtxCon <- sequence dataCtxConQ
diff --git a/src/Data/IxSet/Typed/Ix.hs b/src/Data/IxSet/Typed/Ix.hs
--- a/src/Data/IxSet/Typed/Ix.hs
+++ b/src/Data/IxSet/Typed/Ix.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE UndecidableInstances, OverlappingInstances, FlexibleInstances,
+{-# LANGUAGE UndecidableInstances, FlexibleInstances,
              MultiParamTypeClasses, TemplateHaskell, PolymorphicComponents,
              DeriveDataTypeable,ExistentialQuantification, KindSignatures,
              StandaloneDeriving, GADTs #-}
