diff --git a/Test/Feat/Enumerate.hs b/Test/Feat/Enumerate.hs
--- a/Test/Feat/Enumerate.hs
+++ b/Test/Feat/Enumerate.hs
@@ -36,7 +36,8 @@
 -- base
 import Control.Sized
 import Control.Applicative
-import Data.Monoid
+import Data.Semigroup
+import Data.Monoid hiding ((<>))
 import Data.Typeable
 import Data.List(transpose)
 import Test.Feat.Finite
@@ -75,6 +76,9 @@
   pair     = cartesian
   fin k    = fromParts [finFin k]
 
+instance Semigroup (Enumerate a) where
+  (<>)  = union
+
 -- | The @'mappend'@ is (disjoint) @'union'@
 instance Monoid (Enumerate a) where
   mempty      = empty
@@ -150,14 +154,17 @@
 instance Functor RevList where
   fmap f = toRev . fmap f . fromRev
 
--- Maybe this should be append instead?
--- | Padded zip
-instance Monoid a => Monoid (RevList a) where
-  mempty         = toRev[]
-  mappend xs ys  = toRev$ zipMon (fromRev xs) (fromRev ys) where
-    zipMon :: Monoid a => [a] -> [a] -> [a]
+instance Semigroup a => Semigroup (RevList a) where
+  (<>) xs ys  = toRev $ zipMon (fromRev xs) (fromRev ys) where
+    zipMon :: Semigroup a => [a] -> [a] -> [a]
     zipMon (x:xs) (y:ys) = x <> y : zipMon xs ys
     zipMon xs ys         = xs ++ ys
+
+-- Maybe this should be append instead?
+-- | Padded zip
+instance (Monoid a, Semigroup a) => Monoid (RevList a) where
+  mempty   = toRev[]
+  mappend  = (<>)
 
 -- | Constructs a "Reverse list" variant of a given list. In a sensible
 -- Haskell implementation evaluating any inital segment of
diff --git a/Test/Feat/Finite.hs b/Test/Feat/Finite.hs
--- a/Test/Feat/Finite.hs
+++ b/Test/Feat/Finite.hs
@@ -2,6 +2,7 @@
 module Test.Feat.Finite (Finite (..), Index, fromFinite, finFin) where
 
 import Control.Applicative
+import Data.Semigroup
 import Data.Monoid
 
 type Index = Integer
@@ -29,6 +30,9 @@
 instance Alternative Finite where
   empty = finEmpty
   (<|>) = finUnion
+
+instance Semigroup (Finite a) where
+  (<>) = finUnion
 
 instance Monoid (Finite a) where
   mempty = finEmpty
diff --git a/testing-feat.cabal b/testing-feat.cabal
--- a/testing-feat.cabal
+++ b/testing-feat.cabal
@@ -1,5 +1,5 @@
 Name:                testing-feat
-Version:             1.0.0.0
+Version:             1.0.1.0
 Synopsis:            Functional Enumeration of Algebraic Types
 Description:         Feat (Functional Enumeration of Algebraic Types) provides
                      enumerations as functions from natural numbers to values
@@ -53,3 +53,5 @@
     QuickCheck > 2 && < 3,
     size-based < 0.2,
     testing-type-modifiers < 0.2
+  if impl(ghc < 8.0)
+    Build-depends: semigroups < 0.19
