diff --git a/Text/ICalendar/Types.hs b/Text/ICalendar/Types.hs
--- a/Text/ICalendar/Types.hs
+++ b/Text/ICalendar/Types.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP                #-}
 {-# LANGUAGE DeriveDataTypeable #-}
 {-# LANGUAGE OverloadedStrings  #-}
 -- | ICalendar types, based on RFC5545.
@@ -11,8 +12,8 @@
 import           Data.Default
 import           Data.Map                   (Map)
 import qualified Data.Map                   as M
-import           Data.Monoid
 import           Data.Set                   (Set)
+import           Data.Semigroup             as Sem
 import           Data.Text.Lazy             (Text, pack)
 import           Data.Time
 import           Data.Typeable              (Typeable)
@@ -73,23 +74,22 @@
 -- with the highest 'LastModified', and 'VFreeBusy' with the highest 'DTStamp'.
 --
 -- If the Sequence, DTStamp or LastModified is the same, picks the left.
-instance Monoid VCalendar where
-    mempty = def
-    mappend a b = VCalendar { vcProdId     = vcProdId a
-                            , vcVersion    = vcVersion a
-                            , vcScale      = vcScale a
-                            , vcMethod     = vcMethod a
-                            , vcOther      = vcOther a <> vcOther b
-                            , vcTimeZones  = merge tz (vcTimeZones a)
-                                                      (vcTimeZones b)
-                            , vcEvents     = merge ev (vcEvents a) (vcEvents b)
-                            , vcTodos      = merge td (vcTodos a) (vcTodos b)
-                            , vcJournals   = merge jo (vcJournals a)
-                                                      (vcJournals b)
-                            , vcFreeBusys  = merge fb (vcFreeBusys a)
-                                                      (vcFreeBusys b)
-                            , vcOtherComps = vcOtherComps a <> vcOtherComps b
-                            }
+instance Sem.Semigroup VCalendar where
+    a <> b = VCalendar { vcProdId     = vcProdId a
+                       , vcVersion    = vcVersion a
+                       , vcScale      = vcScale a
+                       , vcMethod     = vcMethod a
+                       , vcOther      = vcOther a <> vcOther b
+                       , vcTimeZones  = merge tz (vcTimeZones a)
+                                                 (vcTimeZones b)
+                       , vcEvents     = merge ev (vcEvents a) (vcEvents b)
+                       , vcTodos      = merge td (vcTodos a) (vcTodos b)
+                       , vcJournals   = merge jo (vcJournals a)
+                                                 (vcJournals b)
+                       , vcFreeBusys  = merge fb (vcFreeBusys a)
+                                                 (vcFreeBusys b)
+                       , vcOtherComps = vcOtherComps a <> vcOtherComps b
+                       }
       where merge f = M.mergeWithKey (((Just .) .) . const f) id id
             tz c d = if vtzLastMod c >= vtzLastMod d then c else d
             ev c d = if (veSeq c, veDTStamp c) >= (veSeq d, veDTStamp d)
@@ -99,6 +99,13 @@
             jo c d = if (vjSeq c, vjDTStamp c) >= (vjSeq d, vjDTStamp d)
                         then c else d
             fb c d = if vfbDTStamp c >= vfbDTStamp d then c else d
+
+
+instance Monoid VCalendar where
+    mempty = def
+#if !(MIN_VERSION_base(4,11,0))
+    mappend = (<>)
+#endif
 
 -- | Product Identifier. 3.7.3.
 data ProdId = ProdId
diff --git a/iCalendar.cabal b/iCalendar.cabal
--- a/iCalendar.cabal
+++ b/iCalendar.cabal
@@ -1,5 +1,5 @@
 name:                iCalendar
-version:             0.4.0.3
+version:             0.4.0.4
 synopsis:            iCalendar data types, parser, and printer.
 description:         Data definitions, parsing and printing of the iCalendar
                      format (RFC5545).
@@ -13,7 +13,7 @@
 stability:           experimental
 category:            Text
 build-type:          Simple
-tested-with:         GHC==7.6.1
+tested-with:         GHC==7.10.3, GHC==8.0.2, GHC==8.2.2, GHC==8.4.2
 cabal-version:       >=1.8
 
 source-repository head
@@ -34,12 +34,14 @@
                      , Text.ICalendar.Parser.Content
                      , Text.ICalendar.Parser.Parameters
                      , Text.ICalendar.Parser.Properties
-                     , Paths_iCalendar
 
   if flag(network-uri)
     build-depends: network-uri >= 2.6, network >= 2.6 && < 2.7
   else
     build-depends: network >= 2.4 && < 2.6
+
+  if !impl(ghc >= 8.0)
+    build-depends: semigroups == 0.18.*
 
   build-depends:       base >=4.5 && <5, time >=1.5, data-default >=0.3
                      , case-insensitive >=0.4
