diff --git a/cfg.cabal b/cfg.cabal
--- a/cfg.cabal
+++ b/cfg.cabal
@@ -1,6 +1,6 @@
 cabal-version: 3.0
 name:          cfg
-version:       0.0.2.0
+version:       0.0.2.1
 synopsis:
   Type directed application configuration parsing and accessors
 
@@ -59,22 +59,22 @@
     UndecidableInstances
 
   build-depends:
-    , base           >=4.18.0 && <4.19
-    , containers     >=0.6.7  && <0.7
-    , free           >=5.1.10 && <5.2
-    , mtl            >=2.3.1  && <2.4
-    , pretty-simple  >=4.1.2  && <4.2
-    , text           >=2.0.2  && <2.1
+    , base           >=4.16.0 && <4.19
+    , containers     >=0.6    && <0.7
+    , free           >=5.0.1  && <5.2
+    , mtl            >=2.1    && <2.4
+    , pretty-simple  >=4.0    && <4.2
+    , text           >=2.0    && <2.1
 
   default-language:   Haskell2010
 
 library
   import:          common-opts
   build-depends:
-    , bytestring  >=0.11.4 && <0.12
-    , errors      >=2.3.0  && <2.4
-    , megaparsec  >=9.2.2  && <9.3
-    , vector      >=0.12.3 && <0.13
+    , bytestring  >=0.11   && <0.12
+    , errors      >=2.0.0  && <2.4
+    , megaparsec  >=9.0.0  && <9.5
+    , vector      >=0.12.0 && <0.14
 
   -- cabal-fmt: expand src
   exposed-modules:
@@ -118,11 +118,11 @@
 
   build-depends:
     , cfg
-    , hedgehog            >=1.2   && <1.3
-    , hspec               >=2.9.7 && <2.10
-    , hspec-core          >=2.9.7 && <2.10
-    , hspec-discover      >=2.9.7 && <2.10
-    , hspec-expectations  >=0.8.2 && <0.9
+    , hedgehog            >=1.1   && <1.3
+    , hspec               >=2.9   && <2.12
+    , hspec-core          >=2.9   && <2.12
+    , hspec-discover      >=2.9   && <2.12
+    , hspec-expectations  >=0.7.0 && <0.9
     , hspec-hedgehog      >=0.0.1 && <0.1
 
 test-suite documentation
diff --git a/src/Cfg.hs b/src/Cfg.hs
--- a/src/Cfg.hs
+++ b/src/Cfg.hs
@@ -279,9 +279,7 @@
     -- 'DefaultSource' instance for the record that contains the value you want
     -- to default. The reason the defaulting needs to be defined on the record
     -- is that we use the record field key to identify the defaulted value the
-    -- value you want to default. The reason the defaulting needs to be defined
-    -- on the record is that we use the record field key to identify the
-    -- defaulted value.
+    -- value you want to default.
     --
     -- __There are a bunch of gotchas with defaulting__:
     --
@@ -319,7 +317,7 @@
     -- -- NOTE: If I provide a default for WarpConfig or RedisConfig this will break the configuration machinery
     -- -- so I only match on the field for @Environment@
     --
-    -- instance 'DefaultSource' (AppConfig a) where
+    -- instance 'DefaultSource' AppConfig where
     --   'defaults' "appConfigEnvironment" = Just "Development"
     --   'defaults' _ = Nothing
     -- @
@@ -468,3 +466,17 @@
             [StripPrefix "appConfig", StripSuffix "Settings", ToUpper]
             AppConfig4
         )
+
+-- Example 5
+data AppConfig5 = AppConfig5
+  { appConfigWarpSettings :: WarpConfig
+  , appConfigRedisSettings :: RedisConfig
+  , appConfigEnvironment :: Environment
+  }
+  deriving (Generic, Show)
+  deriving (ConfigSource, ConfigParser)
+   via (ConfigOpts [StripPrefix "appConfig", StripSuffix "Settings", ToUpper] AppConfig5)
+
+instance DefaultSource AppConfig5 where
+  defaults "appConfigEnvironment" = Just "Development"
+  defaults _ = Nothing
