diff --git a/ghcjs-base-stub.cabal b/ghcjs-base-stub.cabal
--- a/ghcjs-base-stub.cabal
+++ b/ghcjs-base-stub.cabal
@@ -1,5 +1,5 @@
 name:                ghcjs-base-stub
-version:             0.1.0.0
+version:             0.1.0.1
 synopsis:            Allow GHCJS projects to compile under GHC and develop using intero.
 description:         Allow GHCJS projects to compile under GHC and develop using intero.
 homepage:            https://github.com/louispan/javascript-stub#readme
@@ -27,21 +27,22 @@
                        Data.JSString.Internal.Search
                        Data.JSString.Text
                        GHCJS.Concurrent
-                       GHCJS.Foreign.Internal
                        GHCJS.Foreign
                        GHCJS.Foreign.Callback
                        GHCJS.Foreign.Callback.Internal
                        GHCJS.Foreign.Export
+                       GHCJS.Foreign.Internal
                        GHCJS.Marshal
                        GHCJS.Marshal.Internal
                        GHCJS.Marshal.Pure
                        GHCJS.Nullable
                        GHCJS.Prim
                        GHCJS.Types
-                       JavaScript.Object
-                       JavaScript.Object.Internal
                        JavaScript.Array
                        JavaScript.Array.Internal
+                       JavaScript.Cast
+                       JavaScript.Object
+                       JavaScript.Object.Internal
       build-depends:   aeson >= 0.11 && < 1
                      , attoparsec >= 0.13 && < 1
                      , deepseq >= 1.4 && < 2
diff --git a/src/JavaScript/Cast.hs b/src/JavaScript/Cast.hs
new file mode 100644
--- /dev/null
+++ b/src/JavaScript/Cast.hs
@@ -0,0 +1,24 @@
+{-# OPTIONS_GHC -Wno-redundant-constraints #-}
+{-# LANGUAGE ScopedTypeVariables, ForeignFunctionInterface, JavaScriptFFI #-}
+
+module JavaScript.Cast ( Cast(..)
+                       , cast
+                       , unsafeCast
+                       ) where
+
+import GHCJS.Prim
+
+import Unsafe.Coerce
+
+cast :: forall a. Cast a => JSVal -> Maybe a
+cast _ = Nothing
+{-# INLINE cast #-}
+
+-- | Don't ever run this in GHC - guaranteed segfault
+unsafeCast :: Cast a => JSVal -> a
+unsafeCast = unsafeCoerce
+{-# INLINE unsafeCast #-}
+
+class Cast a where
+  unsafeWrap  :: JSVal -> a
+  instanceRef :: a -> JSVal
