diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 # Revision history for aws-arn
 
+## 0.1.0.1 -- 2021-12-16
+
+* Support GHC 9.0.1, GHC 9.2.1, and `hashable <1.5`.
+
 ## 0.1.0.0 -- 2021-04-07
 
 * First version. Released on an unsuspecting world.
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -92,7 +92,7 @@
 * `*.hs`: [`ormolu`](https://github.com/tweag/ormolu)
 * `*.cabal`:
   [`cabal-fmt`](https://hackage.haskell.org/package/cabal-fmt)
-  (`cabal-fmt --inplace wai-handler-hal.cabal`)
+  (`cabal-fmt --inplace aws-arn.cabal`)
 * `*.nix`:
   [`nixpkgs-fmt`](https://github.com/nix-community/nixpkgs-fmt)
   (`nixpkgs-fmt *.nix`)
diff --git a/aws-arn.cabal b/aws-arn.cabal
--- a/aws-arn.cabal
+++ b/aws-arn.cabal
@@ -1,6 +1,6 @@
 cabal-version:      2.2
 name:               aws-arn
-version:            0.1.0.0
+version:            0.1.0.1
 synopsis:
   Types and optics for manipulating Amazon Resource Names (ARNs)
 
@@ -35,7 +35,7 @@
   CHANGELOG.md
   README.md
 
-tested-with:        GHC ==8.6.5 || ==8.8.4 || ==8.10.4
+tested-with:        GHC ==8.6.5 || ==8.8.4 || ==8.10.7 || ==9.0.1
 
 common opts
   default-language: Haskell2010
@@ -48,9 +48,9 @@
 
 common deps
   build-depends:
-    , base             >=4.12   && <4.15
-    , deriving-compat  ^>=0.5.10
-    , lens             >=4.18.1 && <5.1
+    , base             >=4.12   && <4.17
+    , deriving-compat  >=0.5.10 && <0.7
+    , lens             >=4.18.1 && <5.2
     , text             ^>=1.2.3
 
 library
@@ -59,7 +59,7 @@
     Network.AWS.ARN
     Network.AWS.ARN.Lambda
 
-  build-depends:   hashable ^>=1.3.0.0
+  build-depends:   hashable >=1.3.0.0 && <1.5
   hs-source-dirs:  src
 
 test-suite spec
diff --git a/src/Network/AWS/ARN.hs b/src/Network/AWS/ARN.hs
--- a/src/Network/AWS/ARN.hs
+++ b/src/Network/AWS/ARN.hs
@@ -3,6 +3,7 @@
 {-# LANGUAGE DeriveTraversable #-}
 {-# LANGUAGE OverloadedStrings #-}
 {-# LANGUAGE RankNTypes #-}
+{-# LANGUAGE StandaloneDeriving #-}
 {-# LANGUAGE TemplateHaskell #-}
 {-# OPTIONS_HADDOCK show-extensions #-}
 
@@ -36,7 +37,7 @@
 -- let
 --   authorizerSampleARN = "arn:aws:execute-api:us-east-1:123456789012:my-spiffy-api\/stage\/GET\/some\/deep\/path"
 -- in
---   over ('_ARN' . 'arnResource' . 'slashes') (\parts -> take 2 parts ++ ["*"]) authorizerSampleARN
+--   over ('_ARN' . 'arnResource' . 'slashes') (\\parts -> take 2 parts ++ ["*"]) authorizerSampleARN
 -- @
 module Network.AWS.ARN
   ( ARN (..),
@@ -114,7 +115,6 @@
       Generic,
       Generic1,
       Hashable,
-      Hashable1,
       Functor,
       Foldable,
       Traversable
@@ -125,6 +125,8 @@
 $(deriveOrd1 ''ARN)
 $(deriveShow1 ''ARN)
 
+deriving instance Hashable1 ARN
+
 toARN :: Text -> Maybe (ARN Text)
 toARN t = case T.splitOn ":" t of
   ("arn" : part : srv : reg : acc : res) ->
@@ -156,6 +158,19 @@
 
 -- | Split a 'Text' into colon-separated parts.
 --
+-- This is not truly a lawful 'Iso'', but it is useful. The 'Iso''
+-- laws are violated for lists whose members contain @':'@:
+--
+-- >>> [":"] ^. from colons . colons
+-- ["",""]
+--
+-- The laws are also violated on empty lists:
+--
+-- >>> [] ^. from colons . colons
+-- [""]
+--
+-- However, it is still a useful tool:
+--
 -- >>> "foo:bar:baz" & colons . ix 1 .~ "quux"
 -- "foo:quux:baz"
 colons :: Iso' Text [Text]
@@ -164,8 +179,12 @@
 
 -- | Split a 'Text' into slash-separated parts.
 --
+-- This is not truly a lawful 'Iso'', but it is useful:
+--
 -- >>> "foo/bar/baz" ^. slashes
 -- ["foo","bar","baz"]
+--
+-- Similar caveats to 'colons' apply here.
 slashes :: Iso' Text [Text]
 slashes = iso (T.splitOn "/") (T.intercalate "/")
 {-# INLINE slashes #-}
