diff --git a/app/App/Commands/CreateIndex.hs b/app/App/Commands/CreateIndex.hs
--- a/app/App/Commands/CreateIndex.hs
+++ b/app/App/Commands/CreateIndex.hs
@@ -31,8 +31,8 @@
 import qualified System.IO                                                          as IO
 import qualified System.IO.MMap                                                     as IO
 
-{-# ANN module ("HLint: ignore Reduce duplication"  :: String) #-}
-{-# ANN module ("HLint: ignore Redundant do"        :: String) #-}
+{- HLINT ignore "Reduce duplication"  -}
+{- HLINT ignore "Redundant do"        -}
 
 runCreateIndex :: Z.CreateIndexOptions -> IO ()
 runCreateIndex opts = do
diff --git a/hw-json-standard-cursor.cabal b/hw-json-standard-cursor.cabal
--- a/hw-json-standard-cursor.cabal
+++ b/hw-json-standard-cursor.cabal
@@ -1,7 +1,7 @@
 cabal-version: 2.2
 
 name:                   hw-json-standard-cursor
-version:                0.2.3.1
+version:                0.2.3.2
 synopsis:               Memory efficient JSON parser
 description:            Memory efficient JSON parser. Please see README.md
 category:               Data
@@ -9,10 +9,10 @@
 bug-reports:            https://github.com/haskell-works/hw-json-standard-cursor/issues
 author:                 John Ky
 maintainer:             newhoggy@gmail.com
-copyright:              2016-2020 John Ky
+copyright:              2016-2021 John Ky
 license:                BSD-3-Clause
 license-file:           LICENSE
-tested-with:            GHC == 8.10.1, GHC == 8.8.3, GHC == 8.6.5, GHC == 8.4.4
+tested-with:            GHC == 9.2.2, GHC == 9.0.2, GHC == 8.10.7, GHC == 8.8.4, GHC == 8.6.5
 build-type:             Simple
 extra-source-files:     README.md
                         corpus/5000B.json
@@ -41,13 +41,13 @@
 
 common array                      { build-depends: array                      >= 0.5        && < 0.6    }
 common bits-extra                 { build-depends: bits-extra                 >= 0.0.1.3    && < 0.1    }
-common bytestring                 { build-depends: bytestring                 >= 0.10.6     && < 0.11   }
+common bytestring                 { build-depends: bytestring                 >= 0.10.6     && < 0.12   }
 common criterion                  { build-depends: criterion                  >= 1.4        && < 1.6    }
 common directory                  { build-depends: directory                  >= 1.3        && < 1.4    }
-common doctest                    { build-depends: doctest                    >= 0.16.2     && < 0.17   }
+common doctest                    { build-depends: doctest                    >= 0.16.2     && < 0.21   }
 common doctest-discover           { build-depends: doctest-discover           >= 0.2        && < 0.3    }
-common generic-lens               { build-depends: generic-lens               >= 1.1.0.0    && < 2.1    }
-common hedgehog                   { build-depends: hedgehog                   >= 0.6        && < 1.1    }
+common generic-lens               { build-depends: generic-lens               >= 2.2.0.0    && < 2.3    }
+common hedgehog                   { build-depends: hedgehog                   >= 0.6        && < 1.2    }
 common hspec                      { build-depends: hspec                      >= 2.4        && < 3      }
 common hw-balancedparens          { build-depends: hw-balancedparens          >= 0.3.0.0    && < 0.5    }
 common hw-bits                    { build-depends: hw-bits                    >= 0.7.0.5    && < 0.8    }
@@ -56,10 +56,10 @@
 common hw-prim                    { build-depends: hw-prim                    >= 0.6.2.29   && < 0.7    }
 common hw-rankselect              { build-depends: hw-rankselect              >= 0.13       && < 0.14   }
 common hw-rankselect-base         { build-depends: hw-rankselect-base         >= 0.3.2.1    && < 0.4    }
-common lens                       { build-depends: lens                       >= 4          && < 5      }
+common lens                       { build-depends: lens                       >= 4          && < 6      }
 common mmap                       { build-depends: mmap                       >= 0.5        && < 0.6    }
-common optparse-applicative       { build-depends: optparse-applicative       >= 0.14       && < 0.16   }
-common text                       { build-depends: text                       >= 1.2        && < 1.3    }
+common optparse-applicative       { build-depends: optparse-applicative       >= 0.14       && < 0.18   }
+common text                       { build-depends: text                       >= 1.2        && < 2.1    }
 common vector                     { build-depends: vector                     >= 0.12       && < 0.13   }
 common word8                      { build-depends: word8                      >= 0.1        && < 0.2    }
 
diff --git a/src/HaskellWorks/Data/Json/Standard/Cursor/Internal/StateMachine.hs b/src/HaskellWorks/Data/Json/Standard/Cursor/Internal/StateMachine.hs
--- a/src/HaskellWorks/Data/Json/Standard/Cursor/Internal/StateMachine.hs
+++ b/src/HaskellWorks/Data/Json/Standard/Cursor/Internal/StateMachine.hs
@@ -22,7 +22,7 @@
 import qualified Data.Vector.Storable                                  as DVS
 import qualified HaskellWorks.Data.Json.Standard.Cursor.Internal.Word8 as W8
 
-{-# ANN module ("HLint: ignore Redundant guard"  :: String) #-}
+{- HLINT ignore "Reduce guard"        -}
 
 newtype IntState = IntState Int deriving (Eq, Ord, Show, Num, Generic)
 
diff --git a/src/HaskellWorks/Data/Json/Standard/Cursor/SemiIndex.hs b/src/HaskellWorks/Data/Json/Standard/Cursor/SemiIndex.hs
--- a/src/HaskellWorks/Data/Json/Standard/Cursor/SemiIndex.hs
+++ b/src/HaskellWorks/Data/Json/Standard/Cursor/SemiIndex.hs
@@ -45,8 +45,8 @@
 import qualified HaskellWorks.Data.Json.Standard.Cursor.Internal.ToBalancedParens64 as J
 import qualified HaskellWorks.Data.Json.Standard.Cursor.Internal.Word8              as W8
 
-{-# ANN module ("HLint: ignore Reduce duplication"  :: String) #-}
-{-# ANN module ("HLint: ignore Redundant do"        :: String) #-}
+{- HLINT ignore "Reduce duplication"  -}
+{- HLINT ignore "Redundant do"        -}
 
 data PreSiChunk v = PreSiChunk
   { preSiChunkIb   :: !v -- interest bits
diff --git a/src/HaskellWorks/Data/Json/Standard/Cursor/Type.hs b/src/HaskellWorks/Data/Json/Standard/Cursor/Type.hs
--- a/src/HaskellWorks/Data/Json/Standard/Cursor/Type.hs
+++ b/src/HaskellWorks/Data/Json/Standard/Cursor/Type.hs
@@ -25,7 +25,7 @@
 import qualified Data.ByteString                  as BS
 import qualified HaskellWorks.Data.BalancedParens as BP
 
-{-# ANN module ("HLint: Reduce duplication" :: String) #-}
+{- HLINT ignore "Reduce duplication"  -}
 
 data JsonType
   = JsonTypeArray
diff --git a/test/HaskellWorks/Data/Json/Standard/CorpusSpec.hs b/test/HaskellWorks/Data/Json/Standard/CorpusSpec.hs
--- a/test/HaskellWorks/Data/Json/Standard/CorpusSpec.hs
+++ b/test/HaskellWorks/Data/Json/Standard/CorpusSpec.hs
@@ -23,9 +23,8 @@
 import qualified Data.ByteString                             as BS
 import qualified HaskellWorks.Data.Json.Standard.Cursor.Slow as SLOW
 
-{-# ANN module ("HLint: ignore Redundant do"        :: String) #-}
-{-# ANN module ("HLint: ignore Reduce duplication"  :: String) #-}
-{-# ANN module ("HLint: ignore Redundant bracket"   :: String) #-}
+{- HLINT ignore "Reduce duplication"  -}
+{- HLINT ignore "Redundant do"        -}
 
 spec :: Spec
 spec = describe "HaskellWorks.Data.Json.Corpus" $ do
diff --git a/test/HaskellWorks/Data/Json/Standard/Cursor/BalancedParensSpec.hs b/test/HaskellWorks/Data/Json/Standard/Cursor/BalancedParensSpec.hs
--- a/test/HaskellWorks/Data/Json/Standard/Cursor/BalancedParensSpec.hs
+++ b/test/HaskellWorks/Data/Json/Standard/Cursor/BalancedParensSpec.hs
@@ -19,7 +19,7 @@
 import qualified HaskellWorks.Data.Json.Standard.Cursor.Internal.BlankedJson as J
 import qualified HaskellWorks.Data.Json.Standard.Cursor.SemiIndex            as SI
 
-{-# ANN module ("HLint: ignore Redundant do"        :: String) #-}
+{- HLINT ignore "Redundant do"        -}
 
 balancedParensOf2 :: BS.ByteString -> DVS.Vector Word64
 balancedParensOf2 bs = let SI.SemiIndex _ bp = SI.buildSemiIndex bs in bp
diff --git a/test/HaskellWorks/Data/Json/Standard/Cursor/InterestBitsSpec.hs b/test/HaskellWorks/Data/Json/Standard/Cursor/InterestBitsSpec.hs
--- a/test/HaskellWorks/Data/Json/Standard/Cursor/InterestBitsSpec.hs
+++ b/test/HaskellWorks/Data/Json/Standard/Cursor/InterestBitsSpec.hs
@@ -18,7 +18,7 @@
 import qualified HaskellWorks.Data.Json.Standard.Cursor.Internal.ToInterestBits64 as J
 import qualified HaskellWorks.Data.Json.Standard.Cursor.SemiIndex                 as SI
 
-{-# ANN module ("HLint: ignore Redundant do"        :: String) #-}
+{- HLINT ignore "Redundant do"        -}
 
 interestBitsOf :: BS.ByteString -> DVS.Vector Word64
 interestBitsOf bs = J.toInterestBits64 (J.toBlankedJsonTyped bs)
diff --git a/test/HaskellWorks/Data/Json/Standard/Cursor/Internal/BlankSpec.hs b/test/HaskellWorks/Data/Json/Standard/Cursor/Internal/BlankSpec.hs
--- a/test/HaskellWorks/Data/Json/Standard/Cursor/Internal/BlankSpec.hs
+++ b/test/HaskellWorks/Data/Json/Standard/Cursor/Internal/BlankSpec.hs
@@ -9,7 +9,7 @@
 
 import qualified Data.ByteString as BS
 
-{-# ANN module ("HLint: ignore Redundant do" :: String) #-}
+{- HLINT ignore "Redundant do"        -}
 
 whenBlankedJsonShouldBe :: BS.ByteString -> BS.ByteString -> Spec
 whenBlankedJsonShouldBe original expected = do
diff --git a/test/HaskellWorks/Data/Json/Standard/Cursor/TypeSpec.hs b/test/HaskellWorks/Data/Json/Standard/Cursor/TypeSpec.hs
--- a/test/HaskellWorks/Data/Json/Standard/Cursor/TypeSpec.hs
+++ b/test/HaskellWorks/Data/Json/Standard/Cursor/TypeSpec.hs
@@ -28,9 +28,8 @@
 import qualified HaskellWorks.Data.Json.Standard.Cursor.Slow as SLOW
 import qualified HaskellWorks.Data.TreeCursor                as TC
 
-{-# ANN module ("HLint: ignore Redundant do"        :: String) #-}
-{-# ANN module ("HLint: ignore Reduce duplication"  :: String) #-}
-{-# ANN module ("HLint: ignore Redundant bracket"   :: String) #-}
+{- HLINT ignore "Reduce duplication"  -}
+{- HLINT ignore "Redundant do"        -}
 
 fc = TC.firstChild
 ns = TC.nextSibling
diff --git a/test/HaskellWorks/Data/Json/Standard/CursorSpec.hs b/test/HaskellWorks/Data/Json/Standard/CursorSpec.hs
--- a/test/HaskellWorks/Data/Json/Standard/CursorSpec.hs
+++ b/test/HaskellWorks/Data/Json/Standard/CursorSpec.hs
@@ -17,9 +17,8 @@
 import qualified HaskellWorks.Data.Json.Standard.Cursor.Fast as FAST
 import qualified HaskellWorks.Data.Json.Standard.Cursor.Slow as SLOW
 
-{-# ANN module ("HLint: ignore Redundant do"        :: String) #-}
-{-# ANN module ("HLint: ignore Reduce duplication"  :: String) #-}
-{-# ANN module ("HLint: ignore Redundant bracket"   :: String) #-}
+{- HLINT ignore "Reduce duplication"  -}
+{- HLINT ignore "Redundant do"        -}
 
 spec :: Spec
 spec = describe "HaskellWorks.Data.Json.Succinct.CursorSpec" $ do
diff --git a/test/HaskellWorks/Data/Json/Standard/GenCursorTest.hs b/test/HaskellWorks/Data/Json/Standard/GenCursorTest.hs
--- a/test/HaskellWorks/Data/Json/Standard/GenCursorTest.hs
+++ b/test/HaskellWorks/Data/Json/Standard/GenCursorTest.hs
@@ -29,9 +29,8 @@
 import qualified Data.ByteString              as BS
 import qualified HaskellWorks.Data.TreeCursor as TC
 
-{-# ANN module ("HLint: ignore Redundant do"        :: String) #-}
-{-# ANN module ("HLint: ignore Reduce duplication"  :: String) #-}
-{-# ANN module ("HLint: ignore Redundant bracket"   :: String) #-}
+{- HLINT ignore "Reduce duplication"  -}
+{- HLINT ignore "Redundant do"        -}
 
 fc = TC.firstChild
 ns = TC.nextSibling
