diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,4 +1,6 @@
-unreleased
+0.1.2
+
+* support ghc from 8.6 to 9.6 and drop older versions
 
 0.1.1
 
diff --git a/lib/Pdf/Content/FontInfo.hs b/lib/Pdf/Content/FontInfo.hs
--- a/lib/Pdf/Content/FontInfo.hs
+++ b/lib/Pdf/Content/FontInfo.hs
@@ -100,15 +100,15 @@
     cidFontWidthsChars = mempty,
     cidFontWidthsRanges = mempty
     }
-  w1 `mappend` w2 = CIDFontWidths {
+  mappend = (<>)
+
+instance Semigroup CIDFontWidths where
+  w1 <> w2 = CIDFontWidths {
     cidFontWidthsChars = cidFontWidthsChars w1
-        `mappend` cidFontWidthsChars w2,
+        <> cidFontWidthsChars w2,
     cidFontWidthsRanges = cidFontWidthsRanges w1
-        `mappend` cidFontWidthsRanges w2
+        <> cidFontWidthsRanges w2
     }
-
-instance Semigroup CIDFontWidths where
-  (<>) = mappend
 
 -- | Returns the Y coordinates for a bbox of a glyph of a font, in
 -- text space units. Defaults to (0,1) if no FontDescriptor is
diff --git a/pdf-toolbox-content.cabal b/pdf-toolbox-content.cabal
--- a/pdf-toolbox-content.cabal
+++ b/pdf-toolbox-content.cabal
@@ -1,5 +1,5 @@
 name:                pdf-toolbox-content
-version:             0.1.1
+version:             0.1.2
 synopsis:            A collection of tools for processing PDF files
 license:             BSD3
 license-file:        LICENSE
@@ -36,7 +36,7 @@
                        Pdf.Content.Encoding.MacRoman
                        Pdf.Content.Encoding.PdfDoc
   other-modules:       Prelude
-  build-depends:       base >= 4.5 && < 5,
+  build-depends:       base >= 4.9 && < 5,
                        containers,
                        attoparsec >= 0.10,
                        bytestring,
diff --git a/test/Test/UnicodeCMap.hs b/test/Test/UnicodeCMap.hs
--- a/test/Test/UnicodeCMap.hs
+++ b/test/Test/UnicodeCMap.hs
@@ -11,6 +11,7 @@
 import Data.Either
 import qualified Data.List as List
 import qualified Data.Map as Map
+import Data.Maybe
 import qualified Data.ByteString as ByteString
 import Test.Hspec
 
@@ -159,6 +160,6 @@
 unicodeCMapNextGlyphSpec = describe "unicodeCMapNextGlyph" $ do
   it "correctly handles multibyte ranges" $ do
     let cmap = UnicodeCMap [("\0\0", "\1\1")] mempty []
-    let Just (code, rest) = unicodeCMapNextGlyph cmap "\1\0rest"
+    let (code, rest) = fromJust $ unicodeCMapNextGlyph cmap "\1\0rest"
     rest `shouldBe` rest
     code `shouldBe` 256
