diff --git a/app/App/Commands.hs b/app/App/Commands.hs
--- a/app/App/Commands.hs
+++ b/app/App/Commands.hs
@@ -6,6 +6,8 @@
 import App.Commands.Demo
 import Options.Applicative
 
+{- HLINT ignore "Monoid law, left identity" -}
+
 commands :: Parser (IO ())
 commands = commandsGeneral
 
diff --git a/app/App/Commands/Count.hs b/app/App/Commands/Count.hs
--- a/app/App/Commands/Count.hs
+++ b/app/App/Commands/Count.hs
@@ -32,10 +32,7 @@
 import qualified System.IO.MMap                              as IO
 
 siblings :: GenericCursor BSI.ByteString CsPoppy1 (RM.RangeMin CsPoppy1) -> [GenericCursor BSI.ByteString CsPoppy1 (RM.RangeMin CsPoppy1)]
-siblings c = c:cs
-  where cs = case nextSibling c of
-          Just d  -> siblings d
-          Nothing -> []
+siblings c = c:maybe [] siblings (nextSibling c)
 
 runCount :: Z.CountOptions -> IO ()
 runCount opts = do
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
@@ -32,8 +32,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"       -}
 
 runCreateIndexStandard :: Z.CreateIndexOptions -> IO ()
 runCreateIndexStandard opts = do
diff --git a/app/App/Commands/Demo.hs b/app/App/Commands/Demo.hs
--- a/app/App/Commands/Demo.hs
+++ b/app/App/Commands/Demo.hs
@@ -34,6 +34,8 @@
 import qualified System.IO                                  as IO
 import qualified System.IO.MMap                             as IO
 
+{- HLINT ignore "Reduce duplication" -}
+
 runDemo :: Z.DemoOptions -> IO ()
 runDemo opts = do
   let filePath = opts ^. the @"filePath"
diff --git a/bench/Main.hs b/bench/Main.hs
--- a/bench/Main.hs
+++ b/bench/Main.hs
@@ -6,5 +6,5 @@
 
 main :: IO ()
 main = do
-  benchmarks <- fmap mconcat $ sequence $ mempty
+  benchmarks <- mconcat <$> sequence mempty
   defaultMain benchmarks
diff --git a/examples/Example4.hs b/examples/Example4.hs
--- a/examples/Example4.hs
+++ b/examples/Example4.hs
@@ -18,6 +18,8 @@
 
 import qualified Data.DList as DL
 
+{- HLINT ignore "Reduce duplication" -}
+
 example :: IO ()
 example = do
   !cursor <- loadPartial "corpus/bench/78mb.json"
diff --git a/hw-json.cabal b/hw-json.cabal
--- a/hw-json.cabal
+++ b/hw-json.cabal
@@ -1,7 +1,7 @@
 cabal-version:  2.2
 
 name:                   hw-json
-version:                1.3.2.1
+version:                1.3.2.2
 synopsis:               Memory efficient JSON parser
 description:            Memory efficient JSON parser. Please see README.md
 category:               Data
@@ -12,7 +12,7 @@
 copyright:              2016-2020 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 == 8.10.2, GHC == 8.8.3, GHC == 8.6.5, GHC == 8.4.4
 build-type:             Simple
 extra-source-files:     README.md
                         corpus/5000B.json
@@ -39,7 +39,7 @@
 
 common base                       { build-depends: base                       >= 4.11       && < 5      }
 
-common aeson                      { build-depends: aeson                      >= 1.4.3.0    && < 1.5    }
+common aeson                      { build-depends: aeson                      >= 1.4.3.0    && < 1.6    }
 common ansi-wl-pprint             { build-depends: ansi-wl-pprint             >= 0.6.8.2    && < 0.7    }
 common array                      { build-depends: array                      >= 0.5        && < 0.6    }
 common attoparsec                 { build-depends: attoparsec                 >= 0.13       && < 0.14   }
@@ -67,7 +67,7 @@
 common hw-simd                    { build-depends: hw-simd                    >= 0.1.1.2    && < 0.2    }
 common lens                       { build-depends: lens                       >= 4          && < 5      }
 common mmap                       { build-depends: mmap                       >= 0.5        && < 0.6    }
-common optparse-applicative       { build-depends: optparse-applicative       >= 0.14       && < 0.16   }
+common optparse-applicative       { build-depends: optparse-applicative       >= 0.14       && < 0.17   }
 common scientific                 { build-depends: scientific                 >= 0.3.6.2    && < 0.4    }
 common text                       { build-depends: text                       >= 1.2        && < 1.3    }
 common transformers               { build-depends: transformers               >= 0.4        && < 0.6    }
