diff --git a/midi.cabal b/midi.cabal
--- a/midi.cabal
+++ b/midi.cabal
@@ -1,5 +1,5 @@
 Name:             midi
-Version:          0.2.2.5
+Version:          0.2.2.6
 License:          GPL
 License-File:     LICENSE
 Author:           Henning Thielemann <haskell@henning-thielemann.de>
@@ -30,7 +30,7 @@
 Source-Repository this
   type:     darcs
   location: https://hub.darcs.net/thielema/midi/
-  tag:      0.2.2.5
+  tag:      0.2.2.6
 
 Library
   Build-Depends:
@@ -45,7 +45,7 @@
     monoid-transformer >=0.0.4 && <0.1,
     QuickCheck >=2.1 && <3,
     random >=1 && <2,
-    base >=3 && <5
+    base >=4.11 && <5
 
   Default-Language: Haskell2010
   GHC-Options:      -Wall
diff --git a/src/Sound/MIDI/Monoid.hs b/src/Sound/MIDI/Monoid.hs
--- a/src/Sound/MIDI/Monoid.hs
+++ b/src/Sound/MIDI/Monoid.hs
@@ -2,7 +2,7 @@
 
 import Data.Foldable (foldMap, )
 import Data.Monoid (Monoid, mappend, )
-import Data.Semigroup (Semigroup, sconcat, )
+import Data.Semigroup (Semigroup, sconcat, (<>))
 import Data.List.NonEmpty (NonEmpty, )
 
 
@@ -13,10 +13,10 @@
 (+#+) = mappend
 
 
-genAppend :: (Monoid m) =>
+genAppend :: (Semigroup m) =>
    (m -> a) -> (a -> m) -> a -> a -> a
 genAppend cons decons x y =
-   cons $ mappend (decons x) (decons y)
+   cons $ decons x <> decons y
 
 genConcat :: (Monoid m) =>
    (m -> a) -> (a -> m) -> [a] -> a
diff --git a/src/Sound/MIDI/Parser/ByteString.hs b/src/Sound/MIDI/Parser/ByteString.hs
--- a/src/Sound/MIDI/Parser/ByteString.hs
+++ b/src/Sound/MIDI/Parser/ByteString.hs
@@ -72,7 +72,6 @@
    (<*>) = ap
 
 instance Monad T where
-   return = pure
    x >>= y = Cons $ decons . y =<< decons x
 
 
diff --git a/src/Sound/MIDI/Parser/File.hs b/src/Sound/MIDI/Parser/File.hs
--- a/src/Sound/MIDI/Parser/File.hs
+++ b/src/Sound/MIDI/Parser/File.hs
@@ -65,7 +65,6 @@
    (<*>) = ap
 
 instance Monad T where
-   return = pure
    x >>= y = Cons $ decons . y =<< decons x
 
 fromIO :: (IO.Handle -> IO a) -> T a
diff --git a/src/Sound/MIDI/Parser/Restricted.hs b/src/Sound/MIDI/Parser/Restricted.hs
--- a/src/Sound/MIDI/Parser/Restricted.hs
+++ b/src/Sound/MIDI/Parser/Restricted.hs
@@ -49,7 +49,6 @@
    Cons f <*> Cons a = Cons $ f <*> a
 
 instance Monad parser => Monad (T parser) where
-   return = Cons . return
    x >>= y = Cons $ decons . y =<< decons x
 
 instance Trans.MonadTrans T where
diff --git a/src/Sound/MIDI/Writer/Basic.hs b/src/Sound/MIDI/Writer/Basic.hs
--- a/src/Sound/MIDI/Writer/Basic.hs
+++ b/src/Sound/MIDI/Writer/Basic.hs
@@ -10,7 +10,7 @@
 import Sound.MIDI.IO (listByteFromChar, )
 import Sound.MIDI.Monoid ((+#+), genAppend, genConcat, nonEmptyConcat, )
 import Data.Foldable (foldMap, )
-import Data.Monoid (Monoid, mempty, mappend, mconcat, )
+import Data.Monoid (Monoid, mempty, mconcat, )
 import Data.Semigroup (Semigroup(sconcat, (<>)), )
 
 import Control.Monad.Trans.Reader (ReaderT, runReaderT, ask, )
@@ -51,14 +51,13 @@
 
 instance Monoid ByteList where
    mempty = ByteList mempty
-   mappend = (<>)
    mconcat = genConcat ByteList unByteList
 
 instance C ByteList where
    putByte = ByteList . Monoid.Endo . (:)
    putLengthBlock n writeBody =
       let body = runByteList writeBody
-      in  putInt n (length body) `mappend`
+      in  putInt n (length body) <>
           putByteListSpec body  -- we could call 'writeBody' but this would recompute the data
 
 
@@ -81,7 +80,6 @@
 
 instance Monoid ByteString where
    mempty = ByteString $ mempty
-   mappend = (<>)
    mconcat = genConcat ByteString unByteString
 
 instance C ByteString where
@@ -109,7 +107,6 @@
 
 instance Monoid SeekableFile where
    mempty = SeekableFile $ return ()
-   mappend = (<>)
    mconcat = SeekableFile . mapM_ unSeekableFile
 
 instance C SeekableFile where
diff --git a/src/Sound/MIDI/Writer/Status.hs b/src/Sound/MIDI/Writer/Status.hs
--- a/src/Sound/MIDI/Writer/Status.hs
+++ b/src/Sound/MIDI/Writer/Status.hs
@@ -10,7 +10,7 @@
 import Data.Monoid.Transformer (lift, )
 
 import qualified Data.Monoid.HT as MonoidHT
-import Data.Monoid (Monoid, mempty, mappend, mconcat, )
+import Data.Monoid (Monoid, mempty, mconcat, )
 import Data.Semigroup (Semigroup, sconcat, (<>), )
 import Sound.MIDI.Monoid (genAppend, genConcat, nonEmptyConcat, )
 
@@ -28,12 +28,11 @@
 
 
 instance Semigroup writer => Semigroup (T compress writer) where
-   Cons x <> Cons y = Cons $ x<>y
+   (<>) = genAppend Cons decons
    sconcat = nonEmptyConcat Cons decons
 
 instance Monoid writer => Monoid (T compress writer) where
    mempty = Cons $ mempty
-   mappend = genAppend Cons decons
    mconcat = genConcat Cons decons
 
 
