diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,6 +1,12 @@
 # Changelog for yesod-cursor
 
-## Unreleased changes
+## [Unreleased](https://github.com/freckle/yesod-page-cursor/compare/v2.0.0.9...main)
+
+- None
+
+## [v2.0.0.9](https://github.com/freckle/yesod-page-cursor/compare/v2.0.0.8...v2.0.0.9)
+
+- Re-order declarations in TestApp, to build on GHC 9
 
 ## [v2.0.0.8](https://github.com/freckle/yesod-page-cursor/compare/v2.0.0.7...v2.0.0.8)
 
diff --git a/test/TestApp.hs b/test/TestApp.hs
--- a/test/TestApp.hs
+++ b/test/TestApp.hs
@@ -69,6 +69,11 @@
 
 data Simple = Simple
 
+mkYesod "Simple" [parseRoutes|
+/some-route SomeR GET
+/some-route-link SomeLinkR GET
+|]
+
 instance Yesod Simple
 
 runDB'
@@ -80,11 +85,6 @@
 instance YesodPersist Simple where
   type YesodPersistBackend Simple = SqlBackend
   runDB = runDB'
-
-mkYesod "Simple" [parseRoutes|
-/some-route SomeR GET
-/some-route-link SomeLinkR GET
-|]
 
 optionalParam :: Read a => MonadHandler m => Text -> m (Maybe a)
 optionalParam name = fmap (read . unpack) <$> lookupGetParam name
diff --git a/yesod-page-cursor.cabal b/yesod-page-cursor.cabal
--- a/yesod-page-cursor.cabal
+++ b/yesod-page-cursor.cabal
@@ -1,6 +1,6 @@
 cabal-version:      1.12
 name:               yesod-page-cursor
-version:            2.0.0.8
+version:            2.0.0.9
 license:            MIT
 license-file:       LICENSE
 copyright:          2020 Renaissance Learning Inc
@@ -28,15 +28,15 @@
     other-modules:    Paths_yesod_page_cursor
     default-language: Haskell2010
     build-depends:
-        aeson >=1.5.5.1,
+        aeson >=1.5.6.0,
         base >=4.7 && <5,
         bytestring >=0.10.12.0,
         containers >=0.6.2.1,
-        http-link-header >=1.0.3.1,
-        network-uri >=2.6.3.0,
+        http-link-header >=1.2.0,
+        network-uri >=2.6.4.1,
         text >=1.2.3.2,
-        unliftio >=0.2.14,
-        yesod-core >=1.6.18.8
+        unliftio >=0.2.18,
+        yesod-core >=1.6.20.2
 
 test-suite yesod-page-cursor-test
     type:             exitcode-stdio-1.0
@@ -49,27 +49,27 @@
     default-language: Haskell2010
     ghc-options:      -threaded -rtsopts -with-rtsopts=-N
     build-depends:
-        aeson >=1.5.5.1,
+        aeson >=1.5.6.0,
         base >=4.7 && <5,
         bytestring >=0.10.12.0,
-        hspec >=2.7.8,
+        hspec >=2.7.10,
         hspec-expectations-lifted >=0.10.0,
-        http-link-header >=1.0.3.1,
+        http-link-header >=1.2.0,
         http-types >=0.12.3,
         lens >=4.19.2,
-        lens-aeson >=1.1,
+        lens-aeson >=1.1.1,
         monad-logger >=0.3.36,
         mtl >=2.2.2,
-        persistent >=2.11.0.2,
-        persistent-sqlite >=2.11.0.0,
-        persistent-template >=2.9.1.0,
-        scientific >=0.3.6.2,
+        persistent >=2.13.1.1,
+        persistent-sqlite >=2.13.0.3,
+        persistent-template >=2.12.0.0,
+        scientific >=0.3.7.0,
         text >=1.2.3.2,
         time >=1.9.3,
-        unliftio >=0.2.14,
+        unliftio >=0.2.18,
         unliftio-core >=0.2.0.1,
         wai-extra >=3.1.6,
-        yesod >=1.6.1.0,
-        yesod-core >=1.6.18.8,
+        yesod >=1.6.1.2,
+        yesod-core >=1.6.20.2,
         yesod-page-cursor -any,
         yesod-test >=1.6.12
