diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,11 @@
 # Changelog for persistent
 
+# 2.15.0.1
+
+* [#1575](https://github.com/yesodweb/persistent/pull/1575)
+    * Fix benchmark build for GHC 9.8-9.12
+    * Support `template-haskell` up to 2.24
+
 # 2.15.0.0
 
 * [#1569](https://github.com/yesodweb/persistent/pull/1569)
diff --git a/Database/Persist/SqlBackend/Internal/Statement.hs b/Database/Persist/SqlBackend/Internal/Statement.hs
--- a/Database/Persist/SqlBackend/Internal/Statement.hs
+++ b/Database/Persist/SqlBackend/Internal/Statement.hs
@@ -1,11 +1,11 @@
-{-# language RankNTypes #-}
+{-# LANGUAGE RankNTypes #-}
 
 module Database.Persist.SqlBackend.Internal.Statement where
 
+import Conduit
 import Data.Acquire
-import Database.Persist.Types.Base
 import Data.Int
-import Conduit
+import Database.Persist.Types.Base
 
 -- | A 'Statement' is a representation of a database query that has been
 -- prepared and stored on the server side.
@@ -13,7 +13,9 @@
     { stmtFinalize :: IO ()
     , stmtReset :: IO ()
     , stmtExecute :: [PersistValue] -> IO Int64
-    , stmtQuery :: forall m. MonadIO m
-                => [PersistValue]
-                -> Acquire (ConduitM () [PersistValue] m ())
+    , stmtQuery
+        :: forall m
+         . (MonadIO m)
+        => [PersistValue]
+        -> Acquire (ConduitM () [PersistValue] m ())
     }
diff --git a/bench/Main.hs b/bench/Main.hs
--- a/bench/Main.hs
+++ b/bench/Main.hs
@@ -132,8 +132,11 @@
 instance NFData DerivClause where
 #endif
 
-#if MIN_VERSION_template_haskell(2,22,0)
+#if MIN_VERSION_template_haskell(2,21,0)
 instance NFData BndrVis where
+#endif
+
+#if MIN_VERSION_template_haskell(2,22,0)
 instance NFData NamespaceSpecifier where
 #endif
 
diff --git a/persistent.cabal b/persistent.cabal
--- a/persistent.cabal
+++ b/persistent.cabal
@@ -1,224 +1,226 @@
-name:            persistent
-version:         2.15.0.0
-license:         MIT
-license-file:    LICENSE
-author:          Michael Snoyman <michael@snoyman.com>
-maintainer:      Michael Snoyman <michael@snoyman.com>, Greg Weber <greg@gregweber.info>
-synopsis:        Type-safe, multi-backend data serialization.
-description:     Hackage documentation generation is not reliable. For up to date documentation, please see: <http://www.stackage.org/package/persistent>.
-category:        Database, Yesod
-stability:       Stable
-cabal-version:   >= 1.10
-build-type:      Simple
-homepage:        http://www.yesodweb.com/book/persistent
-bug-reports:     https://github.com/yesodweb/persistent/issues
-extra-source-files: ChangeLog.md README.md
-
-library
-    build-depends:
-        base                     >= 4.11.1.0     && < 5
-      , aeson                    >= 1.0 && < 2.3
-      , attoparsec
-      , attoparsec-aeson         >= 2.1.0.0 && < 2.3
-      , base64-bytestring
-      , blaze-html               >= 0.9
-      , bytestring               >= 0.10
-      , conduit                  >= 1.3
-      , containers               >= 0.5
-      , deepseq
-      , fast-logger              >= 2.4
-      , http-api-data            >= 0.3
-      , lift-type                >= 0.1.0.0 && < 0.2.0.0
-      , monad-logger             >= 0.3.28
-      , mtl
-      , path-pieces              >= 0.2
-      , resource-pool            >= 0.2.3
-      , resourcet                >= 1.1.10
-      , scientific
-      , silently
-      , template-haskell         >= 2.13 && < 2.23
-      , text                     >= 1.2
-      , th-lift-instances        >= 0.1.14    && < 0.2
-      , time                     >= 1.6
-      , transformers             >= 0.5
-      , unliftio
-      , unliftio-core
-      , unordered-containers
-      , vault
-      , vector
+name:               persistent
+version:            2.15.0.1
+license:            MIT
+license-file:       LICENSE
+author:             Michael Snoyman <michael@snoyman.com>
+maintainer:
+  Michael Snoyman <michael@snoyman.com>, Greg Weber <greg@gregweber.info>
 
-    default-extensions:
-        FlexibleContexts
-      , MultiParamTypeClasses
-      , OverloadedStrings
-      , TypeFamilies
+synopsis:           Type-safe, multi-backend data serialization.
+description:
+  Hackage documentation generation is not reliable. For up to date documentation, please see: <http://www.stackage.org/package/persistent>.
 
-    exposed-modules:
-        Database.Persist
-        Database.Persist.Types
-        Database.Persist.Names
-        Database.Persist.PersistValue
-        Database.Persist.EntityDef
-        Database.Persist.EntityDef.Internal
-        Database.Persist.FieldDef
-        Database.Persist.FieldDef.Internal
-        Database.Persist.ImplicitIdDef
-        Database.Persist.ImplicitIdDef.Internal
-        Database.Persist.TH
-        Database.Persist.TH.Internal
+category:           Database, Yesod
+stability:          Stable
+cabal-version:      >=1.10
+build-type:         Simple
+homepage:           http://www.yesodweb.com/book/persistent
+bug-reports:        https://github.com/yesodweb/persistent/issues
+extra-source-files:
+  ChangeLog.md
+  README.md
 
-        Database.Persist.Quasi
-        Database.Persist.Quasi.Internal
+library
+  default-language:   Haskell2010
+  build-depends:
+      aeson                 >=1.0      && <2.3
+    , attoparsec
+    , attoparsec-aeson      >=2.1.0.0  && <2.3
+    , base                  >=4.11.1.0 && <5
+    , base64-bytestring
+    , blaze-html            >=0.9
+    , bytestring            >=0.10
+    , conduit               >=1.3
+    , containers            >=0.5
+    , deepseq
+    , fast-logger           >=2.4
+    , http-api-data         >=0.3
+    , lift-type             >=0.1.0.0  && <0.2.0.0
+    , monad-logger          >=0.3.28
+    , mtl
+    , path-pieces           >=0.2
+    , resource-pool         >=0.2.3
+    , resourcet             >=1.1.10
+    , scientific
+    , silently
+    , template-haskell      >=2.13     && <2.24
+    , text                  >=1.2
+    , th-lift-instances     >=0.1.14   && <0.2
+    , time                  >=1.6
+    , transformers          >=0.5
+    , unliftio
+    , unliftio-core
+    , unordered-containers
+    , vault
+    , vector
 
-        Database.Persist.Sql
-        Database.Persist.Sql.Migration
-        Database.Persist.Sql.Types.Internal
-        Database.Persist.Sql.Util
+  default-extensions:
+    FlexibleContexts
+    MultiParamTypeClasses
+    OverloadedStrings
+    TypeFamilies
 
-        Database.Persist.SqlBackend
-        Database.Persist.SqlBackend.StatementCache
-        Database.Persist.SqlBackend.SqlPoolHooks
-        Database.Persist.SqlBackend.Internal
-        Database.Persist.SqlBackend.Internal.InsertSqlResult
-        Database.Persist.SqlBackend.Internal.IsolationLevel
-        Database.Persist.SqlBackend.Internal.SqlPoolHooks
-        Database.Persist.SqlBackend.Internal.Statement
-        Database.Persist.SqlBackend.Internal.StatementCache
-        Database.Persist.SqlBackend.Internal.MkSqlBackend
+  exposed-modules:
+    Database.Persist
+    Database.Persist.Class
+    Database.Persist.Class.PersistConfig
+    Database.Persist.Class.PersistEntity
+    Database.Persist.Class.PersistField
+    Database.Persist.Class.PersistQuery
+    Database.Persist.Class.PersistStore
+    Database.Persist.Class.PersistUnique
+    Database.Persist.EntityDef
+    Database.Persist.EntityDef.Internal
+    Database.Persist.FieldDef
+    Database.Persist.FieldDef.Internal
+    Database.Persist.ImplicitIdDef
+    Database.Persist.ImplicitIdDef.Internal
+    Database.Persist.Names
+    Database.Persist.PersistValue
+    Database.Persist.Quasi
+    Database.Persist.Quasi.Internal
+    Database.Persist.Sql
+    Database.Persist.Sql.Migration
+    Database.Persist.Sql.Types.Internal
+    Database.Persist.Sql.Util
+    Database.Persist.SqlBackend
+    Database.Persist.SqlBackend.Internal
+    Database.Persist.SqlBackend.Internal.InsertSqlResult
+    Database.Persist.SqlBackend.Internal.IsolationLevel
+    Database.Persist.SqlBackend.Internal.MkSqlBackend
+    Database.Persist.SqlBackend.Internal.SqlPoolHooks
+    Database.Persist.SqlBackend.Internal.Statement
+    Database.Persist.SqlBackend.Internal.StatementCache
+    Database.Persist.SqlBackend.SqlPoolHooks
+    Database.Persist.SqlBackend.StatementCache
+    Database.Persist.TH
+    Database.Persist.TH.Internal
+    Database.Persist.Types
 
-        Database.Persist.Class
-        Database.Persist.Class.PersistEntity
-        Database.Persist.Class.PersistQuery
-        Database.Persist.Class.PersistUnique
-        Database.Persist.Class.PersistConfig
-        Database.Persist.Class.PersistField
-        Database.Persist.Class.PersistStore
+  other-modules:
+    Database.Persist.Sql.Class
+    Database.Persist.Sql.Internal
+    Database.Persist.Sql.Orphan.PersistQuery
+    Database.Persist.Sql.Orphan.PersistStore
+    Database.Persist.Sql.Orphan.PersistUnique
+    Database.Persist.Sql.Raw
+    Database.Persist.Sql.Run
+    Database.Persist.Sql.Types
+    Database.Persist.Types.Base
+    Database.Persist.Types.Span
 
+  -- These modules only make sense for compilers with access to DerivingVia
+  if impl(ghc >=8.6.1)
+    exposed-modules:  Database.Persist.Compatible
     other-modules:
-        Database.Persist.Types.Base
-        Database.Persist.Types.Span
-
-        Database.Persist.Sql.Internal
-        Database.Persist.Sql.Types
-        Database.Persist.Sql.Raw
-        Database.Persist.Sql.Run
-        Database.Persist.Sql.Class
-        Database.Persist.Sql.Orphan.PersistQuery
-        Database.Persist.Sql.Orphan.PersistStore
-        Database.Persist.Sql.Orphan.PersistUnique
-
-    -- These modules only make sense for compilers with access to DerivingVia
-    if impl(ghc >= 8.6.1)
-        exposed-modules:
-            Database.Persist.Compatible
-        other-modules:
-            Database.Persist.Compatible.Types
-            Database.Persist.Compatible.TH
+      Database.Persist.Compatible.TH
+      Database.Persist.Compatible.Types
 
-    ghc-options:     -Wall -Werror=incomplete-patterns
+    ghc-options:      -Wall -Werror=incomplete-patterns
     default-language: Haskell2010
 
 test-suite test
-    type:          exitcode-stdio-1.0
-    main-is:       main.hs
-
-    build-depends:
-        base >= 4.9 && < 5
-      , aeson
-      , attoparsec
-      , base64-bytestring
-      , blaze-html
-      , bytestring
-      , conduit
-      , containers
-      , deepseq
-      , fast-logger
-      , hspec         >= 2.4
-      , http-api-data
-      , monad-logger
-      , mtl
-      , path-pieces
-      , persistent
-      , QuickCheck
-      , quickcheck-instances     >= 0.3
-      , resource-pool
-      , resourcet
-      , scientific
-      , shakespeare
-      , silently
-      , template-haskell         >= 2.4
-      , text
-      , th-lift-instances
-      , time
-      , transformers
-      , unliftio
-      , unliftio-core
-      , unordered-containers
-      , vector
+  type:               exitcode-stdio-1.0
+  main-is:            main.hs
+  build-depends:
+      aeson
+    , attoparsec
+    , base                  >=4.9 && <5
+    , base64-bytestring
+    , blaze-html
+    , bytestring
+    , conduit
+    , containers
+    , deepseq
+    , fast-logger
+    , hspec                 >=2.4
+    , http-api-data
+    , monad-logger
+    , mtl
+    , path-pieces
+    , persistent
+    , QuickCheck
+    , quickcheck-instances  >=0.3
+    , resource-pool
+    , resourcet
+    , scientific
+    , shakespeare
+    , silently
+    , template-haskell      >=2.4
+    , text
+    , th-lift-instances
+    , time
+    , transformers
+    , unliftio
+    , unliftio-core
+    , unordered-containers
+    , vector
 
-    hs-source-dirs:
-        test/
+  hs-source-dirs:     test/
 
-    -- don't warn on partial matches, they're all over the place in the
-    -- testsuite and if they crash they will just fail the test.
-    ghc-options: -Wall -Wno-incomplete-uni-patterns
+  -- don't warn on partial matches, they're all over the place in the
+  -- testsuite and if they crash they will just fail the test.
+  ghc-options:        -Wall -Wno-incomplete-uni-patterns
+  default-extensions:
+    FlexibleContexts
+    MultiParamTypeClasses
+    OverloadedStrings
+    TypeFamilies
+    TypeOperators
 
-    default-extensions: FlexibleContexts
-                      , MultiParamTypeClasses
-                      , OverloadedStrings
-                      , TypeFamilies
-                      , TypeOperators
+  other-modules:
+    Database.Persist.ClassSpec
+    Database.Persist.PersistValueSpec
+    Database.Persist.QuasiSpec
+    Database.Persist.TH.CommentSpec
+    Database.Persist.TH.CompositeKeyStyleSpec
+    Database.Persist.TH.DiscoverEntitiesSpec
+    Database.Persist.TH.EmbedSpec
+    Database.Persist.TH.EntityHaddockSpec
+    Database.Persist.TH.ForeignRefSpec
+    Database.Persist.TH.ImplicitIdColSpec
+    Database.Persist.TH.JsonEncodingSpec
+    Database.Persist.TH.KindEntitiesSpec
+    Database.Persist.TH.KindEntitiesSpecImports
+    Database.Persist.TH.MaybeFieldDefsSpec
+    Database.Persist.TH.MigrationOnlySpec
+    Database.Persist.TH.MultiBlockSpec
+    Database.Persist.TH.MultiBlockSpec.Model
+    Database.Persist.TH.NestedSymbolsInTypeSpec
+    Database.Persist.TH.NestedSymbolsInTypeSpecImports
+    Database.Persist.TH.NoFieldSelectorsSpec
+    Database.Persist.TH.OverloadedLabelSpec
+    Database.Persist.TH.PersistWith.Model
+    Database.Persist.TH.PersistWith.Model2
+    Database.Persist.TH.PersistWithSpec
+    Database.Persist.TH.RequireOnlyPersistImportSpec
+    Database.Persist.TH.SharedPrimaryKeyImportedSpec
+    Database.Persist.TH.SharedPrimaryKeySpec
+    Database.Persist.TH.SumSpec
+    Database.Persist.TH.ToFromPersistValuesSpec
+    Database.Persist.TH.TypeLitFieldDefsSpec
+    Database.Persist.THSpec
+    TemplateTestImports
 
-    other-modules:
-        Database.Persist.ClassSpec
-        Database.Persist.PersistValueSpec
-        Database.Persist.QuasiSpec
-        Database.Persist.TH.CommentSpec
-        Database.Persist.TH.CompositeKeyStyleSpec
-        Database.Persist.TH.DiscoverEntitiesSpec
-        Database.Persist.TH.EmbedSpec
-        Database.Persist.TH.EntityHaddockSpec
-        Database.Persist.TH.ForeignRefSpec
-        Database.Persist.TH.ImplicitIdColSpec
-        Database.Persist.TH.JsonEncodingSpec
-        Database.Persist.TH.KindEntitiesSpec
-        Database.Persist.TH.KindEntitiesSpecImports
-        Database.Persist.TH.MaybeFieldDefsSpec
-        Database.Persist.TH.MigrationOnlySpec
-        Database.Persist.TH.MultiBlockSpec
-        Database.Persist.TH.MultiBlockSpec.Model
-        Database.Persist.TH.NestedSymbolsInTypeSpec
-        Database.Persist.TH.NestedSymbolsInTypeSpecImports
-        Database.Persist.TH.NoFieldSelectorsSpec
-        Database.Persist.TH.OverloadedLabelSpec
-        Database.Persist.TH.PersistWith.Model
-        Database.Persist.TH.PersistWith.Model2
-        Database.Persist.TH.PersistWithSpec
-        Database.Persist.TH.RequireOnlyPersistImportSpec
-        Database.Persist.TH.SharedPrimaryKeyImportedSpec
-        Database.Persist.TH.SharedPrimaryKeySpec
-        Database.Persist.TH.SumSpec
-        Database.Persist.TH.ToFromPersistValuesSpec
-        Database.Persist.TH.TypeLitFieldDefsSpec
-        Database.Persist.THSpec
-        TemplateTestImports
-    default-language: Haskell2010
+  default-language:   Haskell2010
 
 source-repository head
   type:     git
   location: https://github.com/yesodweb/persistent.git
 
 benchmark persistent-th-bench
-    ghc-options:      -O2
-    type:             exitcode-stdio-1.0
-    main-is:          Main.hs
-    hs-source-dirs:   bench
-    build-depends:    base
-                    , persistent
-                    , criterion
-                    , deepseq >= 1.4
-                    , file-embed
-                    , text
-                    , template-haskell
-    other-modules:    Models
-    default-language: Haskell2010
+  ghc-options:      -O2
+  type:             exitcode-stdio-1.0
+  main-is:          Main.hs
+  hs-source-dirs:   bench
+  build-depends:
+      base
+    , criterion
+    , deepseq           >=1.4
+    , file-embed
+    , persistent
+    , template-haskell
+    , text
+
+  other-modules:    Models
+  default-language: Haskell2010
