diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,15 @@
 Changelog
 =========
 
+Version 0.1.2.2
+---------------
+
+*May 19, 2023*
+
+<https://github.com/mstksg/functor-products/releases/tag/v0.1.2.2>
+
+*   Fix building on GHC 9.8
+
 Version 0.1.2.1
 ---------------
 
diff --git a/functor-products.cabal b/functor-products.cabal
--- a/functor-products.cabal
+++ b/functor-products.cabal
@@ -1,7 +1,7 @@
 cabal-version: 1.12
 
 name:           functor-products
-version:        0.1.2.1
+version:        0.1.2.2
 synopsis:       General functor products for various Foldable instances
 description:    Generalizes the Rec type in vinyl to work over various different Foldable
                 instances, instead of just lists.  Provides a unifying abstraction for all
@@ -36,9 +36,9 @@
   ghc-options: -Wall -Wcompat -Wredundant-constraints -Wwarn=incomplete-patterns
   build-depends:
       base >=4.16 && <5,
-      microlens           < 0.5,
-      singletons          >= 3.0 && < 3.1,
-      singletons-base     < 3.4,
-      text                < 1.3,
-      vinyl               < 0.15
+      microlens,
+      singletons >= 3.0,
+      singletons-base,
+      text,
+      vinyl
   default-language: Haskell2010
diff --git a/src/Data/Type/Functor/Product.hs b/src/Data/Type/Functor/Product.hs
--- a/src/Data/Type/Functor/Product.hs
+++ b/src/Data/Type/Functor/Product.hs
@@ -1,4 +1,5 @@
 {-# LANGUAGE AllowAmbiguousTypes #-}
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE ConstraintKinds #-}
 {-# LANGUAGE DataKinds #-}
 {-# LANGUAGE EmptyCase #-}
@@ -435,7 +436,11 @@
 
 deriving instance Show (SIndex as a i)
 
+#if __GLASGOW_HASKELL__ >= 908
+type instance forall as a. Sing = SIndex as a :: Index as a -> Type
+#else
 type instance Sing = SIndex as a :: Index as a -> Type
+#endif
 
 instance SingI 'IZ where
   sing = SIZ
@@ -578,7 +583,11 @@
 
 deriving instance Show (SIJust as a i)
 
+#if __GLASGOW_HASKELL__ >= 908
+type instance forall as a. Sing = SIJust as a :: IJust as a -> Type
+#else
 type instance Sing = SIJust as a :: IJust as a -> Type
+#endif
 
 instance SingI 'IJust where
   sing = SIJust
@@ -675,7 +684,11 @@
 
 deriving instance Show (SIRight as a i)
 
+#if __GLASGOW_HASKELL__ >= 908
+type instance forall as a. Sing = SIRight as a :: IRight as a -> Type
+#else
 type instance Sing = SIRight as a :: IRight as a -> Type
+#endif
 
 instance SingI 'IRight where
   sing = SIRight
@@ -771,7 +784,11 @@
 
 deriving instance Show (SNEIndex as a i)
 
+#if __GLASGOW_HASKELL__ >= 908
+type instance forall as a. Sing = SNEIndex as a :: NEIndex as a -> Type
+#else
 type instance Sing = SNEIndex as a :: NEIndex as a -> Type
+#endif
 
 instance SingI 'NEHead where
   sing = SNEHead
@@ -903,8 +920,13 @@
 
 deriving instance Show (SISnd as a i)
 
+#if __GLASGOW_HASKELL__ >= 908
+type instance forall as a. Sing = SISnd as a :: ISnd as a -> Type
+#else
 type instance Sing = SISnd as a :: ISnd as a -> Type
+#endif
 
+
 instance SingI 'ISnd where
   sing = SISnd
 
@@ -971,7 +993,11 @@
 
 deriving instance Show (SIIdentity as a i)
 
+#if __GLASGOW_HASKELL__ >= 908
+type instance forall as a. Sing = SIIdentity as a :: IIdentity as a -> Type
+#else
 type instance Sing = SIIdentity as a :: IIdentity as a -> Type
+#endif
 
 instance SingI 'IId where
   sing = SIId
