diff --git a/library/ListT.hs b/library/ListT.hs
--- a/library/ListT.hs
+++ b/library/ListT.hs
@@ -33,15 +33,7 @@
 )
 where
 
-import BasePrelude hiding (uncons, toList, yield, fold, traverse, head, tail, take, drop, repeat, null, traverse_, splitAt)
-import Control.Monad.Morph hiding (MonadTrans(..))
-import Control.Monad.IO.Class
-import Control.Monad.Error.Class 
-import Control.Monad.Trans.Class
-import Control.Monad.Trans.Reader
-import Control.Monad.Trans.Maybe
-import Control.Monad.Trans.Control hiding (embed, embed_)
-import Control.Monad.Base
+import ListT.Prelude hiding (uncons, toList, yield, fold, traverse, head, tail, take, drop, repeat, null, traverse_, splitAt)
 
 -- |
 -- A proper implementation of the list monad-transformer.
@@ -54,18 +46,21 @@
 newtype ListT m a =
   ListT (m (Maybe (a, ListT m a)))
 
-instance Monad m => Monoid (ListT m a) where
-  mempty =
-    ListT $ 
-      return Nothing
-  mappend (ListT m1) (ListT m2) =
+instance Monad m => Semigroup (ListT m a) where
+  (<>) (ListT m1) (ListT m2) =
     ListT $
       m1 >>=
         \case
           Nothing ->
             m2
           Just (h1, s1') ->
-            return (Just (h1, (mappend s1' (ListT m2))))
+            return (Just (h1, ((<>) s1' (ListT m2))))
+
+instance Monad m => Monoid (ListT m a) where
+  mempty =
+    ListT $ 
+      return Nothing
+  mappend = (<>)
 
 instance Functor m => Functor (ListT m) where
   fmap f =
diff --git a/library/ListT/Prelude.hs b/library/ListT/Prelude.hs
new file mode 100644
--- /dev/null
+++ b/library/ListT/Prelude.hs
@@ -0,0 +1,75 @@
+module ListT.Prelude
+( 
+  module Exports,
+)
+where
+
+import Control.Applicative as Exports
+import Control.Arrow as Exports
+import Control.Category as Exports
+import Control.Concurrent as Exports
+import Control.Exception as Exports
+import Control.Monad as Exports hiding (mapM_, sequence_, forM_, msum, mapM, sequence, forM)
+import Control.Monad.Base as Exports
+import Control.Monad.Error.Class as Exports
+import Control.Monad.Fix as Exports hiding (fix)
+import Control.Monad.IO.Class as Exports
+import Control.Monad.Morph as Exports hiding (MonadTrans(..))
+import Control.Monad.ST as Exports
+import Control.Monad.Trans.Class as Exports
+import Control.Monad.Trans.Control as Exports hiding (embed, embed_)
+import Control.Monad.Trans.Maybe as Exports hiding (liftCatch, liftCallCC)
+import Control.Monad.Trans.Reader as Exports hiding (liftCatch, liftCallCC)
+import Data.Bits as Exports
+import Data.Bool as Exports
+import Data.Char as Exports
+import Data.Coerce as Exports
+import Data.Complex as Exports
+import Data.Data as Exports
+import Data.Dynamic as Exports
+import Data.Either as Exports
+import Data.Fixed as Exports
+import Data.Foldable as Exports
+import Data.Function as Exports hiding (id, (.))
+import Data.Functor as Exports
+import Data.Int as Exports
+import Data.IORef as Exports
+import Data.Ix as Exports
+import Data.List as Exports hiding (sortOn, isSubsequenceOf, uncons, concat, foldr, foldl1, maximum, minimum, product, sum, all, and, any, concatMap, elem, foldl, foldr1, notElem, or, find, maximumBy, minimumBy, mapAccumL, mapAccumR, foldl')
+import Data.Maybe as Exports
+import Data.Monoid as Exports hiding (getLast, getFirst, (<>), Last, First)
+import Data.Ord as Exports
+import Data.Proxy as Exports
+import Data.Ratio as Exports
+import Data.Semigroup as Exports
+import Data.STRef as Exports
+import Data.String as Exports
+import Data.Traversable as Exports
+import Data.Tuple as Exports
+import Data.Unique as Exports
+import Data.Version as Exports
+import Data.Word as Exports
+import Debug.Trace as Exports
+import Foreign.ForeignPtr as Exports
+import Foreign.Ptr as Exports
+import Foreign.StablePtr as Exports
+import Foreign.Storable as Exports
+import GHC.Conc as Exports hiding (withMVar, threadWaitWriteSTM, threadWaitWrite, threadWaitReadSTM, threadWaitRead)
+import GHC.Exts as Exports (lazy, inline, sortWith, groupWith)
+import GHC.Generics as Exports (Generic)
+import GHC.IO.Exception as Exports
+import Numeric as Exports
+import Prelude as Exports hiding (concat, foldr, mapM_, sequence_, foldl1, maximum, minimum, product, sum, all, and, any, concatMap, elem, foldl, foldr1, notElem, or, mapM, sequence, id, (.))
+import System.Environment as Exports
+import System.Exit as Exports
+import System.IO as Exports (Handle, hClose)
+import System.IO.Error as Exports
+import System.IO.Unsafe as Exports
+import System.Mem as Exports
+import System.Mem.StableName as Exports
+import System.Timeout as Exports
+import Text.ParserCombinators.ReadP as Exports (ReadP, ReadS, readP_to_S, readS_to_P)
+import Text.ParserCombinators.ReadPrec as Exports (ReadPrec, readPrec_to_P, readP_to_Prec, readPrec_to_S, readS_to_Prec)
+import Text.Printf as Exports (printf, hPrintf)
+import Text.Read as Exports (Read(..), readMaybe, readEither)
+import Unsafe.Coerce as Exports
diff --git a/list-t.cabal b/list-t.cabal
--- a/list-t.cabal
+++ b/list-t.cabal
@@ -1,7 +1,7 @@
 name:
   list-t
 version:
-  1.0.0.1
+  1.0.1
 synopsis:
   ListT done right
 description:
@@ -39,17 +39,20 @@
 library
   hs-source-dirs:
     library
-  other-modules:
   exposed-modules:
     ListT
+  other-modules:
+    ListT.Prelude
   build-depends:
     mmorph == 1.*,
     monad-control >= 0.3 && < 2,
     mtl == 2.*,
     transformers-base == 0.4.*,
     transformers >= 0.3 && < 0.6,
-    base-prelude < 2,
     base < 5
+  if !impl(ghc >= 8.0)
+    build-depends:
+      semigroups >= 0.11 && < 0.19
   default-extensions:
     Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFunctor, DeriveGeneric, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, PolyKinds, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples
   default-language:
