diff --git a/ChangeLog b/ChangeLog
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+0.8.7.1
+- Build on GHC 9.2
+- Drop support for GHC < 8.2
+
 0.8.7:
 - Compatibility with template-haskell shipped with GHC 9.0
 
diff --git a/haskell-src-meta.cabal b/haskell-src-meta.cabal
--- a/haskell-src-meta.cabal
+++ b/haskell-src-meta.cabal
@@ -1,5 +1,5 @@
 name:               haskell-src-meta
-version:            0.8.7
+version:            0.8.7.1
 cabal-version:      >= 1.10
 build-type:         Simple
 license:            BSD3
@@ -8,8 +8,8 @@
 author:             Matt Morrow
 copyright:          (c) Matt Morrow
 maintainer:         danburton.email@gmail.com
-bug-reports:        https://github.com/DanBurton/haskell-src-meta/issues
-tested-with:        GHC == 7.10.3, GHC == 8.0.2, GHC == 8.2.2, GHC == 8.4.4, GHC == 8.6.5, GHC == 8.8.1
+bug-reports:        https://github.com/haskell-party/haskell-src-meta/issues
+tested-with:        GHC == 8.2.2, GHC == 8.4.4, GHC == 8.6.5, GHC == 8.8.4, GHC == 8.10.7, GHC == 9.0.2, GHC == 9.2.1
 synopsis:           Parse source to template-haskell abstract syntax.
 description:        The translation from haskell-src-exts abstract syntax
                     to template-haskell abstract syntax isn't 100% complete yet.
@@ -18,21 +18,19 @@
 
 library
   default-language: Haskell2010
-  build-depends:   base >= 4.8 && < 5,
+  build-depends:   base >= 4.10 && < 5,
                    haskell-src-exts >= 1.18 && < 1.24,
                    pretty >= 1.0 && < 1.2,
                    syb >= 0.1 && < 0.8,
-                   template-haskell >= 2.10 && < 2.18,
+                   template-haskell >= 2.12 && < 2.19,
                    th-orphans >= 0.12 && < 0.14
 
-  if impl(ghc < 7.8)
-    build-depends: safe <= 0.3.9
-
   hs-source-dirs:  src
   exposed-modules: Language.Haskell.Meta
                    Language.Haskell.Meta.Parse
                    Language.Haskell.Meta.Syntax.Translate
                    Language.Haskell.Meta.Utils
+  other-modules:   Language.Haskell.Meta.THCompat
 
 test-suite unit
   default-language: Haskell2010
@@ -42,20 +40,15 @@
 
   build-depends:
     HUnit                >= 1.2,
-    base                 >= 4.5,
+    base                 >= 4.10,
     haskell-src-exts     >= 1.17,
     haskell-src-meta,
     pretty               >= 1.0,
-    template-haskell     >= 2.10,
+    template-haskell     >= 2.12,
     tasty,
     tasty-hunit
 
-  -- this is needed to access Control.Monad.Fail on GHCs before 8.0
-  if !impl(ghc >= 8.0)
-    Build-Depends:
-      fail == 4.9.*
 
-
 test-suite splices
   default-language: Haskell2010
   type:             exitcode-stdio-1.0
@@ -82,12 +75,7 @@
     syb,
     template-haskell
 
-  -- this is needed to access Control.Monad.Fail on GHCs before 8.0
-  if !impl(ghc >= 8.0)
-    Build-Depends:
-      fail == 4.9.*
 
-
   other-modules:
     BF,
     Hs,
@@ -96,4 +84,4 @@
 
 source-repository head
   type:     git
-  location: git://github.com/danburton/haskell-src-meta.git
+  location: git://github.com/haskell-party/haskell-src-meta.git
diff --git a/src/Language/Haskell/Meta/Parse.hs b/src/Language/Haskell/Meta/Parse.hs
--- a/src/Language/Haskell/Meta/Parse.hs
+++ b/src/Language/Haskell/Meta/Parse.hs
@@ -29,11 +29,6 @@
   emptyHsModule
  ) where
 
-#if MIN_VERSION_template_haskell(2,11,0)
-import Language.Haskell.TH.Syntax hiding (Extension (..))
-#else
-import Language.Haskell.TH.Syntax
-#endif
 import           Language.Haskell.Exts.Extension
 import           Language.Haskell.Exts.Parser           hiding
   (parseExp, parsePat, parseType)
@@ -41,6 +36,7 @@
 import qualified Language.Haskell.Exts.SrcLoc           as Hs
 import qualified Language.Haskell.Exts.Syntax           as Hs
 import           Language.Haskell.Meta.Syntax.Translate
+import           Language.Haskell.TH.Syntax             hiding (Extension (..))
 
 -----------------------------------------------------------------------------
 
diff --git a/src/Language/Haskell/Meta/Syntax/Translate.hs b/src/Language/Haskell/Meta/Syntax/Translate.hs
--- a/src/Language/Haskell/Meta/Syntax/Translate.hs
+++ b/src/Language/Haskell/Meta/Syntax/Translate.hs
@@ -14,23 +14,20 @@
 
 module Language.Haskell.Meta.Syntax.Translate (
     module Language.Haskell.Meta.Syntax.Translate
+  , TyVarBndr_
 ) where
 
-import qualified Data.Char                    as Char
-import qualified Data.List                    as List
-import qualified Language.Haskell.Exts.SrcLoc as Exts.SrcLoc
-import qualified Language.Haskell.Exts.Syntax as Exts
-import qualified Language.Haskell.TH.Lib      as TH
-import qualified Language.Haskell.TH.Syntax   as TH
+import qualified Data.Char                      as Char
+import qualified Data.List                      as List
+import qualified Language.Haskell.Exts.SrcLoc   as Exts.SrcLoc
+import qualified Language.Haskell.Exts.Syntax   as Exts
+import           Language.Haskell.Meta.THCompat (TyVarBndr_)
+import qualified Language.Haskell.Meta.THCompat as Compat
+import qualified Language.Haskell.TH.Lib        as TH
+import qualified Language.Haskell.TH.Syntax     as TH
 
 -----------------------------------------------------------------------------
 
-#if MIN_VERSION_template_haskell(2,17,0)
-type TyVarBndr_ flag = TH.TyVarBndr flag
-#else
-type TyVarBndr_ flag = TH.TyVarBndr
-#endif
-
 class ToName a where toName :: a -> TH.Name
 class ToNames a where toNames :: a -> [TH.Name]
 class ToLit  a where toLit  :: a -> TH.Lit
@@ -45,17 +42,9 @@
 class ToPred a where toPred :: a -> TH.Pred
 class ToTyVars a where toTyVars :: a -> [TyVarBndr_ ()]
 class ToMaybeKind a where toMaybeKind :: a -> Maybe TH.Kind
-#if MIN_VERSION_template_haskell(2,11,0)
 class ToInjectivityAnn a where toInjectivityAnn :: a -> TH.InjectivityAnn
-#endif
 
-#if MIN_VERSION_template_haskell(2,12,0)
 type DerivClause = TH.DerivClause
-#elif MIN_VERSION_template_haskell(2,11,0)
-type DerivClause = TH.Pred
-#else
-type DerivClause = TH.Name
-#endif
 
 class ToDerivClauses a where toDerivClauses :: a -> [DerivClause]
 
@@ -208,7 +197,6 @@
 
 -- * ToPat HsPat
 
-
 instance ToPat (Exts.Pat l) where
   toPat (Exts.PVar _ n)
     = TH.VarP (toName n)
@@ -222,7 +210,7 @@
     TH.DoublePrimL r'' -> TH.DoublePrimL (negate r'')
     _                  -> nonsense "toPat" "negating wrong kind of literal" l
   toPat (Exts.PInfixApp _ p n q) = TH.UInfixP (toPat p) (toName n) (toPat q)
