diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,6 @@
+## 0.3.1 (2024-04-03)
+* fix error in traverse types
+
 ## 0.3.0 (2024-04-03)
 * Use type tags, push actual target types into a type family. It means more
   required type annotations, but this is fine by me as I think this library
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.3.0
+version:        0.3.1
 synopsis:       Familiar functions lifted to generic data types
 description:    Please see README.md.
 category:       Data, Serialization
diff --git a/src/Generic/Data/Function/FoldMap.hs b/src/Generic/Data/Function/FoldMap.hs
--- a/src/Generic/Data/Function/FoldMap.hs
+++ b/src/Generic/Data/Function/FoldMap.hs
@@ -47,12 +47,11 @@
 --
 -- @a@ must have exactly one constructor.
 genericFoldMapNonSum
-    :: forall {cd} {f} asserts tag {m} a
-    .  ( Generic a, Rep a ~ D1 cd f
-       , m ~ GenericFoldMapM tag
-       , GFoldMapNonSum tag f
-       , ApplyGCAsserts asserts f)
-    => a -> m
+    :: forall {cd} {gf} asserts tag a
+    .  ( Generic a, Rep a ~ D1 cd gf
+       , GFoldMapNonSum tag gf
+       , ApplyGCAsserts asserts gf)
+    => a -> GenericFoldMapM tag
 genericFoldMapNonSum = gFoldMapNonSum @tag . unM1 . from
 
 -- | Generic 'foldMap' over a term of sum data type @a@.
@@ -62,13 +61,12 @@
 -- This is the most generic option, but depending on your string manipulation
 -- may be slower.
 genericFoldMapSum
-    :: forall {cd} {f} opts asserts tag {m} a
-    .  ( Generic a, Rep a ~ D1 cd f
-       , m ~ GenericFoldMapM tag
-       , GFoldMapSum opts tag f
-       , ApplyGCAsserts asserts f)
-    => (String -> m)
-    -> a -> m
+    :: forall {cd} {gf} opts asserts tag a
+    .  ( Generic a, Rep a ~ D1 cd gf
+       , GFoldMapSum opts tag gf
+       , ApplyGCAsserts asserts gf)
+    => (String -> GenericFoldMapM tag)
+    -> a -> GenericFoldMapM tag
 genericFoldMapSum f = gFoldMapSum @opts @tag f . unM1 . from
 
 -- | Generic 'foldMap' over a term of sum data type @a@ where constructors are
@@ -81,8 +79,8 @@
 -- This should be fairly fast, but sadly I think it's slower than the generics
 -- in store and binary/cereal libraries.
 genericFoldMapSumConsByte
-    :: forall tag {m} a
-    .  (m ~ GenericFoldMapM tag, Generic a, GFoldMapSumConsByte tag (Rep a))
-    => (Word8 -> m)
-    -> a -> m
+    :: forall tag a
+    .  (Generic a, GFoldMapSumConsByte tag (Rep a))
+    => (Word8 -> GenericFoldMapM tag)
+    -> a -> GenericFoldMapM tag
 genericFoldMapSumConsByte f = gFoldMapSumConsByte @tag f . from
diff --git a/src/Generic/Data/Function/Traverse.hs b/src/Generic/Data/Function/Traverse.hs
--- a/src/Generic/Data/Function/Traverse.hs
+++ b/src/Generic/Data/Function/Traverse.hs
@@ -27,10 +27,10 @@
 
 -- | Generic 'traverse' over a term of non-sum data type @f a@.
 genericTraverseNonSum
-    :: forall {cd} {gf} asserts tag a
+    :: forall {cd} {gf} {k} asserts (tag :: k) a
     .  ( Generic a, Rep a ~ D1 cd gf
        , GTraverseNonSum cd tag gf
-       , ApplyGCAsserts asserts tag
+       , ApplyGCAsserts asserts gf
        , Functor (GenericTraverseF tag))
     => GenericTraverseF tag a
 genericTraverseNonSum = (to . M1) <$> gTraverseNonSum @cd @tag
@@ -42,7 +42,7 @@
     :: forall {cd} {gf} opts asserts tag a pt
     .  ( Generic a, Rep a ~ D1 cd gf
        , GTraverseSum opts cd tag gf
-       , ApplyGCAsserts asserts tag
+       , ApplyGCAsserts asserts gf
        , GenericTraverseC tag pt, Functor (GenericTraverseF tag))
     => PfxTagCfg pt
     -> GenericTraverseF tag a
