diff --git a/HStringTemplate.cabal b/HStringTemplate.cabal
--- a/HStringTemplate.cabal
+++ b/HStringTemplate.cabal
@@ -1,5 +1,5 @@
 name:                HStringTemplate
-version:             0.8.6
+version:             0.8.7
 synopsis:            StringTemplate implementation in Haskell.
 description:         A port of the Java library by Terrence Parr.
 category:            Text
@@ -16,7 +16,7 @@
 
   build-depends:   syb, base >= 4, base < 5, filepath, parsec < 4, containers, pretty >= 1.1.0.0,
                    time >= 1.4.2 && < 1.9, bytestring, directory, array, text, deepseq, blaze-builder,void, template-haskell >= 2.3, mtl,
-                   old-locale
+                   old-locale, semigroups >= 0.16
 
   exposed-modules:   Text.StringTemplate
                      Text.StringTemplate.Base
diff --git a/Text/StringTemplate/Classes.hs b/Text/StringTemplate/Classes.hs
--- a/Text/StringTemplate/Classes.hs
+++ b/Text/StringTemplate/Classes.hs
@@ -12,6 +12,7 @@
 import qualified Data.ByteString.Char8 as B
 import qualified Data.ByteString.Lazy.Char8 as LB
 --import qualified Data.ByteString.Lazy.Builder as DBB
+import qualified Data.Semigroup as SG
 import qualified Data.Text as T
 import qualified Data.Text.Encoding as T
 import qualified Data.Text.Lazy as LT
@@ -21,10 +22,12 @@
 
 newtype StFirst a = StFirst { stGetFirst :: Maybe a }
         deriving (Eq, Ord, Read, Show)
+instance SG.Semigroup (StFirst a) where
+        r@(StFirst (Just _)) <> _ = r
+        StFirst Nothing      <> r = r
 instance Monoid (StFirst a) where
-        mempty = StFirst Nothing
-        r@(StFirst (Just _)) `mappend` _ = r
-        StFirst Nothing `mappend` r = r
+        mempty  = StFirst Nothing
+        mappend = (SG.<>)
 
 instance Functor StFirst where
     fmap f = StFirst . fmap f . stGetFirst
