diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,8 @@
+# effectful-th-1.0.0.2 (2024-06-07)
+* Add support for GHC 9.10.
+* Drop support for GHC 8.8.
+* `makeEffect` no longer generates `Wunused-type-patterns` warning ([#200](https://github.com/haskell-effectful/effectful/pull/200)).
+
 # effectful-th-1.0.0.1 (2023-01-13)
 * Depend on `effectful-core`, not `effectful`.
 
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -38,7 +38,7 @@
 [freer-simple](https://hackage.haskell.org/package/freer-simple),
 [fused-effects](https://hackage.haskell.org/package/fused-effects),
 [polysemy](https://hackage.haskell.org/package/polysemy),
-[eff](https://github.com/hasura/eff) and probably a few more.
+[eff](https://github.com/lexi-lambda/eff) and probably a few more.
 
 It needs to be noted that of all of them only the work-in-progress `eff` library
 is a promising proposition because of reasonable performance characteristics
@@ -161,7 +161,8 @@
 For the examples see the *Introduction* sections of
 [`Effectful.Dispatch.Dynamic`](https://hackage.haskell.org/package/effectful-core/docs/Effectful-Dispatch-Dynamic.html)
 and
-[`Effectful.Dispatch.Static`](https://hackage.haskell.org/package/effectful-core/docs/Effectful-Dispatch-Static.html).
+[`Effectful.Dispatch.Static`](https://hackage.haskell.org/package/effectful-core/docs/Effectful-Dispatch-Static.html)
+(when in doubt, start with dynamic dispatch).
 
 ## Acknowledgements
 
diff --git a/effectful-th.cabal b/effectful-th.cabal
--- a/effectful-th.cabal
+++ b/effectful-th.cabal
@@ -1,7 +1,7 @@
-cabal-version:      2.4
+cabal-version:      3.0
 build-type:         Simple
 name:               effectful-th
-version:            1.0.0.1
+version:            1.0.0.2
 license:            BSD-3-Clause
 license-file:       LICENSE
 category:           Control
@@ -17,7 +17,7 @@
   CHANGELOG.md
   README.md
 
-tested-with: GHC ==8.8.4 || ==8.10.7 || ==9.0.2 || ==9.2.5 || ==9.4.4
+tested-with: GHC == { 8.10.7, 9.0.2, 9.2.8, 9.4.8, 9.6.5, 9.8.2, 9.10.1 }
 
 bug-reports:   https://github.com/haskell-effectful/effectful/issues
 source-repository head
@@ -26,6 +26,7 @@
 
 common language
     ghc-options:        -Wall -Wcompat -Wno-unticked-promoted-constructors
+                        -Werror=prepositive-qualified-module
 
     default-language:   Haskell2010
 
@@ -38,6 +39,7 @@
                         FlexibleInstances
                         GADTs
                         GeneralizedNewtypeDeriving
+                        ImportQualifiedPost
                         LambdaCase
                         MultiParamTypeClasses
                         NoStarIsType
@@ -54,12 +56,12 @@
 library
     import:         language
 
-    build-depends:    base                >= 4.13      && < 5
+    build-depends:    base                >= 4.14      && < 5
                     , containers          >= 0.6
                     , effectful-core      >= 1.0.0.0   && < 3.0.0.0
                     , exceptions          >= 0.10.4
-                    , template-haskell    >= 2.15      && < 2.20
-                    , th-abstraction      >= 0.4       && < 0.5
+                    , template-haskell    >= 2.16      && < 2.23
+                    , th-abstraction      >= 0.6       && < 0.8
 
     hs-source-dirs:  src
 
diff --git a/src/Effectful/TH.hs b/src/Effectful/TH.hs
--- a/src/Effectful/TH.hs
+++ b/src/Effectful/TH.hs
@@ -9,12 +9,12 @@
 
 import Control.Monad
 import Data.Char (toLower)
-import Data.Foldable (foldl')
+import Data.Foldable qualified as F
+import Data.Map.Strict qualified as Map
 import Data.Maybe
 import Language.Haskell.TH
 import Language.Haskell.TH.Datatype
 import Language.Haskell.TH.Datatype.TyVarBndr
-import qualified Data.Map.Strict as Map
 
 import Effectful
 import Effectful.Dispatch.Dynamic
@@ -33,7 +33,7 @@
 --
 -- >>> :kind! DispatchOf E
 -- DispatchOf E :: Dispatch
--- = 'Dynamic
+-- ...Dynamic
 --
 -- >>> :i op1
 -- op1 :: (HasCallStack, E :> es) => Int -> Eff es a -> Eff es a
@@ -76,7 +76,7 @@
   checkRequiredExtensions
   info <- reifyDatatype effName
   dispatch <- do
-    e <- getEff (ConT $ datatypeName info) (datatypeInstTypes info)
+    e <- getEff (ConT $ datatypeName info) (const WildCardT <$> datatypeInstTypes info)
     let dispatchE = ConT ''DispatchOf `AppT` e
         dynamic   = PromotedT 'Dynamic
     pure . TySynInstD $ TySynEqn Nothing dispatchE dynamic
@@ -168,27 +168,23 @@
   --
   -- Sadly the version for GHC < 9 will not compile due to ambiguity error.
   let fnBody =
-        let tvFlag = \case
-              PlainTV  _ flag   -> flag
-              KindedTV _ flag _ -> flag
-
-            tyApps = (`mapMaybe` origActionVars) $ \v -> case tvFlag v of
+        let tyApps = (`mapMaybe` origActionVars) $ \v -> case tvFlag v of
               InferredSpec  -> Nothing
               SpecifiedSpec -> Just $ if maybeMonadName == Just (tvName v)
                                       then ConT ''Eff `AppT` esVar
                                       else VarT (tvName v)
 
             effCon = if makeSig
-              then foldl' AppTypeE (ConE name) tyApps
+              then F.foldl' AppTypeE (ConE name) tyApps
               else                  ConE name
-        in VarE 'send `AppE` foldl' (\f -> AppE f . VarE) effCon fnArgs
+        in VarE 'send `AppE` F.foldl' (\f -> AppE f . VarE) effCon fnArgs
 #else
   -- In GHC < 9.0, generate the following body:
   --
   -- e :: E v1 .. vN :> es => x1 -> .. -> xK -> E v1 .. vN (Eff es) r
   -- e x1 .. xK = send (E x1 .. xN :: E v1 .. vK (Eff es) r)
   let fnBody =
-        let effOp  = foldl' (\f -> AppE f . VarE) (ConE name) fnArgs
+        let effOp  = F.foldl' (\f -> AppE f . VarE) (ConE name) fnArgs
             effSig = effTy `AppT` (ConT ''Eff `AppT` esVar) `AppT` substM resTy
         in if makeSig
            then VarE 'send `AppE` SigE effOp effSig
@@ -198,8 +194,15 @@
         (ConT ''HasCallStack : UInfixT effTy ''(:>) esVar : actionCtx)
         (makeTyp esVar substM resTy actionParams)
 
-  let rest = FunD fnName [Clause (VarP <$> fnArgs) (NormalB fnBody) []]
-           : maybeToList ((`InfixD` name) <$> fixity)
+  let mkDec fix =
+#if MIN_VERSION_template_haskell(2,22,0)
+        InfixD fix DataNamespaceSpecifier name
+#else
+        InfixD fix name
+#endif
+      rest = FunD fnName [Clause (VarP <$> fnArgs) (NormalB fnBody) []]
+           : maybeToList (mkDec <$> fixity)
+
   (++ rest) <$> withHaddock name [SigD fnName fnSig | makeSig]
 
 ----------------------------------------
diff --git a/tests/ThTests.hs b/tests/ThTests.hs
--- a/tests/ThTests.hs
+++ b/tests/ThTests.hs
@@ -17,6 +17,9 @@
   = SimpleADTC1 Int
   | SimpleADTC2 String
 
+-- Test generation of fixity information.
+infixl 1 `SimpleADTC1`
+
 makeEffect ''SimpleADT
 
 data ADTSyntax1 (m :: Type -> Type) (a :: Type)
