diff --git a/ivory-backend-c.cabal b/ivory-backend-c.cabal
--- a/ivory-backend-c.cabal
+++ b/ivory-backend-c.cabal
@@ -2,7 +2,7 @@
 --  see http://haskell.org/cabal/users-guide/
 
 name:                ivory-backend-c
-version:             0.1.0.7
+version:             0.1.0.8
 author:              Galois, Inc.
 maintainer:          leepike@galois.com
 category:            Language
@@ -47,6 +47,9 @@
                         ivory,
                         ivory-opts,
                         ivory-artifact
+  if impl(ghc < 8)
+    build-depends:      semigroups
+
   hs-source-dirs:       src
   default-language:     Haskell2010
 
diff --git a/src/Ivory/Compile/C/CmdlineFrontend/Options.hs b/src/Ivory/Compile/C/CmdlineFrontend/Options.hs
--- a/src/Ivory/Compile/C/CmdlineFrontend/Options.hs
+++ b/src/Ivory/Compile/C/CmdlineFrontend/Options.hs
@@ -2,6 +2,7 @@
 
 import           Prelude               ()
 import           Prelude.Compat
+import           Data.Semigroup        (Semigroup(..))
 
 import           System.Console.GetOpt (ArgDescr (..), ArgOrder (Permute),
                                         OptDescr (..), getOpt, usageInfo)
@@ -13,10 +14,13 @@
 
 data OptParser opt = OptParser [String] (opt -> opt)
 
+instance Semigroup (OptParser opt) where
+  -- left-to-right composition makes the last option parsed take precedence
+  OptParser as f <> OptParser bs g = OptParser (as ++ bs) (f . g)
+
 instance Monoid (OptParser opt) where
   mempty = OptParser [] id
-  -- left-to-right composition makes the last option parsed take precedence
-  OptParser as f `mappend` OptParser bs g = OptParser (as ++ bs) (f . g)
+  mappend = (<>)
 
 -- | Option parser succeeded, use this function to transform the default
 -- options.
diff --git a/src/Ivory/Compile/C/Types.hs b/src/Ivory/Compile/C/Types.hs
--- a/src/Ivory/Compile/C/Types.hs
+++ b/src/Ivory/Compile/C/Types.hs
@@ -8,6 +8,7 @@
 import           Prelude.Compat
 
 import           Data.List            (nub)
+import           Data.Semigroup       (Semigroup(..))
 
 import           Language.C.Quote.GCC
 import qualified "language-c-quote" Language.C.Syntax    as C
@@ -35,14 +36,17 @@
   , headers  :: (Includes, Sources)
   } deriving Show
 
-instance Monoid CompileUnits where
-  mempty = CompileUnits mempty mempty mempty
-  (CompileUnits n0 s0 h0) `mappend` (CompileUnits n1 s1 h1) =
-    CompileUnits (n0 `mappend` n1)
-                 (go (s0 `mappend` s1))
-                 (go (h0 `mappend` h1))
+instance Semigroup CompileUnits where
+  CompileUnits n0 s0 h0 <> CompileUnits n1 s1 h1 =
+    CompileUnits (n0 <> n1)
+                 (go (s0 <> s1))
+                 (go (h0 <> h1))
     where
     go (i,s) = (nub i, nub s)
+
+instance Monoid CompileUnits where
+  mempty = CompileUnits mempty mempty mempty
+  mappend = (<>)
 
 --------------------------------------------------------------------------------
 
