diff --git a/Changelog.md b/Changelog.md
--- a/Changelog.md
+++ b/Changelog.md
@@ -1,5 +1,10 @@
 # Changelog for `proto-lens-protoc`
 
+## v0.3.1.0
+- Bump the dependency on `base` for `ghc-8.4.2`.
+- Bump the dependency to `Cabal-2.2.*`.
+- Make `Symbol` an instance of Semigroup.
+
 ## v0.3.0.0
 - Remove support for `ghc-7.10`. (#136)
 - Use a `.cabal` file that's auto-generated from `hpack`. (#138)
diff --git a/proto-lens-protoc.cabal b/proto-lens-protoc.cabal
--- a/proto-lens-protoc.cabal
+++ b/proto-lens-protoc.cabal
@@ -2,10 +2,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: 4175638cf6efe9244007b8b4992689b765c2b68967bd4c36bdbc182a92e587c4
+-- hash: b5e426f5c980c968df8a4126b27017a59590920178c0bb0902b138cf963d6282
 
 name:           proto-lens-protoc
-version:        0.3.0.0
+version:        0.3.1.0
 synopsis:       Protocol buffer compiler for the proto-lens library.
 description:    Turn protocol buffer files (.proto) into Haskell files (.hs) which can be used with the proto-lens package.
                 The library component of this package contains compiler code (namely Data.ProtoLens.Compiler.*) is not guaranteed to have stable APIs.'
@@ -37,8 +37,8 @@
   hs-source-dirs:
       src
   build-depends:
-      Cabal >=1.22 && <2.1
-    , base >=4.8 && <4.11
+      Cabal >=1.22 && <2.3
+    , base >=4.8 && <4.12
     , bytestring ==0.10.*
     , containers ==0.5.*
     , data-default-class >=0.0 && <0.2
@@ -84,7 +84,7 @@
   hs-source-dirs:
       app
   build-depends:
-      base >=4.8 && <4.11
+      base >=4.8 && <4.12
     , bytestring ==0.10.*
     , containers ==0.5.*
     , data-default-class >=0.0 && <0.2
diff --git a/src/Data/ProtoLens/Compiler/Definitions.hs b/src/Data/ProtoLens/Compiler/Definitions.hs
--- a/src/Data/ProtoLens/Compiler/Definitions.hs
+++ b/src/Data/ProtoLens/Compiler/Definitions.hs
@@ -40,6 +40,7 @@
 import qualified Data.Map as Map
 import Data.Maybe (fromMaybe)
 import Data.Monoid
+import qualified Data.Semigroup as Semigroup
 import qualified Data.Set as Set
 import Data.String (IsString(..))
 import Data.Text (Text, cons, splitOn, toLower, uncons, unpack)
@@ -174,7 +175,7 @@
 -- a 'Symbol' is used to construct both the type-level argument to
 -- @HasLens@ and the name of the function @foo@.
 newtype Symbol = Symbol String
-    deriving (Eq, Ord, IsString, Monoid)
+    deriving (Eq, Ord, IsString, Semigroup.Semigroup, Monoid)
 
 nameFromSymbol :: Symbol -> Name
 nameFromSymbol (Symbol s) = fromString s
