diff --git a/list-transformer.cabal b/list-transformer.cabal
--- a/list-transformer.cabal
+++ b/list-transformer.cabal
@@ -1,5 +1,5 @@
 name:                list-transformer
-version:             1.0.3
+version:             1.0.4
 synopsis:            List monad transformer
 description:         This library provides a list monad transformer that
                      enriches lists with effects and streams efficiently in
@@ -24,7 +24,9 @@
   default-language:    Haskell2010
   build-depends:       base >= 4.5 && < 5
                      , mtl >= 2.1 && < 2.3
-  ghc-options:         -Wall
+  if !impl(ghc >= 8.0)
+    build-depends:     semigroups == 0.18.*
+  ghc-options:         -Wall -Wcompat
 
 test-suite doctest
   type: exitcode-stdio-1.0
diff --git a/src/List/Transformer.hs b/src/List/Transformer.hs
--- a/src/List/Transformer.hs
+++ b/src/List/Transformer.hs
@@ -215,6 +215,7 @@
 import Control.Monad.State.Class (MonadState(..))
 import Control.Monad.Reader.Class (MonadReader(..))
 import Control.Monad.Trans (MonadTrans(..), MonadIO(..))
+import Data.Semigroup (Semigroup(..))
 import Prelude hiding (drop, pred, take, takeWhile, zip)
 
 import qualified Data.Foldable
@@ -302,9 +303,15 @@
     fail _ = mzero
 #endif
 
-instance (Monad m, Monoid a) => Monoid (ListT m a) where
+instance (Monad m, Data.Semigroup.Semigroup a) => Data.Semigroup.Semigroup (ListT m a) where
+    (<>) = liftA2 (<>)
+
+instance (Monad m, Data.Semigroup.Semigroup a, Monoid a) => Monoid (ListT m a) where
     mempty  = pure mempty
-    mappend = liftA2 mappend
+
+#if !(MIN_VERSION_base(4,11,0))
+    mappend = (<>)
+#endif
 
 instance MonadIO m => MonadIO (ListT m) where
     liftIO m = lift (liftIO m)
