diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,11 @@
 
 [Current version](https://gitlab.com/lysxia/fcf-family/-/blob/main/fcf-family/CHANGELOG.md)
 
+## 0.2.0.3 - 2026-01-07
+
+- Compatibility with GHC 9.14.1
+- Drop support for GHC 9.8 and older
+
 ## 0.2.0.2 - 2024-01-24
 
 - Compatibility up to GHC 9.12.1
diff --git a/fcf-family.cabal b/fcf-family.cabal
--- a/fcf-family.cabal
+++ b/fcf-family.cabal
@@ -1,6 +1,6 @@
 cabal-version:      3.0
 name:               fcf-family
-version:            0.2.0.2
+version:            0.2.0.3
 synopsis: Family of families: featherweight defunctionalization
 description:
   Promote regular type families to first-class,
@@ -15,7 +15,7 @@
 category:           Other
 build-type:         Simple
 extra-doc-files:    CHANGELOG.md, README.md
-tested-with: GHC == { 9.0.2, 9.2.2, 9.4.1 }
+tested-with: GHC == { 9.10.3, 9.12.2, 9.14.1 }
 
 common warnings
     ghc-options: -Wall
@@ -30,7 +30,7 @@
       first-class-families,
       containers,
       template-haskell,
-      base >=4.15 && < 4.22
+      base >=4.20 && < 4.23
     hs-source-dirs:   src
     default-language: Haskell2010
 
diff --git a/src/Fcf/Family.hs b/src/Fcf/Family.hs
--- a/src/Fcf/Family.hs
+++ b/src/Fcf/Family.hs
@@ -5,6 +5,7 @@
   RankNTypes,
   ScopedTypeVariables,
   StandaloneKindSignatures,
+  TypeAbstractions,
   TypeFamilies,
   TypeOperators,
   UndecidableInstances #-}
@@ -273,7 +274,8 @@
 type P6 = PS P5
 type P7 = PS P6
 
-type PS (p :: Proxy ks) = ('Proxy :: Proxy '(k, ks))
+type PS :: forall kk kks (k :: kk) (ks :: kks). Proxy ks -> Proxy '(k, ks)
+type PS p = 'Proxy
 
 -- * Coercions
 
diff --git a/src/Fcf/Family/TH.hs b/src/Fcf/Family/TH.hs
--- a/src/Fcf/Family/TH.hs
+++ b/src/Fcf/Family/TH.hs
@@ -25,13 +25,11 @@
   , isTypeFamilyOrSynonym
   ) where
 
-import Control.Applicative (liftA2)
 import Control.Monad (when)
 import Data.Function (on)
 import Data.Functor (($>))
 import Data.List (sort)
 import Data.Maybe (fromMaybe)
-import Data.Foldable (foldl')
 import Data.Traversable (for)
 import Data.Set (Set)
 import qualified Data.Set as Set
