diff --git a/dingo-core.cabal b/dingo-core.cabal
--- a/dingo-core.cabal
+++ b/dingo-core.cabal
@@ -1,5 +1,5 @@
 Name:                dingo-core
-Version:             0.0.3
+Version:             0.0.3.1
 Synopsis:            Dingo is a Rich Internet Application platform based on the Warp web server.
 Description:         Dingo is a Rich Internet Application platform based on the Warp web server. It allows you to write code which looks very much like regular GUI code and have it work in the browser. 
 
@@ -44,7 +44,8 @@
                , wai-extra == 0.4.*
                , warp == 0.4.*
                , web-css == 0.1.*
-  Extensions:          DeriveDataTypeable
+  Extensions:          CPP
+                       DeriveDataTypeable
                        ExistentialQuantification
                        FunctionalDependencies
                        GeneralizedNewtypeDeriving
@@ -78,6 +79,7 @@
                        Dingo.Internal.Server.Wai
                        Dingo.Internal.Session
                        Dingo.Internal.SessionTypes
+                       Dingo.Internal.TypeableShim
                        Dingo.Internal.Widget
                        Dingo.Internal.WidgetSet
                        Dingo.Internal.WidgetTypes
diff --git a/src/Dingo/Internal/SessionTypes.hs b/src/Dingo/Internal/SessionTypes.hs
--- a/src/Dingo/Internal/SessionTypes.hs
+++ b/src/Dingo/Internal/SessionTypes.hs
@@ -35,6 +35,7 @@
 import           Data.Text (Text)
 import           Dingo.Internal.Base (CallbackId, WidgetId, succCallbackId, succWidgetId, zeroCallbackId, zeroWidgetId)
 import           Dingo.Internal.ResourceBundle.Internal (ResourceBundle, ResourceBundleSet, elemResourceBundleSet, findResourceInBundleSet, resourceBundleSetFromList)
+import           Dingo.Internal.TypeableShim (TypeRepKey)
 import           Dingo.Internal.WidgetSet (WidgetSet, emptyWidgetSet, setWidgetState, getWidgetState)
 import           Dingo.Internal.WidgetTypes (Widget)
 
@@ -45,7 +46,7 @@
                , _widgetCounter :: WidgetId
                , _sessionCallbacks :: Map CallbackId c
                , _widgetSet :: WidgetSet
-               , _widgetTypeSet :: HashSet Int
+               , _widgetTypeSet :: HashSet TypeRepKey
                , _resourceBundleSet :: ResourceBundleSet
                }
 
@@ -110,7 +111,7 @@
 -- Check if a widget type is registered in the session,
 -- and register it if not. Returns
 -- true iff the bundle was not previously registered.
-registerWidgetType :: (Monad m, Functor m) => Int -> SessionT c m Bool
+registerWidgetType :: (Monad m, Functor m) => TypeRepKey -> SessionT c m Bool
 registerWidgetType widgetTypeRepKey = SessionT $ do
   e <- fmap (S.member widgetTypeRepKey) $ gets widgetTypeSet
   unless e $ modify widgetTypeSet $ S.insert widgetTypeRepKey
diff --git a/src/Dingo/Internal/TypeableShim.hs b/src/Dingo/Internal/TypeableShim.hs
new file mode 100644
--- /dev/null
+++ b/src/Dingo/Internal/TypeableShim.hs
@@ -0,0 +1,9 @@
+module Dingo.Internal.TypeableShim
+       ( TypeRepKey
+       ) where
+
+#if __GLASGOW_HASKELL__ >= 720
+import Data.Typeable (TypeRepKey)
+#else
+type TypeRepKey = Int
+#endif
