diff --git a/Data/EnumMap/Base.hs b/Data/EnumMap/Base.hs
--- a/Data/EnumMap/Base.hs
+++ b/Data/EnumMap/Base.hs
@@ -171,6 +171,7 @@
 import Control.DeepSeq ( NFData )
 import Data.Foldable ( Foldable )
 import Data.Monoid ( Monoid )
+import Data.Semigroup ( Semigroup )
 import Data.Traversable ( Traversable )
 import Data.Typeable ( Typeable )
 
@@ -178,7 +179,8 @@
 
 -- | Wrapper for 'IntMap' with 'Enum' keys.
 newtype EnumMap k a = EnumMap { unWrap :: IntMap a }
-  deriving (Eq, Foldable, Functor, Ord, Monoid, Traversable, Typeable, NFData)
+  deriving (Eq, Foldable, Functor, Ord, Semigroup, Monoid,
+            Traversable, Typeable, NFData)
 
 instance (Enum k, Show k, Show a) => Show (EnumMap k a) where
   showsPrec p em = showParen (p > 10) $
diff --git a/Data/EnumSet.hs b/Data/EnumSet.hs
--- a/Data/EnumSet.hs
+++ b/Data/EnumSet.hs
@@ -102,13 +102,14 @@
 import Control.Arrow ( (***) )
 import Control.DeepSeq ( NFData )
 import Data.Monoid ( Monoid )
+import Data.Semigroup ( Semigroup )
 import Data.Typeable ( Typeable )
 
 import Text.Read
 
 -- | Wrapper for 'IntSet' with 'Enum' elements.
 newtype EnumSet k = EnumSet { unWrap :: IntSet }
-  deriving (Eq, Monoid, Ord, Typeable, NFData)
+  deriving (Eq, Semigroup, Monoid, Ord, Typeable, NFData)
 
 instance (Enum k, Show k) => Show (EnumSet k) where
   showsPrec p ks = showParen (p > 10) $
diff --git a/enummapset.cabal b/enummapset.cabal
--- a/enummapset.cabal
+++ b/enummapset.cabal
@@ -1,5 +1,5 @@
 name:           enummapset
-version:        0.5.2.1
+version:        0.5.2.2
 synopsis:       IntMap and IntSet with Enum keys/elements.
 description:    This package contains simple wrappers around 'Data.IntMap' and
                 'Data.IntSet' with 'Enum' keys and elements respectively.
@@ -38,6 +38,7 @@
   build-depends:
     base < 5,
     containers >= 0.5.2 && < 0.6,
+    semigroups >=0.1 && <1.0,
     deepseq
 
   if flag(debug)
