diff --git a/Setup.hs b/Setup.hs
--- a/Setup.hs
+++ b/Setup.hs
@@ -1,2 +1,3 @@
 import Distribution.Simple
+
 main = defaultMain
diff --git a/servant-auth.cabal b/servant-auth.cabal
--- a/servant-auth.cabal
+++ b/servant-auth.cabal
@@ -1,6 +1,6 @@
 cabal-version:  2.2
 name:           servant-auth
-version:        0.4.2.0
+version:        0.4.9.2
 synopsis:       Authentication combinators for servant
 description:    This package provides an @Auth@ combinator for 'servant'. This combinator
                 allows using different authentication schemes in a straightforward way,
@@ -18,7 +18,7 @@
 copyright:      (c) Julian K. Arni
 license:        BSD-3-Clause
 license-file:   LICENSE
-tested-with:    GHC==8.6.5, GHC==8.8.4, GHC ==8.10.7, GHC ==9.0.2, GHC ==9.2.7, GHC ==9.4.4, GHC ==9.10.1
+tested-with:    GHC ==9.2.8 || ==9.4.8 || ==9.6.6 || ==9.8.4 || ==9.10.1 || ==9.12.1
 build-type:     Simple
 extra-source-files:
     CHANGELOG.md
@@ -33,12 +33,12 @@
   default-extensions: ConstraintKinds DataKinds DefaultSignatures DeriveFoldable DeriveFunctor DeriveGeneric DeriveTraversable FlexibleContexts FlexibleInstances FunctionalDependencies GADTs KindSignatures MultiParamTypeClasses OverloadedStrings RankNTypes ScopedTypeVariables TypeFamilies TypeOperators
   ghc-options: -Wall
   build-depends:
-      base                    >= 4.14     && < 4.21
-    , containers              >= 0.6      && < 0.8
+      base                    >= 4.16.4.0 && < 4.22
+    , containers              >=0.6.5.1   && < 0.9
     , aeson                   >= 2.0      && < 3
-    , jose                    >= 0.10     && < 0.12
+    , jose                    >= 0.10     && < 0.13
     , lens                    >= 4.16.1   && < 5.4
-    , servant                 >= 0.20.2   && < 0.21
+    , servant                 >= 0.20.3   && < 0.21
     , text                    >= 1.2.3.0  && < 2.2
     , unordered-containers    >= 0.2.9.0  && < 0.3
   exposed-modules:
diff --git a/src/Servant/Auth.hs b/src/Servant/Auth.hs
--- a/src/Servant/Auth.hs
+++ b/src/Servant/Auth.hs
@@ -1,14 +1,14 @@
-{-# LANGUAGE CPP                        #-}
-{-# LANGUAGE DataKinds                  #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-{-# LANGUAGE TypeFamilies               #-}
-{-# LANGUAGE TypeOperators              #-}
+{-# LANGUAGE CPP #-}
+{-# LANGUAGE DataKinds #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE TypeOperators #-}
+
 module Servant.Auth where
 
-import           Data.Kind           (Type)
-import           Data.Proxy          (Proxy(..))
-import           Servant.API         ((:>))
-import           Servant.Links       (HasLink (..))
+import Data.Kind (Type)
+import Data.Proxy (Proxy (..))
+import Servant.API ((:>))
+import Servant.Links (HasLink (..))
 
 -- * Authentication
 
@@ -17,13 +17,15 @@
 data Auth (auths :: [Type]) val
 
 -- | A @HasLink@ instance for @Auth@
-instance HasLink sub => HasLink (Auth (tag :: [Type]) value :> sub) where
+instance HasLink sub => HasLink (Auth (tag :: [Type]) value :> sub)
 #if MIN_VERSION_servant(0,14,0)
-  type MkLink (Auth (tag :: [Type]) value :> sub) a = MkLink sub a
-  toLink toA _ = toLink toA (Proxy :: Proxy sub)
+  where
+    type MkLink (Auth (tag :: [Type]) value :> sub) a = MkLink sub a
+    toLink toA _ = toLink toA (Proxy :: Proxy sub)
 #else
-  type MkLink (Auth (tag :: [Type]) value :> sub) = MkLink sub
-  toLink _ = toLink (Proxy :: Proxy sub)
+  where
+    type MkLink (Auth (tag :: [Type]) value :> sub) = MkLink sub
+    toLink _ = toLink (Proxy :: Proxy sub)
 #endif
 
 -- ** Combinators
@@ -43,11 +45,11 @@
 -- header, for XSRF protection.
 data Cookie
 
-
 -- We could use 'servant''s BasicAuth, but then we don't get control over the
 -- documentation, and we'd have to polykind everything. (Also, we don't
 -- currently depend on servant!)
 --
+
 -- | Basic Auth.
 data BasicAuth
 
diff --git a/src/Servant/Auth/JWT.hs b/src/Servant/Auth/JWT.hs
--- a/src/Servant/Auth/JWT.hs
+++ b/src/Servant/Auth/JWT.hs
@@ -2,21 +2,20 @@
 
 module Servant.Auth.JWT where
 
-import           Control.Lens         ((^.))
-import qualified Crypto.JWT           as Jose
-import           Data.Aeson           (FromJSON, Result (..), ToJSON, fromJSON,
-                                       toJSON)
-#if MIN_VERSION_aeson(2,0,0)                                                                                    
-import qualified Data.Map as KM                                                                        
-#else                                                                                                           
-import qualified Data.HashMap.Strict as KM                                                                      
+import Control.Lens ((^.))
+import qualified Crypto.JWT as Jose
+import Data.Aeson (FromJSON, Result (..), ToJSON, fromJSON, toJSON)
+#if MIN_VERSION_aeson(2,0,0)
+import qualified Data.Map as KM
+#else
+import qualified Data.HashMap.Strict as KM
 #endif
 
-import qualified Data.Text            as T
-
+import qualified Data.Text as T
 
 -- This should probably also be from ClaimSet
 --
+
 -- | How to decode data from a JWT.
 --
 -- The default implementation assumes the data is stored in the unregistered
@@ -26,7 +25,7 @@
   default decodeJWT :: FromJSON a => Jose.ClaimsSet -> Either T.Text a
   decodeJWT m = case KM.lookup "dat" (m ^. Jose.unregisteredClaims) of
     Nothing -> Left "Missing 'dat' claim"
-    Just v  -> case fromJSON v of
+    Just v -> case fromJSON v of
       Error e -> Left $ T.pack e
       Success a -> Right a
 
