diff --git a/CHANGELOG.markdown b/CHANGELOG.markdown
--- a/CHANGELOG.markdown
+++ b/CHANGELOG.markdown
@@ -1,3 +1,13 @@
+4.5.4 [2023.02.19]
+------------------
+* Add a `Num (Scalar (Scalar t))` constraint to `On`'s `Mode` instance, which is
+  required to make it typecheck with GHC 9.6.
+
+  (Note that this constraint was already present implicitly due to superclass
+  expansion, so this is not a breaking change. The only reason that it must be
+  added explicitly with GHC 9.6 or later is due to 9.6 being more conservative
+  with superclass expansion.)
+
 4.5.3 [2023.01.21]
 ------------------
 * Support building with GHC 9.6.
diff --git a/ad.cabal b/ad.cabal
--- a/ad.cabal
+++ b/ad.cabal
@@ -1,5 +1,5 @@
 name:          ad
-version:       4.5.3
+version:       4.5.4
 license:       BSD3
 license-File:  LICENSE
 copyright:     (c) Edward Kmett 2010-2021,
diff --git a/src/Numeric/AD/Internal/On.hs b/src/Numeric/AD/Internal/On.hs
--- a/src/Numeric/AD/Internal/On.hs
+++ b/src/Numeric/AD/Internal/On.hs
@@ -37,7 +37,7 @@
   , InvErf, RealFloat, Typeable
   )
 
-instance (Mode t, Mode (Scalar t)) => Mode (On t) where
+instance (Mode t, Mode (Scalar t), Num (Scalar (Scalar t))) => Mode (On t) where
   type Scalar (On t) = Scalar (Scalar t)
   auto = On . auto . auto
   isKnownZero (On n) = isKnownZero n
