diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,6 @@
+# effectful-plugin-1.1.0.2 (2023-09-13)
+* Add support for GHC 9.8.
+
 # effectful-plugin-1.1.0.1 (2023-03-13)
 * Show accurate error message in GHC >= 9.4 if `Effectful.Internal.Effect` is
   not found.
diff --git a/effectful-plugin.cabal b/effectful-plugin.cabal
--- a/effectful-plugin.cabal
+++ b/effectful-plugin.cabal
@@ -1,7 +1,7 @@
 cabal-version:      2.4
 build-type:         Simple
 name:               effectful-plugin
-version:            1.1.0.1
+version:            1.1.0.2
 license:            BSD-3-Clause
 license-file:       LICENSE
 category:           Control
@@ -17,7 +17,8 @@
 extra-source-files: CHANGELOG.md
                     README.md
 
-tested-with: GHC ==8.8.4 || ==8.10.7 || ==9.0.2 || ==9.2.7 || ==9.4.4 || ==9.6.1
+tested-with: GHC ==8.8.4 || ==8.10.7 || ==9.0.2 || ==9.2.8 || ==9.4.7 || ==9.6.2
+              || ==9.8.1
 
 bug-reports:   https://github.com/haskell-effectful/effectful/issues
 source-repository head
@@ -57,7 +58,7 @@
     build-depends:    base                >= 4.13      && < 5
                     , effectful-core      >= 1.0.0.0   && < 3.0.0.0
                     , containers          >= 0.5
-                    , ghc                 >= 8.6       && < 9.7
+                    , ghc                 >= 8.8       && < 9.9
 
     if impl(ghc < 9.4)
       build-depends:  ghc-tcplugins-extra >= 0.3       && < 0.5
diff --git a/src/Effectful/Plugin.hs b/src/Effectful/Plugin.hs
--- a/src/Effectful/Plugin.hs
+++ b/src/Effectful/Plugin.hs
@@ -32,6 +32,9 @@
   ( Ct (..)
   , CtEvidence (..)
   , CtLoc
+#if __GLASGOW_HASKELL__ >= 908
+  , DictCt (..)
+#endif
   , ctPred
   , emptyRewriterSet
   )
@@ -221,9 +224,15 @@
     -- Determine whether a given constraint is of form 'e :> es'.
     maybeEffGiven :: Ct -> Maybe EffGiven
     maybeEffGiven = \case
+#if __GLASGOW_HASKELL__ < 908
       CDictCan { cc_class = cls
                , cc_tyargs = [eff, es]
                } ->
+#else
+      CDictCan DictCt { di_cls = cls
+                      , di_tys = [eff, es]
+                      } ->
+#endif
         if cls == elemCls
         then Just EffGiven { givenEffHead = fst $ splitAppTys eff
                            , givenEff = eff
@@ -235,10 +244,17 @@
     -- Determine whether a wanted constraint is of form 'e :> es'.
     splitWanteds :: Ct -> Either PredType EffWanted
     splitWanteds = \case
+#if __GLASGOW_HASKELL__ < 908
       ct@CDictCan { cc_ev = CtWanted { ctev_loc = loc }
                , cc_class = cls
                , cc_tyargs = [eff, es]
                } ->
+#else
+      ct@(CDictCan DictCt { di_ev = CtWanted { ctev_loc = loc }
+                          , di_cls = cls
+                          , di_tys = [eff, es]
+                          }) ->
+#endif
         if cls == elemCls
         then Right EffWanted { wantedEffHead = fst $ splitAppTys eff
                              , wantedEff = eff
