diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,9 +2,13 @@
 
 Latest version: https://github.com/Lysxia/generic-random/blob/master/changelog.md
 
+# 1.5.1.0
+
+- Support GHC 9.2
+
 # 1.5.0.0
 
-- Add newtypes for `DerivingVia`
+- Add newtypes for `DerivingVia` (thanks, blackheaven)
 - Drop compatibility with GHC 8.0 and 8.2
 
 # 1.4.0.0
diff --git a/generic-random.cabal b/generic-random.cabal
--- a/generic-random.cabal
+++ b/generic-random.cabal
@@ -1,5 +1,5 @@
 name:                generic-random
-version:             1.5.0.0
+version:             1.5.0.1
 synopsis:            Generic random generators for QuickCheck
 description:
     Derive instances of @Arbitrary@ for QuickCheck,
@@ -23,7 +23,7 @@
 build-type:          Simple
 extra-source-files:  README.md CHANGELOG.md
 cabal-version:       >=1.10
-tested-with:         GHC == 8.4.1, GHC == 8.6.1, GHC == 8.8.4, GHC == 8.10.5, GHC == 9.0.1
+tested-with:         GHC == 8.4.1, GHC == 8.6.1, GHC == 8.8.4, GHC == 8.10.5, GHC == 9.0.1, GHC == 9.2.1
 
 library
   hs-source-dirs:      src
diff --git a/src/Generic/Random/Internal/BaseCase.hs b/src/Generic/Random/Internal/BaseCase.hs
--- a/src/Generic/Random/Internal/BaseCase.hs
+++ b/src/Generic/Random/Internal/BaseCase.hs
@@ -188,7 +188,9 @@
   gbcs y z = fmap M1 (gbcs y z)
 
 instance
-  ( GBCSSum f g z e yf yg
+  ( Alternative (IfM y Weighted Proxy)  -- logically redundant, but GHC isn't clever
+                                        -- enough to deduce; see #32
+  , GBCSSum f g z e yf yg
   , GBCS f z yf e
   , GBCS g z yg e
   , y ~ (yf ||? yg)
@@ -236,7 +238,9 @@
   gbcsSumCompare _ _ _ g = fmap R1 g
 
 instance
-  ( GBCSProduct f g z e yf yg
+  ( Alternative (IfM y Weighted Proxy)  -- logically redundant, but GHC isn't clever
+                                        -- enough to deduce; see #32
+  , GBCSProduct f g z e yf yg
   , GBCS f z yf e
   , GBCS g z yg e
   , y ~ (yf &&? yg)
@@ -310,6 +314,8 @@
 instance (Generic a, GBCS (Rep a) z y e, IsMaybe y)
   => GBaseCaseSearch a z y e where
   gBaseCaseSearch y z = ifMmap y
-    (\(Weighted (Just (g, n))) -> choose (0, n-1) >>= fmap to . g)
+    (\(Weighted gn) -> case gn of
+      Just (g, n) -> choose (0, n-1) >>= fmap to . g
+      Nothing -> error "How could this happen?")
     (\Proxy -> Proxy)
     (gbcs y z)
