diff --git a/semigroups.cabal b/semigroups.cabal
--- a/semigroups.cabal
+++ b/semigroups.cabal
@@ -1,6 +1,6 @@
 name:          semigroups
 category:      Algebra, Data, Data Structures, Math
-version:       0.15
+version:       0.15.1
 license:       BSD3
 cabal-version: >= 1.10
 license-file:  LICENSE
diff --git a/src/Data/Semigroup.hs b/src/Data/Semigroup.hs
--- a/src/Data/Semigroup.hs
+++ b/src/Data/Semigroup.hs
@@ -274,7 +274,7 @@
 
 instance Enum a => Enum (Min a) where
   succ (Min a) = Min (succ a)
-  pred (Min a) = Min (succ a)
+  pred (Min a) = Min (pred a)
   toEnum = Min . toEnum
   fromEnum = fromEnum . getMin
   enumFrom (Min a) = Min <$> enumFrom a
@@ -338,7 +338,7 @@
 
 instance Enum a => Enum (Max a) where
   succ (Max a) = Max (succ a)
-  pred (Max a) = Max (succ a)
+  pred (Max a) = Max (pred a)
   toEnum = Max . toEnum
   fromEnum = fromEnum . getMax
   enumFrom (Max a) = Max <$> enumFrom a
@@ -404,7 +404,7 @@
 
 instance Enum a => Enum (First a) where
   succ (First a) = First (succ a)
-  pred (First a) = First (succ a)
+  pred (First a) = First (pred a)
   toEnum = First . toEnum
   fromEnum = fromEnum . getFirst
   enumFrom (First a) = First <$> enumFrom a
@@ -465,7 +465,7 @@
 
 instance Enum a => Enum (Last a) where
   succ (Last a) = Last (succ a)
-  pred (Last a) = Last (succ a)
+  pred (Last a) = Last (pred a)
   toEnum = Last . toEnum
   fromEnum = fromEnum . getLast
   enumFrom (Last a) = Last <$> enumFrom a
@@ -571,7 +571,7 @@
 
 instance Enum a => Enum (WrappedMonoid a) where
   succ (WrapMonoid a) = WrapMonoid (succ a)
-  pred (WrapMonoid a) = WrapMonoid (succ a)
+  pred (WrapMonoid a) = WrapMonoid (pred a)
   toEnum = WrapMonoid . toEnum
   fromEnum = fromEnum . unwrapMonoid
   enumFrom (WrapMonoid a) = WrapMonoid <$> enumFrom a
