diff --git a/.gitignore b/.gitignore
deleted file mode 100644
--- a/.gitignore
+++ /dev/null
@@ -1,8 +0,0 @@
-dist/
-dist-newstyle/
-.cabal-sandbox/
-cabal.sandbox.config
-*.o
-*.hi
-.stack-work
-tests/pretty/*.out
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
 language-bash
 -------------
 
-[![Build Status](https://travis-ci.org/knrafto/language-bash.svg)](https://travis-ci.org/knrafto/language-bash)
+![Build Status](https://github.com/knrafto/language-bash/actions/workflows/main.yml/badge.svg)
 
 A library for parsing and pretty-printing Bash shell scripts.
diff --git a/language-bash.cabal b/language-bash.cabal
--- a/language-bash.cabal
+++ b/language-bash.cabal
@@ -1,23 +1,23 @@
 cabal-version:      2.2
 name:               language-bash
-version:            0.10.0
+version:            0.11.0
 category:           Language
 license:            BSD-3-Clause
 license-file:       LICENSE
 author:             Kyle Raftogianis
 maintainer:         Kyle Raftogianis <knrafto@gmail.com>
-copyright:          Copyright (c) 2013-2024 Kyle Raftogianis
+copyright:          Copyright (c) 2013-2025 Kyle Raftogianis
 build-type:         Simple
 homepage:           http://github.com/knrafto/language-bash/
 bug-reports:        http://github.com/knrafto/language-bash/issues
-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
     Bash shell scripts.
 
+tested-with:        GHC == 8.10.7, GHC == 9.0.2, GHC == 9.2.8, GHC == 9.4.8, GHC == 9.6.6, GHC == 9.8.4, GHC == 9.10.1, GHC == 9.12.1
+
 extra-source-files:
-  .gitignore
   README.md
   tests/pretty/*.golden
   tests/pretty/*.out
@@ -25,7 +25,7 @@
 
 source-repository head
   type: git
-  location: git://github.com/knrafto/language-bash.git
+  location: https://github.com/knrafto/language-bash.git
 
 library
   default-language: Haskell2010
@@ -50,14 +50,15 @@
     --
     -- * base-4.11 is the first where Prelude re-exports Semigroup(s). This
     --   version of base is bundled with 8.4.1.
+    -- * parsec-3.1.17.0 is the first where Text.Parsec.Prim.many1 is defined.
     -- * prettyprinter-1.7.0 is the first version where Prettyprinter module
     --   hierarchy was introduced.
     base          >= 4.11 && < 5,
-    parsec        >= 3.0 && < 4.0,
+    parsec        >= 3.1.17 && < 4.0,
     prettyprinter >= 1.7 && < 2.0,
     transformers  >= 0.2 && < 0.7
 
-  ghc-options: -Wall
+  ghc-options: -Wall -Wno-deriving-typeable
 
 test-suite tests
   default-language: Haskell2010
diff --git a/src/Language/Bash/Parse/Builder.hs b/src/Language/Bash/Parse/Builder.hs
--- a/src/Language/Bash/Parse/Builder.hs
+++ b/src/Language/Bash/Parse/Builder.hs
@@ -25,11 +25,11 @@
 
 import           Prelude                hiding (span)
 
-import           Control.Applicative    hiding (many)
-import qualified Control.Applicative    as Applicative
-import           Data.Monoid
+import           Control.Applicative    ((<|>), liftA2)
+import           Data.Monoid            (Endo (..))
+import           Text.Parsec            (ParsecT, Stream)
 import qualified Text.Parsec.Char       as P
-import           Text.Parsec.Prim       hiding ((<|>), many)
+import qualified Text.Parsec.Prim       as P
 
 infixr 4 <+>
 
@@ -53,12 +53,12 @@
 (<+>) = liftA2 mappend
 
 -- | Concat zero or more monoidal results.
-many :: (Alternative f, Monoid a) => f a -> f a
-many = fmap mconcat . Applicative.many
+many :: Monoid a => ParsecT s u m a -> ParsecT s u m a
+many = fmap mconcat . P.many
 
 -- | Concat one or more monoidal results.
-many1 :: (Alternative f, Monoid a) => f a -> f a
-many1 = fmap mconcat . Applicative.some
+many1 :: Monoid a => ParsecT s u m a -> ParsecT s u m a
+many1 = fmap mconcat . P.many1
 
 -- | 'Builder' version of 'P.oneOf'.
 oneOf :: Stream s m Char => [Char] -> ParsecT s u m Builder
diff --git a/src/Language/Bash/Parse/Word.hs b/src/Language/Bash/Parse/Word.hs
--- a/src/Language/Bash/Parse/Word.hs
+++ b/src/Language/Bash/Parse/Word.hs
@@ -365,6 +365,4 @@
 
     continue xs = do
         c <- anyChar
-        (c :) <$> go (prefix c xs)
-
-    prefix c = map tail . filter (\x -> not (null x) && head x == c)
+        (c :) <$> go (mapMaybe (stripPrefix [c]) xs)
