diff --git a/NLP/Miniutter/English.hs b/NLP/Miniutter/English.hs
--- a/NLP/Miniutter/English.hs
+++ b/NLP/Miniutter/English.hs
@@ -5,17 +5,17 @@
   , makeSentence, makePhrase, defIrregular, (<+>)
   ) where
 
-import Data.Binary
-import Data.Char (isAlphaNum, toUpper)
-import Data.Map (Map)
+import           Data.Binary
+import           Data.Char (isAlphaNum, toUpper)
+import           Data.Map (Map)
 import qualified Data.Map as Map
-import Data.Monoid
-import Data.String (IsString (..))
-import Data.Text (Text)
+import           Data.Semigroup as Sem
+import           Data.String (IsString (..))
+import           Data.Text (Text)
 import qualified Data.Text as T
-import GHC.Generics (Generic)
-import NLP.Minimorph.English
-import NLP.Minimorph.Util hiding ((<>))
+import           GHC.Generics (Generic)
+import           NLP.Minimorph.English
+import           NLP.Minimorph.Util hiding ((<>))
 
 -- | Various basic and compound parts of English simple present tense clauses.
 -- Many of the possible nestings do not make sense. We don't care.
@@ -57,9 +57,16 @@
 instance IsString Part where
   fromString = Text . T.pack
 
+instance Sem.Semigroup Part where
+  (<>) = Append
+
 instance Monoid Part where
   mempty = Text ""
-  mappend = Append
+
+#if !(MIN_VERSION_base(4,11,0))
+  -- this is redundant starting with base-4.11 / GHC 8.4
+  mappend = (<>)
+#endif
 
 -- | Persons: singular 1st, singular 3rd and the rest.
 data Person = Sg1st | Sg3rd | PlEtc
diff --git a/miniutter.cabal b/miniutter.cabal
--- a/miniutter.cabal
+++ b/miniutter.cabal
@@ -5,7 +5,7 @@
 -- PVP summary: +-+------- breaking API changes
 --              | | +----- non-breaking API additions
 --              | | | +--- code changes with no API change
-version:        0.4.6.0
+version:        0.4.7.0
 synopsis:      Simple English clause creation from arbitrary words
 description:   This library helps in generating simple present tense
                English sentences from short, parametrized descriptions.
@@ -20,7 +20,7 @@
 bug-reports:   https://github.com/Mikolaj/miniutter/issues
 license:       BSD3
 license-file:  LICENSE
-tested-with:   GHC >= 7.4.2 && <= 8.2
+tested-with:   GHC >= 7.4.2 && <= 8.4
 extra-source-files: LICENSE, README.md
 author:        Mikolaj Konarski
 maintainer:    Mikolaj Konarski <mikolaj.konarski@funktory.com>
@@ -41,10 +41,12 @@
                       text                 >= 0.11.2.3 && < 2,
                       containers           >= 0.4.1    && < 1,
                       minimorph            >= 0.1.6    && < 1
+  if !impl(ghc >= 8.0)
+    build-depends: semigroups == 0.18.*
 
   default-language:   Haskell2010
   default-extensions: MonoLocalBinds, ScopedTypeVariables,
-                      BangPatterns, RecordWildCards, NamedFieldPuns
+                      BangPatterns, RecordWildCards, NamedFieldPuns, CPP
   other-extensions:   OverloadedStrings
 --, DeriveGeneric
   ghc-options:        -Wall -fwarn-orphans -fwarn-tabs -fwarn-incomplete-uni-patterns -fwarn-incomplete-record-updates -fwarn-monomorphism-restriction -fwarn-unrecognised-pragmas
@@ -62,10 +64,12 @@
                       test-framework       >= 0.6      && < 1,
                       test-framework-hunit >= 0.2      && < 1,
                       HUnit                >= 1.2      && < 2
+  if !impl(ghc >= 8.0)
+    build-depends: semigroups == 0.18.*
 
   default-language:   Haskell2010
   default-extensions: MonoLocalBinds, ScopedTypeVariables,
-                      BangPatterns, RecordWildCards, NamedFieldPuns
+                      BangPatterns, RecordWildCards, NamedFieldPuns, CPP
   other-extensions:   OverloadedStrings
   ghc-options:        -Wall -fwarn-orphans -fwarn-tabs -fwarn-incomplete-uni-patterns -fwarn-incomplete-record-updates -fwarn-monomorphism-restriction -fwarn-unrecognised-pragmas
   ghc-options:        -fno-warn-implicit-prelude
