diff --git a/Data/Interned/Internal.hs b/Data/Interned/Internal.hs
--- a/Data/Interned/Internal.hs
+++ b/Data/Interned/Internal.hs
@@ -32,8 +32,9 @@
   CacheState _ m <- readMVar t
   return (HashMap.size m)
 
-mkCache :: Cache t
-mkCache = Cache $ unsafePerformIO $ newMVar $ CacheState 0 HashMap.empty
+mkCache :: Interned t => Cache t
+mkCache = result where
+  result = Cache $ unsafePerformIO $ newMVar $ CacheState (seedIdentity result) HashMap.empty
 
 type Id = Int
 
@@ -45,7 +46,9 @@
   describe :: Uninterned t -> Description t 
   identify :: Id -> Uninterned t -> t
   identity :: t -> Id
-  cache    :: Cache t
+  seedIdentity :: p t -> Id
+  seedIdentity _ = 0
+  cache        :: Cache t
 
 class Interned t => Uninternable t where
   unintern :: t -> Uninterned t
diff --git a/intern.cabal b/intern.cabal
--- a/intern.cabal
+++ b/intern.cabal
@@ -1,6 +1,6 @@
 name:          intern
 category:      Data, Data Structures
-version:       0.3.0
+version:       0.4.0
 license:       BSD3
 cabal-version: >= 1.6
 license-file:  LICENSE
