diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,3 +1,7 @@
+### 2.0.15
+
+* Semigroup instances
+
 ### 2.0.14.1
 
 * Handle expressions with infix operator and trailing spaces [#211](https://github.com/yesodweb/shakespeare/issues/211)
diff --git a/Text/Internal/Css.hs b/Text/Internal/Css.hs
--- a/Text/Internal/Css.hs
+++ b/Text/Internal/Css.hs
@@ -16,6 +16,7 @@
 import qualified Data.Text.Lazy as TL
 import qualified Data.Text.Lazy.Builder as TLB
 import Data.Monoid (Monoid, mconcat, mappend, mempty)
+import Data.Semigroup (Semigroup(..))
 import Data.Text (Text)
 import qualified Data.Text as T
 import Language.Haskell.TH.Syntax
@@ -29,14 +30,6 @@
 import Data.Functor.Identity (runIdentity)
 import Text.Shakespeare (VarType (..))
 
-#if MIN_VERSION_base(4,5,0)
-import Data.Monoid ((<>))
-#else
-(<>) :: Monoid m => m -> m -> m
-(<>) = mappend
-{-# INLINE (<>) #-}
-#endif
-
 type CssUrl url = (url -> [(T.Text, T.Text)] -> T.Text) -> Css
 
 type DList a = [a] -> [a]
@@ -74,9 +67,13 @@
     { mixinAttrs :: ![Attr Resolved]
     , mixinBlocks :: ![Block Resolved]
     }
+instance Semigroup Mixin where
+    Mixin a x <> Mixin b y = Mixin (a ++ b) (x ++ y)
 instance Monoid Mixin where
     mempty = Mixin mempty mempty
-    mappend (Mixin a x) (Mixin b y) = Mixin (a ++ b) (x ++ y)
+#if !(MIN_VERSION_base(4,11,0))
+    mappend = (<>)
+#endif
 
 data TopLevel a where
     TopBlock   :: !(Block a) -> TopLevel a
diff --git a/Text/Julius.hs b/Text/Julius.hs
--- a/Text/Julius.hs
+++ b/Text/Julius.hs
@@ -47,7 +47,8 @@
 import Language.Haskell.TH.Quote (QuasiQuoter (..))
 import Language.Haskell.TH.Syntax
 import Data.Text.Lazy.Builder (Builder, fromText, toLazyText, fromLazyText)
-import Data.Monoid
+import Data.Monoid (Monoid(..))
+import Data.Semigroup (Semigroup(..))
 import qualified Data.Text as TS
 import qualified Data.Text.Lazy as TL
 import Text.Shakespeare
@@ -76,7 +77,7 @@
 
 -- | Newtype wrapper of 'Builder'.
 newtype Javascript = Javascript { unJavascript :: Builder }
-    deriving Monoid
+    deriving (Semigroup, Monoid)
 
 -- | Return type of template-reading functions.
 type JavascriptUrl url = (url -> [(TS.Text, TS.Text)] -> TS.Text) -> Javascript
diff --git a/shakespeare.cabal b/shakespeare.cabal
--- a/shakespeare.cabal
+++ b/shakespeare.cabal
@@ -1,5 +1,5 @@
 name:            shakespeare
-version:         2.0.14.1
+version:         2.0.15
 license:         MIT
 license-file:    LICENSE
 author:          Michael Snoyman <michael@snoyman.com>
@@ -52,6 +52,9 @@
                    , vector
                    , unordered-containers
                    , scientific       >= 0.3.0.0
+
+    if !impl(ghc >= 8.0)
+      build-depends: semigroups       >= 0.16
 
     exposed-modules: Text.Shakespeare.I18N
                      Text.Shakespeare.Text
