diff --git a/.gitignore b/.gitignore
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,5 @@
 dist/
+dist-newstyle/
 .cabal-sandbox/
 cabal.sandbox.config
 *.o
diff --git a/language-bash.cabal b/language-bash.cabal
--- a/language-bash.cabal
+++ b/language-bash.cabal
@@ -1,16 +1,16 @@
+cabal-version:      2.2
 name:               language-bash
-version:            0.9.2
+version:            0.10.0
 category:           Language
-license:            BSD3
+license:            BSD-3-Clause
 license-file:       LICENSE
 author:             Kyle Raftogianis
 maintainer:         Kyle Raftogianis <knrafto@gmail.com>
-copyright:          Copyright (c) 2013-2020 Kyle Raftogianis
+copyright:          Copyright (c) 2013-2024 Kyle Raftogianis
 build-type:         Simple
-cabal-version:      >= 1.8
 homepage:           http://github.com/knrafto/language-bash/
 bug-reports:        http://github.com/knrafto/language-bash/issues
-tested-with:        GHC == 7.10.1, GHC == 7.10.2, GHC == 8.0.2, GHC == 8.4.3, GHC == 8.8.3
+tested-with:        GHC == 8.4.3, GHC == 8.8.3, GHC == 9.4.8, GHC == 9.6.6
 synopsis:           Parsing and pretty-printing Bash shell scripts
 description:
     A library for parsing, pretty-printing, and manipulating
@@ -28,6 +28,7 @@
   location: git://github.com/knrafto/language-bash.git
 
 library
+  default-language: Haskell2010
   hs-source-dirs: src
 
   exposed-modules:
@@ -45,14 +46,21 @@
     Language.Bash.Parse.Internal
 
   build-depends:
-    base          >= 4.6 && < 5,
+    -- Notes on version bounds:
+    --
+    -- * base-4.11 is the first where Prelude re-exports Semigroup(s). This
+    --   version of base is bundled with 8.4.1.
+    -- * prettyprinter-1.7.0 is the first version where Prettyprinter module
+    --   hierarchy was introduced.
+    base          >= 4.11 && < 5,
     parsec        >= 3.0 && < 4.0,
-    prettyprinter >= 1.2 && < 2.0,
-    transformers  >= 0.2 && < 0.6
+    prettyprinter >= 1.7 && < 2.0,
+    transformers  >= 0.2 && < 0.7
 
   ghc-options: -Wall
 
 test-suite tests
+  default-language: Haskell2010
   type: exitcode-stdio-1.0
   hs-source-dirs: tests
   main-is: Tests.hs
diff --git a/src/Language/Bash/Cond.hs b/src/Language/Bash/Cond.hs
--- a/src/Language/Bash/Cond.hs
+++ b/src/Language/Bash/Cond.hs
@@ -22,7 +22,7 @@
 import GHC.Generics           (Generic)
 import Text.Parsec            hiding ((<|>), token)
 import Text.Parsec.Expr       hiding (Operator)
-import Data.Text.Prettyprint.Doc (Pretty(..), (<+>))
+import Prettyprinter          (Pretty(..), (<+>))
 
 import Language.Bash.Operator
 
diff --git a/src/Language/Bash/Expand.hs b/src/Language/Bash/Expand.hs
--- a/src/Language/Bash/Expand.hs
+++ b/src/Language/Bash/Expand.hs
@@ -12,11 +12,10 @@
 import Control.Applicative
 import Control.Monad
 import Data.Char
-import Data.Monoid            ((<>))
 import Text.Parsec.Combinator hiding (optional, manyTill)
 import Text.Parsec.Prim       hiding ((<|>), many, token)
 import Text.Parsec.String     ()
-import Data.Text.Prettyprint.Doc (Pretty(..))
+import Prettyprinter          (Pretty(..))
 
 import Language.Bash.Pretty
 import Language.Bash.Word     hiding (prefix)
diff --git a/src/Language/Bash/Operator.hs b/src/Language/Bash/Operator.hs
--- a/src/Language/Bash/Operator.hs
+++ b/src/Language/Bash/Operator.hs
@@ -6,9 +6,9 @@
     , prettyOperator
     ) where
 
-import Control.Applicative
-import Data.Foldable
-import Data.Text.Prettyprint.Doc (Doc, pretty)
+import Control.Applicative (Alternative)
+import Data.Foldable (asum)
+import Prettyprinter (Doc, pretty)
 
 -- | String operators.
 class Eq a => Operator a where
diff --git a/src/Language/Bash/Pretty.hs b/src/Language/Bash/Pretty.hs
--- a/src/Language/Bash/Pretty.hs
+++ b/src/Language/Bash/Pretty.hs
@@ -2,9 +2,9 @@
 -- used by the Bash builtin @declare -f@.
 module Language.Bash.Pretty where
 
-import Data.Text.Prettyprint.Doc
-import Data.Text.Prettyprint.Doc.Internal
-import Data.Text.Prettyprint.Doc.Render.String
+import Prettyprinter
+import Prettyprinter.Internal.Type (Doc(Empty))
+import Prettyprinter.Render.String (renderString)
 
 -- | @x $+$ y@ concatenates @x@ and @y@ with a 'line' in between
 ($+$) :: Doc ann -> Doc ann -> Doc ann
diff --git a/src/Language/Bash/Syntax.hs b/src/Language/Bash/Syntax.hs
--- a/src/Language/Bash/Syntax.hs
+++ b/src/Language/Bash/Syntax.hs
@@ -29,11 +29,10 @@
 
 import Data.Data        (Data)
 import Data.List        (intersperse)
-import Data.Semigroup   (Semigroup(..))
 import Data.Typeable    (Typeable)
 import GHC.Generics     (Generic)
-import Data.Text.Prettyprint.Doc (Doc, Pretty(..), (<+>), hardline, hcat, hsep, indent, nest, nesting, punctuate, vcat)
-import Data.Text.Prettyprint.Doc.Internal (Doc(Empty))
+import Prettyprinter    (Doc, Pretty(..), (<+>), hardline, hcat, hsep, indent, nest, nesting, punctuate, vcat)
+import Prettyprinter.Internal.Type (Doc(Empty))
 
 import Language.Bash.Cond     (CondExpr)
 import Language.Bash.Operator
@@ -125,7 +124,7 @@
 instance ToBashDoc Command where
     toBashDoc (Command c rs) = BashDoc mempty (pretty c <++> pretty rs) (prettyHeredocs $ filter isHeredoc rs)
         where
-            isHeredoc Heredoc{..} = True
+            isHeredoc Heredoc{} = True
             isHeredoc _ = False
 
 -- | A Bash command.
diff --git a/src/Language/Bash/Word.hs b/src/Language/Bash/Word.hs
--- a/src/Language/Bash/Word.hs
+++ b/src/Language/Bash/Word.hs
@@ -29,11 +29,10 @@
 import Prelude hiding (Word)
 
 import           Data.Data        (Data)
-import           Data.Monoid      ((<>))
 import           Data.Typeable    (Typeable)
 import           GHC.Generics     (Generic)
-import           Data.Text.Prettyprint.Doc (Doc, Pretty(..), hcat, hsep, layoutCompact)
-import           Data.Text.Prettyprint.Doc.Render.String (renderString)
+import           Prettyprinter    (Doc, Pretty(..), hcat, hsep, layoutCompact)
+import           Prettyprinter.Render.String (renderString)
 
 import           Language.Bash.Operator
 
