diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,11 @@
 # Changelog
 
+## [1.0.0.1] - 2022-08-30
+
+### Added
+
+* `shrinkSetOf`, `shrinkSeqOf`, `shrinkMapOf`, and `shrinkTreeOf`
+
 ## [1.0.0.0] - 2021-11-20
 
 ### Changed
diff --git a/bench/Main.hs b/bench/Main.hs
--- a/bench/Main.hs
+++ b/bench/Main.hs
@@ -17,12 +17,28 @@
 main :: IO ()
 main =
   Criterion.defaultMain
-    [ genValidBench @(Set Int),
-      genValidBench @(Seq Int),
-      genValidBench @(Tree Int),
-      genValidBench @(Forest Int),
-      genValidBench @(Map Int Int),
-      genBenchSizes "genSeqOf" $ genSeqOf (genValid :: Gen Int),
-      genBenchSizes "genSetOf" $ genSetOf (genValid :: Gen Int),
-      genBenchSizes "genMapOf" $ genMapOf (genValid :: Gen (Int, Int))
+    [ bgroup
+        "generators"
+        [ genValidBench @(Set Int),
+          genValidBench @(Seq Int),
+          genValidBench @(Tree Int),
+          genValidBench @(Forest Int),
+          genValidBench @(Map Int Int),
+          genBench "genSeqOf" $ genSeqOf (genValid :: Gen Int),
+          genBench "genSetOf" $ genSetOf (genValid :: Gen Int),
+          genBench "genMapOf" $ genMapOf (genValid :: Gen (Int, Int)),
+          genBench "genTreeOf" $ genTreeOf (genValid :: Gen (Int, Int))
+        ],
+      bgroup
+        "shrinkers"
+        [ shrinkValidBench @(Set Int),
+          shrinkValidBench @(Seq Int),
+          shrinkValidBench @(Tree Int),
+          shrinkValidBench @(Forest Int),
+          shrinkValidBench @(Map Int Int),
+          shrinkBench "shrinkSeqOf" $ shrinkSeqOf (shrinkValid :: Int -> [Int]),
+          shrinkBench "shrinkSetOf" $ shrinkSetOf (shrinkValid :: Int -> [Int]),
+          shrinkBench "shrinkMapOf" $ shrinkMapOf (shrinkValid :: (Int, Int) -> [(Int, Int)]),
+          shrinkBench "shrinkTreeOf" $ shrinkTreeOf (shrinkValid :: Int -> [Int])
+        ]
     ]
diff --git a/genvalidity-containers.cabal b/genvalidity-containers.cabal
--- a/genvalidity-containers.cabal
+++ b/genvalidity-containers.cabal
@@ -1,18 +1,18 @@
 cabal-version: 1.12
 
--- This file has been generated from package.yaml by hpack version 0.34.4.
+-- This file has been generated from package.yaml by hpack version 0.34.7.
 --
 -- see: https://github.com/sol/hpack
 
 name:           genvalidity-containers
-version:        1.0.0.0
+version:        1.0.0.1
 synopsis:       GenValidity support for containers
 category:       Testing
 homepage:       https://github.com/NorfairKing/validity#readme
 bug-reports:    https://github.com/NorfairKing/validity/issues
 author:         Tom Sydney Kerckhove
 maintainer:     syd@cs-syd.eu
-copyright:      Copyright: (c) 2016-2021 Tom Sydney Kerckhove
+copyright:      Copyright: (c) 2016-2022 Tom Sydney Kerckhove
 license:        MIT
 license-file:   LICENSE
 build-type:     Simple
@@ -84,5 +84,5 @@
     , criterion
     , genvalidity
     , genvalidity-containers
-    , genvalidity-criterion
+    , genvalidity-criterion >=1.1.0.0
   default-language: Haskell2010
diff --git a/src/Data/GenValidity/Map.hs b/src/Data/GenValidity/Map.hs
--- a/src/Data/GenValidity/Map.hs
+++ b/src/Data/GenValidity/Map.hs
@@ -2,6 +2,7 @@
 
 module Data.GenValidity.Map
   ( genMapOf,
+    shrinkMapOf,
   )
 where
 
@@ -13,7 +14,10 @@
 
 instance (Show k, Ord k, GenValid k, GenValid v) => GenValid (Map k v) where
   genValid = genMapOf genValid
-  shrinkValid = fmap M.fromList . shrinkValid . M.toList
+  shrinkValid = shrinkMapOf shrinkValid
 
 genMapOf :: Ord k => Gen (k, v) -> Gen (Map k v)
 genMapOf g = M.fromList <$> genListOf g
+
+shrinkMapOf :: Ord k => ((k, v) -> [(k, v)]) -> Map k v -> [Map k v]
+shrinkMapOf shrinker = fmap M.fromList . shrinkList shrinker . M.toList
diff --git a/src/Data/GenValidity/Sequence.hs b/src/Data/GenValidity/Sequence.hs
--- a/src/Data/GenValidity/Sequence.hs
+++ b/src/Data/GenValidity/Sequence.hs
@@ -2,6 +2,7 @@
 
 module Data.GenValidity.Sequence
   ( genSeqOf,
+    shrinkSeqOf,
   )
 where
 
@@ -14,7 +15,10 @@
 
 instance GenValid v => GenValid (Seq v) where
   genValid = genSeqOf genValid
-  shrinkValid = fmap S.fromList . shrinkValid . toList
+  shrinkValid = shrinkSeqOf shrinkValid
 
 genSeqOf :: Gen v -> Gen (Seq v)
 genSeqOf g = S.fromList <$> genListOf g
+
+shrinkSeqOf :: (v -> [v]) -> Seq v -> [Seq v]
+shrinkSeqOf shrinker = fmap S.fromList . shrinkList shrinker . toList
diff --git a/src/Data/GenValidity/Set.hs b/src/Data/GenValidity/Set.hs
--- a/src/Data/GenValidity/Set.hs
+++ b/src/Data/GenValidity/Set.hs
@@ -2,6 +2,7 @@
 
 module Data.GenValidity.Set
   ( genSetOf,
+    shrinkSetOf,
     genSeperate,
     genSeperateFor,
     genSeperateForNE,
@@ -20,11 +21,14 @@
 import Test.QuickCheck
 
 instance (Ord v, GenValid v) => GenValid (Set v) where
-  genValid = S.fromList <$> genValid
-  shrinkValid = fmap S.fromList . shrinkValid . S.toList
+  genValid = genSetOf genValid
+  shrinkValid = shrinkSetOf shrinkValid
 
 genSetOf :: Ord v => Gen v -> Gen (Set v)
 genSetOf g = S.fromList <$> genListOf g
+
+shrinkSetOf :: Ord v => (v -> [v]) -> Set v -> [Set v]
+shrinkSetOf shrinker = fmap S.fromList . shrinkList shrinker . S.toList
 
 genValidSeperateFor :: (GenValid b, Eq b) => [a] -> Gen [(b, a)]
 genValidSeperateFor = genSeperateFor genValid
diff --git a/src/Data/GenValidity/Tree.hs b/src/Data/GenValidity/Tree.hs
--- a/src/Data/GenValidity/Tree.hs
+++ b/src/Data/GenValidity/Tree.hs
@@ -1,6 +1,6 @@
 {-# OPTIONS_GHC -fno-warn-orphans #-}
 
-module Data.GenValidity.Tree where
+module Data.GenValidity.Tree (genTreeOf, shrinkTreeOf) where
 
 import Data.GenValidity
 import Data.List.NonEmpty (NonEmpty (..))
@@ -11,7 +11,11 @@
 
 instance GenValid a => GenValid (Tree a) where
   genValid = genTreeOf genValid
-  shrinkValid (Node v ts) = [Node v' ts' | (v', ts') <- shrinkValid (v, ts)]
+  shrinkValid = shrinkTreeOf shrinkValid
+
+shrinkTreeOf :: (a -> [a]) -> Tree a -> [Tree a]
+shrinkTreeOf shrinker (Node v ts) =
+  [Node v' ts' | (v', ts') <- shrinkTuple shrinker (shrinkList (shrinkTreeOf shrinker)) (v, ts)]
 
 -- | Generate a tree of values that are generated as specified.
 --
