diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,6 @@
+## 0.2.0 (2024-04-05)
+* split errors out into own module
+
 ## 0.1.1 (2024-04-04)
 Initial release.
 
diff --git a/generic-data-asserts.cabal b/generic-data-asserts.cabal
--- a/generic-data-asserts.cabal
+++ b/generic-data-asserts.cabal
@@ -5,10 +5,10 @@
 -- see: https://github.com/sol/hpack
 
 name:           generic-data-asserts
-version:        0.1.1
+version:        0.2.0
 synopsis:       Structural assertions on generic data representations.
 description:    Please see README.md.
-category:       Data, Serialization
+category:       Data, Generics
 homepage:       https://github.com/raehik/generic-rep-asserts#readme
 bug-reports:    https://github.com/raehik/generic-rep-asserts/issues
 author:         Ben Orchard
@@ -27,6 +27,7 @@
 library
   exposed-modules:
       Generic.Data.Rep.Assert
+      Generic.Data.Rep.Error
   other-modules:
       Paths_generic_data_asserts
   hs-source-dirs:
diff --git a/src/Generic/Data/Rep/Assert.hs b/src/Generic/Data/Rep/Assert.hs
--- a/src/Generic/Data/Rep/Assert.hs
+++ b/src/Generic/Data/Rep/Assert.hs
@@ -5,21 +5,14 @@
 module Generic.Data.Rep.Assert where
 
 import GHC.Generics
-import GHC.TypeError
-import GHC.TypeLits ( type Symbol )
-import Data.Kind ( type Constraint )
-
-type GAssertError :: k -> Symbol -> Constraint
-type GAssertError a msg = TypeError
-         ('Text "Assertion on generic representation failed for type: "
-    :<>: 'ShowType a
-    :$$: 'Text "Message: " :<>: 'Text msg)
+import Generic.Data.Rep.Error
+import GHC.TypeError ( Assert )
 
 type family StripD1 a where StripD1 (D1 _ a) = a
 
 -- | Type is not void i.e. has at least one constructor.
-type GAssertNotVoid a = Assert (IsNotVoid (StripD1 (Rep a)))
-    (GAssertError a "not non-void type (>=1 constructor)")
+type GAssertNotVoid a =
+    Assert (IsNotVoid (StripD1 (Rep a))) (GAssertErrorVoid a)
 type family IsNotVoid a where
     IsNotVoid V1  = False
     IsNotVoid _ = True
@@ -27,8 +20,8 @@
 -- | Type is not a sum type i.e. has at most one constructor.
 --
 -- Permits void types.
-type GAssertNotSum a = Assert (IsNotSum (StripD1 (Rep a)))
-    (GAssertError a "not non-sum type (1 constructor)")
+type GAssertNotSum a =
+    Assert (IsNotSum (StripD1 (Rep a))) (GAssertErrorSum a)
 type family IsNotSum a where
     IsNotSum (_ :+: _) = False
     IsNotSum _ = True
@@ -36,8 +29,8 @@
 -- | Type is a sum type i.e. has >=2 constructors.
 --
 -- Permits void types.
-type GAssertSum a = Assert (IsSum (StripD1 (Rep a)))
-    (GAssertError a "not sum type (>=2 constructors)")
+type GAssertSum a =
+    Assert (IsSum (StripD1 (Rep a))) (GAssertErrorNotSum a)
 type family IsSum a where
     IsSum (C1 _ _) = False
     IsSum _ = True
@@ -45,8 +38,8 @@
 -- | Type has only empty constructors.
 --
 -- Permits void types.
-type GAssertEnum a = Assert (IsEnum (StripD1 (Rep a)))
-    (GAssertError a "not enum type (all empty constructors)")
+type GAssertEnum a =
+    Assert (IsEnum (StripD1 (Rep a))) (GAssertErrorNotEnum a)
 type family IsEnum a where
     IsEnum V1 = True
     IsEnum (C1 _ a) = ConsIsEmpty a
diff --git a/src/Generic/Data/Rep/Error.hs b/src/Generic/Data/Rep/Error.hs
new file mode 100644
--- /dev/null
+++ b/src/Generic/Data/Rep/Error.hs
@@ -0,0 +1,30 @@
+-- | Descriptive type errors for generic representation assertion failures.
+--
+-- These are potentially useful separately from the asserts, in places where
+-- we're unable to perform asserts which evaluate to 'Constraint's e.g. type
+-- families, so we expose them neatly here.
+
+module Generic.Data.Rep.Error where
+
+import GHC.TypeError
+import GHC.TypeLits ( type Symbol )
+
+-- polymorphic kind keeps us extra useful -- we only use as 'Constraint', but
+-- library users may want to use this in type families
+type GAssertError :: ka -> Symbol -> k
+type GAssertError a msg = TypeError
+         ('Text "Assertion on generic representation failed for type: "
+    :<>: 'ShowType a
+    :$$: 'Text "Message: " :<>: 'Text msg)
+
+type GAssertErrorVoid a =
+    GAssertError a "not non-void type (>=1 constructor)"
+
+type GAssertErrorSum a =
+    GAssertError a "not non-sum type (1 constructor)"
+
+type GAssertErrorNotSum a =
+    GAssertError a "not sum type (>=2 constructors)"
+
+type GAssertErrorNotEnum a =
+    GAssertError a "not enum type (all empty constructors)"
