diff --git a/bench/JSON.hs b/bench/JSON.hs
--- a/bench/JSON.hs
+++ b/bench/JSON.hs
@@ -7,19 +7,13 @@
 import Prelude hiding (exponent)
 
 import Criterion.Main (bench, defaultMain, whnf)
-import Data.Either    (isRight)
+import Data.Maybe     (isJust)
 import System.Clock   (Clock (Monotonic), diffTimeSpec, getTime)
 
-import qualified Data.Aeson.Parser          as A
-import qualified Data.Attoparsec.ByteString as Atto
-import qualified Data.ByteString            as BS
-import qualified Data.Set                   as Set
-import qualified Text.Derp                  as D
-
-#ifdef MIN_VERSION_saison
-import qualified Saison.Decoding.Parser as S
-import qualified Saison.Decoding.Tokens as S
-#endif
+import qualified Data.Aeson      as A
+import qualified Data.ByteString as BS
+import qualified Data.Set        as Set
+import qualified Text.Derp       as D
 
 import RERE
 import RERE.Examples.JSON
@@ -34,32 +28,7 @@
 derp p s = not $ Set.null $ D.runParse p [ D.Token c [c] | c <- s]
 
 aeson :: BS.ByteString -> Bool
-aeson bs = isRight (Atto.parseOnly (A.json <* Atto.endOfInput) bs)
-
-#ifdef MIN_VERSION_saison
-saison :: BS.ByteString -> Bool
-saison = go end . S.tokens where
-    end :: BS.ByteString -> Bool
-    end = BS.null . S.skipSpace
-
-    go :: (k -> Bool) -> S.Tokens k e -> Bool
-    go kont (S.TkLit _ k)        = kont k
-    go kont (S.TkText _ k)       = kont k
-    go kont (S.TkNumber _ k)     = kont k
-    go kont (S.TkArrayOpen arr)  = goArr kont arr
-    go kont (S.TkRecordOpen obj) = goObj kont obj
-    go _    (S.TkErr _)          = False
-
-    goArr :: (k -> Bool) -> S.TkArray k e -> Bool
-    goArr kont (S.TkItem k)     = go (goArr kont) k
-    goArr kont (S.TkArrayEnd k) = kont k
-    goArr _    (S.TkArrayErr _) = False
-
-    goObj :: (k -> Bool) -> S.TkRecord k e -> Bool
-    goObj kont (S.TkPair _ k)    = go (goObj kont) k
-    goObj kont (S.TkRecordEnd k) = kont k
-    goObj _    (S.TkRecordErr _) = False
-#endif
+aeson bs = isJust (A.decodeStrict bs :: Maybe A.Value)
 
 main :: IO ()
 main = do
@@ -90,10 +59,7 @@
     putStrLn "Criterion"
     defaultMain
         [ bench "aeson"  $ whnf aeson bs
-#ifdef MIN_VERSION_saison
-        , bench "saison" $ whnf saison bs
-#endif
-        -- , bench "rere"  $ whnf (matchR jsonRE) contents
+        , bench "rere"  $ whnf (matchST jsonRE) contents
         ]
 
 -------------------------------------------------------------------------------
diff --git a/rere.cabal b/rere.cabal
--- a/rere.cabal
+++ b/rere.cabal
@@ -1,6 +1,6 @@
 cabal-version:      2.2
 name:               rere
-version:            0.2
+version:            0.2.0.1
 synopsis:
   Regular-expressions extended with fixpoints for context-free powers
 
@@ -30,8 +30,12 @@
    || ==8.4.4
    || ==8.6.5
    || ==8.8.4
-   || ==8.10.4
-   || ==9.0.1
+   || ==8.10.7
+   || ==9.0.2
+   || ==9.2.8
+   || ==9.4.7
+   || ==9.6.3
+   || ==9.8.1
 
 source-repository head
   type:     git
@@ -57,10 +61,10 @@
 
   -- GHC boot libraries
   build-depends:
-    , base          >=4.3.0.0  && <4.16
+    , base          >=4.3.0.0  && <4.20
     , containers    ^>=0.4.0.0 || ^>=0.5.0.0 || ^>=0.6.0.1
     , parsec        ^>=3.1.12.0
-    , transformers  ^>=0.3.0.0 || ^>=0.4.2.0 || ^>=0.5.2.0
+    , transformers  ^>=0.3.0.0 || ^>=0.4.2.0 || ^>=0.5.2.0 || ^>=0.6.1.0
 
   -- other dependencies
   build-depends:     QuickCheck ^>=2.14.2
@@ -70,7 +74,7 @@
     build-depends: void ^>=0.7.3
 
   if !impl(ghc >=8.0)
-    build-depends: semigroups >=0.18.5 && <0.20
+    build-depends: semigroups >=0.18.5 && <0.21
 
   -- expose examples first, so `cabal repl` loads them.
   exposed-modules:   RERE.Examples
@@ -94,8 +98,8 @@
 
   if (flag(rere-cfg) && impl(ghc >=7.8))
     build-depends:
-      , fin  ^>=0.2
-      , vec  ^>=0.4
+      , fin  ^>=0.2 || ^>=0.3
+      , vec  ^>=0.4 || ^>=0.5
 
     exposed-modules: RERE.CFG
 
@@ -117,7 +121,7 @@
   build-depends:
     , base
     , containers
-    , criterion   ^>=1.5.5.0
+    , criterion   ^>=1.5.5.0 || ^>=1.6.0.0
     , derp
     , parsec
     , rere
@@ -142,24 +146,20 @@
   other-modules:    DerpConv
   ghc-options:      -Wall -rtsopts
   build-depends:
-    , aeson       ^>=1.4.6.0 || ^>=1.5.0.0
-    , attoparsec
+    , aeson       ^>=1.4.6.0 || ^>=1.5.0.0 || ^>=2.0.0.0 || ^>=2.1.0.0 || ^>=2.2.1.0
     , base
     , bytestring
     , clock       ^>=0.8
     , containers
-    , criterion   ^>=1.5.5.0
+    , criterion   ^>=1.5.5.0 || ^>=1.6.0.0
     , derp
     , fin
     , parsec
     , rere
     , vec
 
-  -- extras
-  -- build-depends: saison
-
   if !impl(ghc >=8.0)
-    build-depends: semigroups >=0.18.4 && <0.20
+    build-depends: semigroups >=0.18.4 && <0.21
 
   if !impl(ghc >=7.10)
     build-depends: void ^>=0.7.2
@@ -179,9 +179,9 @@
     , base
     , containers
     , QuickCheck
-    , quickcheck-instances  ^>=0.3.22
+    , quickcheck-instances  ^>=0.3.30
     , rere
-    , tasty                 ^>=1.4.0.1
+    , tasty                 ^>=1.4.0.1 || ^>=1.5
     , tasty-quickcheck      ^>=0.10.1.1
 
   if flag(rere-intersection)