diff --git a/src/HaskellWorks/Data/Json/FromValue.hs b/src/HaskellWorks/Data/Json/FromValue.hs
--- a/src/HaskellWorks/Data/Json/FromValue.hs
+++ b/src/HaskellWorks/Data/Json/FromValue.hs
@@ -1,5 +1,4 @@
-{-# LANGUAGE FlexibleInstances    #-}
-{-# LANGUAGE TypeSynonymInstances #-}
+{-# LANGUAGE FlexibleInstances #-}
 
 module HaskellWorks.Data.Json.FromValue where
 
diff --git a/src/HaskellWorks/Data/Json/Internal/Standard/Token/Tokenize.hs b/src/HaskellWorks/Data/Json/Internal/Standard/Token/Tokenize.hs
--- a/src/HaskellWorks/Data/Json/Internal/Standard/Token/Tokenize.hs
+++ b/src/HaskellWorks/Data/Json/Internal/Standard/Token/Tokenize.hs
@@ -2,7 +2,6 @@
 {-# LANGUAGE FlexibleInstances     #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
 {-# LANGUAGE OverloadedStrings     #-}
-{-# LANGUAGE TypeSynonymInstances  #-}
 
 module HaskellWorks.Data.Json.Internal.Standard.Token.Tokenize
     ( IsChar(..)
@@ -24,6 +23,8 @@
 import qualified Data.Attoparsec.Types            as T
 import qualified Data.ByteString                  as BS
 import qualified HaskellWorks.Data.Parser         as P
+
+{- HLINT ignore "Reduce duplication" -}
 
 hexDigitNumeric :: P.Parser t u => T.Parser t Int
 hexDigitNumeric = do
diff --git a/src/HaskellWorks/Data/Json/Internal/Value.hs b/src/HaskellWorks/Data/Json/Internal/Value.hs
--- a/src/HaskellWorks/Data/Json/Internal/Value.hs
+++ b/src/HaskellWorks/Data/Json/Internal/Value.hs
@@ -1,6 +1,5 @@
 {-# LANGUAGE FlexibleContexts      #-}
 {-# LANGUAGE FlexibleInstances     #-}
-{-# LANGUAGE InstanceSigs          #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
 {-# LANGUAGE OverloadedStrings     #-}
 {-# LANGUAGE ScopedTypeVariables   #-}
diff --git a/src/HaskellWorks/Data/Json/PartialValue.hs b/src/HaskellWorks/Data/Json/PartialValue.hs
--- a/src/HaskellWorks/Data/Json/PartialValue.hs
+++ b/src/HaskellWorks/Data/Json/PartialValue.hs
@@ -1,6 +1,5 @@
 {-# LANGUAGE FlexibleContexts      #-}
 {-# LANGUAGE FlexibleInstances     #-}
-{-# LANGUAGE InstanceSigs          #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
 {-# LANGUAGE OverloadedStrings     #-}
 {-# LANGUAGE ScopedTypeVariables   #-}
diff --git a/src/HaskellWorks/Data/Json/Query.hs b/src/HaskellWorks/Data/Json/Query.hs
--- a/src/HaskellWorks/Data/Json/Query.hs
+++ b/src/HaskellWorks/Data/Json/Query.hs
@@ -1,6 +1,5 @@
 {-# LANGUAGE FlexibleContexts      #-}
 {-# LANGUAGE FlexibleInstances     #-}
-{-# LANGUAGE InstanceSigs          #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
 {-# LANGUAGE OverloadedStrings     #-}
 {-# LANGUAGE ScopedTypeVariables   #-}
diff --git a/src/HaskellWorks/Data/Json/Value.hs b/src/HaskellWorks/Data/Json/Value.hs
--- a/src/HaskellWorks/Data/Json/Value.hs
+++ b/src/HaskellWorks/Data/Json/Value.hs
@@ -1,5 +1,4 @@
 {-# LANGUAGE FlexibleInstances     #-}
-{-# LANGUAGE InstanceSigs          #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
 {-# LANGUAGE OverloadedStrings     #-}
 {-# LANGUAGE ScopedTypeVariables   #-}
diff --git a/test/HaskellWorks/Data/Json/LightJsonSpec.hs b/test/HaskellWorks/Data/Json/LightJsonSpec.hs
--- a/test/HaskellWorks/Data/Json/LightJsonSpec.hs
+++ b/test/HaskellWorks/Data/Json/LightJsonSpec.hs
@@ -1,7 +1,5 @@
-{-# LANGUAGE ExplicitForAll            #-}
 {-# LANGUAGE FlexibleContexts          #-}
 {-# LANGUAGE FlexibleInstances         #-}
-{-# LANGUAGE InstanceSigs              #-}
 {-# LANGUAGE MultiParamTypeClasses     #-}
 {-# LANGUAGE NoMonomorphismRestriction #-}
 {-# LANGUAGE OverloadedStrings         #-}
@@ -36,9 +34,9 @@
 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 bracket"  -}
+{- HLINT ignore "Redundant do"       -}
 
 fc = TC.firstChild
 ns = TC.nextSibling
diff --git a/test/HaskellWorks/Data/Json/Simple/CursorSpec.hs b/test/HaskellWorks/Data/Json/Simple/CursorSpec.hs
--- a/test/HaskellWorks/Data/Json/Simple/CursorSpec.hs
+++ b/test/HaskellWorks/Data/Json/Simple/CursorSpec.hs
@@ -1,7 +1,5 @@
-{-# LANGUAGE ExplicitForAll            #-}
 {-# LANGUAGE FlexibleContexts          #-}
 {-# LANGUAGE FlexibleInstances         #-}
-{-# LANGUAGE InstanceSigs              #-}
 {-# LANGUAGE MultiParamTypeClasses     #-}
 {-# LANGUAGE NoMonomorphismRestriction #-}
 {-# LANGUAGE OverloadedStrings         #-}
@@ -24,9 +22,9 @@
 import qualified HaskellWorks.Data.Json.Simple.Value       as V
 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 bracket"  -}
+{- 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
@@ -1,7 +1,5 @@
-{-# LANGUAGE ExplicitForAll            #-}
 {-# LANGUAGE FlexibleContexts          #-}
 {-# LANGUAGE FlexibleInstances         #-}
-{-# LANGUAGE InstanceSigs              #-}
 {-# LANGUAGE MultiParamTypeClasses     #-}
 {-# LANGUAGE NoMonomorphismRestriction #-}
 {-# LANGUAGE OverloadedStrings         #-}
@@ -17,9 +15,9 @@
 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 bracket"  -}
+{- 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
@@ -1,7 +1,5 @@
-{-# LANGUAGE ExplicitForAll            #-}
 {-# LANGUAGE FlexibleContexts          #-}
 {-# LANGUAGE FlexibleInstances         #-}
-{-# LANGUAGE InstanceSigs              #-}
 {-# LANGUAGE MultiParamTypeClasses     #-}
 {-# LANGUAGE NoMonomorphismRestriction #-}
 {-# LANGUAGE OverloadedStrings         #-}
@@ -28,9 +26,9 @@
 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 bracket"  -}
+{- HLINT ignore "Redundant do"       -}
 
 fc = TC.firstChild
 ns = TC.nextSibling
diff --git a/test/HaskellWorks/Data/Json/Token/TokenizeSpec.hs b/test/HaskellWorks/Data/Json/Token/TokenizeSpec.hs
--- a/test/HaskellWorks/Data/Json/Token/TokenizeSpec.hs
+++ b/test/HaskellWorks/Data/Json/Token/TokenizeSpec.hs
@@ -10,7 +10,7 @@
 
 import qualified Data.Attoparsec.ByteString.Char8 as BC
 
-{-# ANN module ("HLint: ignore Redundant do"        :: String) #-}
+{- HLINT ignore "Redundant do"       -}
 
 parseJsonToken' :: ByteString -> Either String (JsonToken String Double)
 parseJsonToken' = BC.parseOnly parseJsonToken
diff --git a/test/HaskellWorks/Data/Json/TypeSpec.hs b/test/HaskellWorks/Data/Json/TypeSpec.hs
--- a/test/HaskellWorks/Data/Json/TypeSpec.hs
+++ b/test/HaskellWorks/Data/Json/TypeSpec.hs
@@ -1,7 +1,5 @@
-{-# LANGUAGE ExplicitForAll            #-}
 {-# LANGUAGE FlexibleContexts          #-}
 {-# LANGUAGE FlexibleInstances         #-}
-{-# LANGUAGE InstanceSigs              #-}
 {-# LANGUAGE MultiParamTypeClasses     #-}
 {-# LANGUAGE NoMonomorphismRestriction #-}
 {-# LANGUAGE OverloadedStrings         #-}
@@ -28,9 +26,9 @@
 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 bracket"  -}
+{- HLINT ignore "Redundant do"       -}
 
 fc = TC.firstChild
 ns = TC.nextSibling
@@ -41,11 +39,7 @@
   genSpec "CsPoppy"           FAST.fromString
 
 genSpec :: forall t u.
-  ( Eq                t
-  , Show              t
-  , Select1           t
-  , Eq                u
-  , Show              u
+  ( Select1           t
   , Rank0             u
   , Rank1             u
   , BalancedParens    u
diff --git a/test/HaskellWorks/Data/Json/ValueSpec.hs b/test/HaskellWorks/Data/Json/ValueSpec.hs
--- a/test/HaskellWorks/Data/Json/ValueSpec.hs
+++ b/test/HaskellWorks/Data/Json/ValueSpec.hs
@@ -1,7 +1,5 @@
-{-# LANGUAGE ExplicitForAll            #-}
 {-# LANGUAGE FlexibleContexts          #-}
 {-# LANGUAGE FlexibleInstances         #-}
-{-# LANGUAGE InstanceSigs              #-}
 {-# LANGUAGE MultiParamTypeClasses     #-}
 {-# LANGUAGE NoMonomorphismRestriction #-}
 {-# LANGUAGE OverloadedStrings         #-}
@@ -30,9 +28,9 @@
 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 bracket"  -}
+{- HLINT ignore "Redundant do"       -}
 
 fc = TC.firstChild
 ns = TC.nextSibling
@@ -54,11 +52,7 @@
   Nothing -> Left (DecodeError "No such element")
 
 genSpec :: forall t u.
-  ( Eq                t
-  , Show              t
-  , Select1           t
-  , Eq                u
-  , Show              u
+  ( Select1           t
   , Rank0             u
   , Rank1             u
   , BalancedParens    u
