diff --git a/namespace.cabal b/namespace.cabal
--- a/namespace.cabal
+++ b/namespace.cabal
@@ -1,13 +1,13 @@
 name:                namespace
-version:             0.1.3.0
+version:             0.1.4.0
 synopsis:            A Generic Haskell library for managing namespaces
 description:         Please see README.md
 homepage:            https://github.com/xu-hao/namespace
 license:             BSD3
 license-file:        LICENSE
 author:              Hao Xu
-maintainer:          xuh@email.unc.edu
-copyright:           2016 Hao Xu
+maintainer:          xuh@cs.unc.edu
+copyright:           2016-2018 Hao Xu
 category:            Data
 build-type:          Simple
 -- extra-source-files:
@@ -16,8 +16,8 @@
 library
   hs-source-dirs:      src
   exposed-modules:     Data.Namespace.Namespace Data.Namespace.Path
-  build-depends:       base >= 4.7 && < 5,
-                       monoid-extras >= 0.1 && < 0.5,
+  build-depends:       base >= 4.9 && < 5,
+                       monoid-extras >= 0.5 && < 0.6,
                        containers >= 0.5 && < 0.6
   default-language:    Haskell2010
 
diff --git a/src/Data/Namespace/Namespace.hs b/src/Data/Namespace/Namespace.hs
--- a/src/Data/Namespace/Namespace.hs
+++ b/src/Data/Namespace/Namespace.hs
@@ -13,6 +13,7 @@
 
 import Prelude hiding (lookup)
 import Data.Map.Strict (lookup, insert, foldlWithKey, mapKeys, mapWithKey, unionWith, toList, Map, elems)
+import Data.Semigroup
 import Data.Monoid
 import Data.Monoid.Action (act)
 import Data.Maybe
@@ -38,9 +39,11 @@
   (Namespace nm om) <- lookupNamespace np n
   lookup k om
 
+instance Key k => Semigroup (Namespace k a) where
+  (<>) (Namespace nm om) (Namespace nm2 om2) = Namespace (unionWith mappend nm nm2) (om <> om2)
+
 instance Key k => Monoid (Namespace k a) where
   mempty = Namespace mempty mempty
-  mappend (Namespace nm om) (Namespace nm2 om2) = Namespace (unionWith mappend nm nm2) (om <> om2)
 
 topLevelObjects :: Key k => Namespace k a -> Map k a
 topLevelObjects (Namespace _ om) = om
diff --git a/src/Data/Namespace/Path.hs b/src/Data/Namespace/Path.hs
--- a/src/Data/Namespace/Path.hs
+++ b/src/Data/Namespace/Path.hs
@@ -6,6 +6,7 @@
 
 import Prelude hiding (lookup)
 import Data.Map.Strict
+import Data.Semigroup
 import Data.Monoid
 import Data.Monoid.Action
 
@@ -30,9 +31,11 @@
 extendNamespacePath :: Key k => NamespacePath k -> k -> NamespacePath k
 extendNamespacePath (NamespacePath p) k = NamespacePath (p <> [k])
 
+instance Key k => Semigroup (NamespacePath k) where
+  (<>) (NamespacePath p1) (NamespacePath p2) = NamespacePath (p1 <> p2)
+
 instance Key k => Monoid (NamespacePath k) where
   mempty = NamespacePath mempty
-  mappend (NamespacePath p1) (NamespacePath p2) = NamespacePath (p1 <> p2)
 
 concatNamespacePathWithObjectPath :: Key k => NamespacePath k -> ObjectPath k -> ObjectPath k
 concatNamespacePathWithObjectPath np (ObjectPath np2 k) = ObjectPath (np <> np2) k
