diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,8 @@
+# v1.2.3
+
+* Add support for GHC 9.8
+* Drop support for GHC < 9.4
+
 # v1.2.2
 
 * Add support for GHC 9.6
diff --git a/graphql-client.cabal b/graphql-client.cabal
--- a/graphql-client.cabal
+++ b/graphql-client.cabal
@@ -1,11 +1,11 @@
 cabal-version: >= 1.10
 
--- This file has been generated from package.yaml by hpack version 0.35.2.
+-- This file has been generated from package.yaml by hpack version 0.36.0.
 --
 -- see: https://github.com/sol/hpack
 
 name:           graphql-client
-version:        1.2.2
+version:        1.2.3
 synopsis:       A client for Haskell programs to query a GraphQL API
 description:    A client for Haskell programs to query a GraphQL API.
 category:       Graphql
@@ -42,45 +42,36 @@
       Paths_graphql_client
   hs-source-dirs:
       src
-  ghc-options: -Wall
+  ghc-options: -Wall -Wcompat -Wincomplete-record-updates -Wincomplete-uni-patterns -Wnoncanonical-monad-instances -Wunused-packages
   build-depends:
-      aeson >=1.2.4.0 && <3
-    , aeson-schemas >=1.3 && <1.5
-    , base >=4.14 && <5
-    , http-client >=0.5.13.1 && <0.8
-    , http-client-tls >=0.3.5.3 && <0.4
-    , http-types >=0.12.1 && <0.13
-    , mtl >=2.2.2 && <2.4
-    , template-haskell >=2.16 && <3
-    , text >=1.2.3.0 && <2.1
-    , transformers >=0.5.2.0 && <0.7
-    , unliftio-core >=0.1.1.0 && <0.3
+      aeson <3
+    , aeson-schemas <1.5
+    , base <5
+    , http-client <0.8
+    , http-client-tls <0.4
+    , http-types <0.13
+    , mtl <2.4
+    , template-haskell <3
+    , text <2.2
+    , transformers <0.7
+    , unliftio-core <0.3
   default-language: Haskell2010
-  if impl(ghc >= 8.0)
-    ghc-options: -Wcompat -Wincomplete-record-updates -Wincomplete-uni-patterns -Wnoncanonical-monad-instances
-  if impl(ghc < 8.8)
-    ghc-options: -Wnoncanonical-monadfail-instances
 
 executable graphql-codegen
   main-is: exe/Codegen.hs
   other-modules:
       Paths_graphql_client
-  ghc-options: -Wall
+  ghc-options: -Wall -Wcompat -Wincomplete-record-updates -Wincomplete-uni-patterns -Wnoncanonical-monad-instances -Wunused-packages
   build-depends:
-      base >=4.14 && <5
-    , bytestring >=0.10.8.2 && <0.12
-    , file-embed >=0.0.10.1 && <0.1
-    , graphql-client
-    , optparse-applicative >=0.14.2.0 && <0.19
-    , path >=0.6.1 && <0.10
-    , path-io >=1.3.3 && <2
-    , template-haskell >=2.16 && <3
-    , typed-process >=0.2.3.0 && <0.3
+      base <5
+    , bytestring <0.12
+    , file-embed <0.1
+    , optparse-applicative <0.19
+    , path <0.10
+    , path-io <2
+    , template-haskell <3
+    , typed-process <0.3
   default-language: Haskell2010
-  if impl(ghc >= 8.0)
-    ghc-options: -Wcompat -Wincomplete-record-updates -Wincomplete-uni-patterns -Wnoncanonical-monad-instances
-  if impl(ghc < 8.8)
-    ghc-options: -Wnoncanonical-monadfail-instances
 
 test-suite graphql-client-test
   type: exitcode-stdio-1.0
@@ -92,7 +83,7 @@
       Paths_graphql_client
   hs-source-dirs:
       test
-  ghc-options: -Wall
+  ghc-options: -Wall -Wcompat -Wincomplete-record-updates -Wincomplete-uni-patterns -Wnoncanonical-monad-instances -Wunused-packages
   build-depends:
       aeson
     , aeson-schemas
@@ -102,7 +93,3 @@
     , tasty
     , tasty-hunit
   default-language: Haskell2010
-  if impl(ghc >= 8.0)
-    ghc-options: -Wcompat -Wincomplete-record-updates -Wincomplete-uni-patterns -Wnoncanonical-monad-instances
-  if impl(ghc < 8.8)
-    ghc-options: -Wnoncanonical-monadfail-instances
diff --git a/test/Data/GraphQL/Test/TestUtils.hs b/test/Data/GraphQL/Test/TestUtils.hs
--- a/test/Data/GraphQL/Test/TestUtils.hs
+++ b/test/Data/GraphQL/Test/TestUtils.hs
@@ -9,6 +9,7 @@
 import Data.Aeson (object, (.=))
 import Data.Aeson.Schema (get)
 import Data.Either (isLeft)
+import Data.Maybe (listToMaybe)
 import Test.Tasty (TestTree, testGroup)
 import Test.Tasty.HUnit (assertFailure, testCase, (@?), (@?=))
 
@@ -35,7 +36,7 @@
         obj <- try @SomeException $ runMockQueryT runTestQuery []
         case obj of
           Right _ -> assertFailure "MockQueryT did not error"
-          Left e -> (head . lines . show) e @?= "No more mocked responses for query: test"
+          Left e -> (listToMaybe . lines . show) e @?= Just "No more mocked responses for query: test"
     , testCase "MockQueryT removes mock after use" $ do
         obj <-
           try @SomeException $
