diff --git a/dependent-hashmap.cabal b/dependent-hashmap.cabal
--- a/dependent-hashmap.cabal
+++ b/dependent-hashmap.cabal
@@ -4,10 +4,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: b43156688dbdbc31a90bbe37fde9b636e95f5aa58bdeb57498b22a11ec0a6df6
+-- hash: b1b80454bb1a4bd3fb3e2976fb1f71a32f82a469a194644d39d6413ad4fdeac7
 
 name:           dependent-hashmap
-version:        0.1.0.0
+version:        0.1.0.1
 synopsis:       Dependent hash maps
 description:    Provides @DHashMap@, a type for hash maps where the keys can specify the type of value that is associated with them.
 category:       Data
@@ -35,7 +35,7 @@
     , constraints-extras >=0.3
     , dependent-sum >=0.6
     , hashable >=1.3
-    , unordered-containers >=0.2
+    , unordered-containers >=0.2.9
   default-language: Haskell2010
 
 test-suite test-dependent-hashmap
@@ -55,5 +55,5 @@
     , hashable >=1.3
     , hedgehog
     , mtl
-    , unordered-containers >=0.2
+    , unordered-containers >=0.2.9
   default-language: Haskell2010
diff --git a/src/Data/Dependent/HashMap.hs b/src/Data/Dependent/HashMap.hs
--- a/src/Data/Dependent/HashMap.hs
+++ b/src/Data/Dependent/HashMap.hs
@@ -96,7 +96,7 @@
 import Data.Constraint.Extras
 import Data.Dependent.Sum
 import qualified Data.Foldable as Foldable
-import Data.GADT.Compare
+import Data.GADT.Compare (GCompare, GEq, geq)
 import Data.GADT.Show
 import Data.Hashable
 import qualified Data.HashMap.Lazy as HashMap
@@ -104,6 +104,7 @@
 import Data.Semigroup
 #endif
 import Data.Some
+import Data.Type.Equality
 import GHC.Exts (IsList(Item))
 import qualified GHC.Exts
 import Text.Read
diff --git a/tests/Main.hs b/tests/Main.hs
--- a/tests/Main.hs
+++ b/tests/Main.hs
@@ -10,9 +10,7 @@
 import Control.Monad
 import Control.Monad.Identity
 import Data.Maybe
-import Data.Constraint
-import Data.Constraint.Compose
-import Data.Constraint.Extras
+import Data.Constraint.Extras.TH
 import Data.GADT.Compare
 import Data.GADT.Show
 import Data.Hashable
@@ -58,12 +56,7 @@
       )
       s
 
-instance (c (f Int), c (f String)) => ArgDict (ComposeC c f) Key where
-  type ConstraintsFor Key (ComposeC c f) = ()
-  argDict key =
-    case key of
-      IntKey {} -> Dict
-      StringKey {} -> Dict
+deriveArgDict ''Key
 
 instance GEq Key where
   geq (IntKey i1) (IntKey i2)
