diff --git a/Sound/OSC/Coding/Encode/Builder.hs b/Sound/OSC/Coding/Encode/Builder.hs
--- a/Sound/OSC/Coding/Encode/Builder.hs
+++ b/Sound/OSC/Coding/Encode/Builder.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE CPP #-}
+
 -- | Optimised encode function for OSC packets.
 module Sound.OSC.Coding.Encode.Builder
     (build_packet
@@ -13,6 +15,10 @@
 import qualified Data.ByteString.Lazy as L {- bytestring -}
 import qualified Blaze.ByteString.Builder as B {- bytestring -}
 import qualified Blaze.ByteString.Builder.Char8 as B {- bytestring -}
+
+#ifdef IMPORT_SEMIGROUP
+import Data.Semigroup
+#endif
 
 import qualified Sound.OSC.Coding.Byte as Byte {- hosc -}
 import qualified Sound.OSC.Coding.Convert as Convert {- hosc -}
diff --git a/hosc.cabal b/hosc.cabal
--- a/hosc.cabal
+++ b/hosc.cabal
@@ -1,5 +1,5 @@
 Name:              hosc
-Version:           0.18
+Version:           0.18.1
 Synopsis:          Haskell Open Sound Control
 Description:       @hosc@ implements a subset of the Open Sound Control
                    byte protocol, <http://opensoundcontrol.org/>.
@@ -28,6 +28,8 @@
                    transformers
   Default-Language:Haskell2010
   GHC-Options:     -Wall -fwarn-tabs
+  if impl(ghc < 8.4)
+    cpp-options: -DIMPORT_SEMIGROUP
   Exposed-modules: Sound.OSC
                    Sound.OSC.Coding.Byte
                    Sound.OSC.Coding.Cast
