diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,14 @@
 # citeproc changelog
 
+## 0.2.0.1
+
+  * FromJSON for Name: make straight quotes curly.
+    Otherwise nothing will do this, when we are decoding
+    JSON to (Reference a), a /= CslJson Text.
+  * Remove redundant pragmas and imports (Albert Krewinkel).
+  * Use custom prelude with GHC 8.6.* and older (Albert
+    Krewinkel).  This adds support for GHC 8.0.x.
+
 ## 0.2
 
   * Remove `AfterOtherPunctuation` constructor from
diff --git a/citeproc.cabal b/citeproc.cabal
--- a/citeproc.cabal
+++ b/citeproc.cabal
@@ -1,6 +1,6 @@
 cabal-version:       2.2
 name:                citeproc
-version:             0.2
+version:             0.2.0.1
 synopsis:            Generates citations and bibliography from CSL styles.
 description:         citeproc parses CSL style files and uses them to
                      generate a list of formatted citations and bibliography
@@ -25,9 +25,9 @@
                      test/csl/*.txt
                      test/extra/*.txt
                      test/overrides/*.txt
-tested-with:         GHC == 8.2.2, GHC == 8.4.4,
-                     GHC == 8.6.5, GHC == 8.8.1,
-                     GHC == 8.10.1
+tested-with:         GHC == 8.0.2, GHC == 8.2.2,
+                     GHC == 8.4.4, GHC == 8.6.5,
+                     GHC == 8.8.3, GHC == 8.10.1
 
 source-repository    head
   type:              git
@@ -97,6 +97,10 @@
                        -Werror=missing-home-modules
                        -fhide-source-paths
 
+  if impl(ghc < 8.8)
+    build-depends:       base-compat          >= 0.10
+    hs-source-dirs:      prelude
+    other-modules:       Prelude
 
   default-language:    Haskell2010
 
diff --git a/man/citeproc.1 b/man/citeproc.1
--- a/man/citeproc.1
+++ b/man/citeproc.1
@@ -1,6 +1,6 @@
 .\" Automatically generated by Pandoc 2.11.2
 .\"
-.TH "citeproc" "1" "" "citeproc 0.2" ""
+.TH "citeproc" "1" "" "citeproc 0.2.0.1" ""
 .hy
 .SH NAME
 .PP
diff --git a/prelude/Prelude.hs b/prelude/Prelude.hs
new file mode 100644
--- /dev/null
+++ b/prelude/Prelude.hs
@@ -0,0 +1,8 @@
+module Prelude (
+    module Prelude.Compat
+  , Semigroup (..)
+)
+where
+
+import Prelude.Compat
+import Data.Semigroup (Semigroup ((<>)))
diff --git a/src/Citeproc.hs b/src/Citeproc.hs
--- a/src/Citeproc.hs
+++ b/src/Citeproc.hs
@@ -1,4 +1,3 @@
-{-# LANGUAGE CPP #-}
 {-# LANGUAGE OverloadedStrings #-}
 -- | Process citations using the formatting instructions encoded
 -- in a CSL stylesheet.  The library targets version 1.0.1 of the
@@ -10,7 +9,6 @@
        , citeproc
        , Result(..)
        ) where
-import Data.Semigroup
 import qualified Data.Text as T
 import qualified Data.Set as Set
 import Citeproc.Types
diff --git a/src/Citeproc/CaseTransform.hs b/src/Citeproc/CaseTransform.hs
--- a/src/Citeproc/CaseTransform.hs
+++ b/src/Citeproc/CaseTransform.hs
@@ -1,5 +1,4 @@
 {-# LANGUAGE StrictData #-}
-{-# LANGUAGE MultiParamTypeClasses #-}
 {-# LANGUAGE FlexibleInstances #-}
 {-# LANGUAGE OverloadedStrings #-}
 -- | Provides functions that facilitate defining textcase transformations.
@@ -18,7 +17,6 @@
 where
 
 import Data.Ord ()
-import Data.Semigroup
 import Data.Char (isUpper, isLower, isAscii)
 import Data.Text (Text)
 import qualified Data.Text as T
diff --git a/src/Citeproc/CslJson.hs b/src/Citeproc/CslJson.hs
--- a/src/Citeproc/CslJson.hs
+++ b/src/Citeproc/CslJson.hs
@@ -2,8 +2,6 @@
 {-# LANGUAGE MultiParamTypeClasses #-}
 {-# LANGUAGE FlexibleInstances #-}
 {-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE DeriveFunctor #-}
-{-# LANGUAGE DeriveFoldable #-}
 {-# LANGUAGE DeriveTraversable #-}
 -- | CSL JSON is the structured text format defined in
 -- <https://citeproc-js.readthedocs.io/en/latest/csl-json/markup.html>.
@@ -34,7 +32,6 @@
 import Citeproc.Types
 import Citeproc.CaseTransform
 import Data.Ord ()
-import Data.Semigroup
 import Data.Char (isAlphaNum, isSpace, isAscii)
 import Data.Text (Text)
 import Data.Maybe (fromMaybe)
diff --git a/src/Citeproc/Data.hs b/src/Citeproc/Data.hs
--- a/src/Citeproc/Data.hs
+++ b/src/Citeproc/Data.hs
@@ -2,9 +2,8 @@
 module Citeproc.Data
   (localeFiles)
 where
-import System.FilePath (FilePath)
 import Data.ByteString (ByteString)
-import           Data.FileEmbed
+import Data.FileEmbed
 
 localeFiles :: [(FilePath, ByteString)]
 localeFiles = $(embedDir "locales")
diff --git a/src/Citeproc/Element.hs b/src/Citeproc/Element.hs
--- a/src/Citeproc/Element.hs
+++ b/src/Citeproc/Element.hs
@@ -17,7 +17,6 @@
   )
 where
 import Citeproc.Types
-import Data.Semigroup
 import Data.Maybe (fromMaybe)
 import Control.Monad (foldM)
 import qualified Data.Map as M
@@ -27,8 +26,6 @@
 import Control.Monad.Trans.Reader
 import Control.Monad.Trans.Except
 import Control.Monad.Trans.Class (lift)
-
-import Debug.Trace
 
 newtype Attributes = Attributes (M.Map Text Text)
   deriving (Show, Semigroup, Monoid, Eq)
diff --git a/src/Citeproc/Eval.hs b/src/Citeproc/Eval.hs
--- a/src/Citeproc/Eval.hs
+++ b/src/Citeproc/Eval.hs
@@ -10,7 +10,6 @@
 import Citeproc.Types
 import Citeproc.Style (mergeLocales)
 import qualified Citeproc.Unicode as Unicode
-import Data.Semigroup
 import Control.Monad.Trans.RWS.CPS
 import Data.Containers.ListUtils (nubOrdOn, nubOrd)
 import Safe (headMay, headDef, lastMay, initSafe, tailSafe, maximumMay)
diff --git a/src/Citeproc/Style.hs b/src/Citeproc/Style.hs
--- a/src/Citeproc/Style.hs
+++ b/src/Citeproc/Style.hs
@@ -15,13 +15,10 @@
 import qualified Text.XML as X
 import qualified Data.Text as T
 import qualified Data.Map as M
-import Data.Semigroup
 import Data.Maybe (fromMaybe, isNothing)
 import Data.Default (def)
 import qualified Data.Text.Lazy as TL
 import Control.Monad.Trans.Reader (local)
-
-import Debug.Trace
 
 -- | Merge the locale specified by the first parameter, if any,
 -- with the default locale of the style and locale definitions
diff --git a/src/Citeproc/Types.hs b/src/Citeproc/Types.hs
--- a/src/Citeproc/Types.hs
+++ b/src/Citeproc/Types.hs
@@ -1,6 +1,5 @@
 {-# LANGUAGE StrictData #-}
 {-# LANGUAGE LambdaCase #-}
-{-# LANGUAGE DeriveFoldable #-}
 {-# LANGUAGE DeriveTraversable #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
@@ -108,7 +107,6 @@
 import qualified Data.Text.Read as TR
 import qualified Data.Scientific as S
 import qualified Data.CaseInsensitive as CI
-import Data.Semigroup
 import Control.Monad (foldM, guard, mzero)
 import Control.Applicative ((<|>))
 import Data.Char (isLower, isDigit, isLetter, isSpace)
@@ -1125,19 +1123,25 @@
       maybe id (\x -> (("literal", toJSON x):)) (nameLiteral n) $
       []
 
+fixApos :: Text -> Text
+fixApos = T.map fixAposC
+ where
+  fixAposC '\'' = '\x2019'
+  fixAposC c    = c
+
 instance FromJSON Name where
   parseJSON (String t) = parseCheaterName t
   parseJSON x =
     extractParticles <$>
      (withObject "Name" $ \v -> Name
-      <$> v .:? "family"
-      <*> v .:? "given"
-      <*> v .:? "dropping-particle"
-      <*> v .:? "non-dropping-particle"
-      <*> v .:? "suffix"
+      <$> (fmap fixApos <$> v .:? "family")
+      <*> (fmap fixApos <$> v .:? "given")
+      <*> (fmap fixApos <$> v .:? "dropping-particle")
+      <*> (fmap fixApos <$> v .:? "non-dropping-particle")
+      <*> (fmap fixApos <$> v .:? "suffix")
       <*> (v .:? "comma-suffix" >>= maybe (return False) asBool)
       <*> (v .:? "static-ordering" >>= maybe (return False) asBool)
-      <*> v .:? "literal"
+      <*> (fmap fixApos <$> v .:? "literal")
      ) x
 
 -- "lowercase elements before the family name are treated as “non-dropping”
diff --git a/src/Citeproc/Unicode.hs b/src/Citeproc/Unicode.hs
--- a/src/Citeproc/Unicode.hs
+++ b/src/Citeproc/Unicode.hs
@@ -17,7 +17,6 @@
 import Data.Text (Text)
 import qualified Data.Text as T
 import Data.Aeson (FromJSON (..), ToJSON (..))
-import Data.Semigroup
 
 -- | A parsed IETF language tag, with language and optional variant.
 -- For example, @Lang "en" (Just "US")@ corresponds to @en-US@.
