diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.5.1 (2024-04-10)
+* remove spurious constraint in Traverse.Sum (should be same semantics)
+* bump text upper bound for GHC 9.8 compatibility
+
 ## 0.5.0 (2024-04-05)
 * Remove `SumOpts` type used for switching whether or not to permit "singleton
   sum types" for sum handlers. This was a type-level switch which changed
diff --git a/generic-data-functions.cabal b/generic-data-functions.cabal
--- a/generic-data-functions.cabal
+++ b/generic-data-functions.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           generic-data-functions
-version:        0.5.0
+version:        0.5.1
 synopsis:       Familiar functions lifted to generic data types
 description:    Please see README.md.
 category:       Data, Generics
@@ -65,5 +65,5 @@
   build-depends:
       base >=4.14 && <5
     , contravariant >=1.5.5 && <1.6
-    , text >=1.2.5.0 && <2.1
+    , text >=1.2.5.0 && <2.2
   default-language: GHC2021
diff --git a/src/Generic/Data/Function/Common/Error.hs b/src/Generic/Data/Function/Common/Error.hs
--- a/src/Generic/Data/Function/Common/Error.hs
+++ b/src/Generic/Data/Function/Common/Error.hs
@@ -9,7 +9,7 @@
     <> "  got: "<>msgGot<>"\n"
     <> "  but: "<>msgWhyBad<>"\n"
     <> "If you like, you can catch such errors during compilation.\n"
-    <> "See the generic-data-asserts package on Hackage."
+    <> "See the generic-type-asserts package on Hackage."
 
 eNoEmpty :: String
 eNoEmpty = wrapE "empty data type" "disallowed"
diff --git a/src/Generic/Data/Function/Traverse/Constructor.hs b/src/Generic/Data/Function/Traverse/Constructor.hs
--- a/src/Generic/Data/Function/Traverse/Constructor.hs
+++ b/src/Generic/Data/Function/Traverse/Constructor.hs
@@ -15,7 +15,7 @@
 import Data.Kind ( type Type, type Constraint )
 
 import Generic.Data.Wrappers ( NoRec0, type ENoRec0, EmptyRec0 )
-import GHC.TypeLits ( TypeError )
+import GHC.TypeError ( TypeError, ErrorMessage(..) )
 
 -- import Data.Monoid
 
@@ -49,7 +49,21 @@
     --
     -- Defaults to 'error', but you may wrap it in your functor if it pleases.
     genericTraverseV1 :: GenericTraverseF tag (V1 p)
+    -- NOTE: Prior to GHC 9.8, we can't default to a compile-time error here,
+    -- due to TypeError limitations. From GHC 9.8, we can use Unsatisfiable.
+    -- But I'm still not sure it works how I would like it to. Let's just stick
+    -- with 'error' for now. One can always use generic-type-asserts.
+    {-
+    default genericTraverseV1
+        :: Unsatisfiable (ENoEmpty tag) => GenericTraverseF tag (V1 p)
+    genericTraverseV1 = unsatisfiable
+    -}
     genericTraverseV1 = error eNoEmpty
+
+type ENoEmpty tag =
+         'Text "Attempted to derive generic traverse for the void data type"
+    :$$: 'Text "To override, implement genericTraverseV1 on:"
+    :$$: 'Text "instance GenericTraverse (" :<>: 'ShowType tag :<>: 'Text ")"
 
 -- | 'traverse' over types with no fields in any constructor.
 instance GenericTraverse (NoRec0 (f :: Type -> Type)) where
diff --git a/src/Generic/Data/Function/Traverse/Sum.hs b/src/Generic/Data/Function/Traverse/Sum.hs
--- a/src/Generic/Data/Function/Traverse/Sum.hs
+++ b/src/Generic/Data/Function/Traverse/Sum.hs
@@ -47,6 +47,7 @@
   }
 
 class GTraverseSum tag gf where
+    -- have to stuff pt constraint in here because we can't access pt externally
     gTraverseSum
         :: GenericTraverseC tag pt
         => PfxTagCfg pt -> GenericTraverseF tag (gf p)
@@ -57,8 +58,7 @@
 -- | Test all constructors of the given non-void data type; if they all fail,
 --   run a failure action and pass it all the constructors names in the type.
 instance
-  ( GenericTraverseC tag pt
-  , Alternative (GenericTraverseF tag)
+  ( Alternative (GenericTraverseF tag)
   , Monad (GenericTraverseF tag)
   , GenericTraverseSum tag, GTraverseCSum tag cd gf
   , Datatype cd
