diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+## [0.9.4]
+### Changed
+- (#86) Add support for GHC 9.2 and Template Haskell 2.18
+
 ## [0.9.3]
 ### Added
 - `newEntity_ = void . newEntity`
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -13,12 +13,14 @@
 
 ### Links
 - [documentation on hackage](https://hackage.haskell.org/package/apecs/docs/Apecs.html)
-- [tutorial](https://github.com/jonascarpay/apecs/blob/master/examples/Shmup.md) and other [examples](../examples/)
+- [tutorial](https://github.com/jonascarpay/apecs/blob/master/examples/Shmup.md) and other [examples](https://github.com/jonascarpay/apecs/tree/master/examples)
 
 ##### Games/articles
 - [An Introduction to Developing Games in Haskell with Apecs](https://aas.sh/blog/making-a-game-with-haskell-and-apecs/)
 - [mallRL](https://github.com/nmaehlmann/mallRL) - a _grocery shopping roguelike_
 - [An implementation of the Unity tutorial project using apecs](https://github.com/mewhhaha/apecs-unity-tutorial-haskell)
+- [SpaceMar](https://gitlab.com/dpwiz/spacemar)
+- [Achtung die haskell](https://github.com/mewhhaha/achtung-die-haskell)
 - [(Your game here)](https://github.com/jonascarpay/apecs/pulls)
 
 ##### Packages
diff --git a/apecs.cabal b/apecs.cabal
--- a/apecs.cabal
+++ b/apecs.cabal
@@ -1,5 +1,5 @@
 name:               apecs
-version:            0.9.3
+version:            0.9.4
 homepage:           https://github.com/jonascarpay/apecs#readme
 license:            BSD3
 license-file:       LICENSE
@@ -13,8 +13,8 @@
   apecs is a fast, type-driven Entity-Component-System library for game programming.
 
 extra-source-files:
-  README.md
   CHANGELOG.md
+  README.md
 
 source-repository head
   type:     git
diff --git a/src/Apecs/THTuples.hs b/src/Apecs/THTuples.hs
--- a/src/Apecs/THTuples.hs
+++ b/src/Apecs/THTuples.hs
@@ -91,13 +91,18 @@
 
       -- s, ety, w arguments
       sNs = [ mkName $ "s_" ++ show i | i <- [0..n-1]]
-      sPat = ConP tupleName (VarP <$> sNs)
       sEs = VarE <$> sNs
       etyN = mkName "ety"
       etyE = VarE etyN
       etyPat = VarP etyN
       wNs = [ mkName $ "w_" ++ show i | i <- [0..n-1]]
+#if MIN_VERSION_template_haskell(2,18,0)
+      sPat = ConP tupleName [] (VarP <$> sNs)
+      wPat = ConP tupleName [] (VarP <$> wNs)
+#else
+      sPat = ConP tupleName (VarP <$> sNs)
       wPat = ConP tupleName (VarP <$> wNs)
+#endif
       wEs = VarE <$> wNs
 
       getN     = mkName "ExplGet"
@@ -130,8 +135,13 @@
 
       explExistsAnd va vb =
         AppE (AppE (VarE '(>>=)) va)
+#if MIN_VERSION_template_haskell(2,18,0)
+          (LamCaseE [ Match (ConP 'False [] []) (NormalB$ AppE (VarE 'return) (ConE 'False)) []
+                    , Match (ConP 'True [] []) (NormalB vb) []
+#else
           (LamCaseE [ Match (ConP 'False []) (NormalB$ AppE (VarE 'return) (ConE 'False)) []
                     , Match (ConP 'True []) (NormalB vb) []
+#endif
                     ])
 
       explMembersFold va vb = AppE (VarE '(>>=)) va `AppE` AppE (VarE 'U.filterM) vb