-  toPat (Exts.PApp _ n ps) = TH.ConP (toName n) (fmap toPat ps)
+  toPat (Exts.PApp _ n ps) = Compat.conP (toName n) (fmap toPat ps)
   toPat (Exts.PTuple _ Exts.Boxed ps) = TH.TupP (fmap toPat ps)
   toPat (Exts.PTuple _ Exts.Unboxed ps) = TH.UnboxedTupP (fmap toPat ps)
   toPat (Exts.PList _ ps) = TH.ListP (fmap toPat ps)
@@ -273,11 +261,7 @@
   toExp (Exts.Con _ n)                 = TH.ConE (toName n)
   toExp (Exts.Lit _ l)                 = TH.LitE (toLit l)
   toExp (Exts.InfixApp _ e o f)        = TH.UInfixE (toExp e) (toExp o) (toExp f)
-#if MIN_VERSION_template_haskell(2,12,0)
   toExp (Exts.App _ e (Exts.TypeApp _ t)) = TH.AppTypeE (toExp e) (toType t)
-#else
-  toExp (Exts.App _ _ e@Exts.TypeApp{}) = noTHyet "toExp" "2.12.0" e
-#endif
   toExp (Exts.App _ e f)               = TH.AppE (toExp e) (toExp f)
   toExp (Exts.NegApp _ e)              = TH.AppE (TH.VarE 'negate) (toExp e)
   toExp (Exts.Lambda _ ps e)           = TH.LamE (fmap toPat ps) (toExp e)
@@ -357,13 +341,13 @@
 instance ToName TH.Name where
   toName = id
 
-instance ToName (TyVarBndr_ flag) where
+instance ToName (Compat.TyVarBndr_ flag) where
 #if MIN_VERSION_template_haskell(2,17,0)
   toName (TH.PlainTV n _)    = n
   toName (TH.KindedTV n _ _) = n
 #else
-  toName (TH.PlainTV n)    = n
-  toName (TH.KindedTV n _) = n
+  toName (TH.PlainTV n)      = n
+  toName (TH.KindedTV n _)   = n
 #endif
 
 #if !MIN_VERSION_haskell_src_exts(1,21,0)
@@ -402,7 +386,7 @@
 #if MIN_VERSION_template_haskell(2,17,0)
 toTyVarSpec :: TyVarBndr_ () -> TH.TyVarBndrSpec
 toTyVarSpec (TH.KindedTV n () k) = TH.KindedTV n TH.SpecifiedSpec k
-toTyVarSpec (TH.PlainTV n ()) = TH.PlainTV n TH.SpecifiedSpec
+toTyVarSpec (TH.PlainTV n ())    = TH.PlainTV n TH.SpecifiedSpec
 #else
 toTyVarSpec :: TyVarBndr_ flag -> TyVarBndr_ flag
 toTyVarSpec = id
@@ -451,7 +435,6 @@
   -- toType (Exts.TyInfix _ _ (Exts.PromotedName _ _) _)
 
 toStrictType :: Exts.Type l -> TH.StrictType
-#if MIN_VERSION_template_haskell(2,11,0)
 toStrictType (Exts.TyBang _ s u t) = (TH.Bang (toUnpack u) (toStrict s), toType t)
     where
       toStrict (Exts.LazyTy _)        = TH.SourceLazy
@@ -461,19 +444,6 @@
       toUnpack (Exts.NoUnpack _)       = TH.SourceNoUnpack
       toUnpack (Exts.NoUnpackPragma _) = TH.NoSourceUnpackedness
 toStrictType x = (TH.Bang TH.NoSourceUnpackedness TH.NoSourceStrictness, toType x)
-#else
--- TODO: what is this comment? Outdated?
--- TyBang l (BangType l) (Unpackedness l) (Type l)
--- data BangType l = BangedTy l        | LazyTy l | NoStrictAnnot l
--- data Unpackedness l = Unpack l | NoUnpack l | NoUnpackPragma l
-toStrictType (Exts.TyBang _ b u t) = (toStrict b u, toType t)
-    where
-      toStrict :: Exts.BangType l -> Exts.Unpackedness l -> TH.Strict
-      toStrict (Exts.BangedTy _) _ = TH.IsStrict
-      toStrict _ (Exts.Unpack _)   = TH.Unpacked
-      toStrict _ _                 = TH.NotStrict
-toStrictType x = (TH.NotStrict, toType x)
-#endif
 
 (.->.) :: TH.Type -> TH.Type -> TH.Type
 a .->. b = TH.AppT (TH.AppT TH.ArrowT a) b
@@ -496,26 +466,11 @@
     -- toPred p = todo "toPred" p
 
 instance ToDerivClauses (Exts.Deriving l) where
-#if MIN_VERSION_template_haskell(2,12,0)
 #if MIN_VERSION_haskell_src_exts(1,20,0)
   toDerivClauses (Exts.Deriving _ strat irules) = [TH.DerivClause (fmap toDerivStrategy strat) (map toType irules)]
 #else
   toDerivClauses (Exts.Deriving _ irules) = [TH.DerivClause Nothing (map toType irules)]
 #endif
-#elif MIN_VERSION_template_haskell(2,11,0)
-#if MIN_VERSION_haskell_src_exts(1,20,0)
-  toDerivClauses (Exts.Deriving _ _ irules) = map toType irules
-#else
-  toDerivClauses (Exts.Deriving _ irules) = map toType irules
-#endif
-#else
--- template-haskell < 2.11
-#if MIN_VERSION_haskell_src_exts(1,20,0)
-  toDerivClauses (Exts.Deriving _ _ irules) = concatMap toNames irules
-#else
-  toDerivClauses (Exts.Deriving _ irules) = concatMap toNames irules
-#endif
-#endif
 
 instance ToDerivClauses a => ToDerivClauses (Maybe a) where
   toDerivClauses Nothing  = []
@@ -525,22 +480,17 @@
   toDerivClauses = concatMap toDerivClauses
 
 
-#if MIN_VERSION_template_haskell(2,12,0) && MIN_VERSION_haskell_src_exts(1,20,0)
 toDerivStrategy :: (Exts.DerivStrategy l) -> TH.DerivStrategy
 toDerivStrategy (Exts.DerivStock _)    = TH.StockStrategy
 toDerivStrategy (Exts.DerivAnyclass _) = TH.AnyclassStrategy
 toDerivStrategy (Exts.DerivNewtype _)  = TH.NewtypeStrategy
-#if MIN_VERSION_haskell_src_exts(1,21,0)
-#if MIN_VERSION_template_haskell(2,14,0)
+#if MIN_VERSION_haskell_src_exts(1,21,0) && MIN_VERSION_template_haskell(2,14,0)
 toDerivStrategy (Exts.DerivVia _ t)    = TH.ViaStrategy (toType t)
 #else
 toDerivStrategy d@Exts.DerivVia{}      = noTHyet "toDerivStrategy" "2.14" d
 #endif
-#endif
 
-#endif
 
-
 -- TODO LumiGuide
 -- instance ToCxt (Hs.Deriving l) where
 -- #if MIN_VERSION_haskell_src_exts(1,20,1)
@@ -584,9 +534,7 @@
         Exts.DataType _ -> TH.DataD (toCxt cxt)
                              (toName h)
                              (toTyVars h)
-#if MIN_VERSION_template_haskell(2,11,0)
                              Nothing
-#endif
                              (fmap qualConDeclToCon qcds)
                              (toDerivClauses qns)
         Exts.NewType _  -> let qcd = case qcds of
@@ -596,9 +544,7 @@
                         in TH.NewtypeD (toCxt cxt)
                                     (toName h)
                                     (toTyVars h)
-#if MIN_VERSION_template_haskell(2,11,0)
                                     Nothing
-#endif
                                     (qualConDeclToCon qcd)
                                     (toDerivClauses qns)
 
@@ -616,7 +562,6 @@
    where
     inline | b = TH.Inline | otherwise = TH.NoInline
 
-#if MIN_VERSION_template_haskell(2,11,0)
   toDec (Exts.TypeFamDecl _ h sig inj)
     = TH.OpenTypeFamilyD $ TH.TypeFamilyHead (toName h)
                                        (toTyVars h)
@@ -624,12 +569,6 @@
                                        (fmap toInjectivityAnn inj)
   toDec (Exts.DataFamDecl _ _ h sig)
     = TH.DataFamilyD (toName h) (toTyVars h) (toMaybeKind sig)
-#else
-  toDec (Exts.TypeFamDecl _ h sig inj)
-    = TH.FamilyD TH.TypeFam (toName h) (toTyVars h) (toMaybeKind sig)
-  toDec (Exts.DataFamDecl _ _ h sig)
-    = TH.FamilyD TH.DataFam (toName h) (toTyVars h) (toMaybeKind sig)
-#endif
 
   toDec _a@(Exts.FunBind _ mtchs)                           = hsMatchesToFunD mtchs
   toDec (Exts.PatBind _ p rhs bnds)                      = TH.ValD (toPat p)
@@ -642,18 +581,11 @@
   -- the 'vars' bit seems to be for: instance forall a. C (T a) where ...
   -- TH's own parser seems to flat-out ignore them, and honestly I can't see
   -- that it's obviously wrong to do so.
-#if MIN_VERSION_template_haskell(2,11,0)
   toDec (Exts.InstDecl _ Nothing irule ids) = TH.InstanceD
     Nothing
     (toCxt irule)
     (toType irule)
     (toDecs ids)
-#else
-  toDec (Exts.InstDecl _ Nothing irule ids) = TH.InstanceD
-    (toCxt irule)
-    (toType irule)
-    (toDecs ids)
-#endif
 
   toDec (Exts.ClassDecl _ cxt h fds decls) = TH.ClassD
     (toCxt cxt)
@@ -674,10 +606,8 @@
     toMaybeKind Nothing  = Nothing
     toMaybeKind (Just a) = toMaybeKind a
 
-#if MIN_VERSION_template_haskell(2,11,0)
 instance ToInjectivityAnn (Exts.InjectivityInfo l) where
   toInjectivityAnn (Exts.InjectivityInfo _ n ns) = TH.InjectivityAnn (toName n) (fmap toName ns)
-#endif
 
 transAct :: Maybe (Exts.Activation l) -> TH.Phases
 transAct Nothing                       = TH.AllPhases
diff --git a/src/Language/Haskell/Meta/THCompat.hs b/src/Language/Haskell/Meta/THCompat.hs
new file mode 100644
--- /dev/null
+++ b/src/Language/Haskell/Meta/THCompat.hs
@@ -0,0 +1,30 @@
+{-# LANGUAGE CPP #-}
+module Language.Haskell.Meta.THCompat (
+    module Language.Haskell.Meta.THCompat
+) where
+
+import Language.Haskell.TH.Syntax
+
+
+conP :: Name -> [Pat] -> Pat
+#if MIN_VERSION_template_haskell(2,18,0)
+conP name = ConP name []
+#else
+conP = ConP
+#endif
+
+
+#if MIN_VERSION_template_haskell(2,17,0)
+plainTV :: Name -> TyVarBndr Specificity
+plainTV n = PlainTV n SpecifiedSpec
+#else
+plainTV :: Name -> TyVarBndr
+plainTV = PlainTV
+#endif
+
+
+#if MIN_VERSION_template_haskell(2,17,0)
+type TyVarBndr_ flag = TyVarBndr flag
+#else
+type TyVarBndr_ flag = TyVarBndr
+#endif
diff --git a/src/Language/Haskell/Meta/Utils.hs b/src/Language/Haskell/Meta/Utils.hs
--- a/src/Language/Haskell/Meta/Utils.hs
+++ b/src/Language/Haskell/Meta/Utils.hs
@@ -12,22 +12,59 @@
 -- | This module is a staging ground
 -- for to-be-organized-and-merged-nicely code.
 
-module Language.Haskell.Meta.Utils where
+module Language.Haskell.Meta.Utils (
+    module Language.Haskell.Meta.Utils
+) where
 
-import Control.Monad
-import Data.Generics                hiding (Fixity)
-import Data.List                    (findIndex)
-import Language.Haskell.Exts.Pretty (prettyPrint)
-import Language.Haskell.Meta
-import Language.Haskell.TH.Lib      hiding (cxt)
-import Language.Haskell.TH.Ppr
-import Language.Haskell.TH.Syntax
-import System.IO.Unsafe             (unsafePerformIO)
-import Text.PrettyPrint
+import           Control.Monad
+import           Data.Generics                  hiding (Fixity)
+import           Data.List                      (findIndex)
+import           Language.Haskell.Exts.Pretty   (prettyPrint)
+import           Language.Haskell.Meta
+import qualified Language.Haskell.Meta.THCompat as Compat (conP, plainTV)
+import           Language.Haskell.TH.Lib        hiding (cxt)
+import           Language.Haskell.TH.Ppr
+import           Language.Haskell.TH.Syntax
+import           System.IO.Unsafe               (unsafePerformIO)
+import           Text.PrettyPrint
 
 -----------------------------------------------------------------------------
 
+dataDCons :: Dec -> [Con]
+dataDCons (DataD _ _ _ _ cons _) = cons
+dataDCons _                      = []
 
+
+decCons :: Dec -> [Con]
+decCons (DataD _ _ _ _ cons _)   = cons
+decCons (NewtypeD _ _ _ _ con _) = [con]
+decCons _                        = []
+
+
+decTyVars :: Dec -> [TyVarBndr_ ()]
+decTyVars (DataD _ _ ns _ _ _)    = ns
+decTyVars (NewtypeD _ _ ns _ _ _) = ns
+decTyVars (TySynD _ ns _)         = ns
+decTyVars (ClassD _ _ ns _ _)     = ns
+decTyVars _                       = []
+
+
+decName :: Dec -> Maybe Name
+decName (FunD n _)             = Just n
+decName (DataD _ n _ _ _ _)    = Just n
+decName (NewtypeD _ n _ _ _ _) = Just n
+decName (TySynD n _ _)         = Just n
+decName (ClassD _ n _ _ _)     = Just n
+decName (SigD n _)             = Just n
+decName (ForeignD fgn)         = Just (foreignName fgn)
+decName _                      = Nothing
+
+
+foreignName :: Foreign -> Name
+foreignName (ImportF _ _ _ n _) = n
+foreignName (ExportF _ _ n _)   = n
+
+
 cleanNames :: (Data a) => a -> a
 cleanNames = everywhere (mkT cleanName)
   where cleanName :: Name -> Name
@@ -161,11 +198,7 @@
         (t',env4,new4) = renameT env3 new3 t
     in (ForallT ns'' cxt' t', env4, new4)
   where
-#if MIN_VERSION_template_haskell(2,17,0)
-    unVarT (VarT n) = PlainTV n SpecifiedSpec
-#else
-    unVarT (VarT n) = PlainTV n
-#endif
+    unVarT (VarT n) = Compat.plainTV n
     unVarT ty       = error $ "renameT: unVarT: TODO for" ++ show ty
     renamePreds = renameThings renamePred
     renamePred = renameT
@@ -223,51 +256,7 @@
 
 
 
-decCons :: Dec -> [Con]
-#if MIN_VERSION_template_haskell(2,11,0)
-decCons (DataD _ _ _ _ cons _)   = cons
-decCons (NewtypeD _ _ _ _ con _) = [con]
-#else
-decCons (DataD _ _ _ cons _)     = cons
-decCons (NewtypeD _ _ _ con _)   = [con]
-#endif
-decCons _                        = []
 
-
-decTyVars :: Dec -> [TyVarBndr_ ()]
-#if MIN_VERSION_template_haskell(2,11,0)
-decTyVars (DataD _ _ ns _ _ _)    = ns
-decTyVars (NewtypeD _ _ ns _ _ _) = ns
-#else
-decTyVars (DataD _ _ ns _ _)      = ns
-decTyVars (NewtypeD _ _ ns _ _)   = ns
-#endif
-decTyVars (TySynD _ ns _)         = ns
-decTyVars (ClassD _ _ ns _ _)     = ns
-decTyVars _                       = []
-
-
-decName :: Dec -> Maybe Name
-decName (FunD n _)             = Just n
-#if MIN_VERSION_template_haskell(2,11,0)
-decName (DataD _ n _ _ _ _)    = Just n
-decName (NewtypeD _ n _ _ _ _) = Just n
-#else
-decName (DataD _ n _ _ _)      = Just n
-decName (NewtypeD _ n _ _ _)   = Just n
-#endif
-decName (TySynD n _ _)         = Just n
-decName (ClassD _ n _ _ _)     = Just n
-decName (SigD n _)             = Just n
-decName (ForeignD fgn)         = Just (foreignName fgn)
-decName _                      = Nothing
-
-
-foreignName :: Foreign -> Name
-foreignName (ImportF _ _ _ n _) = n
-foreignName (ExportF _ _ n _)   = n
-
-
 unwindT :: Type -> [Type]
 unwindT = go
   where go :: Type -> [Type]
@@ -319,36 +308,18 @@
 recCName (RecC n _) = Just n
 recCName _          = Nothing
 
-dataDCons :: Dec -> [Con]
-#if MIN_VERSION_template_haskell(2,11,0)
-dataDCons (DataD _ _ _ _ cons _) = cons
-#else
-dataDCons (DataD _ _ _ cons _)   = cons
-#endif
-dataDCons _                      = []
-
 fromDataConI :: Info -> Q (Maybe Exp)
-#if MIN_VERSION_template_haskell(2,11,0)
 fromDataConI (DataConI dConN ty _tyConN) =
   let n = arityT ty
   in replicateM n (newName "a")
       >>= \ns -> return (Just (LamE
-                    [ConP dConN (fmap VarP ns)]
+                    [Compat.conP dConN (fmap VarP ns)]
 #if MIN_VERSION_template_haskell(2,16,0)
                     (TupE $ fmap (Just . VarE) ns)
 #else
                     (TupE $ fmap VarE ns)
 #endif
                     ))
-#else
-fromDataConI (DataConI dConN ty _tyConN _fxty) =
-  let n = arityT ty
-  in replicateM n (newName "a")
-      >>= \ns -> return (Just (LamE
-                    [ConP dConN (fmap VarP ns)]
-                    (TupE $ fmap VarE ns)))
-
-#endif
 fromDataConI _ = return Nothing
 
 fromTyConI :: Info -> Maybe Dec
diff --git a/tests/Main.hs b/tests/Main.hs
--- a/tests/Main.hs
+++ b/tests/Main.hs
@@ -1,5 +1,3 @@
-{-# LANGUAGE CPP #-}
-
 module Main where
 
 import qualified Control.Monad.Fail              as Fail
@@ -8,11 +6,10 @@
 import qualified Language.Haskell.Exts.Parser    as Parser
 import           Language.Haskell.Meta.Parse
 import qualified Language.Haskell.TH             as TH
--- import           Test.Framework
--- import           Test.Framework.Providers.HUnit
-import Test.HUnit       (Assertion, (@?=))
-import Test.Tasty       (TestTree, defaultMain, testGroup)
-import Test.Tasty.HUnit (testCase)
+import           Test.HUnit                      (Assertion, (@?=))
+import           Test.Tasty
+  (TestTree, defaultMain, testGroup)
+import           Test.Tasty.HUnit                (testCase)
 
 type Test = TestTree
 
@@ -21,9 +18,7 @@
 
 tests :: [Test]
 tests = [ derivingClausesTest
-#if MIN_VERSION_template_haskell(2,12,0)
         , typeAppTest
-#endif
         ]
 
 derivingClausesTest :: Test
diff --git a/tests/Splices.hs b/tests/Splices.hs
--- a/tests/Splices.hs
+++ b/tests/Splices.hs
@@ -2,10 +2,7 @@
 {-# LANGUAGE CPP                   #-}
 {-# LANGUAGE GADTs                 #-}
 {-# LANGUAGE TemplateHaskell       #-}
-
-#if MIN_VERSION_template_haskell(2,12,0)
 {-# LANGUAGE TypeApplications      #-}
-#endif
 
 #if MIN_VERSION_template_haskell(2,14,0)
 {-# LANGUAGE ExplicitForAll        #-}
@@ -24,45 +21,22 @@
       "unit :: IO ()\nunit = return ()")
 
 -- Testing that the [] constructor works in types,
-#if MIN_VERSION_base(4,9,0)
 $(either error return $ Meta.parseDecs
       "nilp :: [a] -> ([] a)\nnilp [] = []")
-#else
--- CPP Note: Apparently ghc < 7 doesn't parse this correctly w/o the forall.
--- https://github.com/DanBurton/haskell-src-meta/issues/2
-$(either error return $ Meta.parseDecs
-      "nilp :: forall a. [a] -> ([] a)\nnilp [] = []")
-#endif
 
 $(either error return $ Meta.parseDecs
       "pair :: (,) Int Int\npair = (,) 1 2")
 
 
 ----- Testing classes and instances -----
-#if MIN_VERSION_base(4,9,0)
 $(either error return $ Meta.parseDecs $ unlines
    ["class MyClass a where mymethod :: a -> b -> (a,b)"
    ,"instance MyClass Bool where mymethod a b = (a,b)"
    ])
-#else
--- CPP Note: Apparently ghc < 7 doesn't parse this correctly w/o the forall.
--- https://github.com/DanBurton/haskell-src-meta/issues/2
-$(either error return $ Meta.parseDecs $ unlines
-   ["class MyClass a where mymethod :: forall b. a -> b -> (a,b)"
-   ,"instance MyClass Bool where mymethod a b = (a,b)"
-   ])
-#endif
 
-#if MIN_VERSION_template_haskell(2,12,0)
 $(either error return $ Meta.parseDecsWithMode (Parser.defaultParseMode { Parser.extensions = [Extension.EnableExtension Extension.TypeApplications] }) $ unlines
    ["tenStr :: String"
    ,"tenStr = show @Int 10"])
-#else
--- Type Application not supported by template-haskell < 2.12
-$(either error return $ Meta.parseDecs $ unlines
-   ["tenStr :: String"
-   ,"tenStr = show (10 :: Int)"])
-#endif
 
 #if MIN_VERSION_template_haskell(2,14,0)
 $(either error return $ Meta.parseDecsWithMode
@@ -84,11 +58,7 @@
   $ unlines
    [
 -- Not sure why but ghc 7.10 complains that "type var a is not in scope"
-#if MIN_VERSION_template_haskell(2,11,0)
    "intConstraint :: (a ~ Int) => a"
-#else
-   "intConstraint :: Int"
-#endif
    ,"intConstraint = 3"])
 
 -- Just to check that it works as intended
