diff --git a/ghcjs-dom.cabal b/ghcjs-dom.cabal
--- a/ghcjs-dom.cabal
+++ b/ghcjs-dom.cabal
@@ -1,5 +1,5 @@
 name: ghcjs-dom
-version: 0.2.1.0
+version: 0.2.2.0
 cabal-version: >=1.10
 build-type: Simple
 license: MIT
diff --git a/src/GHCJS/DOM.hs b/src/GHCJS/DOM.hs
--- a/src/GHCJS/DOM.hs
+++ b/src/GHCJS/DOM.hs
@@ -59,20 +59,20 @@
 
 #ifdef ghcjs_HOST_OS
 foreign import javascript unsafe "$r = window"
-  ghcjs_currentWindow :: IO (JSRef Window)
+  ghcjs_currentWindow :: IO (Nullable Window)
 foreign import javascript unsafe "$r = document"
-  ghcjs_currentDocument :: IO (JSRef Document)
+  ghcjs_currentDocument :: IO (Nullable Document)
 #else
-ghcjs_currentWindow :: IO (JSRef Window)
+ghcjs_currentWindow :: IO (Nullable Window)
 ghcjs_currentWindow = undefined
-ghcjs_currentDocument :: IO (JSRef Document)
+ghcjs_currentDocument :: IO (Nullable Document)
 ghcjs_currentDocument = undefined
 #endif
 
 currentWindow :: IO (Maybe Window)
-currentWindow = fmap Window . maybeJSNullOrUndefined <$> ghcjs_currentWindow
+currentWindow = nullableToMaybe <$> ghcjs_currentWindow
 currentDocument :: IO (Maybe Document)
-currentDocument = fmap Document . maybeJSNullOrUndefined <$> ghcjs_currentDocument
+currentDocument = nullableToMaybe <$> ghcjs_currentDocument
 
 type WebView = Window
 castToWebView = id
diff --git a/src/GHCJS/DOM/EventTargetClosures.hs b/src/GHCJS/DOM/EventTargetClosures.hs
--- a/src/GHCJS/DOM/EventTargetClosures.hs
+++ b/src/GHCJS/DOM/EventTargetClosures.hs
@@ -10,33 +10,33 @@
 import GHCJS.Foreign.Callback
 import GHCJS.Marshal.Pure
 import GHCJS.DOM.Types
-import GHCJS.Marshal.Pure (pToJSRef, pFromJSRef)
+import GHCJS.Foreign.Callback.Internal
 
 newtype EventName t e = EventName DOMString
 newtype SaferEventListener t e = SaferEventListener EventListener
 
 instance PToJSRef (SaferEventListener t e) where
-    pToJSRef (SaferEventListener l) = castRef $ pToJSRef l
+    pToJSRef (SaferEventListener l) = pToJSRef l
     {-# INLINE pToJSRef #-}
 
 instance PFromJSRef (SaferEventListener t e) where
-    pFromJSRef = SaferEventListener . pFromJSRef . castRef
+    pFromJSRef = SaferEventListener . pFromJSRef
     {-# INLINE pFromJSRef #-}
 
 unsafeEventName :: DOMString -> EventName t e
 unsafeEventName = EventName
 
 eventListenerNew :: IsEvent event => (event -> IO ()) -> IO EventListener
-eventListenerNew callback = (EventListener . castRef . pToJSRef) <$> syncCallback1 ContinueAsync (callback . unsafeCastGObject . GObject)
+eventListenerNew callback = (EventListener . jsref) <$> syncCallback1 ContinueAsync (callback . unsafeCastGObject . GObject)
 
 eventListenerNewSync :: IsEvent event => (event -> IO ()) -> IO EventListener
-eventListenerNewSync callback = (EventListener . castRef . pToJSRef) <$> syncCallback1 ThrowWouldBlock (callback . unsafeCastGObject . GObject)
+eventListenerNewSync callback = (EventListener . jsref) <$> syncCallback1 ThrowWouldBlock (callback . unsafeCastGObject . GObject)
 
 eventListenerNewAsync :: IsEvent event => (event -> IO ()) -> IO EventListener
-eventListenerNewAsync callback = (EventListener . castRef . pToJSRef) <$> asyncCallback1 (callback . unsafeCastGObject . GObject)
+eventListenerNewAsync callback = (EventListener . jsref) <$> asyncCallback1 (callback . unsafeCastGObject . GObject)
 
 eventListenerRelease :: EventListener -> IO ()
-eventListenerRelease (EventListener ref) = releaseCallback (Callback $ castRef ref)
+eventListenerRelease (EventListener ref) = releaseCallback (Callback ref)
 
 #else
 module GHCJS.DOM.EventTargetClosures (
diff --git a/src/GHCJS/DOM/JSFFI/AudioContext.hs b/src/GHCJS/DOM/JSFFI/AudioContext.hs
--- a/src/GHCJS/DOM/JSFFI/AudioContext.hs
+++ b/src/GHCJS/DOM/JSFFI/AudioContext.hs
@@ -23,13 +23,13 @@
 
 foreign import javascript interruptible
         "$1[\"decodeAudioData\"]($2, $c, function() { $c(null); });" js_decodeAudioData ::
-        JSRef AudioContext -> JSRef ArrayBuffer -> IO (JSRef AudioBuffer)
+        AudioContext -> ArrayBuffer -> IO (Nullable AudioBuffer)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioContext.decodeAudioData Mozilla AudioContext.decodeAudioData documentation>
 decodeAudioData :: (MonadIO m, IsAudioContext self, IsArrayBuffer audioData) =>
                    self -> audioData -> m AudioBuffer
-decodeAudioData self audioData = liftIO $ js_decodeAudioData
-        (unAudioContext (toAudioContext self))
-        (unArrayBuffer  (toArrayBuffer audioData))
-            >>= fromJSRef >>= maybe (throwIO DecodeAudioError) return
+decodeAudioData self audioData = liftIO $ nullableToMaybe <$> js_decodeAudioData
+        (toAudioContext self)
+        (toArrayBuffer audioData)
+            >>= maybe (throwIO DecodeAudioError) return
 
diff --git a/src/GHCJS/DOM/JSFFI/Database.hs b/src/GHCJS/DOM/JSFFI/Database.hs
--- a/src/GHCJS/DOM/JSFFI/Database.hs
+++ b/src/GHCJS/DOM/JSFFI/Database.hs
@@ -30,19 +30,20 @@
 import GHCJS.DOM.JSFFI.Generated.Database as Generated hiding (js_changeVersion, changeVersion, js_transaction, transaction, js_readTransaction, readTransaction)
 
 withSQLTransactionCallback :: (SQLTransaction -> IO ()) -> (SQLTransactionCallback -> IO a) -> IO a
-withSQLTransactionCallback f = bracket (newSQLTransactionCallbackSync (f . fromJust)) releaseCallback
+withSQLTransactionCallback f = bracket (newSQLTransactionCallbackSync (f . fromJust)) (\(SQLTransactionCallback c) -> releaseCallback c)
 
 foreign import javascript interruptible
         "$1[\"changeVersion\"]($2, $3, $4, $c, function() { $c(null); });"
-        js_changeVersion :: JSRef Database -> JSString -> JSString -> JSRef SQLTransactionCallback -> IO (JSRef SQLError)
+        js_changeVersion :: Database -> JSString -> JSString -> Nullable SQLTransactionCallback -> IO (Nullable SQLError)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Database.changeVersion Mozilla Database.changeVersion documentation>
 changeVersion' :: (MonadIO m, ToJSString oldVersion, ToJSString newVersion) =>
                   Database -> oldVersion -> newVersion -> Maybe (SQLTransaction -> IO ()) -> m (Maybe SQLError)
-changeVersion' self oldVersion newVersion Nothing = liftIO $
-    js_changeVersion (unDatabase self) (toJSString oldVersion) (toJSString newVersion) jsNull >>= fromJSRef
-changeVersion' self oldVersion newVersion (Just callback) = liftIO $ withSQLTransactionCallback callback
-    (js_changeVersion (unDatabase self) (toJSString oldVersion) (toJSString newVersion) . pToJSRef) >>= fromJSRef
+changeVersion' self oldVersion newVersion Nothing = liftIO $ nullableToMaybe <$>
+    js_changeVersion self (toJSString oldVersion) (toJSString newVersion) (Nullable jsNull)
+changeVersion' self oldVersion newVersion (Just callback) = liftIO $ nullableToMaybe <$>
+    withSQLTransactionCallback callback
+        (js_changeVersion self (toJSString oldVersion) (toJSString newVersion) . Nullable . pToJSRef)
 
 changeVersion :: (MonadIO m, ToJSString oldVersion, ToJSString newVersion) =>
                  Database -> oldVersion -> newVersion -> Maybe (SQLTransaction -> IO ()) -> m ()
@@ -50,24 +51,25 @@
     changeVersion' self oldVersion newVersion callback >>= maybe (return ()) throwSQLException
 
 foreign import javascript interruptible "$1[\"transaction\"]($2, $c, function() { $c(null); });"
-        js_transaction :: JSRef Database -> JSRef SQLTransactionCallback -> IO (JSRef SQLError)
+        js_transaction :: Database -> SQLTransactionCallback -> IO (Nullable SQLError)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Database.transaction Mozilla Database.transaction documentation>
 transaction' :: (MonadIO m) => Database -> (SQLTransaction -> IO ()) -> m (Maybe SQLError)
-transaction' self callback = liftIO $ withSQLTransactionCallback callback
-    (js_transaction (unDatabase self) . pToJSRef) >>= fromJSRef
+transaction' self callback = liftIO $ nullableToMaybe <$>
+    withSQLTransactionCallback callback
+        (js_transaction self)
 
 transaction :: (MonadIO m) => Database -> (SQLTransaction -> IO ()) -> m ()
 transaction self callback = transaction' self callback >>= maybe (return ()) throwSQLException
 
 foreign import javascript interruptible
         "$1[\"readTransaction\"]($2, $c, function() { $c(null); });"
-        js_readTransaction :: JSRef Database -> JSRef SQLTransactionCallback -> IO (JSRef SQLError)
+        js_readTransaction :: Database -> SQLTransactionCallback -> IO (Nullable SQLError)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Database.readTransaction Mozilla Database.readTransaction documentation>
 readTransaction' :: (MonadIO m) => Database -> (SQLTransaction -> IO ()) -> m (Maybe SQLError)
-readTransaction' self callback = liftIO $
-      withSQLTransactionCallback callback (js_readTransaction (unDatabase self) . pToJSRef) >>= fromJSRef
+readTransaction' self callback = liftIO $ nullableToMaybe <$>
+      withSQLTransactionCallback callback (js_readTransaction self)
 
 readTransaction :: (MonadIO m) => Database -> (SQLTransaction -> IO ()) -> m ()
 readTransaction self callback = readTransaction' self callback >>= maybe (return ()) throwSQLException
diff --git a/src/GHCJS/DOM/JSFFI/Generated/ANGLEInstancedArrays.hs b/src/GHCJS/DOM/JSFFI/Generated/ANGLEInstancedArrays.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/ANGLEInstancedArrays.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/ANGLEInstancedArrays.hs
@@ -8,7 +8,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -24,7 +24,7 @@
 foreign import javascript unsafe
         "$1[\"drawArraysInstancedANGLE\"]($2,\n$3, $4, $5)"
         js_drawArraysInstancedANGLE ::
-        JSRef ANGLEInstancedArrays -> Word -> Int -> Int -> Int -> IO ()
+        ANGLEInstancedArrays -> Word -> Int -> Int -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ANGLEInstancedArrays.drawArraysInstancedANGLE Mozilla ANGLEInstancedArrays.drawArraysInstancedANGLE documentation> 
 drawArraysInstancedANGLE ::
@@ -32,15 +32,12 @@
                            ANGLEInstancedArrays -> Word -> Int -> Int -> Int -> m ()
 drawArraysInstancedANGLE self mode first count primcount
   = liftIO
-      (js_drawArraysInstancedANGLE (unANGLEInstancedArrays self) mode
-         first
-         count
-         primcount)
+      (js_drawArraysInstancedANGLE (self) mode first count primcount)
  
 foreign import javascript unsafe
         "$1[\"drawElementsInstancedANGLE\"]($2,\n$3, $4, $5, $6)"
         js_drawElementsInstancedANGLE ::
-        JSRef ANGLEInstancedArrays ->
+        ANGLEInstancedArrays ->
           Word -> Int -> Word -> Double -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ANGLEInstancedArrays.drawElementsInstancedANGLE Mozilla ANGLEInstancedArrays.drawElementsInstancedANGLE documentation> 
@@ -49,22 +46,18 @@
                              ANGLEInstancedArrays -> Word -> Int -> Word -> Int64 -> Int -> m ()
 drawElementsInstancedANGLE self mode count type' offset primcount
   = liftIO
-      (js_drawElementsInstancedANGLE (unANGLEInstancedArrays self) mode
-         count
-         type'
+      (js_drawElementsInstancedANGLE (self) mode count type'
          (fromIntegral offset)
          primcount)
  
 foreign import javascript unsafe
         "$1[\"vertexAttribDivisorANGLE\"]($2,\n$3)"
         js_vertexAttribDivisorANGLE ::
-        JSRef ANGLEInstancedArrays -> Word -> Word -> IO ()
+        ANGLEInstancedArrays -> Word -> Word -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ANGLEInstancedArrays.vertexAttribDivisorANGLE Mozilla ANGLEInstancedArrays.vertexAttribDivisorANGLE documentation> 
 vertexAttribDivisorANGLE ::
                          (MonadIO m) => ANGLEInstancedArrays -> Word -> Word -> m ()
 vertexAttribDivisorANGLE self index divisor
-  = liftIO
-      (js_vertexAttribDivisorANGLE (unANGLEInstancedArrays self) index
-         divisor)
+  = liftIO (js_vertexAttribDivisorANGLE (self) index divisor)
 pattern VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE = 35070
diff --git a/src/GHCJS/DOM/JSFFI/Generated/AbstractView.hs b/src/GHCJS/DOM/JSFFI/Generated/AbstractView.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/AbstractView.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/AbstractView.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,18 +19,18 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"document\"]" js_getDocument
-        :: JSRef AbstractView -> IO (JSRef Document)
+        :: AbstractView -> IO (Nullable Document)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AbstractView.document Mozilla AbstractView.document documentation> 
 getDocument :: (MonadIO m) => AbstractView -> m (Maybe Document)
 getDocument self
-  = liftIO ((js_getDocument (unAbstractView self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getDocument (self)))
  
 foreign import javascript unsafe "$1[\"styleMedia\"]"
-        js_getStyleMedia :: JSRef AbstractView -> IO (JSRef StyleMedia)
+        js_getStyleMedia :: AbstractView -> IO (Nullable StyleMedia)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AbstractView.styleMedia Mozilla AbstractView.styleMedia documentation> 
 getStyleMedia ::
               (MonadIO m) => AbstractView -> m (Maybe StyleMedia)
 getStyleMedia self
-  = liftIO ((js_getStyleMedia (unAbstractView self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getStyleMedia (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/AbstractWorker.hs b/src/GHCJS/DOM/JSFFI/Generated/AbstractWorker.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/AbstractWorker.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/AbstractWorker.hs
@@ -4,7 +4,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/AllAudioCapabilities.hs b/src/GHCJS/DOM/JSFFI/Generated/AllAudioCapabilities.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/AllAudioCapabilities.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/AllAudioCapabilities.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,23 +20,19 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"sourceId\"]" js_getSourceId
-        :: JSRef AllAudioCapabilities -> IO (JSRef [result])
+        :: AllAudioCapabilities -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AllAudioCapabilities.sourceId Mozilla AllAudioCapabilities.sourceId documentation> 
 getSourceId ::
             (MonadIO m, FromJSString result) =>
               AllAudioCapabilities -> m [result]
 getSourceId self
-  = liftIO
-      ((js_getSourceId (unAllAudioCapabilities self)) >>=
-         fromJSRefUnchecked)
+  = liftIO ((js_getSourceId (self)) >>= fromJSRefUnchecked)
  
 foreign import javascript unsafe "$1[\"volume\"]" js_getVolume ::
-        JSRef AllAudioCapabilities -> IO (JSRef CapabilityRange)
+        AllAudioCapabilities -> IO (Nullable CapabilityRange)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AllAudioCapabilities.volume Mozilla AllAudioCapabilities.volume documentation> 
 getVolume ::
           (MonadIO m) => AllAudioCapabilities -> m (Maybe CapabilityRange)
-getVolume self
-  = liftIO
-      ((js_getVolume (unAllAudioCapabilities self)) >>= fromJSRef)
+getVolume self = liftIO (nullableToMaybe <$> (js_getVolume (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/AllVideoCapabilities.hs b/src/GHCJS/DOM/JSFFI/Generated/AllVideoCapabilities.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/AllVideoCapabilities.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/AllVideoCapabilities.hs
@@ -8,7 +8,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -22,81 +22,67 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"sourceType\"]"
-        js_getSourceType ::
-        JSRef AllVideoCapabilities -> IO (JSRef [result])
+        js_getSourceType :: AllVideoCapabilities -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AllVideoCapabilities.sourceType Mozilla AllVideoCapabilities.sourceType documentation> 
 getSourceType ::
               (MonadIO m, FromJSString result) =>
                 AllVideoCapabilities -> m [result]
 getSourceType self
-  = liftIO
-      ((js_getSourceType (unAllVideoCapabilities self)) >>=
-         fromJSRefUnchecked)
+  = liftIO ((js_getSourceType (self)) >>= fromJSRefUnchecked)
  
 foreign import javascript unsafe "$1[\"sourceId\"]" js_getSourceId
-        :: JSRef AllVideoCapabilities -> IO (JSRef [result])
+        :: AllVideoCapabilities -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AllVideoCapabilities.sourceId Mozilla AllVideoCapabilities.sourceId documentation> 
 getSourceId ::
             (MonadIO m, FromJSString result) =>
               AllVideoCapabilities -> m [result]
 getSourceId self
-  = liftIO
-      ((js_getSourceId (unAllVideoCapabilities self)) >>=
-         fromJSRefUnchecked)
+  = liftIO ((js_getSourceId (self)) >>= fromJSRefUnchecked)
  
 foreign import javascript unsafe "$1[\"width\"]" js_getWidth ::
-        JSRef AllVideoCapabilities -> IO (JSRef CapabilityRange)
+        AllVideoCapabilities -> IO (Nullable CapabilityRange)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AllVideoCapabilities.width Mozilla AllVideoCapabilities.width documentation> 
 getWidth ::
          (MonadIO m) => AllVideoCapabilities -> m (Maybe CapabilityRange)
-getWidth self
-  = liftIO
-      ((js_getWidth (unAllVideoCapabilities self)) >>= fromJSRef)
+getWidth self = liftIO (nullableToMaybe <$> (js_getWidth (self)))
  
 foreign import javascript unsafe "$1[\"height\"]" js_getHeight ::
-        JSRef AllVideoCapabilities -> IO (JSRef CapabilityRange)
+        AllVideoCapabilities -> IO (Nullable CapabilityRange)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AllVideoCapabilities.height Mozilla AllVideoCapabilities.height documentation> 
 getHeight ::
           (MonadIO m) => AllVideoCapabilities -> m (Maybe CapabilityRange)
-getHeight self
-  = liftIO
-      ((js_getHeight (unAllVideoCapabilities self)) >>= fromJSRef)
+getHeight self = liftIO (nullableToMaybe <$> (js_getHeight (self)))
  
 foreign import javascript unsafe "$1[\"frameRate\"]"
         js_getFrameRate ::
-        JSRef AllVideoCapabilities -> IO (JSRef CapabilityRange)
+        AllVideoCapabilities -> IO (Nullable CapabilityRange)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AllVideoCapabilities.frameRate Mozilla AllVideoCapabilities.frameRate documentation> 
 getFrameRate ::
              (MonadIO m) => AllVideoCapabilities -> m (Maybe CapabilityRange)
 getFrameRate self
-  = liftIO
-      ((js_getFrameRate (unAllVideoCapabilities self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getFrameRate (self)))
  
 foreign import javascript unsafe "$1[\"aspectRatio\"]"
         js_getAspectRatio ::
-        JSRef AllVideoCapabilities -> IO (JSRef CapabilityRange)
+        AllVideoCapabilities -> IO (Nullable CapabilityRange)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AllVideoCapabilities.aspectRatio Mozilla AllVideoCapabilities.aspectRatio documentation> 
 getAspectRatio ::
                (MonadIO m) => AllVideoCapabilities -> m (Maybe CapabilityRange)
 getAspectRatio self
-  = liftIO
-      ((js_getAspectRatio (unAllVideoCapabilities self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getAspectRatio (self)))
  
 foreign import javascript unsafe "$1[\"facingMode\"]"
-        js_getFacingMode ::
-        JSRef AllVideoCapabilities -> IO (JSRef [result])
+        js_getFacingMode :: AllVideoCapabilities -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AllVideoCapabilities.facingMode Mozilla AllVideoCapabilities.facingMode documentation> 
 getFacingMode ::
               (MonadIO m, FromJSString result) =>
                 AllVideoCapabilities -> m [result]
 getFacingMode self
-  = liftIO
-      ((js_getFacingMode (unAllVideoCapabilities self)) >>=
-         fromJSRefUnchecked)
+  = liftIO ((js_getFacingMode (self)) >>= fromJSRefUnchecked)
diff --git a/src/GHCJS/DOM/JSFFI/Generated/AnalyserNode.hs b/src/GHCJS/DOM/JSFFI/Generated/AnalyserNode.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/AnalyserNode.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/AnalyserNode.hs
@@ -13,7 +13,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -28,7 +28,7 @@
  
 foreign import javascript unsafe
         "$1[\"getFloatFrequencyData\"]($2)" js_getFloatFrequencyData ::
-        JSRef AnalyserNode -> JSRef Float32Array -> IO ()
+        AnalyserNode -> Nullable Float32Array -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AnalyserNode.getFloatFrequencyData Mozilla AnalyserNode.getFloatFrequencyData documentation> 
 getFloatFrequencyData ::
@@ -36,12 +36,12 @@
                         AnalyserNode -> Maybe array -> m ()
 getFloatFrequencyData self array
   = liftIO
-      (js_getFloatFrequencyData (unAnalyserNode self)
-         (maybe jsNull (unFloat32Array . toFloat32Array) array))
+      (js_getFloatFrequencyData (self)
+         (maybeToNullable (fmap toFloat32Array array)))
  
 foreign import javascript unsafe "$1[\"getByteFrequencyData\"]($2)"
         js_getByteFrequencyData ::
-        JSRef AnalyserNode -> JSRef Uint8Array -> IO ()
+        AnalyserNode -> Nullable Uint8Array -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AnalyserNode.getByteFrequencyData Mozilla AnalyserNode.getByteFrequencyData documentation> 
 getByteFrequencyData ::
@@ -49,12 +49,12 @@
                        AnalyserNode -> Maybe array -> m ()
 getByteFrequencyData self array
   = liftIO
-      (js_getByteFrequencyData (unAnalyserNode self)
-         (maybe jsNull (unUint8Array . toUint8Array) array))
+      (js_getByteFrequencyData (self)
+         (maybeToNullable (fmap toUint8Array array)))
  
 foreign import javascript unsafe
         "$1[\"getByteTimeDomainData\"]($2)" js_getByteTimeDomainData ::
-        JSRef AnalyserNode -> JSRef Uint8Array -> IO ()
+        AnalyserNode -> Nullable Uint8Array -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AnalyserNode.getByteTimeDomainData Mozilla AnalyserNode.getByteTimeDomainData documentation> 
 getByteTimeDomainData ::
@@ -62,78 +62,72 @@
                         AnalyserNode -> Maybe array -> m ()
 getByteTimeDomainData self array
   = liftIO
-      (js_getByteTimeDomainData (unAnalyserNode self)
-         (maybe jsNull (unUint8Array . toUint8Array) array))
+      (js_getByteTimeDomainData (self)
+         (maybeToNullable (fmap toUint8Array array)))
  
 foreign import javascript unsafe "$1[\"fftSize\"] = $2;"
-        js_setFftSize :: JSRef AnalyserNode -> Word -> IO ()
+        js_setFftSize :: AnalyserNode -> Word -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AnalyserNode.fftSize Mozilla AnalyserNode.fftSize documentation> 
 setFftSize :: (MonadIO m) => AnalyserNode -> Word -> m ()
-setFftSize self val
-  = liftIO (js_setFftSize (unAnalyserNode self) val)
+setFftSize self val = liftIO (js_setFftSize (self) val)
  
 foreign import javascript unsafe "$1[\"fftSize\"]" js_getFftSize ::
-        JSRef AnalyserNode -> IO Word
+        AnalyserNode -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AnalyserNode.fftSize Mozilla AnalyserNode.fftSize documentation> 
 getFftSize :: (MonadIO m) => AnalyserNode -> m Word
-getFftSize self = liftIO (js_getFftSize (unAnalyserNode self))
+getFftSize self = liftIO (js_getFftSize (self))
  
 foreign import javascript unsafe "$1[\"frequencyBinCount\"]"
-        js_getFrequencyBinCount :: JSRef AnalyserNode -> IO Word
+        js_getFrequencyBinCount :: AnalyserNode -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AnalyserNode.frequencyBinCount Mozilla AnalyserNode.frequencyBinCount documentation> 
 getFrequencyBinCount :: (MonadIO m) => AnalyserNode -> m Word
-getFrequencyBinCount self
-  = liftIO (js_getFrequencyBinCount (unAnalyserNode self))
+getFrequencyBinCount self = liftIO (js_getFrequencyBinCount (self))
  
 foreign import javascript unsafe "$1[\"minDecibels\"] = $2;"
-        js_setMinDecibels :: JSRef AnalyserNode -> Double -> IO ()
+        js_setMinDecibels :: AnalyserNode -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AnalyserNode.minDecibels Mozilla AnalyserNode.minDecibels documentation> 
 setMinDecibels :: (MonadIO m) => AnalyserNode -> Double -> m ()
-setMinDecibels self val
-  = liftIO (js_setMinDecibels (unAnalyserNode self) val)
+setMinDecibels self val = liftIO (js_setMinDecibels (self) val)
  
 foreign import javascript unsafe "$1[\"minDecibels\"]"
-        js_getMinDecibels :: JSRef AnalyserNode -> IO Double
+        js_getMinDecibels :: AnalyserNode -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AnalyserNode.minDecibels Mozilla AnalyserNode.minDecibels documentation> 
 getMinDecibels :: (MonadIO m) => AnalyserNode -> m Double
-getMinDecibels self
-  = liftIO (js_getMinDecibels (unAnalyserNode self))
+getMinDecibels self = liftIO (js_getMinDecibels (self))
  
 foreign import javascript unsafe "$1[\"maxDecibels\"] = $2;"
-        js_setMaxDecibels :: JSRef AnalyserNode -> Double -> IO ()
+        js_setMaxDecibels :: AnalyserNode -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AnalyserNode.maxDecibels Mozilla AnalyserNode.maxDecibels documentation> 
 setMaxDecibels :: (MonadIO m) => AnalyserNode -> Double -> m ()
-setMaxDecibels self val
-  = liftIO (js_setMaxDecibels (unAnalyserNode self) val)
+setMaxDecibels self val = liftIO (js_setMaxDecibels (self) val)
  
 foreign import javascript unsafe "$1[\"maxDecibels\"]"
-        js_getMaxDecibels :: JSRef AnalyserNode -> IO Double
+        js_getMaxDecibels :: AnalyserNode -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AnalyserNode.maxDecibels Mozilla AnalyserNode.maxDecibels documentation> 
 getMaxDecibels :: (MonadIO m) => AnalyserNode -> m Double
-getMaxDecibels self
-  = liftIO (js_getMaxDecibels (unAnalyserNode self))
+getMaxDecibels self = liftIO (js_getMaxDecibels (self))
  
 foreign import javascript unsafe
         "$1[\"smoothingTimeConstant\"] = $2;" js_setSmoothingTimeConstant
-        :: JSRef AnalyserNode -> Double -> IO ()
+        :: AnalyserNode -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AnalyserNode.smoothingTimeConstant Mozilla AnalyserNode.smoothingTimeConstant documentation> 
 setSmoothingTimeConstant ::
                          (MonadIO m) => AnalyserNode -> Double -> m ()
 setSmoothingTimeConstant self val
-  = liftIO (js_setSmoothingTimeConstant (unAnalyserNode self) val)
+  = liftIO (js_setSmoothingTimeConstant (self) val)
  
 foreign import javascript unsafe "$1[\"smoothingTimeConstant\"]"
-        js_getSmoothingTimeConstant :: JSRef AnalyserNode -> IO Double
+        js_getSmoothingTimeConstant :: AnalyserNode -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AnalyserNode.smoothingTimeConstant Mozilla AnalyserNode.smoothingTimeConstant documentation> 
 getSmoothingTimeConstant :: (MonadIO m) => AnalyserNode -> m Double
 getSmoothingTimeConstant self
-  = liftIO (js_getSmoothingTimeConstant (unAnalyserNode self))
+  = liftIO (js_getSmoothingTimeConstant (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/AnimationEvent.hs b/src/GHCJS/DOM/JSFFI/Generated/AnimationEvent.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/AnimationEvent.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/AnimationEvent.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,19 +20,17 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"animationName\"]"
-        js_getAnimationName :: JSRef AnimationEvent -> IO JSString
+        js_getAnimationName :: AnimationEvent -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AnimationEvent.animationName Mozilla AnimationEvent.animationName documentation> 
 getAnimationName ::
                  (MonadIO m, FromJSString result) => AnimationEvent -> m result
 getAnimationName self
-  = liftIO
-      (fromJSString <$> (js_getAnimationName (unAnimationEvent self)))
+  = liftIO (fromJSString <$> (js_getAnimationName (self)))
  
 foreign import javascript unsafe "$1[\"elapsedTime\"]"
-        js_getElapsedTime :: JSRef AnimationEvent -> IO Double
+        js_getElapsedTime :: AnimationEvent -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AnimationEvent.elapsedTime Mozilla AnimationEvent.elapsedTime documentation> 
 getElapsedTime :: (MonadIO m) => AnimationEvent -> m Double
-getElapsedTime self
-  = liftIO (js_getElapsedTime (unAnimationEvent self))
+getElapsedTime self = liftIO (js_getElapsedTime (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/ApplicationCache.hs b/src/GHCJS/DOM/JSFFI/Generated/ApplicationCache.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/ApplicationCache.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/ApplicationCache.hs
@@ -9,7 +9,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -23,25 +23,25 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"update\"]()" js_update ::
-        JSRef ApplicationCache -> IO ()
+        ApplicationCache -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ApplicationCache.update Mozilla ApplicationCache.update documentation> 
 update :: (MonadIO m) => ApplicationCache -> m ()
-update self = liftIO (js_update (unApplicationCache self))
+update self = liftIO (js_update (self))
  
 foreign import javascript unsafe "$1[\"swapCache\"]()" js_swapCache
-        :: JSRef ApplicationCache -> IO ()
+        :: ApplicationCache -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ApplicationCache.swapCache Mozilla ApplicationCache.swapCache documentation> 
 swapCache :: (MonadIO m) => ApplicationCache -> m ()
-swapCache self = liftIO (js_swapCache (unApplicationCache self))
+swapCache self = liftIO (js_swapCache (self))
  
 foreign import javascript unsafe "$1[\"abort\"]()" js_abort ::
-        JSRef ApplicationCache -> IO ()
+        ApplicationCache -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ApplicationCache.abort Mozilla ApplicationCache.abort documentation> 
 abort :: (MonadIO m) => ApplicationCache -> m ()
-abort self = liftIO (js_abort (unApplicationCache self))
+abort self = liftIO (js_abort (self))
 pattern UNCACHED = 0
 pattern IDLE = 1
 pattern CHECKING = 2
@@ -50,11 +50,11 @@
 pattern OBSOLETE = 5
  
 foreign import javascript unsafe "$1[\"status\"]" js_getStatus ::
-        JSRef ApplicationCache -> IO Word
+        ApplicationCache -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ApplicationCache.status Mozilla ApplicationCache.status documentation> 
 getStatus :: (MonadIO m) => ApplicationCache -> m Word
-getStatus self = liftIO (js_getStatus (unApplicationCache self))
+getStatus self = liftIO (js_getStatus (self))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ApplicationCache.onchecking Mozilla ApplicationCache.onchecking documentation> 
 checking :: EventName ApplicationCache Event
diff --git a/src/GHCJS/DOM/JSFFI/Generated/Attr.hs b/src/GHCJS/DOM/JSFFI/Generated/Attr.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/Attr.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/Attr.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,50 +20,48 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"name\"]" js_getName ::
-        JSRef Attr -> IO (JSRef (Maybe JSString))
+        Attr -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Attr.name Mozilla Attr.name documentation> 
 getName ::
         (MonadIO m, FromJSString result) => Attr -> m (Maybe result)
-getName self
-  = liftIO (fromMaybeJSString <$> (js_getName (unAttr self)))
+getName self = liftIO (fromMaybeJSString <$> (js_getName (self)))
  
 foreign import javascript unsafe "($1[\"specified\"] ? 1 : 0)"
-        js_getSpecified :: JSRef Attr -> IO Bool
+        js_getSpecified :: Attr -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Attr.specified Mozilla Attr.specified documentation> 
 getSpecified :: (MonadIO m) => Attr -> m Bool
-getSpecified self = liftIO (js_getSpecified (unAttr self))
+getSpecified self = liftIO (js_getSpecified (self))
  
 foreign import javascript unsafe "$1[\"value\"] = $2;" js_setValue
-        :: JSRef Attr -> JSRef (Maybe JSString) -> IO ()
+        :: Attr -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Attr.value Mozilla Attr.value documentation> 
 setValue ::
          (MonadIO m, ToJSString val) => Attr -> Maybe val -> m ()
 setValue self val
-  = liftIO (js_setValue (unAttr self) (toMaybeJSString val))
+  = liftIO (js_setValue (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"value\"]" js_getValue ::
-        JSRef Attr -> IO (JSRef (Maybe JSString))
+        Attr -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Attr.value Mozilla Attr.value documentation> 
 getValue ::
          (MonadIO m, FromJSString result) => Attr -> m (Maybe result)
-getValue self
-  = liftIO (fromMaybeJSString <$> (js_getValue (unAttr self)))
+getValue self = liftIO (fromMaybeJSString <$> (js_getValue (self)))
  
 foreign import javascript unsafe "$1[\"ownerElement\"]"
-        js_getOwnerElement :: JSRef Attr -> IO (JSRef Element)
+        js_getOwnerElement :: Attr -> IO (Nullable Element)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Attr.ownerElement Mozilla Attr.ownerElement documentation> 
 getOwnerElement :: (MonadIO m) => Attr -> m (Maybe Element)
 getOwnerElement self
-  = liftIO ((js_getOwnerElement (unAttr self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getOwnerElement (self)))
  
 foreign import javascript unsafe "($1[\"isId\"] ? 1 : 0)"
-        js_getIsId :: JSRef Attr -> IO Bool
+        js_getIsId :: Attr -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Attr.isId Mozilla Attr.isId documentation> 
 getIsId :: (MonadIO m) => Attr -> m Bool
-getIsId self = liftIO (js_getIsId (unAttr self))
+getIsId self = liftIO (js_getIsId (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/AudioBuffer.hs b/src/GHCJS/DOM/JSFFI/Generated/AudioBuffer.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/AudioBuffer.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/AudioBuffer.hs
@@ -8,7 +8,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -23,55 +23,53 @@
  
 foreign import javascript unsafe "$1[\"getChannelData\"]($2)"
         js_getChannelData ::
-        JSRef AudioBuffer -> Word -> IO (JSRef Float32Array)
+        AudioBuffer -> Word -> IO (Nullable Float32Array)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioBuffer.getChannelData Mozilla AudioBuffer.getChannelData documentation> 
 getChannelData ::
                (MonadIO m) => AudioBuffer -> Word -> m (Maybe Float32Array)
 getChannelData self channelIndex
   = liftIO
-      ((js_getChannelData (unAudioBuffer self) channelIndex) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_getChannelData (self) channelIndex))
  
 foreign import javascript unsafe "$1[\"length\"]" js_getLength ::
-        JSRef AudioBuffer -> IO Int
+        AudioBuffer -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioBuffer.length Mozilla AudioBuffer.length documentation> 
 getLength :: (MonadIO m) => AudioBuffer -> m Int
-getLength self = liftIO (js_getLength (unAudioBuffer self))
+getLength self = liftIO (js_getLength (self))
  
 foreign import javascript unsafe "$1[\"duration\"]" js_getDuration
-        :: JSRef AudioBuffer -> IO Float
+        :: AudioBuffer -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioBuffer.duration Mozilla AudioBuffer.duration documentation> 
 getDuration :: (MonadIO m) => AudioBuffer -> m Float
-getDuration self = liftIO (js_getDuration (unAudioBuffer self))
+getDuration self = liftIO (js_getDuration (self))
  
 foreign import javascript unsafe "$1[\"sampleRate\"]"
-        js_getSampleRate :: JSRef AudioBuffer -> IO Float
+        js_getSampleRate :: AudioBuffer -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioBuffer.sampleRate Mozilla AudioBuffer.sampleRate documentation> 
 getSampleRate :: (MonadIO m) => AudioBuffer -> m Float
-getSampleRate self = liftIO (js_getSampleRate (unAudioBuffer self))
+getSampleRate self = liftIO (js_getSampleRate (self))
  
 foreign import javascript unsafe "$1[\"gain\"] = $2;" js_setGain ::
-        JSRef AudioBuffer -> Float -> IO ()
+        AudioBuffer -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioBuffer.gain Mozilla AudioBuffer.gain documentation> 
 setGain :: (MonadIO m) => AudioBuffer -> Float -> m ()
-setGain self val = liftIO (js_setGain (unAudioBuffer self) val)
+setGain self val = liftIO (js_setGain (self) val)
  
 foreign import javascript unsafe "$1[\"gain\"]" js_getGain ::
-        JSRef AudioBuffer -> IO Float
+        AudioBuffer -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioBuffer.gain Mozilla AudioBuffer.gain documentation> 
 getGain :: (MonadIO m) => AudioBuffer -> m Float
-getGain self = liftIO (js_getGain (unAudioBuffer self))
+getGain self = liftIO (js_getGain (self))
  
 foreign import javascript unsafe "$1[\"numberOfChannels\"]"
-        js_getNumberOfChannels :: JSRef AudioBuffer -> IO Word
+        js_getNumberOfChannels :: AudioBuffer -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioBuffer.numberOfChannels Mozilla AudioBuffer.numberOfChannels documentation> 
 getNumberOfChannels :: (MonadIO m) => AudioBuffer -> m Word
-getNumberOfChannels self
-  = liftIO (js_getNumberOfChannels (unAudioBuffer self))
+getNumberOfChannels self = liftIO (js_getNumberOfChannels (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/AudioBufferCallback.hs b/src/GHCJS/DOM/JSFFI/Generated/AudioBufferCallback.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/AudioBufferCallback.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/AudioBufferCallback.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -24,10 +24,11 @@
                          (Maybe AudioBuffer -> IO ()) -> m AudioBufferCallback
 newAudioBufferCallback callback
   = liftIO
-      (syncCallback1 ThrowWouldBlock
-         (\ audioBuffer ->
-            fromJSRefUnchecked audioBuffer >>=
-              \ audioBuffer' -> callback audioBuffer'))
+      (AudioBufferCallback <$>
+         syncCallback1 ThrowWouldBlock
+           (\ audioBuffer ->
+              fromJSRefUnchecked audioBuffer >>=
+                \ audioBuffer' -> callback audioBuffer'))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioBufferCallback Mozilla AudioBufferCallback documentation> 
 newAudioBufferCallbackSync ::
@@ -35,10 +36,11 @@
                              (Maybe AudioBuffer -> IO ()) -> m AudioBufferCallback
 newAudioBufferCallbackSync callback
   = liftIO
-      (syncCallback1 ContinueAsync
-         (\ audioBuffer ->
-            fromJSRefUnchecked audioBuffer >>=
-              \ audioBuffer' -> callback audioBuffer'))
+      (AudioBufferCallback <$>
+         syncCallback1 ContinueAsync
+           (\ audioBuffer ->
+              fromJSRefUnchecked audioBuffer >>=
+                \ audioBuffer' -> callback audioBuffer'))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioBufferCallback Mozilla AudioBufferCallback documentation> 
 newAudioBufferCallbackAsync ::
@@ -46,7 +48,8 @@
                               (Maybe AudioBuffer -> IO ()) -> m AudioBufferCallback
 newAudioBufferCallbackAsync callback
   = liftIO
-      (asyncCallback1
-         (\ audioBuffer ->
-            fromJSRefUnchecked audioBuffer >>=
-              \ audioBuffer' -> callback audioBuffer'))
+      (AudioBufferCallback <$>
+         asyncCallback1
+           (\ audioBuffer ->
+              fromJSRefUnchecked audioBuffer >>=
+                \ audioBuffer' -> callback audioBuffer'))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/AudioBufferSourceNode.hs b/src/GHCJS/DOM/JSFFI/Generated/AudioBufferSourceNode.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/AudioBufferSourceNode.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/AudioBufferSourceNode.hs
@@ -14,7 +14,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -29,53 +29,46 @@
  
 foreign import javascript unsafe "$1[\"start\"]($2, $3, $4)"
         js_start ::
-        JSRef AudioBufferSourceNode -> Double -> Double -> Double -> IO ()
+        AudioBufferSourceNode -> Double -> Double -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioBufferSourceNode.start Mozilla AudioBufferSourceNode.start documentation> 
 start ::
       (MonadIO m) =>
         AudioBufferSourceNode -> Double -> Double -> Double -> m ()
 start self when grainOffset grainDuration
-  = liftIO
-      (js_start (unAudioBufferSourceNode self) when grainOffset
-         grainDuration)
+  = liftIO (js_start (self) when grainOffset grainDuration)
  
 foreign import javascript unsafe "$1[\"stop\"]($2)" js_stop ::
-        JSRef AudioBufferSourceNode -> Double -> IO ()
+        AudioBufferSourceNode -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioBufferSourceNode.stop Mozilla AudioBufferSourceNode.stop documentation> 
 stop :: (MonadIO m) => AudioBufferSourceNode -> Double -> m ()
-stop self when
-  = liftIO (js_stop (unAudioBufferSourceNode self) when)
+stop self when = liftIO (js_stop (self) when)
  
 foreign import javascript unsafe "$1[\"noteOn\"]($2)" js_noteOn ::
-        JSRef AudioBufferSourceNode -> Double -> IO ()
+        AudioBufferSourceNode -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioBufferSourceNode.noteOn Mozilla AudioBufferSourceNode.noteOn documentation> 
 noteOn :: (MonadIO m) => AudioBufferSourceNode -> Double -> m ()
-noteOn self when
-  = liftIO (js_noteOn (unAudioBufferSourceNode self) when)
+noteOn self when = liftIO (js_noteOn (self) when)
  
 foreign import javascript unsafe "$1[\"noteGrainOn\"]($2, $3, $4)"
         js_noteGrainOn ::
-        JSRef AudioBufferSourceNode -> Double -> Double -> Double -> IO ()
+        AudioBufferSourceNode -> Double -> Double -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioBufferSourceNode.noteGrainOn Mozilla AudioBufferSourceNode.noteGrainOn documentation> 
 noteGrainOn ::
             (MonadIO m) =>
               AudioBufferSourceNode -> Double -> Double -> Double -> m ()
 noteGrainOn self when grainOffset grainDuration
-  = liftIO
-      (js_noteGrainOn (unAudioBufferSourceNode self) when grainOffset
-         grainDuration)
+  = liftIO (js_noteGrainOn (self) when grainOffset grainDuration)
  
 foreign import javascript unsafe "$1[\"noteOff\"]($2)" js_noteOff
-        :: JSRef AudioBufferSourceNode -> Double -> IO ()
+        :: AudioBufferSourceNode -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioBufferSourceNode.noteOff Mozilla AudioBufferSourceNode.noteOff documentation> 
 noteOff :: (MonadIO m) => AudioBufferSourceNode -> Double -> m ()
-noteOff self when
-  = liftIO (js_noteOff (unAudioBufferSourceNode self) when)
+noteOff self when = liftIO (js_noteOff (self) when)
 pattern UNSCHEDULED_STATE = 0
 pattern SCHEDULED_STATE = 1
 pattern PLAYING_STATE = 2
@@ -83,119 +76,104 @@
  
 foreign import javascript unsafe "$1[\"buffer\"] = $2;"
         js_setBuffer ::
-        JSRef AudioBufferSourceNode -> JSRef AudioBuffer -> IO ()
+        AudioBufferSourceNode -> Nullable AudioBuffer -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioBufferSourceNode.buffer Mozilla AudioBufferSourceNode.buffer documentation> 
 setBuffer ::
           (MonadIO m) => AudioBufferSourceNode -> Maybe AudioBuffer -> m ()
 setBuffer self val
-  = liftIO
-      (js_setBuffer (unAudioBufferSourceNode self)
-         (maybe jsNull pToJSRef val))
+  = liftIO (js_setBuffer (self) (maybeToNullable val))
  
 foreign import javascript unsafe "$1[\"buffer\"]" js_getBuffer ::
-        JSRef AudioBufferSourceNode -> IO (JSRef AudioBuffer)
+        AudioBufferSourceNode -> IO (Nullable AudioBuffer)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioBufferSourceNode.buffer Mozilla AudioBufferSourceNode.buffer documentation> 
 getBuffer ::
           (MonadIO m) => AudioBufferSourceNode -> m (Maybe AudioBuffer)
-getBuffer self
-  = liftIO
-      ((js_getBuffer (unAudioBufferSourceNode self)) >>= fromJSRef)
+getBuffer self = liftIO (nullableToMaybe <$> (js_getBuffer (self)))
  
 foreign import javascript unsafe "$1[\"playbackState\"]"
-        js_getPlaybackState :: JSRef AudioBufferSourceNode -> IO Word
+        js_getPlaybackState :: AudioBufferSourceNode -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioBufferSourceNode.playbackState Mozilla AudioBufferSourceNode.playbackState documentation> 
 getPlaybackState :: (MonadIO m) => AudioBufferSourceNode -> m Word
-getPlaybackState self
-  = liftIO (js_getPlaybackState (unAudioBufferSourceNode self))
+getPlaybackState self = liftIO (js_getPlaybackState (self))
  
 foreign import javascript unsafe "$1[\"gain\"]" js_getGain ::
-        JSRef AudioBufferSourceNode -> IO (JSRef AudioParam)
+        AudioBufferSourceNode -> IO (Nullable AudioParam)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioBufferSourceNode.gain Mozilla AudioBufferSourceNode.gain documentation> 
 getGain ::
         (MonadIO m) => AudioBufferSourceNode -> m (Maybe AudioParam)
-getGain self
-  = liftIO
-      ((js_getGain (unAudioBufferSourceNode self)) >>= fromJSRef)
+getGain self = liftIO (nullableToMaybe <$> (js_getGain (self)))
  
 foreign import javascript unsafe "$1[\"playbackRate\"]"
         js_getPlaybackRate ::
-        JSRef AudioBufferSourceNode -> IO (JSRef AudioParam)
+        AudioBufferSourceNode -> IO (Nullable AudioParam)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioBufferSourceNode.playbackRate Mozilla AudioBufferSourceNode.playbackRate documentation> 
 getPlaybackRate ::
                 (MonadIO m) => AudioBufferSourceNode -> m (Maybe AudioParam)
 getPlaybackRate self
-  = liftIO
-      ((js_getPlaybackRate (unAudioBufferSourceNode self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getPlaybackRate (self)))
  
 foreign import javascript unsafe "$1[\"loop\"] = $2;" js_setLoop ::
-        JSRef AudioBufferSourceNode -> Bool -> IO ()
+        AudioBufferSourceNode -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioBufferSourceNode.loop Mozilla AudioBufferSourceNode.loop documentation> 
 setLoop :: (MonadIO m) => AudioBufferSourceNode -> Bool -> m ()
-setLoop self val
-  = liftIO (js_setLoop (unAudioBufferSourceNode self) val)
+setLoop self val = liftIO (js_setLoop (self) val)
  
 foreign import javascript unsafe "($1[\"loop\"] ? 1 : 0)"
-        js_getLoop :: JSRef AudioBufferSourceNode -> IO Bool
+        js_getLoop :: AudioBufferSourceNode -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioBufferSourceNode.loop Mozilla AudioBufferSourceNode.loop documentation> 
 getLoop :: (MonadIO m) => AudioBufferSourceNode -> m Bool
-getLoop self = liftIO (js_getLoop (unAudioBufferSourceNode self))
+getLoop self = liftIO (js_getLoop (self))
  
 foreign import javascript unsafe "$1[\"loopStart\"] = $2;"
-        js_setLoopStart :: JSRef AudioBufferSourceNode -> Double -> IO ()
+        js_setLoopStart :: AudioBufferSourceNode -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioBufferSourceNode.loopStart Mozilla AudioBufferSourceNode.loopStart documentation> 
 setLoopStart ::
              (MonadIO m) => AudioBufferSourceNode -> Double -> m ()
-setLoopStart self val
-  = liftIO (js_setLoopStart (unAudioBufferSourceNode self) val)
+setLoopStart self val = liftIO (js_setLoopStart (self) val)
  
 foreign import javascript unsafe "$1[\"loopStart\"]"
-        js_getLoopStart :: JSRef AudioBufferSourceNode -> IO Double
+        js_getLoopStart :: AudioBufferSourceNode -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioBufferSourceNode.loopStart Mozilla AudioBufferSourceNode.loopStart documentation> 
 getLoopStart :: (MonadIO m) => AudioBufferSourceNode -> m Double
-getLoopStart self
-  = liftIO (js_getLoopStart (unAudioBufferSourceNode self))
+getLoopStart self = liftIO (js_getLoopStart (self))
  
 foreign import javascript unsafe "$1[\"loopEnd\"] = $2;"
-        js_setLoopEnd :: JSRef AudioBufferSourceNode -> Double -> IO ()
+        js_setLoopEnd :: AudioBufferSourceNode -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioBufferSourceNode.loopEnd Mozilla AudioBufferSourceNode.loopEnd documentation> 
 setLoopEnd ::
            (MonadIO m) => AudioBufferSourceNode -> Double -> m ()
-setLoopEnd self val
-  = liftIO (js_setLoopEnd (unAudioBufferSourceNode self) val)
+setLoopEnd self val = liftIO (js_setLoopEnd (self) val)
  
 foreign import javascript unsafe "$1[\"loopEnd\"]" js_getLoopEnd ::
-        JSRef AudioBufferSourceNode -> IO Double
+        AudioBufferSourceNode -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioBufferSourceNode.loopEnd Mozilla AudioBufferSourceNode.loopEnd documentation> 
 getLoopEnd :: (MonadIO m) => AudioBufferSourceNode -> m Double
-getLoopEnd self
-  = liftIO (js_getLoopEnd (unAudioBufferSourceNode self))
+getLoopEnd self = liftIO (js_getLoopEnd (self))
  
 foreign import javascript unsafe "$1[\"looping\"] = $2;"
-        js_setLooping :: JSRef AudioBufferSourceNode -> Bool -> IO ()
+        js_setLooping :: AudioBufferSourceNode -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioBufferSourceNode.looping Mozilla AudioBufferSourceNode.looping documentation> 
 setLooping :: (MonadIO m) => AudioBufferSourceNode -> Bool -> m ()
-setLooping self val
-  = liftIO (js_setLooping (unAudioBufferSourceNode self) val)
+setLooping self val = liftIO (js_setLooping (self) val)
  
 foreign import javascript unsafe "($1[\"looping\"] ? 1 : 0)"
-        js_getLooping :: JSRef AudioBufferSourceNode -> IO Bool
+        js_getLooping :: AudioBufferSourceNode -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioBufferSourceNode.looping Mozilla AudioBufferSourceNode.looping documentation> 
 getLooping :: (MonadIO m) => AudioBufferSourceNode -> m Bool
-getLooping self
-  = liftIO (js_getLooping (unAudioBufferSourceNode self))
+getLooping self = liftIO (js_getLooping (self))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioBufferSourceNode.onended Mozilla AudioBufferSourceNode.onended documentation> 
 ended :: EventName AudioBufferSourceNode Event
diff --git a/src/GHCJS/DOM/JSFFI/Generated/AudioContext.hs b/src/GHCJS/DOM/JSFFI/Generated/AudioContext.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/AudioContext.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/AudioContext.hs
@@ -27,7 +27,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -42,17 +42,15 @@
  
 foreign import javascript unsafe
         "new (window[\"AudioContext\"]\n||\nwindow[\"webkitAudioContext\"])()"
-        js_newAudioContext :: IO (JSRef AudioContext)
+        js_newAudioContext :: IO AudioContext
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioContext Mozilla AudioContext documentation> 
 newAudioContext :: (MonadIO m) => m AudioContext
-newAudioContext
-  = liftIO (js_newAudioContext >>= fromJSRefUnchecked)
+newAudioContext = liftIO (js_newAudioContext)
  
 foreign import javascript unsafe "$1[\"createBuffer\"]($2, $3, $4)"
         js_createBuffer ::
-        JSRef AudioContext ->
-          Word -> Word -> Float -> IO (JSRef AudioBuffer)
+        AudioContext -> Word -> Word -> Float -> IO (Nullable AudioBuffer)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioContext.createBuffer Mozilla AudioContext.createBuffer documentation> 
 createBuffer ::
@@ -60,16 +58,15 @@
                self -> Word -> Word -> Float -> m (Maybe AudioBuffer)
 createBuffer self numberOfChannels numberOfFrames sampleRate
   = liftIO
-      ((js_createBuffer (unAudioContext (toAudioContext self))
-          numberOfChannels
-          numberOfFrames
-          sampleRate)
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createBuffer (toAudioContext self) numberOfChannels
+            numberOfFrames
+            sampleRate))
  
 foreign import javascript unsafe "$1[\"createBuffer\"]($2, $3)"
         js_createBufferFromArrayBuffer ::
-        JSRef AudioContext ->
-          JSRef ArrayBuffer -> Bool -> IO (JSRef AudioBuffer)
+        AudioContext ->
+          Nullable ArrayBuffer -> Bool -> IO (Nullable AudioBuffer)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioContext.createBuffer Mozilla AudioContext.createBuffer documentation> 
 createBufferFromArrayBuffer ::
@@ -77,17 +74,17 @@
                               self -> Maybe buffer -> Bool -> m (Maybe AudioBuffer)
 createBufferFromArrayBuffer self buffer mixToMono
   = liftIO
-      ((js_createBufferFromArrayBuffer
-          (unAudioContext (toAudioContext self))
-          (maybe jsNull (unArrayBuffer . toArrayBuffer) buffer)
-          mixToMono)
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createBufferFromArrayBuffer (toAudioContext self)
+            (maybeToNullable (fmap toArrayBuffer buffer))
+            mixToMono))
  
 foreign import javascript unsafe
         "$1[\"decodeAudioData\"]($2, $3,\n$4)" js_decodeAudioData ::
-        JSRef AudioContext ->
-          JSRef ArrayBuffer ->
-            JSRef AudioBufferCallback -> JSRef AudioBufferCallback -> IO ()
+        AudioContext ->
+          Nullable ArrayBuffer ->
+            Nullable AudioBufferCallback ->
+              Nullable AudioBufferCallback -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioContext.decodeAudioData Mozilla AudioContext.decodeAudioData documentation> 
 decodeAudioData ::
@@ -97,14 +94,14 @@
                       Maybe AudioBufferCallback -> Maybe AudioBufferCallback -> m ()
 decodeAudioData self audioData successCallback errorCallback
   = liftIO
-      (js_decodeAudioData (unAudioContext (toAudioContext self))
-         (maybe jsNull (unArrayBuffer . toArrayBuffer) audioData)
-         (maybe jsNull pToJSRef successCallback)
-         (maybe jsNull pToJSRef errorCallback))
+      (js_decodeAudioData (toAudioContext self)
+         (maybeToNullable (fmap toArrayBuffer audioData))
+         (maybeToNullable successCallback)
+         (maybeToNullable errorCallback))
  
 foreign import javascript unsafe "$1[\"createBufferSource\"]()"
         js_createBufferSource ::
-        JSRef AudioContext -> IO (JSRef AudioBufferSourceNode)
+        AudioContext -> IO (Nullable AudioBufferSourceNode)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioContext.createBufferSource Mozilla AudioContext.createBufferSource documentation> 
 createBufferSource ::
@@ -112,14 +109,14 @@
                      self -> m (Maybe AudioBufferSourceNode)
 createBufferSource self
   = liftIO
-      ((js_createBufferSource (unAudioContext (toAudioContext self))) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_createBufferSource (toAudioContext self)))
  
 foreign import javascript unsafe
         "$1[\"createMediaElementSource\"]($2)" js_createMediaElementSource
         ::
-        JSRef AudioContext ->
-          JSRef HTMLMediaElement -> IO (JSRef MediaElementAudioSourceNode)
+        AudioContext ->
+          Nullable HTMLMediaElement ->
+            IO (Nullable MediaElementAudioSourceNode)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioContext.createMediaElementSource Mozilla AudioContext.createMediaElementSource documentation> 
 createMediaElementSource ::
@@ -128,16 +125,14 @@
                            self -> Maybe mediaElement -> m (Maybe MediaElementAudioSourceNode)
 createMediaElementSource self mediaElement
   = liftIO
-      ((js_createMediaElementSource
-          (unAudioContext (toAudioContext self))
-          (maybe jsNull (unHTMLMediaElement . toHTMLMediaElement)
-             mediaElement))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createMediaElementSource (toAudioContext self)
+            (maybeToNullable (fmap toHTMLMediaElement mediaElement))))
  
 foreign import javascript unsafe
         "$1[\"createMediaStreamSource\"]($2)" js_createMediaStreamSource ::
-        JSRef AudioContext ->
-          JSRef MediaStream -> IO (JSRef MediaStreamAudioSourceNode)
+        AudioContext ->
+          Nullable MediaStream -> IO (Nullable MediaStreamAudioSourceNode)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioContext.createMediaStreamSource Mozilla AudioContext.createMediaStreamSource documentation> 
 createMediaStreamSource ::
@@ -145,14 +140,14 @@
                           self -> Maybe MediaStream -> m (Maybe MediaStreamAudioSourceNode)
 createMediaStreamSource self mediaStream
   = liftIO
-      ((js_createMediaStreamSource (unAudioContext (toAudioContext self))
-          (maybe jsNull pToJSRef mediaStream))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createMediaStreamSource (toAudioContext self)
+            (maybeToNullable mediaStream)))
  
 foreign import javascript unsafe
         "$1[\"createMediaStreamDestination\"]()"
         js_createMediaStreamDestination ::
-        JSRef AudioContext -> IO (JSRef MediaStreamAudioDestinationNode)
+        AudioContext -> IO (Nullable MediaStreamAudioDestinationNode)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioContext.createMediaStreamDestination Mozilla AudioContext.createMediaStreamDestination documentation> 
 createMediaStreamDestination ::
@@ -160,24 +155,21 @@
                                self -> m (Maybe MediaStreamAudioDestinationNode)
 createMediaStreamDestination self
   = liftIO
-      ((js_createMediaStreamDestination
-          (unAudioContext (toAudioContext self)))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createMediaStreamDestination (toAudioContext self)))
  
 foreign import javascript unsafe "$1[\"createGain\"]()"
-        js_createGain :: JSRef AudioContext -> IO (JSRef GainNode)
+        js_createGain :: AudioContext -> IO (Nullable GainNode)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioContext.createGain Mozilla AudioContext.createGain documentation> 
 createGain ::
            (MonadIO m, IsAudioContext self) => self -> m (Maybe GainNode)
 createGain self
   = liftIO
-      ((js_createGain (unAudioContext (toAudioContext self))) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_createGain (toAudioContext self)))
  
 foreign import javascript unsafe "$1[\"createDelay\"]($2)"
-        js_createDelay ::
-        JSRef AudioContext -> Double -> IO (JSRef DelayNode)
+        js_createDelay :: AudioContext -> Double -> IO (Nullable DelayNode)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioContext.createDelay Mozilla AudioContext.createDelay documentation> 
 createDelay ::
@@ -185,13 +177,12 @@
               self -> Double -> m (Maybe DelayNode)
 createDelay self maxDelayTime
   = liftIO
-      ((js_createDelay (unAudioContext (toAudioContext self))
-          maxDelayTime)
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createDelay (toAudioContext self) maxDelayTime))
  
 foreign import javascript unsafe "$1[\"createBiquadFilter\"]()"
         js_createBiquadFilter ::
-        JSRef AudioContext -> IO (JSRef BiquadFilterNode)
+        AudioContext -> IO (Nullable BiquadFilterNode)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioContext.createBiquadFilter Mozilla AudioContext.createBiquadFilter documentation> 
 createBiquadFilter ::
@@ -199,12 +190,10 @@
                      self -> m (Maybe BiquadFilterNode)
 createBiquadFilter self
   = liftIO
-      ((js_createBiquadFilter (unAudioContext (toAudioContext self))) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_createBiquadFilter (toAudioContext self)))
  
 foreign import javascript unsafe "$1[\"createWaveShaper\"]()"
-        js_createWaveShaper ::
-        JSRef AudioContext -> IO (JSRef WaveShaperNode)
+        js_createWaveShaper :: AudioContext -> IO (Nullable WaveShaperNode)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioContext.createWaveShaper Mozilla AudioContext.createWaveShaper documentation> 
 createWaveShaper ::
@@ -212,35 +201,31 @@
                    self -> m (Maybe WaveShaperNode)
 createWaveShaper self
   = liftIO
-      ((js_createWaveShaper (unAudioContext (toAudioContext self))) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_createWaveShaper (toAudioContext self)))
  
 foreign import javascript unsafe "$1[\"createPanner\"]()"
-        js_createPanner :: JSRef AudioContext -> IO (JSRef PannerNode)
+        js_createPanner :: AudioContext -> IO (Nullable PannerNode)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioContext.createPanner Mozilla AudioContext.createPanner documentation> 
 createPanner ::
              (MonadIO m, IsAudioContext self) => self -> m (Maybe PannerNode)
 createPanner self
   = liftIO
-      ((js_createPanner (unAudioContext (toAudioContext self))) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_createPanner (toAudioContext self)))
  
 foreign import javascript unsafe "$1[\"createConvolver\"]()"
-        js_createConvolver ::
-        JSRef AudioContext -> IO (JSRef ConvolverNode)
+        js_createConvolver :: AudioContext -> IO (Nullable ConvolverNode)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioContext.createConvolver Mozilla AudioContext.createConvolver documentation> 
 createConvolver ::
                 (MonadIO m, IsAudioContext self) => self -> m (Maybe ConvolverNode)
 createConvolver self
   = liftIO
-      ((js_createConvolver (unAudioContext (toAudioContext self))) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_createConvolver (toAudioContext self)))
  
 foreign import javascript unsafe
         "$1[\"createDynamicsCompressor\"]()" js_createDynamicsCompressor ::
-        JSRef AudioContext -> IO (JSRef DynamicsCompressorNode)
+        AudioContext -> IO (Nullable DynamicsCompressorNode)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioContext.createDynamicsCompressor Mozilla AudioContext.createDynamicsCompressor documentation> 
 createDynamicsCompressor ::
@@ -248,26 +233,24 @@
                            self -> m (Maybe DynamicsCompressorNode)
 createDynamicsCompressor self
   = liftIO
-      ((js_createDynamicsCompressor
-          (unAudioContext (toAudioContext self)))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createDynamicsCompressor (toAudioContext self)))
  
 foreign import javascript unsafe "$1[\"createAnalyser\"]()"
-        js_createAnalyser :: JSRef AudioContext -> IO (JSRef AnalyserNode)
+        js_createAnalyser :: AudioContext -> IO (Nullable AnalyserNode)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioContext.createAnalyser Mozilla AudioContext.createAnalyser documentation> 
 createAnalyser ::
                (MonadIO m, IsAudioContext self) => self -> m (Maybe AnalyserNode)
 createAnalyser self
   = liftIO
-      ((js_createAnalyser (unAudioContext (toAudioContext self))) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_createAnalyser (toAudioContext self)))
  
 foreign import javascript unsafe
         "$1[\"createScriptProcessor\"]($2,\n$3, $4)"
         js_createScriptProcessor ::
-        JSRef AudioContext ->
-          Word -> Word -> Word -> IO (JSRef ScriptProcessorNode)
+        AudioContext ->
+          Word -> Word -> Word -> IO (Nullable ScriptProcessorNode)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioContext.createScriptProcessor Mozilla AudioContext.createScriptProcessor documentation> 
 createScriptProcessor ::
@@ -276,15 +259,13 @@
 createScriptProcessor self bufferSize numberOfInputChannels
   numberOfOutputChannels
   = liftIO
-      ((js_createScriptProcessor (unAudioContext (toAudioContext self))
-          bufferSize
-          numberOfInputChannels
-          numberOfOutputChannels)
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createScriptProcessor (toAudioContext self) bufferSize
+            numberOfInputChannels
+            numberOfOutputChannels))
  
 foreign import javascript unsafe "$1[\"createOscillator\"]()"
-        js_createOscillator ::
-        JSRef AudioContext -> IO (JSRef OscillatorNode)
+        js_createOscillator :: AudioContext -> IO (Nullable OscillatorNode)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioContext.createOscillator Mozilla AudioContext.createOscillator documentation> 
 createOscillator ::
@@ -292,13 +273,13 @@
                    self -> m (Maybe OscillatorNode)
 createOscillator self
   = liftIO
-      ((js_createOscillator (unAudioContext (toAudioContext self))) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_createOscillator (toAudioContext self)))
  
 foreign import javascript unsafe
         "$1[\"createPeriodicWave\"]($2, $3)" js_createPeriodicWave ::
-        JSRef AudioContext ->
-          JSRef Float32Array -> JSRef Float32Array -> IO (JSRef PeriodicWave)
+        AudioContext ->
+          Nullable Float32Array ->
+            Nullable Float32Array -> IO (Nullable PeriodicWave)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioContext.createPeriodicWave Mozilla AudioContext.createPeriodicWave documentation> 
 createPeriodicWave ::
@@ -307,14 +288,14 @@
                      self -> Maybe real -> Maybe imag -> m (Maybe PeriodicWave)
 createPeriodicWave self real imag
   = liftIO
-      ((js_createPeriodicWave (unAudioContext (toAudioContext self))
-          (maybe jsNull (unFloat32Array . toFloat32Array) real)
-          (maybe jsNull (unFloat32Array . toFloat32Array) imag))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createPeriodicWave (toAudioContext self)
+            (maybeToNullable (fmap toFloat32Array real))
+            (maybeToNullable (fmap toFloat32Array imag))))
  
 foreign import javascript unsafe
         "$1[\"createChannelSplitter\"]($2)" js_createChannelSplitter ::
-        JSRef AudioContext -> Word -> IO (JSRef ChannelSplitterNode)
+        AudioContext -> Word -> IO (Nullable ChannelSplitterNode)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioContext.createChannelSplitter Mozilla AudioContext.createChannelSplitter documentation> 
 createChannelSplitter ::
@@ -322,13 +303,12 @@
                         self -> Word -> m (Maybe ChannelSplitterNode)
 createChannelSplitter self numberOfOutputs
   = liftIO
-      ((js_createChannelSplitter (unAudioContext (toAudioContext self))
-          numberOfOutputs)
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createChannelSplitter (toAudioContext self) numberOfOutputs))
  
 foreign import javascript unsafe "$1[\"createChannelMerger\"]($2)"
         js_createChannelMerger ::
-        JSRef AudioContext -> Word -> IO (JSRef ChannelMergerNode)
+        AudioContext -> Word -> IO (Nullable ChannelMergerNode)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioContext.createChannelMerger Mozilla AudioContext.createChannelMerger documentation> 
 createChannelMerger ::
@@ -336,32 +316,30 @@
                       self -> Word -> m (Maybe ChannelMergerNode)
 createChannelMerger self numberOfInputs
   = liftIO
-      ((js_createChannelMerger (unAudioContext (toAudioContext self))
-          numberOfInputs)
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createChannelMerger (toAudioContext self) numberOfInputs))
  
 foreign import javascript unsafe "$1[\"startRendering\"]()"
-        js_startRendering :: JSRef AudioContext -> IO ()
+        js_startRendering :: AudioContext -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioContext.startRendering Mozilla AudioContext.startRendering documentation> 
 startRendering :: (MonadIO m, IsAudioContext self) => self -> m ()
 startRendering self
-  = liftIO (js_startRendering (unAudioContext (toAudioContext self)))
+  = liftIO (js_startRendering (toAudioContext self))
  
 foreign import javascript unsafe "$1[\"createGainNode\"]()"
-        js_createGainNode :: JSRef AudioContext -> IO (JSRef GainNode)
+        js_createGainNode :: AudioContext -> IO (Nullable GainNode)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioContext.createGainNode Mozilla AudioContext.createGainNode documentation> 
 createGainNode ::
                (MonadIO m, IsAudioContext self) => self -> m (Maybe GainNode)
 createGainNode self
   = liftIO
-      ((js_createGainNode (unAudioContext (toAudioContext self))) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_createGainNode (toAudioContext self)))
  
 foreign import javascript unsafe "$1[\"createDelayNode\"]($2)"
         js_createDelayNode ::
-        JSRef AudioContext -> Double -> IO (JSRef DelayNode)
+        AudioContext -> Double -> IO (Nullable DelayNode)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioContext.createDelayNode Mozilla AudioContext.createDelayNode documentation> 
 createDelayNode ::
@@ -369,15 +347,14 @@
                   self -> Double -> m (Maybe DelayNode)
 createDelayNode self maxDelayTime
   = liftIO
-      ((js_createDelayNode (unAudioContext (toAudioContext self))
-          maxDelayTime)
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createDelayNode (toAudioContext self) maxDelayTime))
  
 foreign import javascript unsafe
         "$1[\"createJavaScriptNode\"]($2,\n$3, $4)" js_createJavaScriptNode
         ::
-        JSRef AudioContext ->
-          Word -> Word -> Word -> IO (JSRef ScriptProcessorNode)
+        AudioContext ->
+          Word -> Word -> Word -> IO (Nullable ScriptProcessorNode)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioContext.createJavaScriptNode Mozilla AudioContext.createJavaScriptNode documentation> 
 createJavaScriptNode ::
@@ -386,15 +363,14 @@
 createJavaScriptNode self bufferSize numberOfInputChannels
   numberOfOutputChannels
   = liftIO
-      ((js_createJavaScriptNode (unAudioContext (toAudioContext self))
-          bufferSize
-          numberOfInputChannels
-          numberOfOutputChannels)
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createJavaScriptNode (toAudioContext self) bufferSize
+            numberOfInputChannels
+            numberOfOutputChannels))
  
 foreign import javascript unsafe "$1[\"destination\"]"
         js_getDestination ::
-        JSRef AudioContext -> IO (JSRef AudioDestinationNode)
+        AudioContext -> IO (Nullable AudioDestinationNode)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioContext.destination Mozilla AudioContext.destination documentation> 
 getDestination ::
@@ -402,47 +378,44 @@
                  self -> m (Maybe AudioDestinationNode)
 getDestination self
   = liftIO
-      ((js_getDestination (unAudioContext (toAudioContext self))) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_getDestination (toAudioContext self)))
  
 foreign import javascript unsafe "$1[\"currentTime\"]"
-        js_getCurrentTime :: JSRef AudioContext -> IO Double
+        js_getCurrentTime :: AudioContext -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioContext.currentTime Mozilla AudioContext.currentTime documentation> 
 getCurrentTime ::
                (MonadIO m, IsAudioContext self) => self -> m Double
 getCurrentTime self
-  = liftIO (js_getCurrentTime (unAudioContext (toAudioContext self)))
+  = liftIO (js_getCurrentTime (toAudioContext self))
  
 foreign import javascript unsafe "$1[\"sampleRate\"]"
-        js_getSampleRate :: JSRef AudioContext -> IO Float
+        js_getSampleRate :: AudioContext -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioContext.sampleRate Mozilla AudioContext.sampleRate documentation> 
 getSampleRate ::
               (MonadIO m, IsAudioContext self) => self -> m Float
 getSampleRate self
-  = liftIO (js_getSampleRate (unAudioContext (toAudioContext self)))
+  = liftIO (js_getSampleRate (toAudioContext self))
  
 foreign import javascript unsafe "$1[\"listener\"]" js_getListener
-        :: JSRef AudioContext -> IO (JSRef AudioListener)
+        :: AudioContext -> IO (Nullable AudioListener)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioContext.listener Mozilla AudioContext.listener documentation> 
 getListener ::
             (MonadIO m, IsAudioContext self) => self -> m (Maybe AudioListener)
 getListener self
   = liftIO
-      ((js_getListener (unAudioContext (toAudioContext self))) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_getListener (toAudioContext self)))
  
 foreign import javascript unsafe "$1[\"activeSourceCount\"]"
-        js_getActiveSourceCount :: JSRef AudioContext -> IO Word
+        js_getActiveSourceCount :: AudioContext -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioContext.activeSourceCount Mozilla AudioContext.activeSourceCount documentation> 
 getActiveSourceCount ::
                      (MonadIO m, IsAudioContext self) => self -> m Word
 getActiveSourceCount self
-  = liftIO
-      (js_getActiveSourceCount (unAudioContext (toAudioContext self)))
+  = liftIO (js_getActiveSourceCount (toAudioContext self))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioContext.oncomplete Mozilla AudioContext.oncomplete documentation> 
 complete ::
diff --git a/src/GHCJS/DOM/JSFFI/Generated/AudioDestinationNode.hs b/src/GHCJS/DOM/JSFFI/Generated/AudioDestinationNode.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/AudioDestinationNode.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/AudioDestinationNode.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,9 +19,8 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"maxChannelCount\"]"
-        js_getMaxChannelCount :: JSRef AudioDestinationNode -> IO Word
+        js_getMaxChannelCount :: AudioDestinationNode -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioDestinationNode.maxChannelCount Mozilla AudioDestinationNode.maxChannelCount documentation> 
 getMaxChannelCount :: (MonadIO m) => AudioDestinationNode -> m Word
-getMaxChannelCount self
-  = liftIO (js_getMaxChannelCount (unAudioDestinationNode self))
+getMaxChannelCount self = liftIO (js_getMaxChannelCount (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/AudioListener.hs b/src/GHCJS/DOM/JSFFI/Generated/AudioListener.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/AudioListener.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/AudioListener.hs
@@ -8,7 +8,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -22,19 +22,17 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"setPosition\"]($2, $3, $4)"
-        js_setPosition ::
-        JSRef AudioListener -> Float -> Float -> Float -> IO ()
+        js_setPosition :: AudioListener -> Float -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioListener.setPosition Mozilla AudioListener.setPosition documentation> 
 setPosition ::
             (MonadIO m) => AudioListener -> Float -> Float -> Float -> m ()
-setPosition self x y z
-  = liftIO (js_setPosition (unAudioListener self) x y z)
+setPosition self x y z = liftIO (js_setPosition (self) x y z)
  
 foreign import javascript unsafe
         "$1[\"setOrientation\"]($2, $3, $4,\n$5, $6, $7)" js_setOrientation
         ::
-        JSRef AudioListener ->
+        AudioListener ->
           Float -> Float -> Float -> Float -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioListener.setOrientation Mozilla AudioListener.setOrientation documentation> 
@@ -43,47 +41,40 @@
                  AudioListener ->
                    Float -> Float -> Float -> Float -> Float -> Float -> m ()
 setOrientation self x y z xUp yUp zUp
-  = liftIO
-      (js_setOrientation (unAudioListener self) x y z xUp yUp zUp)
+  = liftIO (js_setOrientation (self) x y z xUp yUp zUp)
  
 foreign import javascript unsafe "$1[\"setVelocity\"]($2, $3, $4)"
-        js_setVelocity ::
-        JSRef AudioListener -> Float -> Float -> Float -> IO ()
+        js_setVelocity :: AudioListener -> Float -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioListener.setVelocity Mozilla AudioListener.setVelocity documentation> 
 setVelocity ::
             (MonadIO m) => AudioListener -> Float -> Float -> Float -> m ()
-setVelocity self x y z
-  = liftIO (js_setVelocity (unAudioListener self) x y z)
+setVelocity self x y z = liftIO (js_setVelocity (self) x y z)
  
 foreign import javascript unsafe "$1[\"dopplerFactor\"] = $2;"
-        js_setDopplerFactor :: JSRef AudioListener -> Float -> IO ()
+        js_setDopplerFactor :: AudioListener -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioListener.dopplerFactor Mozilla AudioListener.dopplerFactor documentation> 
 setDopplerFactor :: (MonadIO m) => AudioListener -> Float -> m ()
-setDopplerFactor self val
-  = liftIO (js_setDopplerFactor (unAudioListener self) val)
+setDopplerFactor self val = liftIO (js_setDopplerFactor (self) val)
  
 foreign import javascript unsafe "$1[\"dopplerFactor\"]"
-        js_getDopplerFactor :: JSRef AudioListener -> IO Float
+        js_getDopplerFactor :: AudioListener -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioListener.dopplerFactor Mozilla AudioListener.dopplerFactor documentation> 
 getDopplerFactor :: (MonadIO m) => AudioListener -> m Float
-getDopplerFactor self
-  = liftIO (js_getDopplerFactor (unAudioListener self))
+getDopplerFactor self = liftIO (js_getDopplerFactor (self))
  
 foreign import javascript unsafe "$1[\"speedOfSound\"] = $2;"
-        js_setSpeedOfSound :: JSRef AudioListener -> Float -> IO ()
+        js_setSpeedOfSound :: AudioListener -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioListener.speedOfSound Mozilla AudioListener.speedOfSound documentation> 
 setSpeedOfSound :: (MonadIO m) => AudioListener -> Float -> m ()
-setSpeedOfSound self val
-  = liftIO (js_setSpeedOfSound (unAudioListener self) val)
+setSpeedOfSound self val = liftIO (js_setSpeedOfSound (self) val)
  
 foreign import javascript unsafe "$1[\"speedOfSound\"]"
-        js_getSpeedOfSound :: JSRef AudioListener -> IO Float
+        js_getSpeedOfSound :: AudioListener -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioListener.speedOfSound Mozilla AudioListener.speedOfSound documentation> 
 getSpeedOfSound :: (MonadIO m) => AudioListener -> m Float
-getSpeedOfSound self
-  = liftIO (js_getSpeedOfSound (unAudioListener self))
+getSpeedOfSound self = liftIO (js_getSpeedOfSound (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/AudioNode.hs b/src/GHCJS/DOM/JSFFI/Generated/AudioNode.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/AudioNode.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/AudioNode.hs
@@ -12,7 +12,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -27,7 +27,7 @@
  
 foreign import javascript unsafe "$1[\"connect\"]($2, $3, $4)"
         js_connect ::
-        JSRef AudioNode -> JSRef AudioNode -> Word -> Word -> IO ()
+        AudioNode -> Nullable AudioNode -> Word -> Word -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioNode.connect Mozilla AudioNode.connect documentation> 
 connect ::
@@ -35,14 +35,14 @@
           self -> Maybe destination -> Word -> Word -> m ()
 connect self destination output input
   = liftIO
-      (js_connect (unAudioNode (toAudioNode self))
-         (maybe jsNull (unAudioNode . toAudioNode) destination)
+      (js_connect (toAudioNode self)
+         (maybeToNullable (fmap toAudioNode destination))
          output
          input)
  
 foreign import javascript unsafe "$1[\"connect\"]($2, $3)"
         js_connectParam ::
-        JSRef AudioNode -> JSRef AudioParam -> Word -> IO ()
+        AudioNode -> Nullable AudioParam -> Word -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioNode.connect Mozilla AudioNode.connect documentation> 
 connectParam ::
@@ -50,65 +50,63 @@
                self -> Maybe AudioParam -> Word -> m ()
 connectParam self destination output
   = liftIO
-      (js_connectParam (unAudioNode (toAudioNode self))
-         (maybe jsNull pToJSRef destination)
+      (js_connectParam (toAudioNode self) (maybeToNullable destination)
          output)
  
 foreign import javascript unsafe "$1[\"disconnect\"]($2)"
-        js_disconnect :: JSRef AudioNode -> Word -> IO ()
+        js_disconnect :: AudioNode -> Word -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioNode.disconnect Mozilla AudioNode.disconnect documentation> 
 disconnect :: (MonadIO m, IsAudioNode self) => self -> Word -> m ()
 disconnect self output
-  = liftIO (js_disconnect (unAudioNode (toAudioNode self)) output)
+  = liftIO (js_disconnect (toAudioNode self) output)
  
 foreign import javascript unsafe "$1[\"context\"]" js_getContext ::
-        JSRef AudioNode -> IO (JSRef AudioContext)
+        AudioNode -> IO (Nullable AudioContext)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioNode.context Mozilla AudioNode.context documentation> 
 getContext ::
            (MonadIO m, IsAudioNode self) => self -> m (Maybe AudioContext)
 getContext self
-  = liftIO
-      ((js_getContext (unAudioNode (toAudioNode self))) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getContext (toAudioNode self)))
  
 foreign import javascript unsafe "$1[\"numberOfInputs\"]"
-        js_getNumberOfInputs :: JSRef AudioNode -> IO Word
+        js_getNumberOfInputs :: AudioNode -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioNode.numberOfInputs Mozilla AudioNode.numberOfInputs documentation> 
 getNumberOfInputs ::
                   (MonadIO m, IsAudioNode self) => self -> m Word
 getNumberOfInputs self
-  = liftIO (js_getNumberOfInputs (unAudioNode (toAudioNode self)))
+  = liftIO (js_getNumberOfInputs (toAudioNode self))
  
 foreign import javascript unsafe "$1[\"numberOfOutputs\"]"
-        js_getNumberOfOutputs :: JSRef AudioNode -> IO Word
+        js_getNumberOfOutputs :: AudioNode -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioNode.numberOfOutputs Mozilla AudioNode.numberOfOutputs documentation> 
 getNumberOfOutputs ::
                    (MonadIO m, IsAudioNode self) => self -> m Word
 getNumberOfOutputs self
-  = liftIO (js_getNumberOfOutputs (unAudioNode (toAudioNode self)))
+  = liftIO (js_getNumberOfOutputs (toAudioNode self))
  
 foreign import javascript unsafe "$1[\"channelCount\"] = $2;"
-        js_setChannelCount :: JSRef AudioNode -> Word -> IO ()
+        js_setChannelCount :: AudioNode -> Word -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioNode.channelCount Mozilla AudioNode.channelCount documentation> 
 setChannelCount ::
                 (MonadIO m, IsAudioNode self) => self -> Word -> m ()
 setChannelCount self val
-  = liftIO (js_setChannelCount (unAudioNode (toAudioNode self)) val)
+  = liftIO (js_setChannelCount (toAudioNode self) val)
  
 foreign import javascript unsafe "$1[\"channelCount\"]"
-        js_getChannelCount :: JSRef AudioNode -> IO Word
+        js_getChannelCount :: AudioNode -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioNode.channelCount Mozilla AudioNode.channelCount documentation> 
 getChannelCount :: (MonadIO m, IsAudioNode self) => self -> m Word
 getChannelCount self
-  = liftIO (js_getChannelCount (unAudioNode (toAudioNode self)))
+  = liftIO (js_getChannelCount (toAudioNode self))
  
 foreign import javascript unsafe "$1[\"channelCountMode\"] = $2;"
-        js_setChannelCountMode :: JSRef AudioNode -> JSString -> IO ()
+        js_setChannelCountMode :: AudioNode -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioNode.channelCountMode Mozilla AudioNode.channelCountMode documentation> 
 setChannelCountMode ::
@@ -116,11 +114,10 @@
                       self -> val -> m ()
 setChannelCountMode self val
   = liftIO
-      (js_setChannelCountMode (unAudioNode (toAudioNode self))
-         (toJSString val))
+      (js_setChannelCountMode (toAudioNode self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"channelCountMode\"]"
-        js_getChannelCountMode :: JSRef AudioNode -> IO JSString
+        js_getChannelCountMode :: AudioNode -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioNode.channelCountMode Mozilla AudioNode.channelCountMode documentation> 
 getChannelCountMode ::
@@ -128,12 +125,11 @@
                       self -> m result
 getChannelCountMode self
   = liftIO
-      (fromJSString <$>
-         (js_getChannelCountMode (unAudioNode (toAudioNode self))))
+      (fromJSString <$> (js_getChannelCountMode (toAudioNode self)))
  
 foreign import javascript unsafe
         "$1[\"channelInterpretation\"] = $2;" js_setChannelInterpretation
-        :: JSRef AudioNode -> JSString -> IO ()
+        :: AudioNode -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioNode.channelInterpretation Mozilla AudioNode.channelInterpretation documentation> 
 setChannelInterpretation ::
@@ -141,11 +137,10 @@
                            self -> val -> m ()
 setChannelInterpretation self val
   = liftIO
-      (js_setChannelInterpretation (unAudioNode (toAudioNode self))
-         (toJSString val))
+      (js_setChannelInterpretation (toAudioNode self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"channelInterpretation\"]"
-        js_getChannelInterpretation :: JSRef AudioNode -> IO JSString
+        js_getChannelInterpretation :: AudioNode -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioNode.channelInterpretation Mozilla AudioNode.channelInterpretation documentation> 
 getChannelInterpretation ::
@@ -153,5 +148,4 @@
                            self -> m result
 getChannelInterpretation self
   = liftIO
-      (fromJSString <$>
-         (js_getChannelInterpretation (unAudioNode (toAudioNode self))))
+      (fromJSString <$> (js_getChannelInterpretation (toAudioNode self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/AudioParam.hs b/src/GHCJS/DOM/JSFFI/Generated/AudioParam.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/AudioParam.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/AudioParam.hs
@@ -13,7 +13,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -27,53 +27,48 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"setValueAtTime\"]($2, $3)"
-        js_setValueAtTime :: JSRef AudioParam -> Float -> Float -> IO ()
+        js_setValueAtTime :: AudioParam -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioParam.setValueAtTime Mozilla AudioParam.setValueAtTime documentation> 
 setValueAtTime ::
                (MonadIO m) => AudioParam -> Float -> Float -> m ()
 setValueAtTime self value time
-  = liftIO (js_setValueAtTime (unAudioParam self) value time)
+  = liftIO (js_setValueAtTime (self) value time)
  
 foreign import javascript unsafe
         "$1[\"linearRampToValueAtTime\"]($2,\n$3)"
-        js_linearRampToValueAtTime ::
-        JSRef AudioParam -> Float -> Float -> IO ()
+        js_linearRampToValueAtTime :: AudioParam -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioParam.linearRampToValueAtTime Mozilla AudioParam.linearRampToValueAtTime documentation> 
 linearRampToValueAtTime ::
                         (MonadIO m) => AudioParam -> Float -> Float -> m ()
 linearRampToValueAtTime self value time
-  = liftIO
-      (js_linearRampToValueAtTime (unAudioParam self) value time)
+  = liftIO (js_linearRampToValueAtTime (self) value time)
  
 foreign import javascript unsafe
         "$1[\"exponentialRampToValueAtTime\"]($2,\n$3)"
         js_exponentialRampToValueAtTime ::
-        JSRef AudioParam -> Float -> Float -> IO ()
+        AudioParam -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioParam.exponentialRampToValueAtTime Mozilla AudioParam.exponentialRampToValueAtTime documentation> 
 exponentialRampToValueAtTime ::
                              (MonadIO m) => AudioParam -> Float -> Float -> m ()
 exponentialRampToValueAtTime self value time
-  = liftIO
-      (js_exponentialRampToValueAtTime (unAudioParam self) value time)
+  = liftIO (js_exponentialRampToValueAtTime (self) value time)
  
 foreign import javascript unsafe
         "$1[\"setTargetAtTime\"]($2, $3,\n$4)" js_setTargetAtTime ::
-        JSRef AudioParam -> Float -> Float -> Float -> IO ()
+        AudioParam -> Float -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioParam.setTargetAtTime Mozilla AudioParam.setTargetAtTime documentation> 
 setTargetAtTime ::
                 (MonadIO m) => AudioParam -> Float -> Float -> Float -> m ()
 setTargetAtTime self target time timeConstant
-  = liftIO
-      (js_setTargetAtTime (unAudioParam self) target time timeConstant)
+  = liftIO (js_setTargetAtTime (self) target time timeConstant)
  
 foreign import javascript unsafe
         "$1[\"setValueCurveAtTime\"]($2,\n$3, $4)" js_setValueCurveAtTime
-        ::
-        JSRef AudioParam -> JSRef Float32Array -> Float -> Float -> IO ()
+        :: AudioParam -> Nullable Float32Array -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioParam.setValueCurveAtTime Mozilla AudioParam.setValueCurveAtTime documentation> 
 setValueCurveAtTime ::
@@ -81,80 +76,77 @@
                       AudioParam -> Maybe values -> Float -> Float -> m ()
 setValueCurveAtTime self values time duration
   = liftIO
-      (js_setValueCurveAtTime (unAudioParam self)
-         (maybe jsNull (unFloat32Array . toFloat32Array) values)
+      (js_setValueCurveAtTime (self)
+         (maybeToNullable (fmap toFloat32Array values))
          time
          duration)
  
 foreign import javascript unsafe
         "$1[\"cancelScheduledValues\"]($2)" js_cancelScheduledValues ::
-        JSRef AudioParam -> Float -> IO ()
+        AudioParam -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioParam.cancelScheduledValues Mozilla AudioParam.cancelScheduledValues documentation> 
 cancelScheduledValues :: (MonadIO m) => AudioParam -> Float -> m ()
 cancelScheduledValues self startTime
-  = liftIO (js_cancelScheduledValues (unAudioParam self) startTime)
+  = liftIO (js_cancelScheduledValues (self) startTime)
  
 foreign import javascript unsafe
         "$1[\"setTargetValueAtTime\"]($2,\n$3, $4)" js_setTargetValueAtTime
-        :: JSRef AudioParam -> Float -> Float -> Float -> IO ()
+        :: AudioParam -> Float -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioParam.setTargetValueAtTime Mozilla AudioParam.setTargetValueAtTime documentation> 
 setTargetValueAtTime ::
                      (MonadIO m) => AudioParam -> Float -> Float -> Float -> m ()
 setTargetValueAtTime self targetValue time timeConstant
   = liftIO
-      (js_setTargetValueAtTime (unAudioParam self) targetValue time
-         timeConstant)
+      (js_setTargetValueAtTime (self) targetValue time timeConstant)
  
 foreign import javascript unsafe "$1[\"value\"] = $2;" js_setValue
-        :: JSRef AudioParam -> Float -> IO ()
+        :: AudioParam -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioParam.value Mozilla AudioParam.value documentation> 
 setValue :: (MonadIO m) => AudioParam -> Float -> m ()
-setValue self val = liftIO (js_setValue (unAudioParam self) val)
+setValue self val = liftIO (js_setValue (self) val)
  
 foreign import javascript unsafe "$1[\"value\"]" js_getValue ::
-        JSRef AudioParam -> IO Float
+        AudioParam -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioParam.value Mozilla AudioParam.value documentation> 
 getValue :: (MonadIO m) => AudioParam -> m Float
-getValue self = liftIO (js_getValue (unAudioParam self))
+getValue self = liftIO (js_getValue (self))
  
 foreign import javascript unsafe "$1[\"minValue\"]" js_getMinValue
-        :: JSRef AudioParam -> IO Float
+        :: AudioParam -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioParam.minValue Mozilla AudioParam.minValue documentation> 
 getMinValue :: (MonadIO m) => AudioParam -> m Float
-getMinValue self = liftIO (js_getMinValue (unAudioParam self))
+getMinValue self = liftIO (js_getMinValue (self))
  
 foreign import javascript unsafe "$1[\"maxValue\"]" js_getMaxValue
-        :: JSRef AudioParam -> IO Float
+        :: AudioParam -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioParam.maxValue Mozilla AudioParam.maxValue documentation> 
 getMaxValue :: (MonadIO m) => AudioParam -> m Float
-getMaxValue self = liftIO (js_getMaxValue (unAudioParam self))
+getMaxValue self = liftIO (js_getMaxValue (self))
  
 foreign import javascript unsafe "$1[\"defaultValue\"]"
-        js_getDefaultValue :: JSRef AudioParam -> IO Float
+        js_getDefaultValue :: AudioParam -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioParam.defaultValue Mozilla AudioParam.defaultValue documentation> 
 getDefaultValue :: (MonadIO m) => AudioParam -> m Float
-getDefaultValue self
-  = liftIO (js_getDefaultValue (unAudioParam self))
+getDefaultValue self = liftIO (js_getDefaultValue (self))
  
 foreign import javascript unsafe "$1[\"name\"]" js_getName ::
-        JSRef AudioParam -> IO JSString
+        AudioParam -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioParam.name Mozilla AudioParam.name documentation> 
 getName ::
         (MonadIO m, FromJSString result) => AudioParam -> m result
-getName self
-  = liftIO (fromJSString <$> (js_getName (unAudioParam self)))
+getName self = liftIO (fromJSString <$> (js_getName (self)))
  
 foreign import javascript unsafe "$1[\"units\"]" js_getUnits ::
-        JSRef AudioParam -> IO Word
+        AudioParam -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioParam.units Mozilla AudioParam.units documentation> 
 getUnits :: (MonadIO m) => AudioParam -> m Word
-getUnits self = liftIO (js_getUnits (unAudioParam self))
+getUnits self = liftIO (js_getUnits (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/AudioProcessingEvent.hs b/src/GHCJS/DOM/JSFFI/Generated/AudioProcessingEvent.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/AudioProcessingEvent.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/AudioProcessingEvent.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -21,31 +21,28 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"playbackTime\"]"
-        js_getPlaybackTime :: JSRef AudioProcessingEvent -> IO Double
+        js_getPlaybackTime :: AudioProcessingEvent -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioProcessingEvent.playbackTime Mozilla AudioProcessingEvent.playbackTime documentation> 
 getPlaybackTime :: (MonadIO m) => AudioProcessingEvent -> m Double
-getPlaybackTime self
-  = liftIO (js_getPlaybackTime (unAudioProcessingEvent self))
+getPlaybackTime self = liftIO (js_getPlaybackTime (self))
  
 foreign import javascript unsafe "$1[\"inputBuffer\"]"
         js_getInputBuffer ::
-        JSRef AudioProcessingEvent -> IO (JSRef AudioBuffer)
+        AudioProcessingEvent -> IO (Nullable AudioBuffer)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioProcessingEvent.inputBuffer Mozilla AudioProcessingEvent.inputBuffer documentation> 
 getInputBuffer ::
                (MonadIO m) => AudioProcessingEvent -> m (Maybe AudioBuffer)
 getInputBuffer self
-  = liftIO
-      ((js_getInputBuffer (unAudioProcessingEvent self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getInputBuffer (self)))
  
 foreign import javascript unsafe "$1[\"outputBuffer\"]"
         js_getOutputBuffer ::
-        JSRef AudioProcessingEvent -> IO (JSRef AudioBuffer)
+        AudioProcessingEvent -> IO (Nullable AudioBuffer)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioProcessingEvent.outputBuffer Mozilla AudioProcessingEvent.outputBuffer documentation> 
 getOutputBuffer ::
                 (MonadIO m) => AudioProcessingEvent -> m (Maybe AudioBuffer)
 getOutputBuffer self
-  = liftIO
-      ((js_getOutputBuffer (unAudioProcessingEvent self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getOutputBuffer (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/AudioStreamTrack.hs b/src/GHCJS/DOM/JSFFI/Generated/AudioStreamTrack.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/AudioStreamTrack.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/AudioStreamTrack.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,7 +20,7 @@
  
 foreign import javascript unsafe
         "new window[\"AudioStreamTrack\"]($1)" js_newAudioStreamTrack ::
-        JSRef Dictionary -> IO (JSRef AudioStreamTrack)
+        Nullable Dictionary -> IO AudioStreamTrack
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioStreamTrack Mozilla AudioStreamTrack documentation> 
 newAudioStreamTrack ::
@@ -29,5 +29,4 @@
 newAudioStreamTrack audioConstraints
   = liftIO
       (js_newAudioStreamTrack
-         (maybe jsNull (unDictionary . toDictionary) audioConstraints)
-         >>= fromJSRefUnchecked)
+         (maybeToNullable (fmap toDictionary audioConstraints)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/AudioTrack.hs b/src/GHCJS/DOM/JSFFI/Generated/AudioTrack.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/AudioTrack.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/AudioTrack.hs
@@ -8,7 +8,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -22,77 +22,72 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"id\"]" js_getId ::
-        JSRef AudioTrack -> IO JSString
+        AudioTrack -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioTrack.id Mozilla AudioTrack.id documentation> 
 getId :: (MonadIO m, FromJSString result) => AudioTrack -> m result
-getId self
-  = liftIO (fromJSString <$> (js_getId (unAudioTrack self)))
+getId self = liftIO (fromJSString <$> (js_getId (self)))
  
 foreign import javascript unsafe "$1[\"kind\"] = $2;" js_setKind ::
-        JSRef AudioTrack -> JSString -> IO ()
+        AudioTrack -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioTrack.kind Mozilla AudioTrack.kind documentation> 
 setKind :: (MonadIO m, ToJSString val) => AudioTrack -> val -> m ()
-setKind self val
-  = liftIO (js_setKind (unAudioTrack self) (toJSString val))
+setKind self val = liftIO (js_setKind (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"kind\"]" js_getKind ::
-        JSRef AudioTrack -> IO JSString
+        AudioTrack -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioTrack.kind Mozilla AudioTrack.kind documentation> 
 getKind ::
         (MonadIO m, FromJSString result) => AudioTrack -> m result
-getKind self
-  = liftIO (fromJSString <$> (js_getKind (unAudioTrack self)))
+getKind self = liftIO (fromJSString <$> (js_getKind (self)))
  
 foreign import javascript unsafe "$1[\"label\"]" js_getLabel ::
-        JSRef AudioTrack -> IO JSString
+        AudioTrack -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioTrack.label Mozilla AudioTrack.label documentation> 
 getLabel ::
          (MonadIO m, FromJSString result) => AudioTrack -> m result
-getLabel self
-  = liftIO (fromJSString <$> (js_getLabel (unAudioTrack self)))
+getLabel self = liftIO (fromJSString <$> (js_getLabel (self)))
  
 foreign import javascript unsafe "$1[\"language\"] = $2;"
-        js_setLanguage :: JSRef AudioTrack -> JSString -> IO ()
+        js_setLanguage :: AudioTrack -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioTrack.language Mozilla AudioTrack.language documentation> 
 setLanguage ::
             (MonadIO m, ToJSString val) => AudioTrack -> val -> m ()
 setLanguage self val
-  = liftIO (js_setLanguage (unAudioTrack self) (toJSString val))
+  = liftIO (js_setLanguage (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"language\"]" js_getLanguage
-        :: JSRef AudioTrack -> IO JSString
+        :: AudioTrack -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioTrack.language Mozilla AudioTrack.language documentation> 
 getLanguage ::
             (MonadIO m, FromJSString result) => AudioTrack -> m result
 getLanguage self
-  = liftIO (fromJSString <$> (js_getLanguage (unAudioTrack self)))
+  = liftIO (fromJSString <$> (js_getLanguage (self)))
  
 foreign import javascript unsafe "$1[\"enabled\"] = $2;"
-        js_setEnabled :: JSRef AudioTrack -> Bool -> IO ()
+        js_setEnabled :: AudioTrack -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioTrack.enabled Mozilla AudioTrack.enabled documentation> 
 setEnabled :: (MonadIO m) => AudioTrack -> Bool -> m ()
-setEnabled self val
-  = liftIO (js_setEnabled (unAudioTrack self) val)
+setEnabled self val = liftIO (js_setEnabled (self) val)
  
 foreign import javascript unsafe "($1[\"enabled\"] ? 1 : 0)"
-        js_getEnabled :: JSRef AudioTrack -> IO Bool
+        js_getEnabled :: AudioTrack -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioTrack.enabled Mozilla AudioTrack.enabled documentation> 
 getEnabled :: (MonadIO m) => AudioTrack -> m Bool
-getEnabled self = liftIO (js_getEnabled (unAudioTrack self))
+getEnabled self = liftIO (js_getEnabled (self))
  
 foreign import javascript unsafe "$1[\"sourceBuffer\"]"
-        js_getSourceBuffer :: JSRef AudioTrack -> IO (JSRef SourceBuffer)
+        js_getSourceBuffer :: AudioTrack -> IO (Nullable SourceBuffer)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioTrack.sourceBuffer Mozilla AudioTrack.sourceBuffer documentation> 
 getSourceBuffer ::
                 (MonadIO m) => AudioTrack -> m (Maybe SourceBuffer)
 getSourceBuffer self
-  = liftIO ((js_getSourceBuffer (unAudioTrack self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getSourceBuffer (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/AudioTrackList.hs b/src/GHCJS/DOM/JSFFI/Generated/AudioTrackList.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/AudioTrackList.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/AudioTrackList.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,17 +20,17 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"item\"]($2)" js_item ::
-        JSRef AudioTrackList -> Word -> IO (JSRef AudioTrack)
+        AudioTrackList -> Word -> IO (Nullable AudioTrack)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioTrackList.item Mozilla AudioTrackList.item documentation> 
 item ::
      (MonadIO m) => AudioTrackList -> Word -> m (Maybe AudioTrack)
 item self index
-  = liftIO ((js_item (unAudioTrackList self) index) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_item (self) index))
  
 foreign import javascript unsafe "$1[\"getTrackById\"]($2)"
         js_getTrackById ::
-        JSRef AudioTrackList -> JSString -> IO (JSRef AudioTrack)
+        AudioTrackList -> JSString -> IO (Nullable AudioTrack)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioTrackList.getTrackById Mozilla AudioTrackList.getTrackById documentation> 
 getTrackById ::
@@ -38,15 +38,14 @@
                AudioTrackList -> id -> m (Maybe AudioTrack)
 getTrackById self id
   = liftIO
-      ((js_getTrackById (unAudioTrackList self) (toJSString id)) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_getTrackById (self) (toJSString id)))
  
 foreign import javascript unsafe "$1[\"length\"]" js_getLength ::
-        JSRef AudioTrackList -> IO Word
+        AudioTrackList -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioTrackList.length Mozilla AudioTrackList.length documentation> 
 getLength :: (MonadIO m) => AudioTrackList -> m Word
-getLength self = liftIO (js_getLength (unAudioTrackList self))
+getLength self = liftIO (js_getLength (self))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AudioTrackList.onchange Mozilla AudioTrackList.onchange documentation> 
 change :: EventName AudioTrackList Event
diff --git a/src/GHCJS/DOM/JSFFI/Generated/AutocompleteErrorEvent.hs b/src/GHCJS/DOM/JSFFI/Generated/AutocompleteErrorEvent.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/AutocompleteErrorEvent.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/AutocompleteErrorEvent.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,12 +19,10 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"reason\"]" js_getReason ::
-        JSRef AutocompleteErrorEvent -> IO JSString
+        AutocompleteErrorEvent -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/AutocompleteErrorEvent.reason Mozilla AutocompleteErrorEvent.reason documentation> 
 getReason ::
           (MonadIO m, FromJSString result) =>
             AutocompleteErrorEvent -> m result
-getReason self
-  = liftIO
-      (fromJSString <$> (js_getReason (unAutocompleteErrorEvent self)))
+getReason self = liftIO (fromJSString <$> (js_getReason (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/BarProp.hs b/src/GHCJS/DOM/JSFFI/Generated/BarProp.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/BarProp.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/BarProp.hs
@@ -4,7 +4,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -18,8 +18,8 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "($1[\"visible\"] ? 1 : 0)"
-        js_getVisible :: JSRef BarProp -> IO Bool
+        js_getVisible :: BarProp -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/BarProp.visible Mozilla BarProp.visible documentation> 
 getVisible :: (MonadIO m) => BarProp -> m Bool
-getVisible self = liftIO (js_getVisible (unBarProp self))
+getVisible self = liftIO (js_getVisible (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/BatteryManager.hs b/src/GHCJS/DOM/JSFFI/Generated/BatteryManager.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/BatteryManager.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/BatteryManager.hs
@@ -8,7 +8,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -22,34 +22,32 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "($1[\"charging\"] ? 1 : 0)"
-        js_getCharging :: JSRef BatteryManager -> IO Bool
+        js_getCharging :: BatteryManager -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/BatteryManager.charging Mozilla BatteryManager.charging documentation> 
 getCharging :: (MonadIO m) => BatteryManager -> m Bool
-getCharging self = liftIO (js_getCharging (unBatteryManager self))
+getCharging self = liftIO (js_getCharging (self))
  
 foreign import javascript unsafe "$1[\"chargingTime\"]"
-        js_getChargingTime :: JSRef BatteryManager -> IO Double
+        js_getChargingTime :: BatteryManager -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/BatteryManager.chargingTime Mozilla BatteryManager.chargingTime documentation> 
 getChargingTime :: (MonadIO m) => BatteryManager -> m Double
-getChargingTime self
-  = liftIO (js_getChargingTime (unBatteryManager self))
+getChargingTime self = liftIO (js_getChargingTime (self))
  
 foreign import javascript unsafe "$1[\"dischargingTime\"]"
-        js_getDischargingTime :: JSRef BatteryManager -> IO Double
+        js_getDischargingTime :: BatteryManager -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/BatteryManager.dischargingTime Mozilla BatteryManager.dischargingTime documentation> 
 getDischargingTime :: (MonadIO m) => BatteryManager -> m Double
-getDischargingTime self
-  = liftIO (js_getDischargingTime (unBatteryManager self))
+getDischargingTime self = liftIO (js_getDischargingTime (self))
  
 foreign import javascript unsafe "$1[\"level\"]" js_getLevel ::
-        JSRef BatteryManager -> IO Double
+        BatteryManager -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/BatteryManager.level Mozilla BatteryManager.level documentation> 
 getLevel :: (MonadIO m) => BatteryManager -> m Double
-getLevel self = liftIO (js_getLevel (unBatteryManager self))
+getLevel self = liftIO (js_getLevel (self))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/BatteryManager.onchargingchange Mozilla BatteryManager.onchargingchange documentation> 
 chargingChange :: EventName BatteryManager Event
diff --git a/src/GHCJS/DOM/JSFFI/Generated/BeforeLoadEvent.hs b/src/GHCJS/DOM/JSFFI/Generated/BeforeLoadEvent.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/BeforeLoadEvent.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/BeforeLoadEvent.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,10 +19,9 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"url\"]" js_getUrl ::
-        JSRef BeforeLoadEvent -> IO JSString
+        BeforeLoadEvent -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/BeforeLoadEvent.url Mozilla BeforeLoadEvent.url documentation> 
 getUrl ::
        (MonadIO m, FromJSString result) => BeforeLoadEvent -> m result
-getUrl self
-  = liftIO (fromJSString <$> (js_getUrl (unBeforeLoadEvent self)))
+getUrl self = liftIO (fromJSString <$> (js_getUrl (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/BeforeUnloadEvent.hs b/src/GHCJS/DOM/JSFFI/Generated/BeforeUnloadEvent.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/BeforeUnloadEvent.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/BeforeUnloadEvent.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,21 +20,19 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"returnValue\"] = $2;"
-        js_setReturnValue :: JSRef BeforeUnloadEvent -> JSString -> IO ()
+        js_setReturnValue :: BeforeUnloadEvent -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/BeforeUnloadEvent.returnValue Mozilla BeforeUnloadEvent.returnValue documentation> 
 setReturnValue ::
                (MonadIO m, ToJSString val) => BeforeUnloadEvent -> val -> m ()
 setReturnValue self val
-  = liftIO
-      (js_setReturnValue (unBeforeUnloadEvent self) (toJSString val))
+  = liftIO (js_setReturnValue (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"returnValue\"]"
-        js_getReturnValue :: JSRef BeforeUnloadEvent -> IO JSString
+        js_getReturnValue :: BeforeUnloadEvent -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/BeforeUnloadEvent.returnValue Mozilla BeforeUnloadEvent.returnValue documentation> 
 getReturnValue ::
                (MonadIO m, FromJSString result) => BeforeUnloadEvent -> m result
 getReturnValue self
-  = liftIO
-      (fromJSString <$> (js_getReturnValue (unBeforeUnloadEvent self)))
+  = liftIO (fromJSString <$> (js_getReturnValue (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/BiquadFilterNode.hs b/src/GHCJS/DOM/JSFFI/Generated/BiquadFilterNode.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/BiquadFilterNode.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/BiquadFilterNode.hs
@@ -10,7 +10,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -26,9 +26,9 @@
 foreign import javascript unsafe
         "$1[\"getFrequencyResponse\"]($2,\n$3, $4)" js_getFrequencyResponse
         ::
-        JSRef BiquadFilterNode ->
-          JSRef Float32Array ->
-            JSRef Float32Array -> JSRef Float32Array -> IO ()
+        BiquadFilterNode ->
+          Nullable Float32Array ->
+            Nullable Float32Array -> Nullable Float32Array -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/BiquadFilterNode.getFrequencyResponse Mozilla BiquadFilterNode.getFrequencyResponse documentation> 
 getFrequencyResponse ::
@@ -39,10 +39,10 @@
                            Maybe magResponse -> Maybe phaseResponse -> m ()
 getFrequencyResponse self frequencyHz magResponse phaseResponse
   = liftIO
-      (js_getFrequencyResponse (unBiquadFilterNode self)
-         (maybe jsNull (unFloat32Array . toFloat32Array) frequencyHz)
-         (maybe jsNull (unFloat32Array . toFloat32Array) magResponse)
-         (maybe jsNull (unFloat32Array . toFloat32Array) phaseResponse))
+      (js_getFrequencyResponse (self)
+         (maybeToNullable (fmap toFloat32Array frequencyHz))
+         (maybeToNullable (fmap toFloat32Array magResponse))
+         (maybeToNullable (fmap toFloat32Array phaseResponse)))
 pattern LOWPASS = 0
 pattern HIGHPASS = 1
 pattern BANDPASS = 2
@@ -53,54 +53,48 @@
 pattern ALLPASS = 7
  
 foreign import javascript unsafe "$1[\"type\"] = $2;" js_setType ::
-        JSRef BiquadFilterNode -> JSString -> IO ()
+        BiquadFilterNode -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/BiquadFilterNode.type Mozilla BiquadFilterNode.type documentation> 
 setType ::
         (MonadIO m, ToJSString val) => BiquadFilterNode -> val -> m ()
-setType self val
-  = liftIO (js_setType (unBiquadFilterNode self) (toJSString val))
+setType self val = liftIO (js_setType (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"type\"]" js_getType ::
-        JSRef BiquadFilterNode -> IO JSString
+        BiquadFilterNode -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/BiquadFilterNode.type Mozilla BiquadFilterNode.type documentation> 
 getType ::
         (MonadIO m, FromJSString result) => BiquadFilterNode -> m result
-getType self
-  = liftIO (fromJSString <$> (js_getType (unBiquadFilterNode self)))
+getType self = liftIO (fromJSString <$> (js_getType (self)))
  
 foreign import javascript unsafe "$1[\"frequency\"]"
-        js_getFrequency :: JSRef BiquadFilterNode -> IO (JSRef AudioParam)
+        js_getFrequency :: BiquadFilterNode -> IO (Nullable AudioParam)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/BiquadFilterNode.frequency Mozilla BiquadFilterNode.frequency documentation> 
 getFrequency ::
              (MonadIO m) => BiquadFilterNode -> m (Maybe AudioParam)
 getFrequency self
-  = liftIO
-      ((js_getFrequency (unBiquadFilterNode self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getFrequency (self)))
  
 foreign import javascript unsafe "$1[\"detune\"]" js_getDetune ::
-        JSRef BiquadFilterNode -> IO (JSRef AudioParam)
+        BiquadFilterNode -> IO (Nullable AudioParam)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/BiquadFilterNode.detune Mozilla BiquadFilterNode.detune documentation> 
 getDetune ::
           (MonadIO m) => BiquadFilterNode -> m (Maybe AudioParam)
-getDetune self
-  = liftIO ((js_getDetune (unBiquadFilterNode self)) >>= fromJSRef)
+getDetune self = liftIO (nullableToMaybe <$> (js_getDetune (self)))
  
 foreign import javascript unsafe "$1[\"Q\"]" js_getQ ::
-        JSRef BiquadFilterNode -> IO (JSRef AudioParam)
+        BiquadFilterNode -> IO (Nullable AudioParam)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/BiquadFilterNode.Q Mozilla BiquadFilterNode.Q documentation> 
 getQ :: (MonadIO m) => BiquadFilterNode -> m (Maybe AudioParam)
-getQ self
-  = liftIO ((js_getQ (unBiquadFilterNode self)) >>= fromJSRef)
+getQ self = liftIO (nullableToMaybe <$> (js_getQ (self)))
  
 foreign import javascript unsafe "$1[\"gain\"]" js_getGain ::
-        JSRef BiquadFilterNode -> IO (JSRef AudioParam)
+        BiquadFilterNode -> IO (Nullable AudioParam)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/BiquadFilterNode.gain Mozilla BiquadFilterNode.gain documentation> 
 getGain :: (MonadIO m) => BiquadFilterNode -> m (Maybe AudioParam)
-getGain self
-  = liftIO ((js_getGain (unBiquadFilterNode self)) >>= fromJSRef)
+getGain self = liftIO (nullableToMaybe <$> (js_getGain (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/Blob.hs b/src/GHCJS/DOM/JSFFI/Generated/Blob.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/Blob.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/Blob.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,30 +20,27 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "new window[\"Blob\"]()"
-        js_newBlob :: IO (JSRef Blob)
+        js_newBlob :: IO Blob
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Blob Mozilla Blob documentation> 
 newBlob :: (MonadIO m) => m Blob
-newBlob = liftIO (js_newBlob >>= fromJSRefUnchecked)
+newBlob = liftIO (js_newBlob)
  
 foreign import javascript unsafe "new window[\"Blob\"]($1, $2)"
-        js_newBlob' ::
-        JSRef [JSRef a] -> JSRef BlobPropertyBag -> IO (JSRef Blob)
+        js_newBlob' :: JSRef -> Nullable BlobPropertyBag -> IO Blob
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Blob Mozilla Blob documentation> 
 newBlob' ::
          (MonadIO m, IsBlobPropertyBag options) =>
-           [JSRef a] -> Maybe options -> m Blob
+           [JSRef] -> Maybe options -> m Blob
 newBlob' blobParts options
   = liftIO
       (toJSRef blobParts >>= \ blobParts' -> js_newBlob' blobParts'
-         (maybe jsNull (unBlobPropertyBag . toBlobPropertyBag) options)
-         >>= fromJSRefUnchecked)
+         (maybeToNullable (fmap toBlobPropertyBag options)))
  
 foreign import javascript unsafe "$1[\"slice\"]($2, $3, $4)"
         js_slice ::
-        JSRef Blob ->
-          Double -> Double -> JSRef (Maybe JSString) -> IO (JSRef Blob)
+        Blob -> Double -> Double -> Nullable JSString -> IO (Nullable Blob)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Blob.slice Mozilla Blob.slice documentation> 
 slice ::
@@ -51,24 +48,21 @@
         self -> Int64 -> Int64 -> Maybe contentType -> m (Maybe Blob)
 slice self start end contentType
   = liftIO
-      ((js_slice (unBlob (toBlob self)) (fromIntegral start)
-          (fromIntegral end)
-          (toMaybeJSString contentType))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_slice (toBlob self) (fromIntegral start) (fromIntegral end)
+            (toMaybeJSString contentType)))
  
 foreign import javascript unsafe "$1[\"size\"]" js_getSize ::
-        JSRef Blob -> IO Double
+        Blob -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Blob.size Mozilla Blob.size documentation> 
 getSize :: (MonadIO m, IsBlob self) => self -> m Word64
-getSize self
-  = liftIO (round <$> (js_getSize (unBlob (toBlob self))))
+getSize self = liftIO (round <$> (js_getSize (toBlob self)))
  
 foreign import javascript unsafe "$1[\"type\"]" js_getType ::
-        JSRef Blob -> IO JSString
+        Blob -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Blob.type Mozilla Blob.type documentation> 
 getType ::
         (MonadIO m, IsBlob self, FromJSString result) => self -> m result
-getType self
-  = liftIO (fromJSString <$> (js_getType (unBlob (toBlob self))))
+getType self = liftIO (fromJSString <$> (js_getType (toBlob self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/CSS.hs b/src/GHCJS/DOM/JSFFI/Generated/CSS.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/CSS.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/CSS.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,7 +20,7 @@
  
 foreign import javascript unsafe
         "($1[\"supports\"]($2, $3) ? 1 : 0)" js_supports2 ::
-        JSRef CSS -> JSString -> JSString -> IO Bool
+        CSS -> JSString -> JSString -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSS.supports Mozilla CSS.supports documentation> 
 supports2 ::
@@ -28,15 +28,14 @@
             CSS -> property -> value -> m Bool
 supports2 self property value
   = liftIO
-      (js_supports2 (unCSS self) (toJSString property)
-         (toJSString value))
+      (js_supports2 (self) (toJSString property) (toJSString value))
  
 foreign import javascript unsafe "($1[\"supports\"]($2) ? 1 : 0)"
-        js_supports :: JSRef CSS -> JSString -> IO Bool
+        js_supports :: CSS -> JSString -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSS.supports Mozilla CSS.supports documentation> 
 supports ::
          (MonadIO m, ToJSString conditionText) =>
            CSS -> conditionText -> m Bool
 supports self conditionText
-  = liftIO (js_supports (unCSS self) (toJSString conditionText))
+  = liftIO (js_supports (self) (toJSString conditionText))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/CSSCharsetRule.hs b/src/GHCJS/DOM/JSFFI/Generated/CSSCharsetRule.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/CSSCharsetRule.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/CSSCharsetRule.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,23 +19,20 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"encoding\"] = $2;"
-        js_setEncoding ::
-        JSRef CSSCharsetRule -> JSRef (Maybe JSString) -> IO ()
+        js_setEncoding :: CSSCharsetRule -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSCharsetRule.encoding Mozilla CSSCharsetRule.encoding documentation> 
 setEncoding ::
             (MonadIO m, ToJSString val) => CSSCharsetRule -> Maybe val -> m ()
 setEncoding self val
-  = liftIO
-      (js_setEncoding (unCSSCharsetRule self) (toMaybeJSString val))
+  = liftIO (js_setEncoding (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"encoding\"]" js_getEncoding
-        :: JSRef CSSCharsetRule -> IO (JSRef (Maybe JSString))
+        :: CSSCharsetRule -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSCharsetRule.encoding Mozilla CSSCharsetRule.encoding documentation> 
 getEncoding ::
             (MonadIO m, FromJSString result) =>
               CSSCharsetRule -> m (Maybe result)
 getEncoding self
-  = liftIO
-      (fromMaybeJSString <$> (js_getEncoding (unCSSCharsetRule self)))
+  = liftIO (fromMaybeJSString <$> (js_getEncoding (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/CSSFontFaceLoadEvent.hs b/src/GHCJS/DOM/JSFFI/Generated/CSSFontFaceLoadEvent.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/CSSFontFaceLoadEvent.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/CSSFontFaceLoadEvent.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,21 +20,18 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"fontface\"]" js_getFontface
-        :: JSRef CSSFontFaceLoadEvent -> IO (JSRef CSSFontFaceRule)
+        :: CSSFontFaceLoadEvent -> IO (Nullable CSSFontFaceRule)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSFontFaceLoadEvent.fontface Mozilla CSSFontFaceLoadEvent.fontface documentation> 
 getFontface ::
             (MonadIO m) => CSSFontFaceLoadEvent -> m (Maybe CSSFontFaceRule)
 getFontface self
-  = liftIO
-      ((js_getFontface (unCSSFontFaceLoadEvent self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getFontface (self)))
  
 foreign import javascript unsafe "$1[\"error\"]" js_getError ::
-        JSRef CSSFontFaceLoadEvent -> IO (JSRef DOMError)
+        CSSFontFaceLoadEvent -> IO (Nullable DOMError)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSFontFaceLoadEvent.error Mozilla CSSFontFaceLoadEvent.error documentation> 
 getError ::
          (MonadIO m) => CSSFontFaceLoadEvent -> m (Maybe DOMError)
-getError self
-  = liftIO
-      ((js_getError (unCSSFontFaceLoadEvent self)) >>= fromJSRef)
+getError self = liftIO (nullableToMaybe <$> (js_getError (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/CSSFontFaceRule.hs b/src/GHCJS/DOM/JSFFI/Generated/CSSFontFaceRule.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/CSSFontFaceRule.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/CSSFontFaceRule.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,10 +19,9 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"style\"]" js_getStyle ::
-        JSRef CSSFontFaceRule -> IO (JSRef CSSStyleDeclaration)
+        CSSFontFaceRule -> IO (Nullable CSSStyleDeclaration)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSFontFaceRule.style Mozilla CSSFontFaceRule.style documentation> 
 getStyle ::
          (MonadIO m) => CSSFontFaceRule -> m (Maybe CSSStyleDeclaration)
-getStyle self
-  = liftIO ((js_getStyle (unCSSFontFaceRule self)) >>= fromJSRef)
+getStyle self = liftIO (nullableToMaybe <$> (js_getStyle (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/CSSImportRule.hs b/src/GHCJS/DOM/JSFFI/Generated/CSSImportRule.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/CSSImportRule.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/CSSImportRule.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,29 +20,26 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"href\"]" js_getHref ::
-        JSRef CSSImportRule -> IO (JSRef (Maybe JSString))
+        CSSImportRule -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSImportRule.href Mozilla CSSImportRule.href documentation> 
 getHref ::
         (MonadIO m, FromJSString result) =>
           CSSImportRule -> m (Maybe result)
-getHref self
-  = liftIO
-      (fromMaybeJSString <$> (js_getHref (unCSSImportRule self)))
+getHref self = liftIO (fromMaybeJSString <$> (js_getHref (self)))
  
 foreign import javascript unsafe "$1[\"media\"]" js_getMedia ::
-        JSRef CSSImportRule -> IO (JSRef MediaList)
+        CSSImportRule -> IO (Nullable MediaList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSImportRule.media Mozilla CSSImportRule.media documentation> 
 getMedia :: (MonadIO m) => CSSImportRule -> m (Maybe MediaList)
-getMedia self
-  = liftIO ((js_getMedia (unCSSImportRule self)) >>= fromJSRef)
+getMedia self = liftIO (nullableToMaybe <$> (js_getMedia (self)))
  
 foreign import javascript unsafe "$1[\"styleSheet\"]"
-        js_getStyleSheet :: JSRef CSSImportRule -> IO (JSRef CSSStyleSheet)
+        js_getStyleSheet :: CSSImportRule -> IO (Nullable CSSStyleSheet)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSImportRule.styleSheet Mozilla CSSImportRule.styleSheet documentation> 
 getStyleSheet ::
               (MonadIO m) => CSSImportRule -> m (Maybe CSSStyleSheet)
 getStyleSheet self
-  = liftIO ((js_getStyleSheet (unCSSImportRule self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getStyleSheet (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/CSSKeyframeRule.hs b/src/GHCJS/DOM/JSFFI/Generated/CSSKeyframeRule.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/CSSKeyframeRule.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/CSSKeyframeRule.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,29 +20,26 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"keyText\"] = $2;"
-        js_setKeyText :: JSRef CSSKeyframeRule -> JSString -> IO ()
+        js_setKeyText :: CSSKeyframeRule -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSKeyframeRule.keyText Mozilla CSSKeyframeRule.keyText documentation> 
 setKeyText ::
            (MonadIO m, ToJSString val) => CSSKeyframeRule -> val -> m ()
 setKeyText self val
-  = liftIO (js_setKeyText (unCSSKeyframeRule self) (toJSString val))
+  = liftIO (js_setKeyText (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"keyText\"]" js_getKeyText ::
-        JSRef CSSKeyframeRule -> IO JSString
+        CSSKeyframeRule -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSKeyframeRule.keyText Mozilla CSSKeyframeRule.keyText documentation> 
 getKeyText ::
            (MonadIO m, FromJSString result) => CSSKeyframeRule -> m result
-getKeyText self
-  = liftIO
-      (fromJSString <$> (js_getKeyText (unCSSKeyframeRule self)))
+getKeyText self = liftIO (fromJSString <$> (js_getKeyText (self)))
  
 foreign import javascript unsafe "$1[\"style\"]" js_getStyle ::
-        JSRef CSSKeyframeRule -> IO (JSRef CSSStyleDeclaration)
+        CSSKeyframeRule -> IO (Nullable CSSStyleDeclaration)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSKeyframeRule.style Mozilla CSSKeyframeRule.style documentation> 
 getStyle ::
          (MonadIO m) => CSSKeyframeRule -> m (Maybe CSSStyleDeclaration)
-getStyle self
-  = liftIO ((js_getStyle (unCSSKeyframeRule self)) >>= fromJSRef)
+getStyle self = liftIO (nullableToMaybe <$> (js_getStyle (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/CSSKeyframesRule.hs b/src/GHCJS/DOM/JSFFI/Generated/CSSKeyframesRule.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/CSSKeyframesRule.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/CSSKeyframesRule.hs
@@ -8,7 +8,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -22,36 +22,34 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"insertRule\"]($2)"
-        js_insertRule :: JSRef CSSKeyframesRule -> JSString -> IO ()
+        js_insertRule :: CSSKeyframesRule -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSKeyframesRule.insertRule Mozilla CSSKeyframesRule.insertRule documentation> 
 insertRule ::
            (MonadIO m, ToJSString rule) => CSSKeyframesRule -> rule -> m ()
 insertRule self rule
-  = liftIO
-      (js_insertRule (unCSSKeyframesRule self) (toJSString rule))
+  = liftIO (js_insertRule (self) (toJSString rule))
  
 foreign import javascript unsafe "$1[\"appendRule\"]($2)"
-        js_appendRule :: JSRef CSSKeyframesRule -> JSString -> IO ()
+        js_appendRule :: CSSKeyframesRule -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSKeyframesRule.appendRule Mozilla CSSKeyframesRule.appendRule documentation> 
 appendRule ::
            (MonadIO m, ToJSString rule) => CSSKeyframesRule -> rule -> m ()
 appendRule self rule
-  = liftIO
-      (js_appendRule (unCSSKeyframesRule self) (toJSString rule))
+  = liftIO (js_appendRule (self) (toJSString rule))
  
 foreign import javascript unsafe "$1[\"deleteRule\"]($2)"
-        js_deleteRule :: JSRef CSSKeyframesRule -> JSString -> IO ()
+        js_deleteRule :: CSSKeyframesRule -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSKeyframesRule.deleteRule Mozilla CSSKeyframesRule.deleteRule documentation> 
 deleteRule ::
            (MonadIO m, ToJSString key) => CSSKeyframesRule -> key -> m ()
 deleteRule self key
-  = liftIO (js_deleteRule (unCSSKeyframesRule self) (toJSString key))
+  = liftIO (js_deleteRule (self) (toJSString key))
  
 foreign import javascript unsafe "$1[\"findRule\"]($2)" js_findRule
-        :: JSRef CSSKeyframesRule -> JSString -> IO (JSRef CSSKeyframeRule)
+        :: CSSKeyframesRule -> JSString -> IO (Nullable CSSKeyframeRule)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSKeyframesRule.findRule Mozilla CSSKeyframesRule.findRule documentation> 
 findRule ::
@@ -59,46 +57,41 @@
            CSSKeyframesRule -> key -> m (Maybe CSSKeyframeRule)
 findRule self key
   = liftIO
-      ((js_findRule (unCSSKeyframesRule self) (toJSString key)) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_findRule (self) (toJSString key)))
  
 foreign import javascript unsafe "$1[\"_get\"]($2)" js__get ::
-        JSRef CSSKeyframesRule -> Word -> IO (JSRef CSSKeyframeRule)
+        CSSKeyframesRule -> Word -> IO (Nullable CSSKeyframeRule)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSKeyframesRule._get Mozilla CSSKeyframesRule._get documentation> 
 _get ::
      (MonadIO m) =>
        CSSKeyframesRule -> Word -> m (Maybe CSSKeyframeRule)
 _get self index
-  = liftIO ((js__get (unCSSKeyframesRule self) index) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js__get (self) index))
  
 foreign import javascript unsafe "$1[\"name\"] = $2;" js_setName ::
-        JSRef CSSKeyframesRule -> JSRef (Maybe JSString) -> IO ()
+        CSSKeyframesRule -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSKeyframesRule.name Mozilla CSSKeyframesRule.name documentation> 
 setName ::
         (MonadIO m, ToJSString val) =>
           CSSKeyframesRule -> Maybe val -> m ()
-setName self val
-  = liftIO
-      (js_setName (unCSSKeyframesRule self) (toMaybeJSString val))
+setName self val = liftIO (js_setName (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"name\"]" js_getName ::
-        JSRef CSSKeyframesRule -> IO (JSRef (Maybe JSString))
+        CSSKeyframesRule -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSKeyframesRule.name Mozilla CSSKeyframesRule.name documentation> 
 getName ::
         (MonadIO m, FromJSString result) =>
           CSSKeyframesRule -> m (Maybe result)
-getName self
-  = liftIO
-      (fromMaybeJSString <$> (js_getName (unCSSKeyframesRule self)))
+getName self = liftIO (fromMaybeJSString <$> (js_getName (self)))
  
 foreign import javascript unsafe "$1[\"cssRules\"]" js_getCssRules
-        :: JSRef CSSKeyframesRule -> IO (JSRef CSSRuleList)
+        :: CSSKeyframesRule -> IO (Nullable CSSRuleList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSKeyframesRule.cssRules Mozilla CSSKeyframesRule.cssRules documentation> 
 getCssRules ::
             (MonadIO m) => CSSKeyframesRule -> m (Maybe CSSRuleList)
 getCssRules self
-  = liftIO ((js_getCssRules (unCSSKeyframesRule self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getCssRules (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/CSSMediaRule.hs b/src/GHCJS/DOM/JSFFI/Generated/CSSMediaRule.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/CSSMediaRule.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/CSSMediaRule.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,36 +20,33 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"insertRule\"]($2, $3)"
-        js_insertRule :: JSRef CSSMediaRule -> JSString -> Word -> IO Word
+        js_insertRule :: CSSMediaRule -> JSString -> Word -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSMediaRule.insertRule Mozilla CSSMediaRule.insertRule documentation> 
 insertRule ::
            (MonadIO m, ToJSString rule) =>
              CSSMediaRule -> rule -> Word -> m Word
 insertRule self rule index
-  = liftIO
-      (js_insertRule (unCSSMediaRule self) (toJSString rule) index)
+  = liftIO (js_insertRule (self) (toJSString rule) index)
  
 foreign import javascript unsafe "$1[\"deleteRule\"]($2)"
-        js_deleteRule :: JSRef CSSMediaRule -> Word -> IO ()
+        js_deleteRule :: CSSMediaRule -> Word -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSMediaRule.deleteRule Mozilla CSSMediaRule.deleteRule documentation> 
 deleteRule :: (MonadIO m) => CSSMediaRule -> Word -> m ()
-deleteRule self index
-  = liftIO (js_deleteRule (unCSSMediaRule self) index)
+deleteRule self index = liftIO (js_deleteRule (self) index)
  
 foreign import javascript unsafe "$1[\"media\"]" js_getMedia ::
-        JSRef CSSMediaRule -> IO (JSRef MediaList)
+        CSSMediaRule -> IO (Nullable MediaList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSMediaRule.media Mozilla CSSMediaRule.media documentation> 
 getMedia :: (MonadIO m) => CSSMediaRule -> m (Maybe MediaList)
-getMedia self
-  = liftIO ((js_getMedia (unCSSMediaRule self)) >>= fromJSRef)
+getMedia self = liftIO (nullableToMaybe <$> (js_getMedia (self)))
  
 foreign import javascript unsafe "$1[\"cssRules\"]" js_getCssRules
-        :: JSRef CSSMediaRule -> IO (JSRef CSSRuleList)
+        :: CSSMediaRule -> IO (Nullable CSSRuleList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSMediaRule.cssRules Mozilla CSSMediaRule.cssRules documentation> 
 getCssRules :: (MonadIO m) => CSSMediaRule -> m (Maybe CSSRuleList)
 getCssRules self
-  = liftIO ((js_getCssRules (unCSSMediaRule self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getCssRules (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/CSSPageRule.hs b/src/GHCJS/DOM/JSFFI/Generated/CSSPageRule.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/CSSPageRule.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/CSSPageRule.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,32 +20,27 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"selectorText\"] = $2;"
-        js_setSelectorText ::
-        JSRef CSSPageRule -> JSRef (Maybe JSString) -> IO ()
+        js_setSelectorText :: CSSPageRule -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSPageRule.selectorText Mozilla CSSPageRule.selectorText documentation> 
 setSelectorText ::
                 (MonadIO m, ToJSString val) => CSSPageRule -> Maybe val -> m ()
 setSelectorText self val
-  = liftIO
-      (js_setSelectorText (unCSSPageRule self) (toMaybeJSString val))
+  = liftIO (js_setSelectorText (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"selectorText\"]"
-        js_getSelectorText ::
-        JSRef CSSPageRule -> IO (JSRef (Maybe JSString))
+        js_getSelectorText :: CSSPageRule -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSPageRule.selectorText Mozilla CSSPageRule.selectorText documentation> 
 getSelectorText ::
                 (MonadIO m, FromJSString result) => CSSPageRule -> m (Maybe result)
 getSelectorText self
-  = liftIO
-      (fromMaybeJSString <$> (js_getSelectorText (unCSSPageRule self)))
+  = liftIO (fromMaybeJSString <$> (js_getSelectorText (self)))
  
 foreign import javascript unsafe "$1[\"style\"]" js_getStyle ::
-        JSRef CSSPageRule -> IO (JSRef CSSStyleDeclaration)
+        CSSPageRule -> IO (Nullable CSSStyleDeclaration)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSPageRule.style Mozilla CSSPageRule.style documentation> 
 getStyle ::
          (MonadIO m) => CSSPageRule -> m (Maybe CSSStyleDeclaration)
-getStyle self
-  = liftIO ((js_getStyle (unCSSPageRule self)) >>= fromJSRef)
+getStyle self = liftIO (nullableToMaybe <$> (js_getStyle (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/CSSPrimitiveValue.hs b/src/GHCJS/DOM/JSFFI/Generated/CSSPrimitiveValue.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/CSSPrimitiveValue.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/CSSPrimitiveValue.hs
@@ -18,7 +18,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -32,28 +32,25 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"setFloatValue\"]($2, $3)"
-        js_setFloatValue ::
-        JSRef CSSPrimitiveValue -> Word -> Float -> IO ()
+        js_setFloatValue :: CSSPrimitiveValue -> Word -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSPrimitiveValue.setFloatValue Mozilla CSSPrimitiveValue.setFloatValue documentation> 
 setFloatValue ::
               (MonadIO m) => CSSPrimitiveValue -> Word -> Float -> m ()
 setFloatValue self unitType floatValue
-  = liftIO
-      (js_setFloatValue (unCSSPrimitiveValue self) unitType floatValue)
+  = liftIO (js_setFloatValue (self) unitType floatValue)
  
 foreign import javascript unsafe "$1[\"getFloatValue\"]($2)"
-        js_getFloatValue :: JSRef CSSPrimitiveValue -> Word -> IO Float
+        js_getFloatValue :: CSSPrimitiveValue -> Word -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSPrimitiveValue.getFloatValue Mozilla CSSPrimitiveValue.getFloatValue documentation> 
 getFloatValue ::
               (MonadIO m) => CSSPrimitiveValue -> Word -> m Float
 getFloatValue self unitType
-  = liftIO (js_getFloatValue (unCSSPrimitiveValue self) unitType)
+  = liftIO (js_getFloatValue (self) unitType)
  
 foreign import javascript unsafe "$1[\"setStringValue\"]($2, $3)"
-        js_setStringValue ::
-        JSRef CSSPrimitiveValue -> Word -> JSString -> IO ()
+        js_setStringValue :: CSSPrimitiveValue -> Word -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSPrimitiveValue.setStringValue Mozilla CSSPrimitiveValue.setStringValue documentation> 
 setStringValue ::
@@ -61,48 +58,42 @@
                  CSSPrimitiveValue -> Word -> stringValue -> m ()
 setStringValue self stringType stringValue
   = liftIO
-      (js_setStringValue (unCSSPrimitiveValue self) stringType
-         (toJSString stringValue))
+      (js_setStringValue (self) stringType (toJSString stringValue))
  
 foreign import javascript unsafe "$1[\"getStringValue\"]()"
-        js_getStringValue :: JSRef CSSPrimitiveValue -> IO JSString
+        js_getStringValue :: CSSPrimitiveValue -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSPrimitiveValue.getStringValue Mozilla CSSPrimitiveValue.getStringValue documentation> 
 getStringValue ::
                (MonadIO m, FromJSString result) => CSSPrimitiveValue -> m result
 getStringValue self
-  = liftIO
-      (fromJSString <$> (js_getStringValue (unCSSPrimitiveValue self)))
+  = liftIO (fromJSString <$> (js_getStringValue (self)))
  
 foreign import javascript unsafe "$1[\"getCounterValue\"]()"
-        js_getCounterValue :: JSRef CSSPrimitiveValue -> IO (JSRef Counter)
+        js_getCounterValue :: CSSPrimitiveValue -> IO (Nullable Counter)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSPrimitiveValue.getCounterValue Mozilla CSSPrimitiveValue.getCounterValue documentation> 
 getCounterValue ::
                 (MonadIO m) => CSSPrimitiveValue -> m (Maybe Counter)
 getCounterValue self
-  = liftIO
-      ((js_getCounterValue (unCSSPrimitiveValue self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getCounterValue (self)))
  
 foreign import javascript unsafe "$1[\"getRectValue\"]()"
-        js_getRectValue :: JSRef CSSPrimitiveValue -> IO (JSRef Rect)
+        js_getRectValue :: CSSPrimitiveValue -> IO (Nullable Rect)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSPrimitiveValue.getRectValue Mozilla CSSPrimitiveValue.getRectValue documentation> 
 getRectValue :: (MonadIO m) => CSSPrimitiveValue -> m (Maybe Rect)
 getRectValue self
-  = liftIO
-      ((js_getRectValue (unCSSPrimitiveValue self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getRectValue (self)))
  
 foreign import javascript unsafe "$1[\"getRGBColorValue\"]()"
-        js_getRGBColorValue ::
-        JSRef CSSPrimitiveValue -> IO (JSRef RGBColor)
+        js_getRGBColorValue :: CSSPrimitiveValue -> IO (Nullable RGBColor)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSPrimitiveValue.getRGBColorValue Mozilla CSSPrimitiveValue.getRGBColorValue documentation> 
 getRGBColorValue ::
                  (MonadIO m) => CSSPrimitiveValue -> m (Maybe RGBColor)
 getRGBColorValue self
-  = liftIO
-      ((js_getRGBColorValue (unCSSPrimitiveValue self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getRGBColorValue (self)))
 pattern CSS_UNKNOWN = 0
 pattern CSS_NUMBER = 1
 pattern CSS_PERCENTAGE = 2
@@ -135,9 +126,8 @@
 pattern CSS_VMAX = 29
  
 foreign import javascript unsafe "$1[\"primitiveType\"]"
-        js_getPrimitiveType :: JSRef CSSPrimitiveValue -> IO Word
+        js_getPrimitiveType :: CSSPrimitiveValue -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSPrimitiveValue.primitiveType Mozilla CSSPrimitiveValue.primitiveType documentation> 
 getPrimitiveType :: (MonadIO m) => CSSPrimitiveValue -> m Word
-getPrimitiveType self
-  = liftIO (js_getPrimitiveType (unCSSPrimitiveValue self))
+getPrimitiveType self = liftIO (js_getPrimitiveType (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/CSSRule.hs b/src/GHCJS/DOM/JSFFI/Generated/CSSRule.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/CSSRule.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/CSSRule.hs
@@ -12,7 +12,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -40,52 +40,47 @@
 pattern WEBKIT_KEYFRAME_RULE = 8
  
 foreign import javascript unsafe "$1[\"type\"]" js_getType ::
-        JSRef CSSRule -> IO Word
+        CSSRule -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSRule.type Mozilla CSSRule.type documentation> 
 getType :: (MonadIO m, IsCSSRule self) => self -> m Word
-getType self = liftIO (js_getType (unCSSRule (toCSSRule self)))
+getType self = liftIO (js_getType (toCSSRule self))
  
 foreign import javascript unsafe "$1[\"cssText\"] = $2;"
-        js_setCssText :: JSRef CSSRule -> JSRef (Maybe JSString) -> IO ()
+        js_setCssText :: CSSRule -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSRule.cssText Mozilla CSSRule.cssText documentation> 
 setCssText ::
            (MonadIO m, IsCSSRule self, ToJSString val) =>
              self -> Maybe val -> m ()
 setCssText self val
-  = liftIO
-      (js_setCssText (unCSSRule (toCSSRule self)) (toMaybeJSString val))
+  = liftIO (js_setCssText (toCSSRule self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"cssText\"]" js_getCssText ::
-        JSRef CSSRule -> IO (JSRef (Maybe JSString))
+        CSSRule -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSRule.cssText Mozilla CSSRule.cssText documentation> 
 getCssText ::
            (MonadIO m, IsCSSRule self, FromJSString result) =>
              self -> m (Maybe result)
 getCssText self
-  = liftIO
-      (fromMaybeJSString <$>
-         (js_getCssText (unCSSRule (toCSSRule self))))
+  = liftIO (fromMaybeJSString <$> (js_getCssText (toCSSRule self)))
  
 foreign import javascript unsafe "$1[\"parentStyleSheet\"]"
-        js_getParentStyleSheet :: JSRef CSSRule -> IO (JSRef CSSStyleSheet)
+        js_getParentStyleSheet :: CSSRule -> IO (Nullable CSSStyleSheet)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSRule.parentStyleSheet Mozilla CSSRule.parentStyleSheet documentation> 
 getParentStyleSheet ::
                     (MonadIO m, IsCSSRule self) => self -> m (Maybe CSSStyleSheet)
 getParentStyleSheet self
   = liftIO
-      ((js_getParentStyleSheet (unCSSRule (toCSSRule self))) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_getParentStyleSheet (toCSSRule self)))
  
 foreign import javascript unsafe "$1[\"parentRule\"]"
-        js_getParentRule :: JSRef CSSRule -> IO (JSRef CSSRule)
+        js_getParentRule :: CSSRule -> IO (Nullable CSSRule)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSRule.parentRule Mozilla CSSRule.parentRule documentation> 
 getParentRule ::
               (MonadIO m, IsCSSRule self) => self -> m (Maybe CSSRule)
 getParentRule self
-  = liftIO
-      ((js_getParentRule (unCSSRule (toCSSRule self))) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getParentRule (toCSSRule self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/CSSRuleList.hs b/src/GHCJS/DOM/JSFFI/Generated/CSSRuleList.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/CSSRuleList.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/CSSRuleList.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,16 +19,16 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"item\"]($2)" js_item ::
-        JSRef CSSRuleList -> Word -> IO (JSRef CSSRule)
+        CSSRuleList -> Word -> IO (Nullable CSSRule)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSRuleList.item Mozilla CSSRuleList.item documentation> 
 item :: (MonadIO m) => CSSRuleList -> Word -> m (Maybe CSSRule)
 item self index
-  = liftIO ((js_item (unCSSRuleList self) index) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_item (self) index))
  
 foreign import javascript unsafe "$1[\"length\"]" js_getLength ::
-        JSRef CSSRuleList -> IO Word
+        CSSRuleList -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSRuleList.length Mozilla CSSRuleList.length documentation> 
 getLength :: (MonadIO m) => CSSRuleList -> m Word
-getLength self = liftIO (js_getLength (unCSSRuleList self))
+getLength self = liftIO (js_getLength (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/CSSStyleDeclaration.hs b/src/GHCJS/DOM/JSFFI/Generated/CSSStyleDeclaration.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/CSSStyleDeclaration.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/CSSStyleDeclaration.hs
@@ -11,7 +11,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -26,8 +26,7 @@
  
 foreign import javascript unsafe "$1[\"getPropertyValue\"]($2)"
         js_getPropertyValue ::
-        JSRef CSSStyleDeclaration ->
-          JSString -> IO (JSRef (Maybe JSString))
+        CSSStyleDeclaration -> JSString -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleDeclaration.getPropertyValue Mozilla CSSStyleDeclaration.getPropertyValue documentation> 
 getPropertyValue ::
@@ -36,12 +35,11 @@
 getPropertyValue self propertyName
   = liftIO
       (fromMaybeJSString <$>
-         (js_getPropertyValue (unCSSStyleDeclaration self)
-            (toJSString propertyName)))
+         (js_getPropertyValue (self) (toJSString propertyName)))
  
 foreign import javascript unsafe "$1[\"getPropertyCSSValue\"]($2)"
         js_getPropertyCSSValue ::
-        JSRef CSSStyleDeclaration -> JSString -> IO (JSRef CSSValue)
+        CSSStyleDeclaration -> JSString -> IO (Nullable CSSValue)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleDeclaration.getPropertyCSSValue Mozilla CSSStyleDeclaration.getPropertyCSSValue documentation> 
 getPropertyCSSValue ::
@@ -49,14 +47,12 @@
                       CSSStyleDeclaration -> propertyName -> m (Maybe CSSValue)
 getPropertyCSSValue self propertyName
   = liftIO
-      ((js_getPropertyCSSValue (unCSSStyleDeclaration self)
-          (toJSString propertyName))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_getPropertyCSSValue (self) (toJSString propertyName)))
  
 foreign import javascript unsafe "$1[\"removeProperty\"]($2)"
         js_removeProperty ::
-        JSRef CSSStyleDeclaration ->
-          JSString -> IO (JSRef (Maybe JSString))
+        CSSStyleDeclaration -> JSString -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleDeclaration.removeProperty Mozilla CSSStyleDeclaration.removeProperty documentation> 
 removeProperty ::
@@ -65,13 +61,11 @@
 removeProperty self propertyName
   = liftIO
       (fromMaybeJSString <$>
-         (js_removeProperty (unCSSStyleDeclaration self)
-            (toJSString propertyName)))
+         (js_removeProperty (self) (toJSString propertyName)))
  
 foreign import javascript unsafe "$1[\"getPropertyPriority\"]($2)"
         js_getPropertyPriority ::
-        JSRef CSSStyleDeclaration ->
-          JSString -> IO (JSRef (Maybe JSString))
+        CSSStyleDeclaration -> JSString -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleDeclaration.getPropertyPriority Mozilla CSSStyleDeclaration.getPropertyPriority documentation> 
 getPropertyPriority ::
@@ -80,13 +74,12 @@
 getPropertyPriority self propertyName
   = liftIO
       (fromMaybeJSString <$>
-         (js_getPropertyPriority (unCSSStyleDeclaration self)
-            (toJSString propertyName)))
+         (js_getPropertyPriority (self) (toJSString propertyName)))
  
 foreign import javascript unsafe "$1[\"setProperty\"]($2, $3, $4)"
         js_setProperty ::
-        JSRef CSSStyleDeclaration ->
-          JSString -> JSRef (Maybe JSString) -> JSString -> IO ()
+        CSSStyleDeclaration ->
+          JSString -> Nullable JSString -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleDeclaration.setProperty Mozilla CSSStyleDeclaration.setProperty documentation> 
 setProperty ::
@@ -96,26 +89,22 @@
                 propertyName -> Maybe value -> priority -> m ()
 setProperty self propertyName value priority
   = liftIO
-      (js_setProperty (unCSSStyleDeclaration self)
-         (toJSString propertyName)
+      (js_setProperty (self) (toJSString propertyName)
          (toMaybeJSString value)
          (toJSString priority))
  
 foreign import javascript unsafe "$1[\"item\"]($2)" js_item ::
-        JSRef CSSStyleDeclaration -> Word -> IO JSString
+        CSSStyleDeclaration -> Word -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleDeclaration.item Mozilla CSSStyleDeclaration.item documentation> 
 item ::
      (MonadIO m, FromJSString result) =>
        CSSStyleDeclaration -> Word -> m result
-item self index
-  = liftIO
-      (fromJSString <$> (js_item (unCSSStyleDeclaration self) index))
+item self index = liftIO (fromJSString <$> (js_item (self) index))
  
 foreign import javascript unsafe "$1[\"getPropertyShorthand\"]($2)"
         js_getPropertyShorthand ::
-        JSRef CSSStyleDeclaration ->
-          JSString -> IO (JSRef (Maybe JSString))
+        CSSStyleDeclaration -> JSString -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleDeclaration.getPropertyShorthand Mozilla CSSStyleDeclaration.getPropertyShorthand documentation> 
 getPropertyShorthand ::
@@ -124,59 +113,51 @@
 getPropertyShorthand self propertyName
   = liftIO
       (fromMaybeJSString <$>
-         (js_getPropertyShorthand (unCSSStyleDeclaration self)
-            (toJSString propertyName)))
+         (js_getPropertyShorthand (self) (toJSString propertyName)))
  
 foreign import javascript unsafe
         "($1[\"isPropertyImplicit\"]($2) ? 1 : 0)" js_isPropertyImplicit ::
-        JSRef CSSStyleDeclaration -> JSString -> IO Bool
+        CSSStyleDeclaration -> JSString -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleDeclaration.isPropertyImplicit Mozilla CSSStyleDeclaration.isPropertyImplicit documentation> 
 isPropertyImplicit ::
                    (MonadIO m, ToJSString propertyName) =>
                      CSSStyleDeclaration -> propertyName -> m Bool
 isPropertyImplicit self propertyName
-  = liftIO
-      (js_isPropertyImplicit (unCSSStyleDeclaration self)
-         (toJSString propertyName))
+  = liftIO (js_isPropertyImplicit (self) (toJSString propertyName))
  
 foreign import javascript unsafe "$1[\"cssText\"] = $2;"
-        js_setCssText ::
-        JSRef CSSStyleDeclaration -> JSRef (Maybe JSString) -> IO ()
+        js_setCssText :: CSSStyleDeclaration -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleDeclaration.cssText Mozilla CSSStyleDeclaration.cssText documentation> 
 setCssText ::
            (MonadIO m, ToJSString val) =>
              CSSStyleDeclaration -> Maybe val -> m ()
 setCssText self val
-  = liftIO
-      (js_setCssText (unCSSStyleDeclaration self) (toMaybeJSString val))
+  = liftIO (js_setCssText (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"cssText\"]" js_getCssText ::
-        JSRef CSSStyleDeclaration -> IO (JSRef (Maybe JSString))
+        CSSStyleDeclaration -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleDeclaration.cssText Mozilla CSSStyleDeclaration.cssText documentation> 
 getCssText ::
            (MonadIO m, FromJSString result) =>
              CSSStyleDeclaration -> m (Maybe result)
 getCssText self
-  = liftIO
-      (fromMaybeJSString <$>
-         (js_getCssText (unCSSStyleDeclaration self)))
+  = liftIO (fromMaybeJSString <$> (js_getCssText (self)))
  
 foreign import javascript unsafe "$1[\"length\"]" js_getLength ::
-        JSRef CSSStyleDeclaration -> IO Word
+        CSSStyleDeclaration -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleDeclaration.length Mozilla CSSStyleDeclaration.length documentation> 
 getLength :: (MonadIO m) => CSSStyleDeclaration -> m Word
-getLength self = liftIO (js_getLength (unCSSStyleDeclaration self))
+getLength self = liftIO (js_getLength (self))
  
 foreign import javascript unsafe "$1[\"parentRule\"]"
-        js_getParentRule :: JSRef CSSStyleDeclaration -> IO (JSRef CSSRule)
+        js_getParentRule :: CSSStyleDeclaration -> IO (Nullable CSSRule)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleDeclaration.parentRule Mozilla CSSStyleDeclaration.parentRule documentation> 
 getParentRule ::
               (MonadIO m) => CSSStyleDeclaration -> m (Maybe CSSRule)
 getParentRule self
-  = liftIO
-      ((js_getParentRule (unCSSStyleDeclaration self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getParentRule (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/CSSStyleRule.hs b/src/GHCJS/DOM/JSFFI/Generated/CSSStyleRule.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/CSSStyleRule.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/CSSStyleRule.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,33 +20,28 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"selectorText\"] = $2;"
-        js_setSelectorText ::
-        JSRef CSSStyleRule -> JSRef (Maybe JSString) -> IO ()
+        js_setSelectorText :: CSSStyleRule -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleRule.selectorText Mozilla CSSStyleRule.selectorText documentation> 
 setSelectorText ::
                 (MonadIO m, ToJSString val) => CSSStyleRule -> Maybe val -> m ()
 setSelectorText self val
-  = liftIO
-      (js_setSelectorText (unCSSStyleRule self) (toMaybeJSString val))
+  = liftIO (js_setSelectorText (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"selectorText\"]"
-        js_getSelectorText ::
-        JSRef CSSStyleRule -> IO (JSRef (Maybe JSString))
+        js_getSelectorText :: CSSStyleRule -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleRule.selectorText Mozilla CSSStyleRule.selectorText documentation> 
 getSelectorText ::
                 (MonadIO m, FromJSString result) =>
                   CSSStyleRule -> m (Maybe result)
 getSelectorText self
-  = liftIO
-      (fromMaybeJSString <$> (js_getSelectorText (unCSSStyleRule self)))
+  = liftIO (fromMaybeJSString <$> (js_getSelectorText (self)))
  
 foreign import javascript unsafe "$1[\"style\"]" js_getStyle ::
-        JSRef CSSStyleRule -> IO (JSRef CSSStyleDeclaration)
+        CSSStyleRule -> IO (Nullable CSSStyleDeclaration)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleRule.style Mozilla CSSStyleRule.style documentation> 
 getStyle ::
          (MonadIO m) => CSSStyleRule -> m (Maybe CSSStyleDeclaration)
-getStyle self
-  = liftIO ((js_getStyle (unCSSStyleRule self)) >>= fromJSRef)
+getStyle self = liftIO (nullableToMaybe <$> (js_getStyle (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/CSSStyleSheet.hs b/src/GHCJS/DOM/JSFFI/Generated/CSSStyleSheet.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/CSSStyleSheet.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/CSSStyleSheet.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -21,27 +21,25 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"insertRule\"]($2, $3)"
-        js_insertRule :: JSRef CSSStyleSheet -> JSString -> Word -> IO Word
+        js_insertRule :: CSSStyleSheet -> JSString -> Word -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleSheet.insertRule Mozilla CSSStyleSheet.insertRule documentation> 
 insertRule ::
            (MonadIO m, ToJSString rule) =>
              CSSStyleSheet -> rule -> Word -> m Word
 insertRule self rule index
-  = liftIO
-      (js_insertRule (unCSSStyleSheet self) (toJSString rule) index)
+  = liftIO (js_insertRule (self) (toJSString rule) index)
  
 foreign import javascript unsafe "$1[\"deleteRule\"]($2)"
-        js_deleteRule :: JSRef CSSStyleSheet -> Word -> IO ()
+        js_deleteRule :: CSSStyleSheet -> Word -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleSheet.deleteRule Mozilla CSSStyleSheet.deleteRule documentation> 
 deleteRule :: (MonadIO m) => CSSStyleSheet -> Word -> m ()
-deleteRule self index
-  = liftIO (js_deleteRule (unCSSStyleSheet self) index)
+deleteRule self index = liftIO (js_deleteRule (self) index)
  
 foreign import javascript unsafe "$1[\"addRule\"]($2, $3, $4)"
         js_addRule ::
-        JSRef CSSStyleSheet -> JSString -> JSString -> Word -> IO Int
+        CSSStyleSheet -> JSString -> JSString -> Word -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleSheet.addRule Mozilla CSSStyleSheet.addRule documentation> 
 addRule ::
@@ -49,39 +47,35 @@
           CSSStyleSheet -> selector -> style -> Word -> m Int
 addRule self selector style index
   = liftIO
-      (js_addRule (unCSSStyleSheet self) (toJSString selector)
-         (toJSString style)
-         index)
+      (js_addRule (self) (toJSString selector) (toJSString style) index)
  
 foreign import javascript unsafe "$1[\"removeRule\"]($2)"
-        js_removeRule :: JSRef CSSStyleSheet -> Word -> IO ()
+        js_removeRule :: CSSStyleSheet -> Word -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleSheet.removeRule Mozilla CSSStyleSheet.removeRule documentation> 
 removeRule :: (MonadIO m) => CSSStyleSheet -> Word -> m ()
-removeRule self index
-  = liftIO (js_removeRule (unCSSStyleSheet self) index)
+removeRule self index = liftIO (js_removeRule (self) index)
  
 foreign import javascript unsafe "$1[\"ownerRule\"]"
-        js_getOwnerRule :: JSRef CSSStyleSheet -> IO (JSRef CSSRule)
+        js_getOwnerRule :: CSSStyleSheet -> IO (Nullable CSSRule)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleSheet.ownerRule Mozilla CSSStyleSheet.ownerRule documentation> 
 getOwnerRule :: (MonadIO m) => CSSStyleSheet -> m (Maybe CSSRule)
 getOwnerRule self
-  = liftIO ((js_getOwnerRule (unCSSStyleSheet self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getOwnerRule (self)))
  
 foreign import javascript unsafe "$1[\"cssRules\"]" js_getCssRules
-        :: JSRef CSSStyleSheet -> IO (JSRef CSSRuleList)
+        :: CSSStyleSheet -> IO (Nullable CSSRuleList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleSheet.cssRules Mozilla CSSStyleSheet.cssRules documentation> 
 getCssRules ::
             (MonadIO m) => CSSStyleSheet -> m (Maybe CSSRuleList)
 getCssRules self
-  = liftIO ((js_getCssRules (unCSSStyleSheet self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getCssRules (self)))
  
 foreign import javascript unsafe "$1[\"rules\"]" js_getRules ::
-        JSRef CSSStyleSheet -> IO (JSRef CSSRuleList)
+        CSSStyleSheet -> IO (Nullable CSSRuleList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleSheet.rules Mozilla CSSStyleSheet.rules documentation> 
 getRules :: (MonadIO m) => CSSStyleSheet -> m (Maybe CSSRuleList)
-getRules self
-  = liftIO ((js_getRules (unCSSStyleSheet self)) >>= fromJSRef)
+getRules self = liftIO (nullableToMaybe <$> (js_getRules (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/CSSSupportsRule.hs b/src/GHCJS/DOM/JSFFI/Generated/CSSSupportsRule.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/CSSSupportsRule.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/CSSSupportsRule.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,40 +20,36 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"insertRule\"]($2, $3)"
-        js_insertRule ::
-        JSRef CSSSupportsRule -> JSString -> Word -> IO Word
+        js_insertRule :: CSSSupportsRule -> JSString -> Word -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSSupportsRule.insertRule Mozilla CSSSupportsRule.insertRule documentation> 
 insertRule ::
            (MonadIO m, ToJSString rule) =>
              CSSSupportsRule -> rule -> Word -> m Word
 insertRule self rule index
-  = liftIO
-      (js_insertRule (unCSSSupportsRule self) (toJSString rule) index)
+  = liftIO (js_insertRule (self) (toJSString rule) index)
  
 foreign import javascript unsafe "$1[\"deleteRule\"]($2)"
-        js_deleteRule :: JSRef CSSSupportsRule -> Word -> IO ()
+        js_deleteRule :: CSSSupportsRule -> Word -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSSupportsRule.deleteRule Mozilla CSSSupportsRule.deleteRule documentation> 
 deleteRule :: (MonadIO m) => CSSSupportsRule -> Word -> m ()
-deleteRule self index
-  = liftIO (js_deleteRule (unCSSSupportsRule self) index)
+deleteRule self index = liftIO (js_deleteRule (self) index)
  
 foreign import javascript unsafe "$1[\"cssRules\"]" js_getCssRules
-        :: JSRef CSSSupportsRule -> IO (JSRef CSSRuleList)
+        :: CSSSupportsRule -> IO (Nullable CSSRuleList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSSupportsRule.cssRules Mozilla CSSSupportsRule.cssRules documentation> 
 getCssRules ::
             (MonadIO m) => CSSSupportsRule -> m (Maybe CSSRuleList)
 getCssRules self
-  = liftIO ((js_getCssRules (unCSSSupportsRule self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getCssRules (self)))
  
 foreign import javascript unsafe "$1[\"conditionText\"]"
-        js_getConditionText :: JSRef CSSSupportsRule -> IO JSString
+        js_getConditionText :: CSSSupportsRule -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSSupportsRule.conditionText Mozilla CSSSupportsRule.conditionText documentation> 
 getConditionText ::
                  (MonadIO m, FromJSString result) => CSSSupportsRule -> m result
 getConditionText self
-  = liftIO
-      (fromJSString <$> (js_getConditionText (unCSSSupportsRule self)))
+  = liftIO (fromJSString <$> (js_getConditionText (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/CSSValue.hs b/src/GHCJS/DOM/JSFFI/Generated/CSSValue.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/CSSValue.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/CSSValue.hs
@@ -8,7 +8,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -26,33 +26,29 @@
 pattern CSS_CUSTOM = 3
  
 foreign import javascript unsafe "$1[\"cssText\"] = $2;"
-        js_setCssText :: JSRef CSSValue -> JSRef (Maybe JSString) -> IO ()
+        js_setCssText :: CSSValue -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSValue.cssText Mozilla CSSValue.cssText documentation> 
 setCssText ::
            (MonadIO m, IsCSSValue self, ToJSString val) =>
              self -> Maybe val -> m ()
 setCssText self val
-  = liftIO
-      (js_setCssText (unCSSValue (toCSSValue self))
-         (toMaybeJSString val))
+  = liftIO (js_setCssText (toCSSValue self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"cssText\"]" js_getCssText ::
-        JSRef CSSValue -> IO (JSRef (Maybe JSString))
+        CSSValue -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSValue.cssText Mozilla CSSValue.cssText documentation> 
 getCssText ::
            (MonadIO m, IsCSSValue self, FromJSString result) =>
              self -> m (Maybe result)
 getCssText self
-  = liftIO
-      (fromMaybeJSString <$>
-         (js_getCssText (unCSSValue (toCSSValue self))))
+  = liftIO (fromMaybeJSString <$> (js_getCssText (toCSSValue self)))
  
 foreign import javascript unsafe "$1[\"cssValueType\"]"
-        js_getCssValueType :: JSRef CSSValue -> IO Word
+        js_getCssValueType :: CSSValue -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSValue.cssValueType Mozilla CSSValue.cssValueType documentation> 
 getCssValueType :: (MonadIO m, IsCSSValue self) => self -> m Word
 getCssValueType self
-  = liftIO (js_getCssValueType (unCSSValue (toCSSValue self)))
+  = liftIO (js_getCssValueType (toCSSValue self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/CSSValueList.hs b/src/GHCJS/DOM/JSFFI/Generated/CSSValueList.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/CSSValueList.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/CSSValueList.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,7 +20,7 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"item\"]($2)" js_item ::
-        JSRef CSSValueList -> Word -> IO (JSRef CSSValue)
+        CSSValueList -> Word -> IO (Nullable CSSValue)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSValueList.item Mozilla CSSValueList.item documentation> 
 item ::
@@ -28,13 +28,11 @@
        self -> Word -> m (Maybe CSSValue)
 item self index
   = liftIO
-      ((js_item (unCSSValueList (toCSSValueList self)) index) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_item (toCSSValueList self) index))
  
 foreign import javascript unsafe "$1[\"length\"]" js_getLength ::
-        JSRef CSSValueList -> IO Word
+        CSSValueList -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CSSValueList.length Mozilla CSSValueList.length documentation> 
 getLength :: (MonadIO m, IsCSSValueList self) => self -> m Word
-getLength self
-  = liftIO (js_getLength (unCSSValueList (toCSSValueList self)))
+getLength self = liftIO (js_getLength (toCSSValueList self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/CanvasGradient.hs b/src/GHCJS/DOM/JSFFI/Generated/CanvasGradient.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/CanvasGradient.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/CanvasGradient.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,13 +19,11 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"addColorStop\"]($2, $3)"
-        js_addColorStop ::
-        JSRef CanvasGradient -> Float -> JSString -> IO ()
+        js_addColorStop :: CanvasGradient -> Float -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasGradient.addColorStop Mozilla CanvasGradient.addColorStop documentation> 
 addColorStop ::
              (MonadIO m, ToJSString color) =>
                CanvasGradient -> Float -> color -> m ()
 addColorStop self offset color
-  = liftIO
-      (js_addColorStop (unCanvasGradient self) offset (toJSString color))
+  = liftIO (js_addColorStop (self) offset (toJSString color))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/CanvasRenderingContext.hs b/src/GHCJS/DOM/JSFFI/Generated/CanvasRenderingContext.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/CanvasRenderingContext.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/CanvasRenderingContext.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,7 +20,7 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"canvas\"]" js_getCanvas ::
-        JSRef CanvasRenderingContext -> IO (JSRef HTMLCanvasElement)
+        CanvasRenderingContext -> IO (Nullable HTMLCanvasElement)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext.canvas Mozilla CanvasRenderingContext.canvas documentation> 
 getCanvas ::
@@ -28,6 +28,5 @@
             self -> m (Maybe HTMLCanvasElement)
 getCanvas self
   = liftIO
-      ((js_getCanvas
-          (unCanvasRenderingContext (toCanvasRenderingContext self)))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_getCanvas (toCanvasRenderingContext self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/CanvasRenderingContext2D.hs b/src/GHCJS/DOM/JSFFI/Generated/CanvasRenderingContext2D.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/CanvasRenderingContext2D.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/CanvasRenderingContext2D.hs
@@ -75,7 +75,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -89,50 +89,45 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"save\"]()" js_save ::
-        JSRef CanvasRenderingContext2D -> IO ()
+        CanvasRenderingContext2D -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.save Mozilla CanvasRenderingContext2D.save documentation> 
 save :: (MonadIO m) => CanvasRenderingContext2D -> m ()
-save self = liftIO (js_save (unCanvasRenderingContext2D self))
+save self = liftIO (js_save (self))
  
 foreign import javascript unsafe "$1[\"restore\"]()" js_restore ::
-        JSRef CanvasRenderingContext2D -> IO ()
+        CanvasRenderingContext2D -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.restore Mozilla CanvasRenderingContext2D.restore documentation> 
 restore :: (MonadIO m) => CanvasRenderingContext2D -> m ()
-restore self
-  = liftIO (js_restore (unCanvasRenderingContext2D self))
+restore self = liftIO (js_restore (self))
  
 foreign import javascript unsafe "$1[\"scale\"]($2, $3)" js_scale
-        :: JSRef CanvasRenderingContext2D -> Float -> Float -> IO ()
+        :: CanvasRenderingContext2D -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.scale Mozilla CanvasRenderingContext2D.scale documentation> 
 scale ::
       (MonadIO m) => CanvasRenderingContext2D -> Float -> Float -> m ()
-scale self sx sy
-  = liftIO (js_scale (unCanvasRenderingContext2D self) sx sy)
+scale self sx sy = liftIO (js_scale (self) sx sy)
  
 foreign import javascript unsafe "$1[\"rotate\"]($2)" js_rotate ::
-        JSRef CanvasRenderingContext2D -> Float -> IO ()
+        CanvasRenderingContext2D -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.rotate Mozilla CanvasRenderingContext2D.rotate documentation> 
 rotate :: (MonadIO m) => CanvasRenderingContext2D -> Float -> m ()
-rotate self angle
-  = liftIO (js_rotate (unCanvasRenderingContext2D self) angle)
+rotate self angle = liftIO (js_rotate (self) angle)
  
 foreign import javascript unsafe "$1[\"translate\"]($2, $3)"
-        js_translate ::
-        JSRef CanvasRenderingContext2D -> Float -> Float -> IO ()
+        js_translate :: CanvasRenderingContext2D -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.translate Mozilla CanvasRenderingContext2D.translate documentation> 
 translate ::
           (MonadIO m) => CanvasRenderingContext2D -> Float -> Float -> m ()
-translate self tx ty
-  = liftIO (js_translate (unCanvasRenderingContext2D self) tx ty)
+translate self tx ty = liftIO (js_translate (self) tx ty)
  
 foreign import javascript unsafe
         "$1[\"transform\"]($2, $3, $4, $5,\n$6, $7)" js_transform ::
-        JSRef CanvasRenderingContext2D ->
+        CanvasRenderingContext2D ->
           Float -> Float -> Float -> Float -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.transform Mozilla CanvasRenderingContext2D.transform documentation> 
@@ -141,13 +136,11 @@
             CanvasRenderingContext2D ->
               Float -> Float -> Float -> Float -> Float -> Float -> m ()
 transform self m11 m12 m21 m22 dx dy
-  = liftIO
-      (js_transform (unCanvasRenderingContext2D self) m11 m12 m21 m22 dx
-         dy)
+  = liftIO (js_transform (self) m11 m12 m21 m22 dx dy)
  
 foreign import javascript unsafe
         "$1[\"setTransform\"]($2, $3, $4,\n$5, $6, $7)" js_setTransform ::
-        JSRef CanvasRenderingContext2D ->
+        CanvasRenderingContext2D ->
           Float -> Float -> Float -> Float -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.setTransform Mozilla CanvasRenderingContext2D.setTransform documentation> 
@@ -156,16 +149,13 @@
                CanvasRenderingContext2D ->
                  Float -> Float -> Float -> Float -> Float -> Float -> m ()
 setTransform self m11 m12 m21 m22 dx dy
-  = liftIO
-      (js_setTransform (unCanvasRenderingContext2D self) m11 m12 m21 m22
-         dx
-         dy)
+  = liftIO (js_setTransform (self) m11 m12 m21 m22 dx dy)
  
 foreign import javascript unsafe
         "$1[\"createLinearGradient\"]($2,\n$3, $4, $5)"
         js_createLinearGradient ::
-        JSRef CanvasRenderingContext2D ->
-          Float -> Float -> Float -> Float -> IO (JSRef CanvasGradient)
+        CanvasRenderingContext2D ->
+          Float -> Float -> Float -> Float -> IO (Nullable CanvasGradient)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.createLinearGradient Mozilla CanvasRenderingContext2D.createLinearGradient documentation> 
 createLinearGradient ::
@@ -174,18 +164,15 @@
                          Float -> Float -> Float -> Float -> m (Maybe CanvasGradient)
 createLinearGradient self x0 y0 x1 y1
   = liftIO
-      ((js_createLinearGradient (unCanvasRenderingContext2D self) x0 y0
-          x1
-          y1)
-         >>= fromJSRef)
+      (nullableToMaybe <$> (js_createLinearGradient (self) x0 y0 x1 y1))
  
 foreign import javascript unsafe
         "$1[\"createRadialGradient\"]($2,\n$3, $4, $5, $6, $7)"
         js_createRadialGradient ::
-        JSRef CanvasRenderingContext2D ->
+        CanvasRenderingContext2D ->
           Float ->
             Float ->
-              Float -> Float -> Float -> Float -> IO (JSRef CanvasGradient)
+              Float -> Float -> Float -> Float -> IO (Nullable CanvasGradient)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.createRadialGradient Mozilla CanvasRenderingContext2D.createRadialGradient documentation> 
 createRadialGradient ::
@@ -196,39 +183,29 @@
                              Float -> Float -> Float -> Float -> m (Maybe CanvasGradient)
 createRadialGradient self x0 y0 r0 x1 y1 r1
   = liftIO
-      ((js_createRadialGradient (unCanvasRenderingContext2D self) x0 y0
-          r0
-          x1
-          y1
-          r1)
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createRadialGradient (self) x0 y0 r0 x1 y1 r1))
  
 foreign import javascript unsafe "$1[\"setLineDash\"]($2)"
-        js_setLineDash ::
-        JSRef CanvasRenderingContext2D -> JSRef [Float] -> IO ()
+        js_setLineDash :: CanvasRenderingContext2D -> JSRef -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.setLineDash Mozilla CanvasRenderingContext2D.setLineDash documentation> 
 setLineDash ::
             (MonadIO m) => CanvasRenderingContext2D -> [Float] -> m ()
 setLineDash self dash
-  = liftIO
-      (toJSRef dash >>=
-         \ dash' -> js_setLineDash (unCanvasRenderingContext2D self) dash')
+  = liftIO (toJSRef dash >>= \ dash' -> js_setLineDash (self) dash')
  
 foreign import javascript unsafe "$1[\"getLineDash\"]()"
-        js_getLineDash ::
-        JSRef CanvasRenderingContext2D -> IO (JSRef [Float])
+        js_getLineDash :: CanvasRenderingContext2D -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.getLineDash Mozilla CanvasRenderingContext2D.getLineDash documentation> 
 getLineDash :: (MonadIO m) => CanvasRenderingContext2D -> m [Float]
 getLineDash self
-  = liftIO
-      ((js_getLineDash (unCanvasRenderingContext2D self)) >>=
-         fromJSRefUnchecked)
+  = liftIO ((js_getLineDash (self)) >>= fromJSRefUnchecked)
  
 foreign import javascript unsafe
         "$1[\"clearRect\"]($2, $3, $4, $5)" js_clearRect ::
-        JSRef CanvasRenderingContext2D ->
+        CanvasRenderingContext2D ->
           Float -> Float -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.clearRect Mozilla CanvasRenderingContext2D.clearRect documentation> 
@@ -237,12 +214,11 @@
             CanvasRenderingContext2D ->
               Float -> Float -> Float -> Float -> m ()
 clearRect self x y width height
-  = liftIO
-      (js_clearRect (unCanvasRenderingContext2D self) x y width height)
+  = liftIO (js_clearRect (self) x y width height)
  
 foreign import javascript unsafe "$1[\"fillRect\"]($2, $3, $4, $5)"
         js_fillRect ::
-        JSRef CanvasRenderingContext2D ->
+        CanvasRenderingContext2D ->
           Float -> Float -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.fillRect Mozilla CanvasRenderingContext2D.fillRect documentation> 
@@ -251,46 +227,41 @@
            CanvasRenderingContext2D ->
              Float -> Float -> Float -> Float -> m ()
 fillRect self x y width height
-  = liftIO
-      (js_fillRect (unCanvasRenderingContext2D self) x y width height)
+  = liftIO (js_fillRect (self) x y width height)
  
 foreign import javascript unsafe "$1[\"beginPath\"]()" js_beginPath
-        :: JSRef CanvasRenderingContext2D -> IO ()
+        :: CanvasRenderingContext2D -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.beginPath Mozilla CanvasRenderingContext2D.beginPath documentation> 
 beginPath :: (MonadIO m) => CanvasRenderingContext2D -> m ()
-beginPath self
-  = liftIO (js_beginPath (unCanvasRenderingContext2D self))
+beginPath self = liftIO (js_beginPath (self))
  
 foreign import javascript unsafe "$1[\"closePath\"]()" js_closePath
-        :: JSRef CanvasRenderingContext2D -> IO ()
+        :: CanvasRenderingContext2D -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.closePath Mozilla CanvasRenderingContext2D.closePath documentation> 
 closePath :: (MonadIO m) => CanvasRenderingContext2D -> m ()
-closePath self
-  = liftIO (js_closePath (unCanvasRenderingContext2D self))
+closePath self = liftIO (js_closePath (self))
  
 foreign import javascript unsafe "$1[\"moveTo\"]($2, $3)" js_moveTo
-        :: JSRef CanvasRenderingContext2D -> Float -> Float -> IO ()
+        :: CanvasRenderingContext2D -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.moveTo Mozilla CanvasRenderingContext2D.moveTo documentation> 
 moveTo ::
        (MonadIO m) => CanvasRenderingContext2D -> Float -> Float -> m ()
-moveTo self x y
-  = liftIO (js_moveTo (unCanvasRenderingContext2D self) x y)
+moveTo self x y = liftIO (js_moveTo (self) x y)
  
 foreign import javascript unsafe "$1[\"lineTo\"]($2, $3)" js_lineTo
-        :: JSRef CanvasRenderingContext2D -> Float -> Float -> IO ()
+        :: CanvasRenderingContext2D -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.lineTo Mozilla CanvasRenderingContext2D.lineTo documentation> 
 lineTo ::
        (MonadIO m) => CanvasRenderingContext2D -> Float -> Float -> m ()
-lineTo self x y
-  = liftIO (js_lineTo (unCanvasRenderingContext2D self) x y)
+lineTo self x y = liftIO (js_lineTo (self) x y)
  
 foreign import javascript unsafe
         "$1[\"quadraticCurveTo\"]($2, $3,\n$4, $5)" js_quadraticCurveTo ::
-        JSRef CanvasRenderingContext2D ->
+        CanvasRenderingContext2D ->
           Float -> Float -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.quadraticCurveTo Mozilla CanvasRenderingContext2D.quadraticCurveTo documentation> 
@@ -299,13 +270,12 @@
                    CanvasRenderingContext2D ->
                      Float -> Float -> Float -> Float -> m ()
 quadraticCurveTo self cpx cpy x y
-  = liftIO
-      (js_quadraticCurveTo (unCanvasRenderingContext2D self) cpx cpy x y)
+  = liftIO (js_quadraticCurveTo (self) cpx cpy x y)
  
 foreign import javascript unsafe
         "$1[\"bezierCurveTo\"]($2, $3, $4,\n$5, $6, $7)" js_bezierCurveTo
         ::
-        JSRef CanvasRenderingContext2D ->
+        CanvasRenderingContext2D ->
           Float -> Float -> Float -> Float -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.bezierCurveTo Mozilla CanvasRenderingContext2D.bezierCurveTo documentation> 
@@ -314,15 +284,11 @@
                 CanvasRenderingContext2D ->
                   Float -> Float -> Float -> Float -> Float -> Float -> m ()
 bezierCurveTo self cp1x cp1y cp2x cp2y x y
-  = liftIO
-      (js_bezierCurveTo (unCanvasRenderingContext2D self) cp1x cp1y cp2x
-         cp2y
-         x
-         y)
+  = liftIO (js_bezierCurveTo (self) cp1x cp1y cp2x cp2y x y)
  
 foreign import javascript unsafe
         "$1[\"arcTo\"]($2, $3, $4, $5, $6)" js_arcTo ::
-        JSRef CanvasRenderingContext2D ->
+        CanvasRenderingContext2D ->
           Float -> Float -> Float -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.arcTo Mozilla CanvasRenderingContext2D.arcTo documentation> 
@@ -331,12 +297,11 @@
         CanvasRenderingContext2D ->
           Float -> Float -> Float -> Float -> Float -> m ()
 arcTo self x1 y1 x2 y2 radius
-  = liftIO
-      (js_arcTo (unCanvasRenderingContext2D self) x1 y1 x2 y2 radius)
+  = liftIO (js_arcTo (self) x1 y1 x2 y2 radius)
  
 foreign import javascript unsafe "$1[\"rect\"]($2, $3, $4, $5)"
         js_rect ::
-        JSRef CanvasRenderingContext2D ->
+        CanvasRenderingContext2D ->
           Float -> Float -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.rect Mozilla CanvasRenderingContext2D.rect documentation> 
@@ -345,12 +310,11 @@
        CanvasRenderingContext2D ->
          Float -> Float -> Float -> Float -> m ()
 rect self x y width height
-  = liftIO
-      (js_rect (unCanvasRenderingContext2D self) x y width height)
+  = liftIO (js_rect (self) x y width height)
  
 foreign import javascript unsafe
         "$1[\"arc\"]($2, $3, $4, $5, $6,\n$7)" js_arc ::
-        JSRef CanvasRenderingContext2D ->
+        CanvasRenderingContext2D ->
           Float -> Float -> Float -> Float -> Float -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.arc Mozilla CanvasRenderingContext2D.arc documentation> 
@@ -360,14 +324,10 @@
         Float -> Float -> Float -> Float -> Float -> Bool -> m ()
 arc self x y radius startAngle endAngle anticlockwise
   = liftIO
-      (js_arc (unCanvasRenderingContext2D self) x y radius startAngle
-         endAngle
-         anticlockwise)
+      (js_arc (self) x y radius startAngle endAngle anticlockwise)
  
 foreign import javascript unsafe "$1[\"fill\"]($2, $3)" js_fillPath
-        ::
-        JSRef CanvasRenderingContext2D ->
-          JSRef Path2D -> JSRef CanvasWindingRule -> IO ()
+        :: CanvasRenderingContext2D -> Nullable Path2D -> JSRef -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.fill Mozilla CanvasRenderingContext2D.fill documentation> 
 fillPath ::
@@ -376,25 +336,19 @@
              Maybe Path2D -> CanvasWindingRule -> m ()
 fillPath self path winding
   = liftIO
-      (js_fillPath (unCanvasRenderingContext2D self)
-         (maybe jsNull pToJSRef path)
-         (pToJSRef winding))
+      (js_fillPath (self) (maybeToNullable path) (pToJSRef winding))
  
 foreign import javascript unsafe "$1[\"stroke\"]($2)" js_strokePath
-        :: JSRef CanvasRenderingContext2D -> JSRef Path2D -> IO ()
+        :: CanvasRenderingContext2D -> Nullable Path2D -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.stroke Mozilla CanvasRenderingContext2D.stroke documentation> 
 strokePath ::
            (MonadIO m) => CanvasRenderingContext2D -> Maybe Path2D -> m ()
 strokePath self path
-  = liftIO
-      (js_strokePath (unCanvasRenderingContext2D self)
-         (maybe jsNull pToJSRef path))
+  = liftIO (js_strokePath (self) (maybeToNullable path))
  
 foreign import javascript unsafe "$1[\"clip\"]($2, $3)" js_clipPath
-        ::
-        JSRef CanvasRenderingContext2D ->
-          JSRef Path2D -> JSRef CanvasWindingRule -> IO ()
+        :: CanvasRenderingContext2D -> Nullable Path2D -> JSRef -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.clip Mozilla CanvasRenderingContext2D.clip documentation> 
 clipPath ::
@@ -403,45 +357,38 @@
              Maybe Path2D -> CanvasWindingRule -> m ()
 clipPath self path winding
   = liftIO
-      (js_clipPath (unCanvasRenderingContext2D self)
-         (maybe jsNull pToJSRef path)
-         (pToJSRef winding))
+      (js_clipPath (self) (maybeToNullable path) (pToJSRef winding))
  
 foreign import javascript unsafe "$1[\"fill\"]($2)" js_fill ::
-        JSRef CanvasRenderingContext2D -> JSRef CanvasWindingRule -> IO ()
+        CanvasRenderingContext2D -> JSRef -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.fill Mozilla CanvasRenderingContext2D.fill documentation> 
 fill ::
      (MonadIO m) =>
        CanvasRenderingContext2D -> CanvasWindingRule -> m ()
-fill self winding
-  = liftIO
-      (js_fill (unCanvasRenderingContext2D self) (pToJSRef winding))
+fill self winding = liftIO (js_fill (self) (pToJSRef winding))
  
 foreign import javascript unsafe "$1[\"stroke\"]()" js_stroke ::
-        JSRef CanvasRenderingContext2D -> IO ()
+        CanvasRenderingContext2D -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.stroke Mozilla CanvasRenderingContext2D.stroke documentation> 
 stroke :: (MonadIO m) => CanvasRenderingContext2D -> m ()
-stroke self = liftIO (js_stroke (unCanvasRenderingContext2D self))
+stroke self = liftIO (js_stroke (self))
  
 foreign import javascript unsafe "$1[\"clip\"]($2)" js_clip ::
-        JSRef CanvasRenderingContext2D -> JSRef CanvasWindingRule -> IO ()
+        CanvasRenderingContext2D -> JSRef -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.clip Mozilla CanvasRenderingContext2D.clip documentation> 
 clip ::
      (MonadIO m) =>
        CanvasRenderingContext2D -> CanvasWindingRule -> m ()
-clip self winding
-  = liftIO
-      (js_clip (unCanvasRenderingContext2D self) (pToJSRef winding))
+clip self winding = liftIO (js_clip (self) (pToJSRef winding))
  
 foreign import javascript unsafe
         "($1[\"isPointInPath\"]($2, $3, $4,\n$5) ? 1 : 0)"
         js_isPointInPathPath ::
-        JSRef CanvasRenderingContext2D ->
-          JSRef Path2D ->
-            Float -> Float -> JSRef CanvasWindingRule -> IO Bool
+        CanvasRenderingContext2D ->
+          Nullable Path2D -> Float -> Float -> JSRef -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.isPointInPath Mozilla CanvasRenderingContext2D.isPointInPath documentation> 
 isPointInPathPath ::
@@ -450,17 +397,14 @@
                       Maybe Path2D -> Float -> Float -> CanvasWindingRule -> m Bool
 isPointInPathPath self path x y winding
   = liftIO
-      (js_isPointInPathPath (unCanvasRenderingContext2D self)
-         (maybe jsNull pToJSRef path)
-         x
-         y
+      (js_isPointInPathPath (self) (maybeToNullable path) x y
          (pToJSRef winding))
  
 foreign import javascript unsafe
         "($1[\"isPointInStroke\"]($2, $3,\n$4) ? 1 : 0)"
         js_isPointInStrokePath ::
-        JSRef CanvasRenderingContext2D ->
-          JSRef Path2D -> Float -> Float -> IO Bool
+        CanvasRenderingContext2D ->
+          Nullable Path2D -> Float -> Float -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.isPointInStroke Mozilla CanvasRenderingContext2D.isPointInStroke documentation> 
 isPointInStrokePath ::
@@ -468,16 +412,11 @@
                       CanvasRenderingContext2D ->
                         Maybe Path2D -> Float -> Float -> m Bool
 isPointInStrokePath self path x y
-  = liftIO
-      (js_isPointInStrokePath (unCanvasRenderingContext2D self)
-         (maybe jsNull pToJSRef path)
-         x
-         y)
+  = liftIO (js_isPointInStrokePath (self) (maybeToNullable path) x y)
  
 foreign import javascript unsafe
         "($1[\"isPointInPath\"]($2, $3,\n$4) ? 1 : 0)" js_isPointInPath ::
-        JSRef CanvasRenderingContext2D ->
-          Float -> Float -> JSRef CanvasWindingRule -> IO Bool
+        CanvasRenderingContext2D -> Float -> Float -> JSRef -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.isPointInPath Mozilla CanvasRenderingContext2D.isPointInPath documentation> 
 isPointInPath ::
@@ -485,24 +424,20 @@
                 CanvasRenderingContext2D ->
                   Float -> Float -> CanvasWindingRule -> m Bool
 isPointInPath self x y winding
-  = liftIO
-      (js_isPointInPath (unCanvasRenderingContext2D self) x y
-         (pToJSRef winding))
+  = liftIO (js_isPointInPath (self) x y (pToJSRef winding))
  
 foreign import javascript unsafe
         "($1[\"isPointInStroke\"]($2,\n$3) ? 1 : 0)" js_isPointInStroke ::
-        JSRef CanvasRenderingContext2D -> Float -> Float -> IO Bool
+        CanvasRenderingContext2D -> Float -> Float -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.isPointInStroke Mozilla CanvasRenderingContext2D.isPointInStroke documentation> 
 isPointInStroke ::
                 (MonadIO m) => CanvasRenderingContext2D -> Float -> Float -> m Bool
-isPointInStroke self x y
-  = liftIO (js_isPointInStroke (unCanvasRenderingContext2D self) x y)
+isPointInStroke self x y = liftIO (js_isPointInStroke (self) x y)
  
 foreign import javascript unsafe "$1[\"measureText\"]($2)"
         js_measureText ::
-        JSRef CanvasRenderingContext2D ->
-          JSString -> IO (JSRef TextMetrics)
+        CanvasRenderingContext2D -> JSString -> IO (Nullable TextMetrics)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.measureText Mozilla CanvasRenderingContext2D.measureText documentation> 
 measureText ::
@@ -510,22 +445,19 @@
               CanvasRenderingContext2D -> text -> m (Maybe TextMetrics)
 measureText self text
   = liftIO
-      ((js_measureText (unCanvasRenderingContext2D self)
-          (toJSString text))
-         >>= fromJSRef)
+      (nullableToMaybe <$> (js_measureText (self) (toJSString text)))
  
 foreign import javascript unsafe "$1[\"setAlpha\"]($2)" js_setAlpha
-        :: JSRef CanvasRenderingContext2D -> Float -> IO ()
+        :: CanvasRenderingContext2D -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.setAlpha Mozilla CanvasRenderingContext2D.setAlpha documentation> 
 setAlpha ::
          (MonadIO m) => CanvasRenderingContext2D -> Float -> m ()
-setAlpha self alpha
-  = liftIO (js_setAlpha (unCanvasRenderingContext2D self) alpha)
+setAlpha self alpha = liftIO (js_setAlpha (self) alpha)
  
 foreign import javascript unsafe
         "$1[\"setCompositeOperation\"]($2)" js_setCompositeOperation ::
-        JSRef CanvasRenderingContext2D -> JSString -> IO ()
+        CanvasRenderingContext2D -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.setCompositeOperation Mozilla CanvasRenderingContext2D.setCompositeOperation documentation> 
 setCompositeOperation ::
@@ -533,68 +465,60 @@
                         CanvasRenderingContext2D -> compositeOperation -> m ()
 setCompositeOperation self compositeOperation
   = liftIO
-      (js_setCompositeOperation (unCanvasRenderingContext2D self)
-         (toJSString compositeOperation))
+      (js_setCompositeOperation (self) (toJSString compositeOperation))
  
 foreign import javascript unsafe "$1[\"setLineWidth\"]($2)"
         js_setLineWidthFunction ::
-        JSRef CanvasRenderingContext2D -> Float -> IO ()
+        CanvasRenderingContext2D -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.setLineWidth Mozilla CanvasRenderingContext2D.setLineWidth documentation> 
 setLineWidthFunction ::
                      (MonadIO m) => CanvasRenderingContext2D -> Float -> m ()
 setLineWidthFunction self width
-  = liftIO
-      (js_setLineWidthFunction (unCanvasRenderingContext2D self) width)
+  = liftIO (js_setLineWidthFunction (self) width)
  
 foreign import javascript unsafe "$1[\"setLineCap\"]($2)"
         js_setLineCapFunction ::
-        JSRef CanvasRenderingContext2D -> JSString -> IO ()
+        CanvasRenderingContext2D -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.setLineCap Mozilla CanvasRenderingContext2D.setLineCap documentation> 
 setLineCapFunction ::
                    (MonadIO m, ToJSString cap) =>
                      CanvasRenderingContext2D -> cap -> m ()
 setLineCapFunction self cap
-  = liftIO
-      (js_setLineCapFunction (unCanvasRenderingContext2D self)
-         (toJSString cap))
+  = liftIO (js_setLineCapFunction (self) (toJSString cap))
  
 foreign import javascript unsafe "$1[\"setLineJoin\"]($2)"
         js_setLineJoinFunction ::
-        JSRef CanvasRenderingContext2D -> JSString -> IO ()
+        CanvasRenderingContext2D -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.setLineJoin Mozilla CanvasRenderingContext2D.setLineJoin documentation> 
 setLineJoinFunction ::
                     (MonadIO m, ToJSString join) =>
                       CanvasRenderingContext2D -> join -> m ()
 setLineJoinFunction self join
-  = liftIO
-      (js_setLineJoinFunction (unCanvasRenderingContext2D self)
-         (toJSString join))
+  = liftIO (js_setLineJoinFunction (self) (toJSString join))
  
 foreign import javascript unsafe "$1[\"setMiterLimit\"]($2)"
         js_setMiterLimitFunction ::
-        JSRef CanvasRenderingContext2D -> Float -> IO ()
+        CanvasRenderingContext2D -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.setMiterLimit Mozilla CanvasRenderingContext2D.setMiterLimit documentation> 
 setMiterLimitFunction ::
                       (MonadIO m) => CanvasRenderingContext2D -> Float -> m ()
 setMiterLimitFunction self limit
-  = liftIO
-      (js_setMiterLimitFunction (unCanvasRenderingContext2D self) limit)
+  = liftIO (js_setMiterLimitFunction (self) limit)
  
 foreign import javascript unsafe "$1[\"clearShadow\"]()"
-        js_clearShadow :: JSRef CanvasRenderingContext2D -> IO ()
+        js_clearShadow :: CanvasRenderingContext2D -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.clearShadow Mozilla CanvasRenderingContext2D.clearShadow documentation> 
 clearShadow :: (MonadIO m) => CanvasRenderingContext2D -> m ()
-clearShadow self
-  = liftIO (js_clearShadow (unCanvasRenderingContext2D self))
+clearShadow self = liftIO (js_clearShadow (self))
  
 foreign import javascript unsafe "$1[\"fillText\"]($2, $3, $4, $5)"
         js_fillText ::
-        JSRef CanvasRenderingContext2D ->
+        CanvasRenderingContext2D ->
           JSString -> Float -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.fillText Mozilla CanvasRenderingContext2D.fillText documentation> 
@@ -602,14 +526,11 @@
          (MonadIO m, ToJSString text) =>
            CanvasRenderingContext2D -> text -> Float -> Float -> Float -> m ()
 fillText self text x y maxWidth
-  = liftIO
-      (js_fillText (unCanvasRenderingContext2D self) (toJSString text) x
-         y
-         maxWidth)
+  = liftIO (js_fillText (self) (toJSString text) x y maxWidth)
  
 foreign import javascript unsafe
         "$1[\"strokeText\"]($2, $3, $4, $5)" js_strokeText ::
-        JSRef CanvasRenderingContext2D ->
+        CanvasRenderingContext2D ->
           JSString -> Float -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.strokeText Mozilla CanvasRenderingContext2D.strokeText documentation> 
@@ -617,41 +538,32 @@
            (MonadIO m, ToJSString text) =>
              CanvasRenderingContext2D -> text -> Float -> Float -> Float -> m ()
 strokeText self text x y maxWidth
-  = liftIO
-      (js_strokeText (unCanvasRenderingContext2D self) (toJSString text)
-         x
-         y
-         maxWidth)
+  = liftIO (js_strokeText (self) (toJSString text) x y maxWidth)
  
 foreign import javascript unsafe "$1[\"setStrokeColor\"]($2, $3)"
         js_setStrokeColor ::
-        JSRef CanvasRenderingContext2D -> JSString -> Float -> IO ()
+        CanvasRenderingContext2D -> JSString -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.setStrokeColor Mozilla CanvasRenderingContext2D.setStrokeColor documentation> 
 setStrokeColor ::
                (MonadIO m, ToJSString color) =>
                  CanvasRenderingContext2D -> color -> Float -> m ()
 setStrokeColor self color alpha
-  = liftIO
-      (js_setStrokeColor (unCanvasRenderingContext2D self)
-         (toJSString color)
-         alpha)
+  = liftIO (js_setStrokeColor (self) (toJSString color) alpha)
  
 foreign import javascript unsafe "$1[\"setStrokeColor\"]($2, $3)"
         js_setStrokeColorGray ::
-        JSRef CanvasRenderingContext2D -> Float -> Float -> IO ()
+        CanvasRenderingContext2D -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.setStrokeColor Mozilla CanvasRenderingContext2D.setStrokeColor documentation> 
 setStrokeColorGray ::
                    (MonadIO m) => CanvasRenderingContext2D -> Float -> Float -> m ()
 setStrokeColorGray self grayLevel alpha
-  = liftIO
-      (js_setStrokeColorGray (unCanvasRenderingContext2D self) grayLevel
-         alpha)
+  = liftIO (js_setStrokeColorGray (self) grayLevel alpha)
  
 foreign import javascript unsafe
         "$1[\"setStrokeColor\"]($2, $3, $4,\n$5)" js_setStrokeColorRGB ::
-        JSRef CanvasRenderingContext2D ->
+        CanvasRenderingContext2D ->
           Float -> Float -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.setStrokeColor Mozilla CanvasRenderingContext2D.setStrokeColor documentation> 
@@ -660,13 +572,12 @@
                     CanvasRenderingContext2D ->
                       Float -> Float -> Float -> Float -> m ()
 setStrokeColorRGB self r g b a
-  = liftIO
-      (js_setStrokeColorRGB (unCanvasRenderingContext2D self) r g b a)
+  = liftIO (js_setStrokeColorRGB (self) r g b a)
  
 foreign import javascript unsafe
         "$1[\"setStrokeColor\"]($2, $3, $4,\n$5, $6)" js_setStrokeColorCYMK
         ::
-        JSRef CanvasRenderingContext2D ->
+        CanvasRenderingContext2D ->
           Float -> Float -> Float -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.setStrokeColor Mozilla CanvasRenderingContext2D.setStrokeColor documentation> 
@@ -675,38 +586,32 @@
                      CanvasRenderingContext2D ->
                        Float -> Float -> Float -> Float -> Float -> m ()
 setStrokeColorCYMK self c m y k a
-  = liftIO
-      (js_setStrokeColorCYMK (unCanvasRenderingContext2D self) c m y k a)
+  = liftIO (js_setStrokeColorCYMK (self) c m y k a)
  
 foreign import javascript unsafe "$1[\"setFillColor\"]($2, $3)"
         js_setFillColor ::
-        JSRef CanvasRenderingContext2D -> JSString -> Float -> IO ()
+        CanvasRenderingContext2D -> JSString -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.setFillColor Mozilla CanvasRenderingContext2D.setFillColor documentation> 
 setFillColor ::
              (MonadIO m, ToJSString color) =>
                CanvasRenderingContext2D -> color -> Float -> m ()
 setFillColor self color alpha
-  = liftIO
-      (js_setFillColor (unCanvasRenderingContext2D self)
-         (toJSString color)
-         alpha)
+  = liftIO (js_setFillColor (self) (toJSString color) alpha)
  
 foreign import javascript unsafe "$1[\"setFillColor\"]($2, $3)"
         js_setFillColorGray ::
-        JSRef CanvasRenderingContext2D -> Float -> Float -> IO ()
+        CanvasRenderingContext2D -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.setFillColor Mozilla CanvasRenderingContext2D.setFillColor documentation> 
 setFillColorGray ::
                  (MonadIO m) => CanvasRenderingContext2D -> Float -> Float -> m ()
 setFillColorGray self grayLevel alpha
-  = liftIO
-      (js_setFillColorGray (unCanvasRenderingContext2D self) grayLevel
-         alpha)
+  = liftIO (js_setFillColorGray (self) grayLevel alpha)
  
 foreign import javascript unsafe
         "$1[\"setFillColor\"]($2, $3, $4,\n$5)" js_setFillColorRGB ::
-        JSRef CanvasRenderingContext2D ->
+        CanvasRenderingContext2D ->
           Float -> Float -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.setFillColor Mozilla CanvasRenderingContext2D.setFillColor documentation> 
@@ -715,12 +620,11 @@
                   CanvasRenderingContext2D ->
                     Float -> Float -> Float -> Float -> m ()
 setFillColorRGB self r g b a
-  = liftIO
-      (js_setFillColorRGB (unCanvasRenderingContext2D self) r g b a)
+  = liftIO (js_setFillColorRGB (self) r g b a)
  
 foreign import javascript unsafe
         "$1[\"setFillColor\"]($2, $3, $4,\n$5, $6)" js_setFillColorCYMK ::
-        JSRef CanvasRenderingContext2D ->
+        CanvasRenderingContext2D ->
           Float -> Float -> Float -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.setFillColor Mozilla CanvasRenderingContext2D.setFillColor documentation> 
@@ -729,12 +633,11 @@
                    CanvasRenderingContext2D ->
                      Float -> Float -> Float -> Float -> Float -> m ()
 setFillColorCYMK self c m y k a
-  = liftIO
-      (js_setFillColorCYMK (unCanvasRenderingContext2D self) c m y k a)
+  = liftIO (js_setFillColorCYMK (self) c m y k a)
  
 foreign import javascript unsafe
         "$1[\"strokeRect\"]($2, $3, $4, $5)" js_strokeRect ::
-        JSRef CanvasRenderingContext2D ->
+        CanvasRenderingContext2D ->
           Float -> Float -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.strokeRect Mozilla CanvasRenderingContext2D.strokeRect documentation> 
@@ -743,13 +646,12 @@
              CanvasRenderingContext2D ->
                Float -> Float -> Float -> Float -> m ()
 strokeRect self x y width height
-  = liftIO
-      (js_strokeRect (unCanvasRenderingContext2D self) x y width height)
+  = liftIO (js_strokeRect (self) x y width height)
  
 foreign import javascript unsafe "$1[\"drawImage\"]($2, $3, $4)"
         js_drawImage ::
-        JSRef CanvasRenderingContext2D ->
-          JSRef HTMLImageElement -> Float -> Float -> IO ()
+        CanvasRenderingContext2D ->
+          Nullable HTMLImageElement -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.drawImage Mozilla CanvasRenderingContext2D.drawImage documentation> 
 drawImage ::
@@ -757,16 +659,13 @@
             CanvasRenderingContext2D ->
               Maybe HTMLImageElement -> Float -> Float -> m ()
 drawImage self image x y
-  = liftIO
-      (js_drawImage (unCanvasRenderingContext2D self)
-         (maybe jsNull pToJSRef image)
-         x
-         y)
+  = liftIO (js_drawImage (self) (maybeToNullable image) x y)
  
 foreign import javascript unsafe
         "$1[\"drawImage\"]($2, $3, $4, $5,\n$6)" js_drawImageScaled ::
-        JSRef CanvasRenderingContext2D ->
-          JSRef HTMLImageElement -> Float -> Float -> Float -> Float -> IO ()
+        CanvasRenderingContext2D ->
+          Nullable HTMLImageElement ->
+            Float -> Float -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.drawImage Mozilla CanvasRenderingContext2D.drawImage documentation> 
 drawImageScaled ::
@@ -775,18 +674,14 @@
                     Maybe HTMLImageElement -> Float -> Float -> Float -> Float -> m ()
 drawImageScaled self image x y width height
   = liftIO
-      (js_drawImageScaled (unCanvasRenderingContext2D self)
-         (maybe jsNull pToJSRef image)
-         x
-         y
-         width
+      (js_drawImageScaled (self) (maybeToNullable image) x y width
          height)
  
 foreign import javascript unsafe
         "$1[\"drawImage\"]($2, $3, $4, $5,\n$6, $7, $8, $9, $10)"
         js_drawImagePart ::
-        JSRef CanvasRenderingContext2D ->
-          JSRef HTMLImageElement ->
+        CanvasRenderingContext2D ->
+          Nullable HTMLImageElement ->
             Float ->
               Float ->
                 Float -> Float -> Float -> Float -> Float -> Float -> IO ()
@@ -800,21 +695,14 @@
                       Float -> Float -> Float -> Float -> Float -> Float -> Float -> m ()
 drawImagePart self image sx sy sw sh dx dy dw dh
   = liftIO
-      (js_drawImagePart (unCanvasRenderingContext2D self)
-         (maybe jsNull pToJSRef image)
-         sx
-         sy
-         sw
-         sh
-         dx
-         dy
+      (js_drawImagePart (self) (maybeToNullable image) sx sy sw sh dx dy
          dw
          dh)
  
 foreign import javascript unsafe "$1[\"drawImage\"]($2, $3, $4)"
         js_drawImageFromCanvas ::
-        JSRef CanvasRenderingContext2D ->
-          JSRef HTMLCanvasElement -> Float -> Float -> IO ()
+        CanvasRenderingContext2D ->
+          Nullable HTMLCanvasElement -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.drawImage Mozilla CanvasRenderingContext2D.drawImage documentation> 
 drawImageFromCanvas ::
@@ -823,16 +711,13 @@
                         Maybe HTMLCanvasElement -> Float -> Float -> m ()
 drawImageFromCanvas self canvas x y
   = liftIO
-      (js_drawImageFromCanvas (unCanvasRenderingContext2D self)
-         (maybe jsNull pToJSRef canvas)
-         x
-         y)
+      (js_drawImageFromCanvas (self) (maybeToNullable canvas) x y)
  
 foreign import javascript unsafe
         "$1[\"drawImage\"]($2, $3, $4, $5,\n$6)"
         js_drawImageFromCanvasScaled ::
-        JSRef CanvasRenderingContext2D ->
-          JSRef HTMLCanvasElement ->
+        CanvasRenderingContext2D ->
+          Nullable HTMLCanvasElement ->
             Float -> Float -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.drawImage Mozilla CanvasRenderingContext2D.drawImage documentation> 
@@ -842,18 +727,15 @@
                               Maybe HTMLCanvasElement -> Float -> Float -> Float -> Float -> m ()
 drawImageFromCanvasScaled self canvas x y width height
   = liftIO
-      (js_drawImageFromCanvasScaled (unCanvasRenderingContext2D self)
-         (maybe jsNull pToJSRef canvas)
-         x
-         y
+      (js_drawImageFromCanvasScaled (self) (maybeToNullable canvas) x y
          width
          height)
  
 foreign import javascript unsafe
         "$1[\"drawImage\"]($2, $3, $4, $5,\n$6, $7, $8, $9, $10)"
         js_drawImageFromCanvasPart ::
-        JSRef CanvasRenderingContext2D ->
-          JSRef HTMLCanvasElement ->
+        CanvasRenderingContext2D ->
+          Nullable HTMLCanvasElement ->
             Float ->
               Float ->
                 Float -> Float -> Float -> Float -> Float -> Float -> IO ()
@@ -867,10 +749,7 @@
                                 Float -> Float -> Float -> Float -> Float -> Float -> Float -> m ()
 drawImageFromCanvasPart self canvas sx sy sw sh dx dy dw dh
   = liftIO
-      (js_drawImageFromCanvasPart (unCanvasRenderingContext2D self)
-         (maybe jsNull pToJSRef canvas)
-         sx
-         sy
+      (js_drawImageFromCanvasPart (self) (maybeToNullable canvas) sx sy
          sw
          sh
          dx
@@ -880,8 +759,8 @@
  
 foreign import javascript unsafe "$1[\"drawImage\"]($2, $3, $4)"
         js_drawImageFromVideo ::
-        JSRef CanvasRenderingContext2D ->
-          JSRef HTMLVideoElement -> Float -> Float -> IO ()
+        CanvasRenderingContext2D ->
+          Nullable HTMLVideoElement -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.drawImage Mozilla CanvasRenderingContext2D.drawImage documentation> 
 drawImageFromVideo ::
@@ -889,17 +768,14 @@
                      CanvasRenderingContext2D ->
                        Maybe HTMLVideoElement -> Float -> Float -> m ()
 drawImageFromVideo self video x y
-  = liftIO
-      (js_drawImageFromVideo (unCanvasRenderingContext2D self)
-         (maybe jsNull pToJSRef video)
-         x
-         y)
+  = liftIO (js_drawImageFromVideo (self) (maybeToNullable video) x y)
  
 foreign import javascript unsafe
         "$1[\"drawImage\"]($2, $3, $4, $5,\n$6)"
         js_drawImageFromVideoScaled ::
-        JSRef CanvasRenderingContext2D ->
-          JSRef HTMLVideoElement -> Float -> Float -> Float -> Float -> IO ()
+        CanvasRenderingContext2D ->
+          Nullable HTMLVideoElement ->
+            Float -> Float -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.drawImage Mozilla CanvasRenderingContext2D.drawImage documentation> 
 drawImageFromVideoScaled ::
@@ -908,18 +784,15 @@
                              Maybe HTMLVideoElement -> Float -> Float -> Float -> Float -> m ()
 drawImageFromVideoScaled self video x y width height
   = liftIO
-      (js_drawImageFromVideoScaled (unCanvasRenderingContext2D self)
-         (maybe jsNull pToJSRef video)
-         x
-         y
+      (js_drawImageFromVideoScaled (self) (maybeToNullable video) x y
          width
          height)
  
 foreign import javascript unsafe
         "$1[\"drawImage\"]($2, $3, $4, $5,\n$6, $7, $8, $9, $10)"
         js_drawImageFromVideoPart ::
-        JSRef CanvasRenderingContext2D ->
-          JSRef HTMLVideoElement ->
+        CanvasRenderingContext2D ->
+          Nullable HTMLVideoElement ->
             Float ->
               Float ->
                 Float -> Float -> Float -> Float -> Float -> Float -> IO ()
@@ -933,11 +806,7 @@
                                Float -> Float -> Float -> Float -> Float -> Float -> Float -> m ()
 drawImageFromVideoPart self video sx sy sw sh dx dy dw dh
   = liftIO
-      (js_drawImageFromVideoPart (unCanvasRenderingContext2D self)
-         (maybe jsNull pToJSRef video)
-         sx
-         sy
-         sw
+      (js_drawImageFromVideoPart (self) (maybeToNullable video) sx sy sw
          sh
          dx
          dy
@@ -947,8 +816,8 @@
 foreign import javascript unsafe
         "$1[\"drawImageFromRect\"]($2, $3,\n$4, $5, $6, $7, $8, $9, $10,\n$11)"
         js_drawImageFromRect ::
-        JSRef CanvasRenderingContext2D ->
-          JSRef HTMLImageElement ->
+        CanvasRenderingContext2D ->
+          Nullable HTMLImageElement ->
             Float ->
               Float ->
                 Float ->
@@ -967,13 +836,7 @@
 drawImageFromRect self image sx sy sw sh dx dy dw dh
   compositeOperation
   = liftIO
-      (js_drawImageFromRect (unCanvasRenderingContext2D self)
-         (maybe jsNull pToJSRef image)
-         sx
-         sy
-         sw
-         sh
-         dx
+      (js_drawImageFromRect (self) (maybeToNullable image) sx sy sw sh dx
          dy
          dw
          dh
@@ -981,7 +844,7 @@
  
 foreign import javascript unsafe
         "$1[\"setShadow\"]($2, $3, $4, $5,\n$6)" js_setShadow ::
-        JSRef CanvasRenderingContext2D ->
+        CanvasRenderingContext2D ->
           Float -> Float -> Float -> JSString -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.setShadow Mozilla CanvasRenderingContext2D.setShadow documentation> 
@@ -991,13 +854,11 @@
               Float -> Float -> Float -> color -> Float -> m ()
 setShadow self width height blur color alpha
   = liftIO
-      (js_setShadow (unCanvasRenderingContext2D self) width height blur
-         (toJSString color)
-         alpha)
+      (js_setShadow (self) width height blur (toJSString color) alpha)
  
 foreign import javascript unsafe
         "$1[\"setShadow\"]($2, $3, $4, $5,\n$6)" js_setShadowGray ::
-        JSRef CanvasRenderingContext2D ->
+        CanvasRenderingContext2D ->
           Float -> Float -> Float -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.setShadow Mozilla CanvasRenderingContext2D.setShadow documentation> 
@@ -1007,14 +868,11 @@
                   Float -> Float -> Float -> Float -> Float -> m ()
 setShadowGray self width height blur grayLevel alpha
   = liftIO
-      (js_setShadowGray (unCanvasRenderingContext2D self) width height
-         blur
-         grayLevel
-         alpha)
+      (js_setShadowGray (self) width height blur grayLevel alpha)
  
 foreign import javascript unsafe
         "$1[\"setShadow\"]($2, $3, $4, $5,\n$6, $7, $8)" js_setShadowRGB ::
-        JSRef CanvasRenderingContext2D ->
+        CanvasRenderingContext2D ->
           Float ->
             Float -> Float -> Float -> Float -> Float -> Float -> IO ()
 
@@ -1024,18 +882,12 @@
                CanvasRenderingContext2D ->
                  Float -> Float -> Float -> Float -> Float -> Float -> Float -> m ()
 setShadowRGB self width height blur r g b a
-  = liftIO
-      (js_setShadowRGB (unCanvasRenderingContext2D self) width height
-         blur
-         r
-         g
-         b
-         a)
+  = liftIO (js_setShadowRGB (self) width height blur r g b a)
  
 foreign import javascript unsafe
         "$1[\"setShadow\"]($2, $3, $4, $5,\n$6, $7, $8, $9)"
         js_setShadowCYMK ::
-        JSRef CanvasRenderingContext2D ->
+        CanvasRenderingContext2D ->
           Float ->
             Float ->
               Float -> Float -> Float -> Float -> Float -> Float -> IO ()
@@ -1047,19 +899,12 @@
                   Float ->
                     Float -> Float -> Float -> Float -> Float -> Float -> Float -> m ()
 setShadowCYMK self width height blur c m y k a
-  = liftIO
-      (js_setShadowCYMK (unCanvasRenderingContext2D self) width height
-         blur
-         c
-         m
-         y
-         k
-         a)
+  = liftIO (js_setShadowCYMK (self) width height blur c m y k a)
  
 foreign import javascript unsafe "$1[\"putImageData\"]($2, $3, $4)"
         js_putImageData ::
-        JSRef CanvasRenderingContext2D ->
-          JSRef ImageData -> Float -> Float -> IO ()
+        CanvasRenderingContext2D ->
+          Nullable ImageData -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.putImageData Mozilla CanvasRenderingContext2D.putImageData documentation> 
 putImageData ::
@@ -1067,17 +912,13 @@
                CanvasRenderingContext2D ->
                  Maybe ImageData -> Float -> Float -> m ()
 putImageData self imagedata dx dy
-  = liftIO
-      (js_putImageData (unCanvasRenderingContext2D self)
-         (maybe jsNull pToJSRef imagedata)
-         dx
-         dy)
+  = liftIO (js_putImageData (self) (maybeToNullable imagedata) dx dy)
  
 foreign import javascript unsafe
         "$1[\"putImageData\"]($2, $3, $4,\n$5, $6, $7, $8)"
         js_putImageDataDirty ::
-        JSRef CanvasRenderingContext2D ->
-          JSRef ImageData ->
+        CanvasRenderingContext2D ->
+          Nullable ImageData ->
             Float -> Float -> Float -> Float -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.putImageData Mozilla CanvasRenderingContext2D.putImageData documentation> 
@@ -1089,10 +930,7 @@
 putImageDataDirty self imagedata dx dy dirtyX dirtyY dirtyWidth
   dirtyHeight
   = liftIO
-      (js_putImageDataDirty (unCanvasRenderingContext2D self)
-         (maybe jsNull pToJSRef imagedata)
-         dx
-         dy
+      (js_putImageDataDirty (self) (maybeToNullable imagedata) dx dy
          dirtyX
          dirtyY
          dirtyWidth
@@ -1101,8 +939,8 @@
 foreign import javascript unsafe
         "$1[\"webkitPutImageDataHD\"]($2,\n$3, $4)" js_webkitPutImageDataHD
         ::
-        JSRef CanvasRenderingContext2D ->
-          JSRef ImageData -> Float -> Float -> IO ()
+        CanvasRenderingContext2D ->
+          Nullable ImageData -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.webkitPutImageDataHD Mozilla CanvasRenderingContext2D.webkitPutImageDataHD documentation> 
 webkitPutImageDataHD ::
@@ -1111,16 +949,13 @@
                          Maybe ImageData -> Float -> Float -> m ()
 webkitPutImageDataHD self imagedata dx dy
   = liftIO
-      (js_webkitPutImageDataHD (unCanvasRenderingContext2D self)
-         (maybe jsNull pToJSRef imagedata)
-         dx
-         dy)
+      (js_webkitPutImageDataHD (self) (maybeToNullable imagedata) dx dy)
  
 foreign import javascript unsafe
         "$1[\"webkitPutImageDataHD\"]($2,\n$3, $4, $5, $6, $7, $8)"
         js_webkitPutImageDataHDDirty ::
-        JSRef CanvasRenderingContext2D ->
-          JSRef ImageData ->
+        CanvasRenderingContext2D ->
+          Nullable ImageData ->
             Float -> Float -> Float -> Float -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.webkitPutImageDataHD Mozilla CanvasRenderingContext2D.webkitPutImageDataHD documentation> 
@@ -1132,9 +967,7 @@
 webkitPutImageDataHDDirty self imagedata dx dy dirtyX dirtyY
   dirtyWidth dirtyHeight
   = liftIO
-      (js_webkitPutImageDataHDDirty (unCanvasRenderingContext2D self)
-         (maybe jsNull pToJSRef imagedata)
-         dx
+      (js_webkitPutImageDataHDDirty (self) (maybeToNullable imagedata) dx
          dy
          dirtyX
          dirtyY
@@ -1143,9 +976,9 @@
  
 foreign import javascript unsafe "$1[\"createPattern\"]($2, $3)"
         js_createPatternFromCanvas ::
-        JSRef CanvasRenderingContext2D ->
-          JSRef HTMLCanvasElement ->
-            JSRef (Maybe JSString) -> IO (JSRef CanvasPattern)
+        CanvasRenderingContext2D ->
+          Nullable HTMLCanvasElement ->
+            Nullable JSString -> IO (Nullable CanvasPattern)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.createPattern Mozilla CanvasRenderingContext2D.createPattern documentation> 
 createPatternFromCanvas ::
@@ -1155,16 +988,15 @@
                               Maybe repetitionType -> m (Maybe CanvasPattern)
 createPatternFromCanvas self canvas repetitionType
   = liftIO
-      ((js_createPatternFromCanvas (unCanvasRenderingContext2D self)
-          (maybe jsNull pToJSRef canvas)
-          (toMaybeJSString repetitionType))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createPatternFromCanvas (self) (maybeToNullable canvas)
+            (toMaybeJSString repetitionType)))
  
 foreign import javascript unsafe "$1[\"createPattern\"]($2, $3)"
         js_createPattern ::
-        JSRef CanvasRenderingContext2D ->
-          JSRef HTMLImageElement ->
-            JSRef (Maybe JSString) -> IO (JSRef CanvasPattern)
+        CanvasRenderingContext2D ->
+          Nullable HTMLImageElement ->
+            Nullable JSString -> IO (Nullable CanvasPattern)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.createPattern Mozilla CanvasRenderingContext2D.createPattern documentation> 
 createPattern ::
@@ -1174,15 +1006,14 @@
                     Maybe repetitionType -> m (Maybe CanvasPattern)
 createPattern self image repetitionType
   = liftIO
-      ((js_createPattern (unCanvasRenderingContext2D self)
-          (maybe jsNull pToJSRef image)
-          (toMaybeJSString repetitionType))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createPattern (self) (maybeToNullable image)
+            (toMaybeJSString repetitionType)))
  
 foreign import javascript unsafe "$1[\"createImageData\"]($2)"
         js_createImageData ::
-        JSRef CanvasRenderingContext2D ->
-          JSRef ImageData -> IO (JSRef ImageData)
+        CanvasRenderingContext2D ->
+          Nullable ImageData -> IO (Nullable ImageData)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.createImageData Mozilla CanvasRenderingContext2D.createImageData documentation> 
 createImageData ::
@@ -1190,14 +1021,13 @@
                   CanvasRenderingContext2D -> Maybe ImageData -> m (Maybe ImageData)
 createImageData self imagedata
   = liftIO
-      ((js_createImageData (unCanvasRenderingContext2D self)
-          (maybe jsNull pToJSRef imagedata))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createImageData (self) (maybeToNullable imagedata)))
  
 foreign import javascript unsafe "$1[\"createImageData\"]($2, $3)"
         js_createImageDataSize ::
-        JSRef CanvasRenderingContext2D ->
-          Float -> Float -> IO (JSRef ImageData)
+        CanvasRenderingContext2D ->
+          Float -> Float -> IO (Nullable ImageData)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.createImageData Mozilla CanvasRenderingContext2D.createImageData documentation> 
 createImageDataSize ::
@@ -1205,13 +1035,12 @@
                       CanvasRenderingContext2D -> Float -> Float -> m (Maybe ImageData)
 createImageDataSize self sw sh
   = liftIO
-      ((js_createImageDataSize (unCanvasRenderingContext2D self) sw sh)
-         >>= fromJSRef)
+      (nullableToMaybe <$> (js_createImageDataSize (self) sw sh))
  
 foreign import javascript unsafe
         "$1[\"getImageData\"]($2, $3, $4,\n$5)" js_getImageData ::
-        JSRef CanvasRenderingContext2D ->
-          Float -> Float -> Float -> Float -> IO (JSRef ImageData)
+        CanvasRenderingContext2D ->
+          Float -> Float -> Float -> Float -> IO (Nullable ImageData)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.getImageData Mozilla CanvasRenderingContext2D.getImageData documentation> 
 getImageData ::
@@ -1219,15 +1048,13 @@
                CanvasRenderingContext2D ->
                  Float -> Float -> Float -> Float -> m (Maybe ImageData)
 getImageData self sx sy sw sh
-  = liftIO
-      ((js_getImageData (unCanvasRenderingContext2D self) sx sy sw sh)
-         >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getImageData (self) sx sy sw sh))
  
 foreign import javascript unsafe
         "$1[\"webkitGetImageDataHD\"]($2,\n$3, $4, $5)"
         js_webkitGetImageDataHD ::
-        JSRef CanvasRenderingContext2D ->
-          Float -> Float -> Float -> Float -> IO (JSRef ImageData)
+        CanvasRenderingContext2D ->
+          Float -> Float -> Float -> Float -> IO (Nullable ImageData)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.webkitGetImageDataHD Mozilla CanvasRenderingContext2D.webkitGetImageDataHD documentation> 
 webkitGetImageDataHD ::
@@ -1236,14 +1063,11 @@
                          Float -> Float -> Float -> Float -> m (Maybe ImageData)
 webkitGetImageDataHD self sx sy sw sh
   = liftIO
-      ((js_webkitGetImageDataHD (unCanvasRenderingContext2D self) sx sy
-          sw
-          sh)
-         >>= fromJSRef)
+      (nullableToMaybe <$> (js_webkitGetImageDataHD (self) sx sy sw sh))
  
 foreign import javascript unsafe "$1[\"drawFocusIfNeeded\"]($2)"
         js_drawFocusIfNeeded ::
-        JSRef CanvasRenderingContext2D -> JSRef Element -> IO ()
+        CanvasRenderingContext2D -> Nullable Element -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.drawFocusIfNeeded Mozilla CanvasRenderingContext2D.drawFocusIfNeeded documentation> 
 drawFocusIfNeeded ::
@@ -1251,13 +1075,13 @@
                     CanvasRenderingContext2D -> Maybe element -> m ()
 drawFocusIfNeeded self element
   = liftIO
-      (js_drawFocusIfNeeded (unCanvasRenderingContext2D self)
-         (maybe jsNull (unElement . toElement) element))
+      (js_drawFocusIfNeeded (self)
+         (maybeToNullable (fmap toElement element)))
  
 foreign import javascript unsafe
         "$1[\"drawFocusIfNeeded\"]($2, $3)" js_drawFocusIfNeededPath ::
-        JSRef CanvasRenderingContext2D ->
-          JSRef Path2D -> JSRef Element -> IO ()
+        CanvasRenderingContext2D ->
+          Nullable Path2D -> Nullable Element -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.drawFocusIfNeeded Mozilla CanvasRenderingContext2D.drawFocusIfNeeded documentation> 
 drawFocusIfNeededPath ::
@@ -1265,33 +1089,29 @@
                         CanvasRenderingContext2D -> Maybe Path2D -> Maybe element -> m ()
 drawFocusIfNeededPath self path element
   = liftIO
-      (js_drawFocusIfNeededPath (unCanvasRenderingContext2D self)
-         (maybe jsNull pToJSRef path)
-         (maybe jsNull (unElement . toElement) element))
+      (js_drawFocusIfNeededPath (self) (maybeToNullable path)
+         (maybeToNullable (fmap toElement element)))
  
 foreign import javascript unsafe "$1[\"globalAlpha\"] = $2;"
-        js_setGlobalAlpha ::
-        JSRef CanvasRenderingContext2D -> Float -> IO ()
+        js_setGlobalAlpha :: CanvasRenderingContext2D -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.globalAlpha Mozilla CanvasRenderingContext2D.globalAlpha documentation> 
 setGlobalAlpha ::
                (MonadIO m) => CanvasRenderingContext2D -> Float -> m ()
-setGlobalAlpha self val
-  = liftIO (js_setGlobalAlpha (unCanvasRenderingContext2D self) val)
+setGlobalAlpha self val = liftIO (js_setGlobalAlpha (self) val)
  
 foreign import javascript unsafe "$1[\"globalAlpha\"]"
-        js_getGlobalAlpha :: JSRef CanvasRenderingContext2D -> IO Float
+        js_getGlobalAlpha :: CanvasRenderingContext2D -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.globalAlpha Mozilla CanvasRenderingContext2D.globalAlpha documentation> 
 getGlobalAlpha ::
                (MonadIO m) => CanvasRenderingContext2D -> m Float
-getGlobalAlpha self
-  = liftIO (js_getGlobalAlpha (unCanvasRenderingContext2D self))
+getGlobalAlpha self = liftIO (js_getGlobalAlpha (self))
  
 foreign import javascript unsafe
         "$1[\"globalCompositeOperation\"] = $2;"
         js_setGlobalCompositeOperation ::
-        JSRef CanvasRenderingContext2D -> JSRef (Maybe JSString) -> IO ()
+        CanvasRenderingContext2D -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.globalCompositeOperation Mozilla CanvasRenderingContext2D.globalCompositeOperation documentation> 
 setGlobalCompositeOperation ::
@@ -1299,12 +1119,11 @@
                               CanvasRenderingContext2D -> Maybe val -> m ()
 setGlobalCompositeOperation self val
   = liftIO
-      (js_setGlobalCompositeOperation (unCanvasRenderingContext2D self)
-         (toMaybeJSString val))
+      (js_setGlobalCompositeOperation (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"globalCompositeOperation\"]"
         js_getGlobalCompositeOperation ::
-        JSRef CanvasRenderingContext2D -> IO (JSRef (Maybe JSString))
+        CanvasRenderingContext2D -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.globalCompositeOperation Mozilla CanvasRenderingContext2D.globalCompositeOperation documentation> 
 getGlobalCompositeOperation ::
@@ -1312,201 +1131,169 @@
                               CanvasRenderingContext2D -> m (Maybe result)
 getGlobalCompositeOperation self
   = liftIO
-      (fromMaybeJSString <$>
-         (js_getGlobalCompositeOperation (unCanvasRenderingContext2D self)))
+      (fromMaybeJSString <$> (js_getGlobalCompositeOperation (self)))
  
 foreign import javascript unsafe "$1[\"lineWidth\"] = $2;"
-        js_setLineWidth :: JSRef CanvasRenderingContext2D -> Float -> IO ()
+        js_setLineWidth :: CanvasRenderingContext2D -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.lineWidth Mozilla CanvasRenderingContext2D.lineWidth documentation> 
 setLineWidth ::
              (MonadIO m) => CanvasRenderingContext2D -> Float -> m ()
-setLineWidth self val
-  = liftIO (js_setLineWidth (unCanvasRenderingContext2D self) val)
+setLineWidth self val = liftIO (js_setLineWidth (self) val)
  
 foreign import javascript unsafe "$1[\"lineWidth\"]"
-        js_getLineWidth :: JSRef CanvasRenderingContext2D -> IO Float
+        js_getLineWidth :: CanvasRenderingContext2D -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.lineWidth Mozilla CanvasRenderingContext2D.lineWidth documentation> 
 getLineWidth :: (MonadIO m) => CanvasRenderingContext2D -> m Float
-getLineWidth self
-  = liftIO (js_getLineWidth (unCanvasRenderingContext2D self))
+getLineWidth self = liftIO (js_getLineWidth (self))
  
 foreign import javascript unsafe "$1[\"lineCap\"] = $2;"
         js_setLineCap ::
-        JSRef CanvasRenderingContext2D -> JSRef (Maybe JSString) -> IO ()
+        CanvasRenderingContext2D -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.lineCap Mozilla CanvasRenderingContext2D.lineCap documentation> 
 setLineCap ::
            (MonadIO m, ToJSString val) =>
              CanvasRenderingContext2D -> Maybe val -> m ()
 setLineCap self val
-  = liftIO
-      (js_setLineCap (unCanvasRenderingContext2D self)
-         (toMaybeJSString val))
+  = liftIO (js_setLineCap (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"lineCap\"]" js_getLineCap ::
-        JSRef CanvasRenderingContext2D -> IO (JSRef (Maybe JSString))
+        CanvasRenderingContext2D -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.lineCap Mozilla CanvasRenderingContext2D.lineCap documentation> 
 getLineCap ::
            (MonadIO m, FromJSString result) =>
              CanvasRenderingContext2D -> m (Maybe result)
 getLineCap self
-  = liftIO
-      (fromMaybeJSString <$>
-         (js_getLineCap (unCanvasRenderingContext2D self)))
+  = liftIO (fromMaybeJSString <$> (js_getLineCap (self)))
  
 foreign import javascript unsafe "$1[\"lineJoin\"] = $2;"
         js_setLineJoin ::
-        JSRef CanvasRenderingContext2D -> JSRef (Maybe JSString) -> IO ()
+        CanvasRenderingContext2D -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.lineJoin Mozilla CanvasRenderingContext2D.lineJoin documentation> 
 setLineJoin ::
             (MonadIO m, ToJSString val) =>
               CanvasRenderingContext2D -> Maybe val -> m ()
 setLineJoin self val
-  = liftIO
-      (js_setLineJoin (unCanvasRenderingContext2D self)
-         (toMaybeJSString val))
+  = liftIO (js_setLineJoin (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"lineJoin\"]" js_getLineJoin
-        :: JSRef CanvasRenderingContext2D -> IO (JSRef (Maybe JSString))
+        :: CanvasRenderingContext2D -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.lineJoin Mozilla CanvasRenderingContext2D.lineJoin documentation> 
 getLineJoin ::
             (MonadIO m, FromJSString result) =>
               CanvasRenderingContext2D -> m (Maybe result)
 getLineJoin self
-  = liftIO
-      (fromMaybeJSString <$>
-         (js_getLineJoin (unCanvasRenderingContext2D self)))
+  = liftIO (fromMaybeJSString <$> (js_getLineJoin (self)))
  
 foreign import javascript unsafe "$1[\"miterLimit\"] = $2;"
-        js_setMiterLimit ::
-        JSRef CanvasRenderingContext2D -> Float -> IO ()
+        js_setMiterLimit :: CanvasRenderingContext2D -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.miterLimit Mozilla CanvasRenderingContext2D.miterLimit documentation> 
 setMiterLimit ::
               (MonadIO m) => CanvasRenderingContext2D -> Float -> m ()
-setMiterLimit self val
-  = liftIO (js_setMiterLimit (unCanvasRenderingContext2D self) val)
+setMiterLimit self val = liftIO (js_setMiterLimit (self) val)
  
 foreign import javascript unsafe "$1[\"miterLimit\"]"
-        js_getMiterLimit :: JSRef CanvasRenderingContext2D -> IO Float
+        js_getMiterLimit :: CanvasRenderingContext2D -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.miterLimit Mozilla CanvasRenderingContext2D.miterLimit documentation> 
 getMiterLimit :: (MonadIO m) => CanvasRenderingContext2D -> m Float
-getMiterLimit self
-  = liftIO (js_getMiterLimit (unCanvasRenderingContext2D self))
+getMiterLimit self = liftIO (js_getMiterLimit (self))
  
 foreign import javascript unsafe "$1[\"shadowOffsetX\"] = $2;"
-        js_setShadowOffsetX ::
-        JSRef CanvasRenderingContext2D -> Float -> IO ()
+        js_setShadowOffsetX :: CanvasRenderingContext2D -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.shadowOffsetX Mozilla CanvasRenderingContext2D.shadowOffsetX documentation> 
 setShadowOffsetX ::
                  (MonadIO m) => CanvasRenderingContext2D -> Float -> m ()
-setShadowOffsetX self val
-  = liftIO
-      (js_setShadowOffsetX (unCanvasRenderingContext2D self) val)
+setShadowOffsetX self val = liftIO (js_setShadowOffsetX (self) val)
  
 foreign import javascript unsafe "$1[\"shadowOffsetX\"]"
-        js_getShadowOffsetX :: JSRef CanvasRenderingContext2D -> IO Float
+        js_getShadowOffsetX :: CanvasRenderingContext2D -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.shadowOffsetX Mozilla CanvasRenderingContext2D.shadowOffsetX documentation> 
 getShadowOffsetX ::
                  (MonadIO m) => CanvasRenderingContext2D -> m Float
-getShadowOffsetX self
-  = liftIO (js_getShadowOffsetX (unCanvasRenderingContext2D self))
+getShadowOffsetX self = liftIO (js_getShadowOffsetX (self))
  
 foreign import javascript unsafe "$1[\"shadowOffsetY\"] = $2;"
-        js_setShadowOffsetY ::
-        JSRef CanvasRenderingContext2D -> Float -> IO ()
+        js_setShadowOffsetY :: CanvasRenderingContext2D -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.shadowOffsetY Mozilla CanvasRenderingContext2D.shadowOffsetY documentation> 
 setShadowOffsetY ::
                  (MonadIO m) => CanvasRenderingContext2D -> Float -> m ()
-setShadowOffsetY self val
-  = liftIO
-      (js_setShadowOffsetY (unCanvasRenderingContext2D self) val)
+setShadowOffsetY self val = liftIO (js_setShadowOffsetY (self) val)
  
 foreign import javascript unsafe "$1[\"shadowOffsetY\"]"
-        js_getShadowOffsetY :: JSRef CanvasRenderingContext2D -> IO Float
+        js_getShadowOffsetY :: CanvasRenderingContext2D -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.shadowOffsetY Mozilla CanvasRenderingContext2D.shadowOffsetY documentation> 
 getShadowOffsetY ::
                  (MonadIO m) => CanvasRenderingContext2D -> m Float
-getShadowOffsetY self
-  = liftIO (js_getShadowOffsetY (unCanvasRenderingContext2D self))
+getShadowOffsetY self = liftIO (js_getShadowOffsetY (self))
  
 foreign import javascript unsafe "$1[\"shadowBlur\"] = $2;"
-        js_setShadowBlur ::
-        JSRef CanvasRenderingContext2D -> Float -> IO ()
+        js_setShadowBlur :: CanvasRenderingContext2D -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.shadowBlur Mozilla CanvasRenderingContext2D.shadowBlur documentation> 
 setShadowBlur ::
               (MonadIO m) => CanvasRenderingContext2D -> Float -> m ()
-setShadowBlur self val
-  = liftIO (js_setShadowBlur (unCanvasRenderingContext2D self) val)
+setShadowBlur self val = liftIO (js_setShadowBlur (self) val)
  
 foreign import javascript unsafe "$1[\"shadowBlur\"]"
-        js_getShadowBlur :: JSRef CanvasRenderingContext2D -> IO Float
+        js_getShadowBlur :: CanvasRenderingContext2D -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.shadowBlur Mozilla CanvasRenderingContext2D.shadowBlur documentation> 
 getShadowBlur :: (MonadIO m) => CanvasRenderingContext2D -> m Float
-getShadowBlur self
-  = liftIO (js_getShadowBlur (unCanvasRenderingContext2D self))
+getShadowBlur self = liftIO (js_getShadowBlur (self))
  
 foreign import javascript unsafe "$1[\"shadowColor\"] = $2;"
         js_setShadowColor ::
-        JSRef CanvasRenderingContext2D -> JSRef (Maybe JSString) -> IO ()
+        CanvasRenderingContext2D -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.shadowColor Mozilla CanvasRenderingContext2D.shadowColor documentation> 
 setShadowColor ::
                (MonadIO m, ToJSString val) =>
                  CanvasRenderingContext2D -> Maybe val -> m ()
 setShadowColor self val
-  = liftIO
-      (js_setShadowColor (unCanvasRenderingContext2D self)
-         (toMaybeJSString val))
+  = liftIO (js_setShadowColor (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"shadowColor\"]"
         js_getShadowColor ::
-        JSRef CanvasRenderingContext2D -> IO (JSRef (Maybe JSString))
+        CanvasRenderingContext2D -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.shadowColor Mozilla CanvasRenderingContext2D.shadowColor documentation> 
 getShadowColor ::
                (MonadIO m, FromJSString result) =>
                  CanvasRenderingContext2D -> m (Maybe result)
 getShadowColor self
-  = liftIO
-      (fromMaybeJSString <$>
-         (js_getShadowColor (unCanvasRenderingContext2D self)))
+  = liftIO (fromMaybeJSString <$> (js_getShadowColor (self)))
  
 foreign import javascript unsafe "$1[\"lineDashOffset\"] = $2;"
-        js_setLineDashOffset ::
-        JSRef CanvasRenderingContext2D -> Float -> IO ()
+        js_setLineDashOffset :: CanvasRenderingContext2D -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.lineDashOffset Mozilla CanvasRenderingContext2D.lineDashOffset documentation> 
 setLineDashOffset ::
                   (MonadIO m) => CanvasRenderingContext2D -> Float -> m ()
 setLineDashOffset self val
-  = liftIO
-      (js_setLineDashOffset (unCanvasRenderingContext2D self) val)
+  = liftIO (js_setLineDashOffset (self) val)
  
 foreign import javascript unsafe "$1[\"lineDashOffset\"]"
-        js_getLineDashOffset :: JSRef CanvasRenderingContext2D -> IO Float
+        js_getLineDashOffset :: CanvasRenderingContext2D -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.lineDashOffset Mozilla CanvasRenderingContext2D.lineDashOffset documentation> 
 getLineDashOffset ::
                   (MonadIO m) => CanvasRenderingContext2D -> m Float
-getLineDashOffset self
-  = liftIO (js_getLineDashOffset (unCanvasRenderingContext2D self))
+getLineDashOffset self = liftIO (js_getLineDashOffset (self))
  
 foreign import javascript unsafe "$1[\"webkitLineDash\"] = $2;"
         js_setWebkitLineDash ::
-        JSRef CanvasRenderingContext2D -> JSRef Array -> IO ()
+        CanvasRenderingContext2D -> Nullable Array -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.webkitLineDash Mozilla CanvasRenderingContext2D.webkitLineDash documentation> 
 setWebkitLineDash ::
@@ -1514,143 +1301,118 @@
                     CanvasRenderingContext2D -> Maybe val -> m ()
 setWebkitLineDash self val
   = liftIO
-      (js_setWebkitLineDash (unCanvasRenderingContext2D self)
-         (maybe jsNull (unArray . toArray) val))
+      (js_setWebkitLineDash (self) (maybeToNullable (fmap toArray val)))
  
 foreign import javascript unsafe "$1[\"webkitLineDash\"]"
         js_getWebkitLineDash ::
-        JSRef CanvasRenderingContext2D -> IO (JSRef Array)
+        CanvasRenderingContext2D -> IO (Nullable Array)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.webkitLineDash Mozilla CanvasRenderingContext2D.webkitLineDash documentation> 
 getWebkitLineDash ::
                   (MonadIO m) => CanvasRenderingContext2D -> m (Maybe Array)
 getWebkitLineDash self
-  = liftIO
-      ((js_getWebkitLineDash (unCanvasRenderingContext2D self)) >>=
-         fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getWebkitLineDash (self)))
  
 foreign import javascript unsafe
         "$1[\"webkitLineDashOffset\"] = $2;" js_setWebkitLineDashOffset ::
-        JSRef CanvasRenderingContext2D -> Float -> IO ()
+        CanvasRenderingContext2D -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.webkitLineDashOffset Mozilla CanvasRenderingContext2D.webkitLineDashOffset documentation> 
 setWebkitLineDashOffset ::
                         (MonadIO m) => CanvasRenderingContext2D -> Float -> m ()
 setWebkitLineDashOffset self val
-  = liftIO
-      (js_setWebkitLineDashOffset (unCanvasRenderingContext2D self) val)
+  = liftIO (js_setWebkitLineDashOffset (self) val)
  
 foreign import javascript unsafe "$1[\"webkitLineDashOffset\"]"
-        js_getWebkitLineDashOffset ::
-        JSRef CanvasRenderingContext2D -> IO Float
+        js_getWebkitLineDashOffset :: CanvasRenderingContext2D -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.webkitLineDashOffset Mozilla CanvasRenderingContext2D.webkitLineDashOffset documentation> 
 getWebkitLineDashOffset ::
                         (MonadIO m) => CanvasRenderingContext2D -> m Float
 getWebkitLineDashOffset self
-  = liftIO
-      (js_getWebkitLineDashOffset (unCanvasRenderingContext2D self))
+  = liftIO (js_getWebkitLineDashOffset (self))
  
 foreign import javascript unsafe "$1[\"font\"] = $2;" js_setFont ::
-        JSRef CanvasRenderingContext2D -> JSString -> IO ()
+        CanvasRenderingContext2D -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.font Mozilla CanvasRenderingContext2D.font documentation> 
 setFont ::
         (MonadIO m, ToJSString val) =>
           CanvasRenderingContext2D -> val -> m ()
-setFont self val
-  = liftIO
-      (js_setFont (unCanvasRenderingContext2D self) (toJSString val))
+setFont self val = liftIO (js_setFont (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"font\"]" js_getFont ::
-        JSRef CanvasRenderingContext2D -> IO JSString
+        CanvasRenderingContext2D -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.font Mozilla CanvasRenderingContext2D.font documentation> 
 getFont ::
         (MonadIO m, FromJSString result) =>
           CanvasRenderingContext2D -> m result
-getFont self
-  = liftIO
-      (fromJSString <$> (js_getFont (unCanvasRenderingContext2D self)))
+getFont self = liftIO (fromJSString <$> (js_getFont (self)))
  
 foreign import javascript unsafe "$1[\"textAlign\"] = $2;"
-        js_setTextAlign ::
-        JSRef CanvasRenderingContext2D -> JSString -> IO ()
+        js_setTextAlign :: CanvasRenderingContext2D -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.textAlign Mozilla CanvasRenderingContext2D.textAlign documentation> 
 setTextAlign ::
              (MonadIO m, ToJSString val) =>
                CanvasRenderingContext2D -> val -> m ()
 setTextAlign self val
-  = liftIO
-      (js_setTextAlign (unCanvasRenderingContext2D self)
-         (toJSString val))
+  = liftIO (js_setTextAlign (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"textAlign\"]"
-        js_getTextAlign :: JSRef CanvasRenderingContext2D -> IO JSString
+        js_getTextAlign :: CanvasRenderingContext2D -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.textAlign Mozilla CanvasRenderingContext2D.textAlign documentation> 
 getTextAlign ::
              (MonadIO m, FromJSString result) =>
                CanvasRenderingContext2D -> m result
 getTextAlign self
-  = liftIO
-      (fromJSString <$>
-         (js_getTextAlign (unCanvasRenderingContext2D self)))
+  = liftIO (fromJSString <$> (js_getTextAlign (self)))
  
 foreign import javascript unsafe "$1[\"textBaseline\"] = $2;"
-        js_setTextBaseline ::
-        JSRef CanvasRenderingContext2D -> JSString -> IO ()
+        js_setTextBaseline :: CanvasRenderingContext2D -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.textBaseline Mozilla CanvasRenderingContext2D.textBaseline documentation> 
 setTextBaseline ::
                 (MonadIO m, ToJSString val) =>
                   CanvasRenderingContext2D -> val -> m ()
 setTextBaseline self val
-  = liftIO
-      (js_setTextBaseline (unCanvasRenderingContext2D self)
-         (toJSString val))
+  = liftIO (js_setTextBaseline (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"textBaseline\"]"
-        js_getTextBaseline :: JSRef CanvasRenderingContext2D -> IO JSString
+        js_getTextBaseline :: CanvasRenderingContext2D -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.textBaseline Mozilla CanvasRenderingContext2D.textBaseline documentation> 
 getTextBaseline ::
                 (MonadIO m, FromJSString result) =>
                   CanvasRenderingContext2D -> m result
 getTextBaseline self
-  = liftIO
-      (fromJSString <$>
-         (js_getTextBaseline (unCanvasRenderingContext2D self)))
+  = liftIO (fromJSString <$> (js_getTextBaseline (self)))
  
 foreign import javascript unsafe "$1[\"direction\"] = $2;"
-        js_setDirection ::
-        JSRef CanvasRenderingContext2D -> JSString -> IO ()
+        js_setDirection :: CanvasRenderingContext2D -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.direction Mozilla CanvasRenderingContext2D.direction documentation> 
 setDirection ::
              (MonadIO m, ToJSString val) =>
                CanvasRenderingContext2D -> val -> m ()
 setDirection self val
-  = liftIO
-      (js_setDirection (unCanvasRenderingContext2D self)
-         (toJSString val))
+  = liftIO (js_setDirection (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"direction\"]"
-        js_getDirection :: JSRef CanvasRenderingContext2D -> IO JSString
+        js_getDirection :: CanvasRenderingContext2D -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.direction Mozilla CanvasRenderingContext2D.direction documentation> 
 getDirection ::
              (MonadIO m, FromJSString result) =>
                CanvasRenderingContext2D -> m result
 getDirection self
-  = liftIO
-      (fromJSString <$>
-         (js_getDirection (unCanvasRenderingContext2D self)))
+  = liftIO (fromJSString <$> (js_getDirection (self)))
  
 foreign import javascript unsafe "$1[\"strokeStyle\"] = $2;"
         js_setStrokeStyle ::
-        JSRef CanvasRenderingContext2D -> JSRef CanvasStyle -> IO ()
+        CanvasRenderingContext2D -> Nullable CanvasStyle -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.strokeStyle Mozilla CanvasRenderingContext2D.strokeStyle documentation> 
 setStrokeStyle ::
@@ -1658,24 +1420,22 @@
                  CanvasRenderingContext2D -> Maybe val -> m ()
 setStrokeStyle self val
   = liftIO
-      (js_setStrokeStyle (unCanvasRenderingContext2D self)
-         (maybe jsNull (unCanvasStyle . toCanvasStyle) val))
+      (js_setStrokeStyle (self)
+         (maybeToNullable (fmap toCanvasStyle val)))
  
 foreign import javascript unsafe "$1[\"strokeStyle\"]"
         js_getStrokeStyle ::
-        JSRef CanvasRenderingContext2D -> IO (JSRef CanvasStyle)
+        CanvasRenderingContext2D -> IO (Nullable CanvasStyle)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.strokeStyle Mozilla CanvasRenderingContext2D.strokeStyle documentation> 
 getStrokeStyle ::
                (MonadIO m) => CanvasRenderingContext2D -> m (Maybe CanvasStyle)
 getStrokeStyle self
-  = liftIO
-      ((js_getStrokeStyle (unCanvasRenderingContext2D self)) >>=
-         fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getStrokeStyle (self)))
  
 foreign import javascript unsafe "$1[\"fillStyle\"] = $2;"
         js_setFillStyle ::
-        JSRef CanvasRenderingContext2D -> JSRef CanvasStyle -> IO ()
+        CanvasRenderingContext2D -> Nullable CanvasStyle -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.fillStyle Mozilla CanvasRenderingContext2D.fillStyle documentation> 
 setFillStyle ::
@@ -1683,56 +1443,47 @@
                CanvasRenderingContext2D -> Maybe val -> m ()
 setFillStyle self val
   = liftIO
-      (js_setFillStyle (unCanvasRenderingContext2D self)
-         (maybe jsNull (unCanvasStyle . toCanvasStyle) val))
+      (js_setFillStyle (self) (maybeToNullable (fmap toCanvasStyle val)))
  
 foreign import javascript unsafe "$1[\"fillStyle\"]"
         js_getFillStyle ::
-        JSRef CanvasRenderingContext2D -> IO (JSRef CanvasStyle)
+        CanvasRenderingContext2D -> IO (Nullable CanvasStyle)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.fillStyle Mozilla CanvasRenderingContext2D.fillStyle documentation> 
 getFillStyle ::
              (MonadIO m) => CanvasRenderingContext2D -> m (Maybe CanvasStyle)
 getFillStyle self
-  = liftIO
-      ((js_getFillStyle (unCanvasRenderingContext2D self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getFillStyle (self)))
  
 foreign import javascript unsafe
         "$1[\"webkitBackingStorePixelRatio\"]"
         js_getWebkitBackingStorePixelRatio ::
-        JSRef CanvasRenderingContext2D -> IO Float
+        CanvasRenderingContext2D -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.webkitBackingStorePixelRatio Mozilla CanvasRenderingContext2D.webkitBackingStorePixelRatio documentation> 
 getWebkitBackingStorePixelRatio ::
                                 (MonadIO m) => CanvasRenderingContext2D -> m Float
 getWebkitBackingStorePixelRatio self
-  = liftIO
-      (js_getWebkitBackingStorePixelRatio
-         (unCanvasRenderingContext2D self))
+  = liftIO (js_getWebkitBackingStorePixelRatio (self))
  
 foreign import javascript unsafe
         "$1[\"webkitImageSmoothingEnabled\"] = $2;"
         js_setWebkitImageSmoothingEnabled ::
-        JSRef CanvasRenderingContext2D -> Bool -> IO ()
+        CanvasRenderingContext2D -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.webkitImageSmoothingEnabled Mozilla CanvasRenderingContext2D.webkitImageSmoothingEnabled documentation> 
 setWebkitImageSmoothingEnabled ::
                                (MonadIO m) => CanvasRenderingContext2D -> Bool -> m ()
 setWebkitImageSmoothingEnabled self val
-  = liftIO
-      (js_setWebkitImageSmoothingEnabled
-         (unCanvasRenderingContext2D self)
-         val)
+  = liftIO (js_setWebkitImageSmoothingEnabled (self) val)
  
 foreign import javascript unsafe
         "($1[\"webkitImageSmoothingEnabled\"] ? 1 : 0)"
         js_getWebkitImageSmoothingEnabled ::
-        JSRef CanvasRenderingContext2D -> IO Bool
+        CanvasRenderingContext2D -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.webkitImageSmoothingEnabled Mozilla CanvasRenderingContext2D.webkitImageSmoothingEnabled documentation> 
 getWebkitImageSmoothingEnabled ::
                                (MonadIO m) => CanvasRenderingContext2D -> m Bool
 getWebkitImageSmoothingEnabled self
-  = liftIO
-      (js_getWebkitImageSmoothingEnabled
-         (unCanvasRenderingContext2D self))
+  = liftIO (js_getWebkitImageSmoothingEnabled (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/CapabilityRange.hs b/src/GHCJS/DOM/JSFFI/Generated/CapabilityRange.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/CapabilityRange.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/CapabilityRange.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,23 +20,22 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"max\"]" js_getMax ::
-        JSRef CapabilityRange -> IO (JSRef a)
+        CapabilityRange -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CapabilityRange.max Mozilla CapabilityRange.max documentation> 
-getMax :: (MonadIO m) => CapabilityRange -> m (JSRef a)
-getMax self = liftIO (js_getMax (unCapabilityRange self))
+getMax :: (MonadIO m) => CapabilityRange -> m JSRef
+getMax self = liftIO (js_getMax (self))
  
 foreign import javascript unsafe "$1[\"min\"]" js_getMin ::
-        JSRef CapabilityRange -> IO (JSRef a)
+        CapabilityRange -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CapabilityRange.min Mozilla CapabilityRange.min documentation> 
-getMin :: (MonadIO m) => CapabilityRange -> m (JSRef a)
-getMin self = liftIO (js_getMin (unCapabilityRange self))
+getMin :: (MonadIO m) => CapabilityRange -> m JSRef
+getMin self = liftIO (js_getMin (self))
  
 foreign import javascript unsafe "($1[\"supported\"] ? 1 : 0)"
-        js_getSupported :: JSRef CapabilityRange -> IO Bool
+        js_getSupported :: CapabilityRange -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CapabilityRange.supported Mozilla CapabilityRange.supported documentation> 
 getSupported :: (MonadIO m) => CapabilityRange -> m Bool
-getSupported self
-  = liftIO (js_getSupported (unCapabilityRange self))
+getSupported self = liftIO (js_getSupported (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/CharacterData.hs b/src/GHCJS/DOM/JSFFI/Generated/CharacterData.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/CharacterData.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/CharacterData.hs
@@ -9,7 +9,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -24,7 +24,7 @@
  
 foreign import javascript unsafe "$1[\"substringData\"]($2, $3)"
         js_substringData ::
-        JSRef CharacterData -> Word -> Word -> IO (JSRef (Maybe JSString))
+        CharacterData -> Word -> Word -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CharacterData.substringData Mozilla CharacterData.substringData documentation> 
 substringData ::
@@ -33,23 +33,20 @@
 substringData self offset length
   = liftIO
       (fromMaybeJSString <$>
-         (js_substringData (unCharacterData (toCharacterData self)) offset
-            length))
+         (js_substringData (toCharacterData self) offset length))
  
 foreign import javascript unsafe "$1[\"appendData\"]($2)"
-        js_appendData :: JSRef CharacterData -> JSString -> IO ()
+        js_appendData :: CharacterData -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CharacterData.appendData Mozilla CharacterData.appendData documentation> 
 appendData ::
            (MonadIO m, IsCharacterData self, ToJSString data') =>
              self -> data' -> m ()
 appendData self data'
-  = liftIO
-      (js_appendData (unCharacterData (toCharacterData self))
-         (toJSString data'))
+  = liftIO (js_appendData (toCharacterData self) (toJSString data'))
  
 foreign import javascript unsafe "$1[\"insertData\"]($2, $3)"
-        js_insertData :: JSRef CharacterData -> Word -> JSString -> IO ()
+        js_insertData :: CharacterData -> Word -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CharacterData.insertData Mozilla CharacterData.insertData documentation> 
 insertData ::
@@ -57,23 +54,20 @@
              self -> Word -> data' -> m ()
 insertData self offset data'
   = liftIO
-      (js_insertData (unCharacterData (toCharacterData self)) offset
-         (toJSString data'))
+      (js_insertData (toCharacterData self) offset (toJSString data'))
  
 foreign import javascript unsafe "$1[\"deleteData\"]($2, $3)"
-        js_deleteData :: JSRef CharacterData -> Word -> Word -> IO ()
+        js_deleteData :: CharacterData -> Word -> Word -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CharacterData.deleteData Mozilla CharacterData.deleteData documentation> 
 deleteData ::
            (MonadIO m, IsCharacterData self) => self -> Word -> Word -> m ()
 deleteData self offset length
-  = liftIO
-      (js_deleteData (unCharacterData (toCharacterData self)) offset
-         length)
+  = liftIO (js_deleteData (toCharacterData self) offset length)
  
 foreign import javascript unsafe "$1[\"replaceData\"]($2, $3, $4)"
         js_replaceData ::
-        JSRef CharacterData -> Word -> Word -> JSString -> IO ()
+        CharacterData -> Word -> Word -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CharacterData.replaceData Mozilla CharacterData.replaceData documentation> 
 replaceData ::
@@ -81,24 +75,21 @@
               self -> Word -> Word -> data' -> m ()
 replaceData self offset length data'
   = liftIO
-      (js_replaceData (unCharacterData (toCharacterData self)) offset
-         length
+      (js_replaceData (toCharacterData self) offset length
          (toJSString data'))
  
 foreign import javascript unsafe "$1[\"data\"] = $2;" js_setData ::
-        JSRef CharacterData -> JSRef (Maybe JSString) -> IO ()
+        CharacterData -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CharacterData.data Mozilla CharacterData.data documentation> 
 setData ::
         (MonadIO m, IsCharacterData self, ToJSString val) =>
           self -> Maybe val -> m ()
 setData self val
-  = liftIO
-      (js_setData (unCharacterData (toCharacterData self))
-         (toMaybeJSString val))
+  = liftIO (js_setData (toCharacterData self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"data\"]" js_getData ::
-        JSRef CharacterData -> IO (JSRef (Maybe JSString))
+        CharacterData -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CharacterData.data Mozilla CharacterData.data documentation> 
 getData ::
@@ -106,13 +97,11 @@
           self -> m (Maybe result)
 getData self
   = liftIO
-      (fromMaybeJSString <$>
-         (js_getData (unCharacterData (toCharacterData self))))
+      (fromMaybeJSString <$> (js_getData (toCharacterData self)))
  
 foreign import javascript unsafe "$1[\"length\"]" js_getLength ::
-        JSRef CharacterData -> IO Word
+        CharacterData -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CharacterData.length Mozilla CharacterData.length documentation> 
 getLength :: (MonadIO m, IsCharacterData self) => self -> m Word
-getLength self
-  = liftIO (js_getLength (unCharacterData (toCharacterData self)))
+getLength self = liftIO (js_getLength (toCharacterData self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/ChildNode.hs b/src/GHCJS/DOM/JSFFI/Generated/ChildNode.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/ChildNode.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/ChildNode.hs
@@ -4,7 +4,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -18,8 +18,8 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"remove\"]()" js_remove ::
-        JSRef ChildNode -> IO ()
+        ChildNode -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ChildNode.remove Mozilla ChildNode.remove documentation> 
 remove :: (MonadIO m) => ChildNode -> m ()
-remove self = liftIO (js_remove (unChildNode self))
+remove self = liftIO (js_remove (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/ClientRect.hs b/src/GHCJS/DOM/JSFFI/Generated/ClientRect.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/ClientRect.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/ClientRect.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,43 +20,43 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"top\"]" js_getTop ::
-        JSRef ClientRect -> IO Float
+        ClientRect -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ClientRect.top Mozilla ClientRect.top documentation> 
 getTop :: (MonadIO m) => ClientRect -> m Float
-getTop self = liftIO (js_getTop (unClientRect self))
+getTop self = liftIO (js_getTop (self))
  
 foreign import javascript unsafe "$1[\"right\"]" js_getRight ::
-        JSRef ClientRect -> IO Float
+        ClientRect -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ClientRect.right Mozilla ClientRect.right documentation> 
 getRight :: (MonadIO m) => ClientRect -> m Float
-getRight self = liftIO (js_getRight (unClientRect self))
+getRight self = liftIO (js_getRight (self))
  
 foreign import javascript unsafe "$1[\"bottom\"]" js_getBottom ::
-        JSRef ClientRect -> IO Float
+        ClientRect -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ClientRect.bottom Mozilla ClientRect.bottom documentation> 
 getBottom :: (MonadIO m) => ClientRect -> m Float
-getBottom self = liftIO (js_getBottom (unClientRect self))
+getBottom self = liftIO (js_getBottom (self))
  
 foreign import javascript unsafe "$1[\"left\"]" js_getLeft ::
-        JSRef ClientRect -> IO Float
+        ClientRect -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ClientRect.left Mozilla ClientRect.left documentation> 
 getLeft :: (MonadIO m) => ClientRect -> m Float
-getLeft self = liftIO (js_getLeft (unClientRect self))
+getLeft self = liftIO (js_getLeft (self))
  
 foreign import javascript unsafe "$1[\"width\"]" js_getWidth ::
-        JSRef ClientRect -> IO Float
+        ClientRect -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ClientRect.width Mozilla ClientRect.width documentation> 
 getWidth :: (MonadIO m) => ClientRect -> m Float
-getWidth self = liftIO (js_getWidth (unClientRect self))
+getWidth self = liftIO (js_getWidth (self))
  
 foreign import javascript unsafe "$1[\"height\"]" js_getHeight ::
-        JSRef ClientRect -> IO Float
+        ClientRect -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ClientRect.height Mozilla ClientRect.height documentation> 
 getHeight :: (MonadIO m) => ClientRect -> m Float
-getHeight self = liftIO (js_getHeight (unClientRect self))
+getHeight self = liftIO (js_getHeight (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/ClientRectList.hs b/src/GHCJS/DOM/JSFFI/Generated/ClientRectList.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/ClientRectList.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/ClientRectList.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,17 +19,17 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"item\"]($2)" js_item ::
-        JSRef ClientRectList -> Word -> IO (JSRef ClientRect)
+        ClientRectList -> Word -> IO (Nullable ClientRect)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ClientRectList.item Mozilla ClientRectList.item documentation> 
 item ::
      (MonadIO m) => ClientRectList -> Word -> m (Maybe ClientRect)
 item self index
-  = liftIO ((js_item (unClientRectList self) index) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_item (self) index))
  
 foreign import javascript unsafe "$1[\"length\"]" js_getLength ::
-        JSRef ClientRectList -> IO Word
+        ClientRectList -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ClientRectList.length Mozilla ClientRectList.length documentation> 
 getLength :: (MonadIO m) => ClientRectList -> m Word
-getLength self = liftIO (js_getLength (unClientRectList self))
+getLength self = liftIO (js_getLength (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/CloseEvent.hs b/src/GHCJS/DOM/JSFFI/Generated/CloseEvent.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/CloseEvent.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/CloseEvent.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,24 +19,23 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "($1[\"wasClean\"] ? 1 : 0)"
-        js_getWasClean :: JSRef CloseEvent -> IO Bool
+        js_getWasClean :: CloseEvent -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent.wasClean Mozilla CloseEvent.wasClean documentation> 
 getWasClean :: (MonadIO m) => CloseEvent -> m Bool
-getWasClean self = liftIO (js_getWasClean (unCloseEvent self))
+getWasClean self = liftIO (js_getWasClean (self))
  
 foreign import javascript unsafe "$1[\"code\"]" js_getCode ::
-        JSRef CloseEvent -> IO Word
+        CloseEvent -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent.code Mozilla CloseEvent.code documentation> 
 getCode :: (MonadIO m) => CloseEvent -> m Word
-getCode self = liftIO (js_getCode (unCloseEvent self))
+getCode self = liftIO (js_getCode (self))
  
 foreign import javascript unsafe "$1[\"reason\"]" js_getReason ::
-        JSRef CloseEvent -> IO JSString
+        CloseEvent -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent.reason Mozilla CloseEvent.reason documentation> 
 getReason ::
           (MonadIO m, FromJSString result) => CloseEvent -> m result
-getReason self
-  = liftIO (fromJSString <$> (js_getReason (unCloseEvent self)))
+getReason self = liftIO (fromJSString <$> (js_getReason (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/CommandLineAPIHost.hs b/src/GHCJS/DOM/JSFFI/Generated/CommandLineAPIHost.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/CommandLineAPIHost.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/CommandLineAPIHost.hs
@@ -8,7 +8,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -22,46 +22,40 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"clearConsoleMessages\"]()"
-        js_clearConsoleMessages :: JSRef CommandLineAPIHost -> IO ()
+        js_clearConsoleMessages :: CommandLineAPIHost -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CommandLineAPIHost.clearConsoleMessages Mozilla CommandLineAPIHost.clearConsoleMessages documentation> 
 clearConsoleMessages :: (MonadIO m) => CommandLineAPIHost -> m ()
-clearConsoleMessages self
-  = liftIO (js_clearConsoleMessages (unCommandLineAPIHost self))
+clearConsoleMessages self = liftIO (js_clearConsoleMessages (self))
  
 foreign import javascript unsafe "$1[\"copyText\"]($2)" js_copyText
-        :: JSRef CommandLineAPIHost -> JSString -> IO ()
+        :: CommandLineAPIHost -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CommandLineAPIHost.copyText Mozilla CommandLineAPIHost.copyText documentation> 
 copyText ::
          (MonadIO m, ToJSString text) => CommandLineAPIHost -> text -> m ()
-copyText self text
-  = liftIO
-      (js_copyText (unCommandLineAPIHost self) (toJSString text))
+copyText self text = liftIO (js_copyText (self) (toJSString text))
  
 foreign import javascript unsafe "$1[\"inspect\"]($2, $3)"
-        js_inspect ::
-        JSRef CommandLineAPIHost -> JSRef a -> JSRef a -> IO ()
+        js_inspect :: CommandLineAPIHost -> JSRef -> JSRef -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CommandLineAPIHost.inspect Mozilla CommandLineAPIHost.inspect documentation> 
 inspect ::
-        (MonadIO m) => CommandLineAPIHost -> JSRef a -> JSRef a -> m ()
+        (MonadIO m) => CommandLineAPIHost -> JSRef -> JSRef -> m ()
 inspect self objectId hints
-  = liftIO (js_inspect (unCommandLineAPIHost self) objectId hints)
+  = liftIO (js_inspect (self) objectId hints)
  
 foreign import javascript unsafe "$1[\"inspectedObject\"]($2)"
-        js_inspectedObject ::
-        JSRef CommandLineAPIHost -> Int -> IO (JSRef a)
+        js_inspectedObject :: CommandLineAPIHost -> Int -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CommandLineAPIHost.inspectedObject Mozilla CommandLineAPIHost.inspectedObject documentation> 
 inspectedObject ::
-                (MonadIO m) => CommandLineAPIHost -> Int -> m (JSRef a)
-inspectedObject self num
-  = liftIO (js_inspectedObject (unCommandLineAPIHost self) num)
+                (MonadIO m) => CommandLineAPIHost -> Int -> m JSRef
+inspectedObject self num = liftIO (js_inspectedObject (self) num)
  
 foreign import javascript unsafe "$1[\"getEventListeners\"]($2)"
         js_getEventListeners ::
-        JSRef CommandLineAPIHost -> JSRef Node -> IO (JSRef Array)
+        CommandLineAPIHost -> Nullable Node -> IO (Nullable Array)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CommandLineAPIHost.getEventListeners Mozilla CommandLineAPIHost.getEventListeners documentation> 
 getEventListeners ::
@@ -69,30 +63,25 @@
                     CommandLineAPIHost -> Maybe node -> m (Maybe Array)
 getEventListeners self node
   = liftIO
-      ((js_getEventListeners (unCommandLineAPIHost self)
-          (maybe jsNull (unNode . toNode) node))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_getEventListeners (self) (maybeToNullable (fmap toNode node))))
  
 foreign import javascript unsafe "$1[\"databaseId\"]($2)"
-        js_databaseId :: JSRef CommandLineAPIHost -> JSRef a -> IO JSString
+        js_databaseId :: CommandLineAPIHost -> JSRef -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CommandLineAPIHost.databaseId Mozilla CommandLineAPIHost.databaseId documentation> 
 databaseId ::
            (MonadIO m, FromJSString result) =>
-             CommandLineAPIHost -> JSRef a -> m result
+             CommandLineAPIHost -> JSRef -> m result
 databaseId self database
-  = liftIO
-      (fromJSString <$>
-         (js_databaseId (unCommandLineAPIHost self) database))
+  = liftIO (fromJSString <$> (js_databaseId (self) database))
  
 foreign import javascript unsafe "$1[\"storageId\"]($2)"
-        js_storageId :: JSRef CommandLineAPIHost -> JSRef a -> IO JSString
+        js_storageId :: CommandLineAPIHost -> JSRef -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CommandLineAPIHost.storageId Mozilla CommandLineAPIHost.storageId documentation> 
 storageId ::
           (MonadIO m, FromJSString result) =>
-            CommandLineAPIHost -> JSRef a -> m result
+            CommandLineAPIHost -> JSRef -> m result
 storageId self storage
-  = liftIO
-      (fromJSString <$>
-         (js_storageId (unCommandLineAPIHost self) storage))
+  = liftIO (fromJSString <$> (js_storageId (self) storage))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/Comment.hs b/src/GHCJS/DOM/JSFFI/Generated/Comment.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/Comment.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/Comment.hs
@@ -4,7 +4,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -18,9 +18,8 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "new window[\"Comment\"]($1)"
-        js_newComment :: JSString -> IO (JSRef Comment)
+        js_newComment :: JSString -> IO Comment
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Comment Mozilla Comment documentation> 
 newComment :: (MonadIO m, ToJSString data') => data' -> m Comment
-newComment data'
-  = liftIO (js_newComment (toJSString data') >>= fromJSRefUnchecked)
+newComment data' = liftIO (js_newComment (toJSString data'))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/CompositionEvent.hs b/src/GHCJS/DOM/JSFFI/Generated/CompositionEvent.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/CompositionEvent.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/CompositionEvent.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -22,8 +22,8 @@
 foreign import javascript unsafe
         "$1[\"initCompositionEvent\"]($2,\n$3, $4, $5, $6)"
         js_initCompositionEvent ::
-        JSRef CompositionEvent ->
-          JSString -> Bool -> Bool -> JSRef Window -> JSString -> IO ()
+        CompositionEvent ->
+          JSString -> Bool -> Bool -> Nullable Window -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CompositionEvent.initCompositionEvent Mozilla CompositionEvent.initCompositionEvent documentation> 
 initCompositionEvent ::
@@ -33,18 +33,15 @@
 initCompositionEvent self typeArg canBubbleArg cancelableArg
   viewArg dataArg
   = liftIO
-      (js_initCompositionEvent (unCompositionEvent self)
-         (toJSString typeArg)
-         canBubbleArg
+      (js_initCompositionEvent (self) (toJSString typeArg) canBubbleArg
          cancelableArg
-         (maybe jsNull pToJSRef viewArg)
+         (maybeToNullable viewArg)
          (toJSString dataArg))
  
 foreign import javascript unsafe "$1[\"data\"]" js_getData ::
-        JSRef CompositionEvent -> IO JSString
+        CompositionEvent -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CompositionEvent.data Mozilla CompositionEvent.data documentation> 
 getData ::
         (MonadIO m, FromJSString result) => CompositionEvent -> m result
-getData self
-  = liftIO (fromJSString <$> (js_getData (unCompositionEvent self)))
+getData self = liftIO (fromJSString <$> (js_getData (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/ConvolverNode.hs b/src/GHCJS/DOM/JSFFI/Generated/ConvolverNode.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/ConvolverNode.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/ConvolverNode.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,34 +20,31 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"buffer\"] = $2;"
-        js_setBuffer :: JSRef ConvolverNode -> JSRef AudioBuffer -> IO ()
+        js_setBuffer :: ConvolverNode -> Nullable AudioBuffer -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ConvolverNode.buffer Mozilla ConvolverNode.buffer documentation> 
 setBuffer ::
           (MonadIO m) => ConvolverNode -> Maybe AudioBuffer -> m ()
 setBuffer self val
-  = liftIO
-      (js_setBuffer (unConvolverNode self) (maybe jsNull pToJSRef val))
+  = liftIO (js_setBuffer (self) (maybeToNullable val))
  
 foreign import javascript unsafe "$1[\"buffer\"]" js_getBuffer ::
-        JSRef ConvolverNode -> IO (JSRef AudioBuffer)
+        ConvolverNode -> IO (Nullable AudioBuffer)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ConvolverNode.buffer Mozilla ConvolverNode.buffer documentation> 
 getBuffer :: (MonadIO m) => ConvolverNode -> m (Maybe AudioBuffer)
-getBuffer self
-  = liftIO ((js_getBuffer (unConvolverNode self)) >>= fromJSRef)
+getBuffer self = liftIO (nullableToMaybe <$> (js_getBuffer (self)))
  
 foreign import javascript unsafe "$1[\"normalize\"] = $2;"
-        js_setNormalize :: JSRef ConvolverNode -> Bool -> IO ()
+        js_setNormalize :: ConvolverNode -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ConvolverNode.normalize Mozilla ConvolverNode.normalize documentation> 
 setNormalize :: (MonadIO m) => ConvolverNode -> Bool -> m ()
-setNormalize self val
-  = liftIO (js_setNormalize (unConvolverNode self) val)
+setNormalize self val = liftIO (js_setNormalize (self) val)
  
 foreign import javascript unsafe "($1[\"normalize\"] ? 1 : 0)"
-        js_getNormalize :: JSRef ConvolverNode -> IO Bool
+        js_getNormalize :: ConvolverNode -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ConvolverNode.normalize Mozilla ConvolverNode.normalize documentation> 
 getNormalize :: (MonadIO m) => ConvolverNode -> m Bool
-getNormalize self = liftIO (js_getNormalize (unConvolverNode self))
+getNormalize self = liftIO (js_getNormalize (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/Coordinates.hs b/src/GHCJS/DOM/JSFFI/Generated/Coordinates.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/Coordinates.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/Coordinates.hs
@@ -8,7 +8,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -22,61 +22,55 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"latitude\"]" js_getLatitude
-        :: JSRef Coordinates -> IO Double
+        :: Coordinates -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Coordinates.latitude Mozilla Coordinates.latitude documentation> 
 getLatitude :: (MonadIO m) => Coordinates -> m Double
-getLatitude self = liftIO (js_getLatitude (unCoordinates self))
+getLatitude self = liftIO (js_getLatitude (self))
  
 foreign import javascript unsafe "$1[\"longitude\"]"
-        js_getLongitude :: JSRef Coordinates -> IO Double
+        js_getLongitude :: Coordinates -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Coordinates.longitude Mozilla Coordinates.longitude documentation> 
 getLongitude :: (MonadIO m) => Coordinates -> m Double
-getLongitude self = liftIO (js_getLongitude (unCoordinates self))
+getLongitude self = liftIO (js_getLongitude (self))
  
 foreign import javascript unsafe "$1[\"altitude\"]" js_getAltitude
-        :: JSRef Coordinates -> IO (JSRef (Maybe Double))
+        :: Coordinates -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Coordinates.altitude Mozilla Coordinates.altitude documentation> 
 getAltitude :: (MonadIO m) => Coordinates -> m (Maybe Double)
 getAltitude self
-  = liftIO
-      ((js_getAltitude (unCoordinates self)) >>= fromJSRefUnchecked)
+  = liftIO ((js_getAltitude (self)) >>= fromJSRefUnchecked)
  
 foreign import javascript unsafe "$1[\"accuracy\"]" js_getAccuracy
-        :: JSRef Coordinates -> IO Double
+        :: Coordinates -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Coordinates.accuracy Mozilla Coordinates.accuracy documentation> 
 getAccuracy :: (MonadIO m) => Coordinates -> m Double
-getAccuracy self = liftIO (js_getAccuracy (unCoordinates self))
+getAccuracy self = liftIO (js_getAccuracy (self))
  
 foreign import javascript unsafe "$1[\"altitudeAccuracy\"]"
-        js_getAltitudeAccuracy ::
-        JSRef Coordinates -> IO (JSRef (Maybe Double))
+        js_getAltitudeAccuracy :: Coordinates -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Coordinates.altitudeAccuracy Mozilla Coordinates.altitudeAccuracy documentation> 
 getAltitudeAccuracy ::
                     (MonadIO m) => Coordinates -> m (Maybe Double)
 getAltitudeAccuracy self
-  = liftIO
-      ((js_getAltitudeAccuracy (unCoordinates self)) >>=
-         fromJSRefUnchecked)
+  = liftIO ((js_getAltitudeAccuracy (self)) >>= fromJSRefUnchecked)
  
 foreign import javascript unsafe "$1[\"heading\"]" js_getHeading ::
-        JSRef Coordinates -> IO (JSRef (Maybe Double))
+        Coordinates -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Coordinates.heading Mozilla Coordinates.heading documentation> 
 getHeading :: (MonadIO m) => Coordinates -> m (Maybe Double)
 getHeading self
-  = liftIO
-      ((js_getHeading (unCoordinates self)) >>= fromJSRefUnchecked)
+  = liftIO ((js_getHeading (self)) >>= fromJSRefUnchecked)
  
 foreign import javascript unsafe "$1[\"speed\"]" js_getSpeed ::
-        JSRef Coordinates -> IO (JSRef (Maybe Double))
+        Coordinates -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Coordinates.speed Mozilla Coordinates.speed documentation> 
 getSpeed :: (MonadIO m) => Coordinates -> m (Maybe Double)
 getSpeed self
-  = liftIO
-      ((js_getSpeed (unCoordinates self)) >>= fromJSRefUnchecked)
+  = liftIO ((js_getSpeed (self)) >>= fromJSRefUnchecked)
diff --git a/src/GHCJS/DOM/JSFFI/Generated/Counter.hs b/src/GHCJS/DOM/JSFFI/Generated/Counter.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/Counter.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/Counter.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,28 +20,28 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"identifier\"]"
-        js_getIdentifier :: JSRef Counter -> IO JSString
+        js_getIdentifier :: Counter -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Counter.identifier Mozilla Counter.identifier documentation> 
 getIdentifier ::
               (MonadIO m, FromJSString result) => Counter -> m result
 getIdentifier self
-  = liftIO (fromJSString <$> (js_getIdentifier (unCounter self)))
+  = liftIO (fromJSString <$> (js_getIdentifier (self)))
  
 foreign import javascript unsafe "$1[\"listStyle\"]"
-        js_getListStyle :: JSRef Counter -> IO JSString
+        js_getListStyle :: Counter -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Counter.listStyle Mozilla Counter.listStyle documentation> 
 getListStyle ::
              (MonadIO m, FromJSString result) => Counter -> m result
 getListStyle self
-  = liftIO (fromJSString <$> (js_getListStyle (unCounter self)))
+  = liftIO (fromJSString <$> (js_getListStyle (self)))
  
 foreign import javascript unsafe "$1[\"separator\"]"
-        js_getSeparator :: JSRef Counter -> IO JSString
+        js_getSeparator :: Counter -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Counter.separator Mozilla Counter.separator documentation> 
 getSeparator ::
              (MonadIO m, FromJSString result) => Counter -> m result
 getSeparator self
-  = liftIO (fromJSString <$> (js_getSeparator (unCounter self)))
+  = liftIO (fromJSString <$> (js_getSeparator (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/Crypto.hs b/src/GHCJS/DOM/JSFFI/Generated/Crypto.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/Crypto.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/Crypto.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,7 +20,7 @@
  
 foreign import javascript unsafe "$1[\"getRandomValues\"]($2)"
         js_getRandomValues ::
-        JSRef Crypto -> JSRef ArrayBufferView -> IO (JSRef ArrayBufferView)
+        Crypto -> Nullable ArrayBufferView -> IO (Nullable ArrayBufferView)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Crypto.getRandomValues Mozilla Crypto.getRandomValues documentation> 
 getRandomValues ::
@@ -28,14 +28,14 @@
                   Crypto -> Maybe array -> m (Maybe ArrayBufferView)
 getRandomValues self array
   = liftIO
-      ((js_getRandomValues (unCrypto self)
-          (maybe jsNull (unArrayBufferView . toArrayBufferView) array))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_getRandomValues (self)
+            (maybeToNullable (fmap toArrayBufferView array))))
  
 foreign import javascript unsafe "$1[\"webkitSubtle\"]"
-        js_getWebkitSubtle :: JSRef Crypto -> IO (JSRef SubtleCrypto)
+        js_getWebkitSubtle :: Crypto -> IO (Nullable SubtleCrypto)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Crypto.webkitSubtle Mozilla Crypto.webkitSubtle documentation> 
 getWebkitSubtle :: (MonadIO m) => Crypto -> m (Maybe SubtleCrypto)
 getWebkitSubtle self
-  = liftIO ((js_getWebkitSubtle (unCrypto self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getWebkitSubtle (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/CryptoKey.hs b/src/GHCJS/DOM/JSFFI/Generated/CryptoKey.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/CryptoKey.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/CryptoKey.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,32 +20,31 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"type\"]" js_getType ::
-        JSRef CryptoKey -> IO (JSRef KeyType)
+        CryptoKey -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CryptoKey.type Mozilla CryptoKey.type documentation> 
 getType :: (MonadIO m) => CryptoKey -> m KeyType
-getType self
-  = liftIO ((js_getType (unCryptoKey self)) >>= fromJSRefUnchecked)
+getType self = liftIO ((js_getType (self)) >>= fromJSRefUnchecked)
  
 foreign import javascript unsafe "($1[\"extractable\"] ? 1 : 0)"
-        js_getExtractable :: JSRef CryptoKey -> IO Bool
+        js_getExtractable :: CryptoKey -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CryptoKey.extractable Mozilla CryptoKey.extractable documentation> 
 getExtractable :: (MonadIO m) => CryptoKey -> m Bool
-getExtractable self = liftIO (js_getExtractable (unCryptoKey self))
+getExtractable self = liftIO (js_getExtractable (self))
  
 foreign import javascript unsafe "$1[\"algorithm\"]"
-        js_getAlgorithm :: JSRef CryptoKey -> IO (JSRef Algorithm)
+        js_getAlgorithm :: CryptoKey -> IO (Nullable Algorithm)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CryptoKey.algorithm Mozilla CryptoKey.algorithm documentation> 
 getAlgorithm :: (MonadIO m) => CryptoKey -> m (Maybe Algorithm)
 getAlgorithm self
-  = liftIO ((js_getAlgorithm (unCryptoKey self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getAlgorithm (self)))
  
 foreign import javascript unsafe "$1[\"usages\"]" js_getUsages ::
-        JSRef CryptoKey -> IO (JSRef [KeyUsage])
+        CryptoKey -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CryptoKey.usages Mozilla CryptoKey.usages documentation> 
 getUsages :: (MonadIO m) => CryptoKey -> m [KeyUsage]
 getUsages self
-  = liftIO ((js_getUsages (unCryptoKey self)) >>= fromJSRefUnchecked)
+  = liftIO ((js_getUsages (self)) >>= fromJSRefUnchecked)
diff --git a/src/GHCJS/DOM/JSFFI/Generated/CryptoKeyPair.hs b/src/GHCJS/DOM/JSFFI/Generated/CryptoKeyPair.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/CryptoKeyPair.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/CryptoKeyPair.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,18 +19,18 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"publicKey\"]"
-        js_getPublicKey :: JSRef CryptoKeyPair -> IO (JSRef CryptoKey)
+        js_getPublicKey :: CryptoKeyPair -> IO (Nullable CryptoKey)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CryptoKeyPair.publicKey Mozilla CryptoKeyPair.publicKey documentation> 
 getPublicKey :: (MonadIO m) => CryptoKeyPair -> m (Maybe CryptoKey)
 getPublicKey self
-  = liftIO ((js_getPublicKey (unCryptoKeyPair self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getPublicKey (self)))
  
 foreign import javascript unsafe "$1[\"privateKey\"]"
-        js_getPrivateKey :: JSRef CryptoKeyPair -> IO (JSRef CryptoKey)
+        js_getPrivateKey :: CryptoKeyPair -> IO (Nullable CryptoKey)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CryptoKeyPair.privateKey Mozilla CryptoKeyPair.privateKey documentation> 
 getPrivateKey ::
               (MonadIO m) => CryptoKeyPair -> m (Maybe CryptoKey)
 getPrivateKey self
-  = liftIO ((js_getPrivateKey (unCryptoKeyPair self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getPrivateKey (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/CustomEvent.hs b/src/GHCJS/DOM/JSFFI/Generated/CustomEvent.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/CustomEvent.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/CustomEvent.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,22 +20,21 @@
  
 foreign import javascript unsafe
         "$1[\"initCustomEvent\"]($2, $3,\n$4, $5)" js_initCustomEvent ::
-        JSRef CustomEvent -> JSString -> Bool -> Bool -> JSRef a -> IO ()
+        CustomEvent -> JSString -> Bool -> Bool -> JSRef -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent.initCustomEvent Mozilla CustomEvent.initCustomEvent documentation> 
 initCustomEvent ::
                 (MonadIO m, ToJSString typeArg) =>
-                  CustomEvent -> typeArg -> Bool -> Bool -> JSRef a -> m ()
+                  CustomEvent -> typeArg -> Bool -> Bool -> JSRef -> m ()
 initCustomEvent self typeArg canBubbleArg cancelableArg detailArg
   = liftIO
-      (js_initCustomEvent (unCustomEvent self) (toJSString typeArg)
-         canBubbleArg
+      (js_initCustomEvent (self) (toJSString typeArg) canBubbleArg
          cancelableArg
          detailArg)
  
 foreign import javascript unsafe "$1[\"detail\"]" js_getDetail ::
-        JSRef CustomEvent -> IO (JSRef a)
+        CustomEvent -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent.detail Mozilla CustomEvent.detail documentation> 
-getDetail :: (MonadIO m) => CustomEvent -> m (JSRef a)
-getDetail self = liftIO (js_getDetail (unCustomEvent self))
+getDetail :: (MonadIO m) => CustomEvent -> m JSRef
+getDetail self = liftIO (js_getDetail (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/DOMError.hs b/src/GHCJS/DOM/JSFFI/Generated/DOMError.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/DOMError.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/DOMError.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,12 +19,11 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"name\"]" js_getName ::
-        JSRef DOMError -> IO JSString
+        DOMError -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DOMError.name Mozilla DOMError.name documentation> 
 getName ::
         (MonadIO m, IsDOMError self, FromJSString result) =>
           self -> m result
 getName self
-  = liftIO
-      (fromJSString <$> (js_getName (unDOMError (toDOMError self))))
+  = liftIO (fromJSString <$> (js_getName (toDOMError self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/DOMImplementation.hs b/src/GHCJS/DOM/JSFFI/Generated/DOMImplementation.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/DOMImplementation.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/DOMImplementation.hs
@@ -8,7 +8,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -23,8 +23,7 @@
  
 foreign import javascript unsafe
         "($1[\"hasFeature\"]($2,\n$3) ? 1 : 0)" js_hasFeature ::
-        JSRef DOMImplementation ->
-          JSString -> JSRef (Maybe JSString) -> IO Bool
+        DOMImplementation -> JSString -> Nullable JSString -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation.hasFeature Mozilla DOMImplementation.hasFeature documentation> 
 hasFeature ::
@@ -32,15 +31,15 @@
              DOMImplementation -> feature -> Maybe version -> m Bool
 hasFeature self feature version
   = liftIO
-      (js_hasFeature (unDOMImplementation self) (toJSString feature)
+      (js_hasFeature (self) (toJSString feature)
          (toMaybeJSString version))
  
 foreign import javascript unsafe
         "$1[\"createDocumentType\"]($2, $3,\n$4)" js_createDocumentType ::
-        JSRef DOMImplementation ->
-          JSRef (Maybe JSString) ->
-            JSRef (Maybe JSString) ->
-              JSRef (Maybe JSString) -> IO (JSRef DocumentType)
+        DOMImplementation ->
+          Nullable JSString ->
+            Nullable JSString ->
+              Nullable JSString -> IO (Nullable DocumentType)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation.createDocumentType Mozilla DOMImplementation.createDocumentType documentation> 
 createDocumentType ::
@@ -51,17 +50,17 @@
                          Maybe publicId -> Maybe systemId -> m (Maybe DocumentType)
 createDocumentType self qualifiedName publicId systemId
   = liftIO
-      ((js_createDocumentType (unDOMImplementation self)
-          (toMaybeJSString qualifiedName)
-          (toMaybeJSString publicId)
-          (toMaybeJSString systemId))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createDocumentType (self) (toMaybeJSString qualifiedName)
+            (toMaybeJSString publicId)
+            (toMaybeJSString systemId)))
  
 foreign import javascript unsafe
         "$1[\"createDocument\"]($2, $3, $4)" js_createDocument ::
-        JSRef DOMImplementation ->
-          JSRef (Maybe JSString) ->
-            JSRef (Maybe JSString) -> JSRef DocumentType -> IO (JSRef Document)
+        DOMImplementation ->
+          Nullable JSString ->
+            Nullable JSString ->
+              Nullable DocumentType -> IO (Nullable Document)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation.createDocument Mozilla DOMImplementation.createDocument documentation> 
 createDocument ::
@@ -71,16 +70,15 @@
                      Maybe qualifiedName -> Maybe DocumentType -> m (Maybe Document)
 createDocument self namespaceURI qualifiedName doctype
   = liftIO
-      ((js_createDocument (unDOMImplementation self)
-          (toMaybeJSString namespaceURI)
-          (toMaybeJSString qualifiedName)
-          (maybe jsNull pToJSRef doctype))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createDocument (self) (toMaybeJSString namespaceURI)
+            (toMaybeJSString qualifiedName)
+            (maybeToNullable doctype)))
  
 foreign import javascript unsafe
         "$1[\"createCSSStyleSheet\"]($2,\n$3)" js_createCSSStyleSheet ::
-        JSRef DOMImplementation ->
-          JSString -> JSString -> IO (JSRef CSSStyleSheet)
+        DOMImplementation ->
+          JSString -> JSString -> IO (Nullable CSSStyleSheet)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation.createCSSStyleSheet Mozilla DOMImplementation.createCSSStyleSheet documentation> 
 createCSSStyleSheet ::
@@ -88,14 +86,13 @@
                       DOMImplementation -> title -> media -> m (Maybe CSSStyleSheet)
 createCSSStyleSheet self title media
   = liftIO
-      ((js_createCSSStyleSheet (unDOMImplementation self)
-          (toJSString title)
-          (toJSString media))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createCSSStyleSheet (self) (toJSString title)
+            (toJSString media)))
  
 foreign import javascript unsafe "$1[\"createHTMLDocument\"]($2)"
         js_createHTMLDocument ::
-        JSRef DOMImplementation -> JSString -> IO (JSRef HTMLDocument)
+        DOMImplementation -> JSString -> IO (Nullable HTMLDocument)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation.createHTMLDocument Mozilla DOMImplementation.createHTMLDocument documentation> 
 createHTMLDocument ::
@@ -103,6 +100,5 @@
                      DOMImplementation -> title -> m (Maybe HTMLDocument)
 createHTMLDocument self title
   = liftIO
-      ((js_createHTMLDocument (unDOMImplementation self)
-          (toJSString title))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createHTMLDocument (self) (toJSString title)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/DOMNamedFlowCollection.hs b/src/GHCJS/DOM/JSFFI/Generated/DOMNamedFlowCollection.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/DOMNamedFlowCollection.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/DOMNamedFlowCollection.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,20 +20,18 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"item\"]($2)" js_item ::
-        JSRef DOMNamedFlowCollection -> Word -> IO (JSRef WebKitNamedFlow)
+        DOMNamedFlowCollection -> Word -> IO (Nullable WebKitNamedFlow)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitNamedFlowCollection.item Mozilla WebKitNamedFlowCollection.item documentation> 
 item ::
      (MonadIO m) =>
        DOMNamedFlowCollection -> Word -> m (Maybe WebKitNamedFlow)
 item self index
-  = liftIO
-      ((js_item (unDOMNamedFlowCollection self) index) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_item (self) index))
  
 foreign import javascript unsafe "$1[\"namedItem\"]($2)"
         js_namedItem ::
-        JSRef DOMNamedFlowCollection ->
-          JSString -> IO (JSRef WebKitNamedFlow)
+        DOMNamedFlowCollection -> JSString -> IO (Nullable WebKitNamedFlow)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitNamedFlowCollection.namedItem Mozilla WebKitNamedFlowCollection.namedItem documentation> 
 namedItem ::
@@ -41,13 +39,11 @@
             DOMNamedFlowCollection -> name -> m (Maybe WebKitNamedFlow)
 namedItem self name
   = liftIO
-      ((js_namedItem (unDOMNamedFlowCollection self) (toJSString name))
-         >>= fromJSRef)
+      (nullableToMaybe <$> (js_namedItem (self) (toJSString name)))
  
 foreign import javascript unsafe "$1[\"length\"]" js_getLength ::
-        JSRef DOMNamedFlowCollection -> IO Word
+        DOMNamedFlowCollection -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitNamedFlowCollection.length Mozilla WebKitNamedFlowCollection.length documentation> 
 getLength :: (MonadIO m) => DOMNamedFlowCollection -> m Word
-getLength self
-  = liftIO (js_getLength (unDOMNamedFlowCollection self))
+getLength self = liftIO (js_getLength (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/DOMParser.hs b/src/GHCJS/DOM/JSFFI/Generated/DOMParser.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/DOMParser.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/DOMParser.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,15 +19,15 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "new window[\"DOMParser\"]()"
-        js_newDOMParser :: IO (JSRef DOMParser)
+        js_newDOMParser :: IO DOMParser
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DOMParser Mozilla DOMParser documentation> 
 newDOMParser :: (MonadIO m) => m DOMParser
-newDOMParser = liftIO (js_newDOMParser >>= fromJSRefUnchecked)
+newDOMParser = liftIO (js_newDOMParser)
  
 foreign import javascript unsafe "$1[\"parseFromString\"]($2, $3)"
         js_parseFromString ::
-        JSRef DOMParser -> JSString -> JSString -> IO (JSRef Document)
+        DOMParser -> JSString -> JSString -> IO (Nullable Document)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DOMParser.parseFromString Mozilla DOMParser.parseFromString documentation> 
 parseFromString ::
@@ -35,6 +35,6 @@
                   DOMParser -> str -> contentType -> m (Maybe Document)
 parseFromString self str contentType
   = liftIO
-      ((js_parseFromString (unDOMParser self) (toJSString str)
-          (toJSString contentType))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_parseFromString (self) (toJSString str)
+            (toJSString contentType)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/DOMSettableTokenList.hs b/src/GHCJS/DOM/JSFFI/Generated/DOMSettableTokenList.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/DOMSettableTokenList.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/DOMSettableTokenList.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,34 +20,28 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"_get\"]($2)" js__get ::
-        JSRef DOMSettableTokenList -> Word -> IO (JSRef (Maybe JSString))
+        DOMSettableTokenList -> Word -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DOMSettableTokenList._get Mozilla DOMSettableTokenList._get documentation> 
 _get ::
      (MonadIO m, FromJSString result) =>
        DOMSettableTokenList -> Word -> m (Maybe result)
 _get self index
-  = liftIO
-      (fromMaybeJSString <$>
-         (js__get (unDOMSettableTokenList self) index))
+  = liftIO (fromMaybeJSString <$> (js__get (self) index))
  
 foreign import javascript unsafe "$1[\"value\"] = $2;" js_setValue
-        :: JSRef DOMSettableTokenList -> JSString -> IO ()
+        :: DOMSettableTokenList -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DOMSettableTokenList.value Mozilla DOMSettableTokenList.value documentation> 
 setValue ::
          (MonadIO m, ToJSString val) => DOMSettableTokenList -> val -> m ()
-setValue self val
-  = liftIO
-      (js_setValue (unDOMSettableTokenList self) (toJSString val))
+setValue self val = liftIO (js_setValue (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"value\"]" js_getValue ::
-        JSRef DOMSettableTokenList -> IO JSString
+        DOMSettableTokenList -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DOMSettableTokenList.value Mozilla DOMSettableTokenList.value documentation> 
 getValue ::
          (MonadIO m, FromJSString result) =>
            DOMSettableTokenList -> m result
-getValue self
-  = liftIO
-      (fromJSString <$> (js_getValue (unDOMSettableTokenList self)))
+getValue self = liftIO (fromJSString <$> (js_getValue (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/DOMStringList.hs b/src/GHCJS/DOM/JSFFI/Generated/DOMStringList.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/DOMStringList.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/DOMStringList.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,28 +19,27 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"item\"]($2)" js_item ::
-        JSRef DOMStringList -> Word -> IO (JSRef (Maybe JSString))
+        DOMStringList -> Word -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DOMStringList.item Mozilla DOMStringList.item documentation> 
 item ::
      (MonadIO m, FromJSString result) =>
        DOMStringList -> Word -> m (Maybe result)
 item self index
-  = liftIO
-      (fromMaybeJSString <$> (js_item (unDOMStringList self) index))
+  = liftIO (fromMaybeJSString <$> (js_item (self) index))
  
 foreign import javascript unsafe "($1[\"contains\"]($2) ? 1 : 0)"
-        js_contains :: JSRef DOMStringList -> JSString -> IO Bool
+        js_contains :: DOMStringList -> JSString -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DOMStringList.contains Mozilla DOMStringList.contains documentation> 
 contains ::
          (MonadIO m, ToJSString string) => DOMStringList -> string -> m Bool
 contains self string
-  = liftIO (js_contains (unDOMStringList self) (toJSString string))
+  = liftIO (js_contains (self) (toJSString string))
  
 foreign import javascript unsafe "$1[\"length\"]" js_getLength ::
-        JSRef DOMStringList -> IO Word
+        DOMStringList -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DOMStringList.length Mozilla DOMStringList.length documentation> 
 getLength :: (MonadIO m) => DOMStringList -> m Word
-getLength self = liftIO (js_getLength (unDOMStringList self))
+getLength self = liftIO (js_getLength (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/DOMTokenList.hs b/src/GHCJS/DOM/JSFFI/Generated/DOMTokenList.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/DOMTokenList.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/DOMTokenList.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -21,7 +21,7 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"item\"]($2)" js_item ::
-        JSRef DOMTokenList -> Word -> IO (JSRef (Maybe JSString))
+        DOMTokenList -> Word -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DOMTokenList.item Mozilla DOMTokenList.item documentation> 
 item ::
@@ -29,23 +29,20 @@
        self -> Word -> m (Maybe result)
 item self index
   = liftIO
-      (fromMaybeJSString <$>
-         (js_item (unDOMTokenList (toDOMTokenList self)) index))
+      (fromMaybeJSString <$> (js_item (toDOMTokenList self) index))
  
 foreign import javascript unsafe "($1[\"contains\"]($2) ? 1 : 0)"
-        js_contains :: JSRef DOMTokenList -> JSString -> IO Bool
+        js_contains :: DOMTokenList -> JSString -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DOMTokenList.contains Mozilla DOMTokenList.contains documentation> 
 contains ::
          (MonadIO m, IsDOMTokenList self, ToJSString token) =>
            self -> token -> m Bool
 contains self token
-  = liftIO
-      (js_contains (unDOMTokenList (toDOMTokenList self))
-         (toJSString token))
+  = liftIO (js_contains (toDOMTokenList self) (toJSString token))
  
 foreign import javascript unsafe "$1[\"add\"].apply($1, $2)" js_add
-        :: JSRef DOMTokenList -> JSRef [a] -> IO ()
+        :: DOMTokenList -> JSRef -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DOMTokenList.add Mozilla DOMTokenList.add documentation> 
 add ::
@@ -55,10 +52,10 @@
 add self tokens
   = liftIO
       (toJSRef tokens >>=
-         \ tokens' -> js_add (unDOMTokenList (toDOMTokenList self)) tokens')
+         \ tokens' -> js_add (toDOMTokenList self) tokens')
  
 foreign import javascript unsafe "$1[\"remove\"].apply($1, $2)"
-        js_remove :: JSRef DOMTokenList -> JSRef [a] -> IO ()
+        js_remove :: DOMTokenList -> JSRef -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DOMTokenList.remove Mozilla DOMTokenList.remove documentation> 
 remove ::
@@ -68,38 +65,31 @@
 remove self tokens
   = liftIO
       (toJSRef tokens >>=
-         \ tokens' ->
-           js_remove (unDOMTokenList (toDOMTokenList self)) tokens')
+         \ tokens' -> js_remove (toDOMTokenList self) tokens')
  
 foreign import javascript unsafe "($1[\"toggle\"]($2, $3) ? 1 : 0)"
-        js_toggle :: JSRef DOMTokenList -> JSString -> Bool -> IO Bool
+        js_toggle :: DOMTokenList -> JSString -> Bool -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DOMTokenList.toggle Mozilla DOMTokenList.toggle documentation> 
 toggle ::
        (MonadIO m, IsDOMTokenList self, ToJSString token) =>
          self -> token -> Bool -> m Bool
 toggle self token force
-  = liftIO
-      (js_toggle (unDOMTokenList (toDOMTokenList self))
-         (toJSString token)
-         force)
+  = liftIO (js_toggle (toDOMTokenList self) (toJSString token) force)
  
 foreign import javascript unsafe "$1[\"toString\"]()" js_toString
-        :: JSRef DOMTokenList -> IO JSString
+        :: DOMTokenList -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DOMTokenList.toString Mozilla DOMTokenList.toString documentation> 
 toString ::
          (MonadIO m, IsDOMTokenList self, FromJSString result) =>
            self -> m result
 toString self
-  = liftIO
-      (fromJSString <$>
-         (js_toString (unDOMTokenList (toDOMTokenList self))))
+  = liftIO (fromJSString <$> (js_toString (toDOMTokenList self)))
  
 foreign import javascript unsafe "$1[\"length\"]" js_getLength ::
-        JSRef DOMTokenList -> IO Word
+        DOMTokenList -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DOMTokenList.length Mozilla DOMTokenList.length documentation> 
 getLength :: (MonadIO m, IsDOMTokenList self) => self -> m Word
-getLength self
-  = liftIO (js_getLength (unDOMTokenList (toDOMTokenList self)))
+getLength self = liftIO (js_getLength (toDOMTokenList self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/DataCue.hs b/src/GHCJS/DOM/JSFFI/Generated/DataCue.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/DataCue.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/DataCue.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -21,61 +21,58 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "new window[\"WebKitDataCue\"]()"
-        js_newDataCue :: IO (JSRef DataCue)
+        js_newDataCue :: IO DataCue
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitDataCue Mozilla WebKitDataCue documentation> 
 newDataCue :: (MonadIO m) => m DataCue
-newDataCue = liftIO (js_newDataCue >>= fromJSRefUnchecked)
+newDataCue = liftIO (js_newDataCue)
  
 foreign import javascript unsafe
         "new window[\"WebKitDataCue\"]($1,\n$2, $3, $4)" js_newDataCue' ::
-        Double -> Double -> JSRef a -> JSString -> IO (JSRef DataCue)
+        Double -> Double -> JSRef -> JSString -> IO DataCue
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitDataCue Mozilla WebKitDataCue documentation> 
 newDataCue' ::
             (MonadIO m, ToJSString type') =>
-              Double -> Double -> JSRef a -> type' -> m DataCue
+              Double -> Double -> JSRef -> type' -> m DataCue
 newDataCue' startTime endTime value type'
   = liftIO
-      (js_newDataCue' startTime endTime value (toJSString type') >>=
-         fromJSRefUnchecked)
+      (js_newDataCue' startTime endTime value (toJSString type'))
  
 foreign import javascript unsafe "$1[\"data\"] = $2;" js_setData ::
-        JSRef DataCue -> JSRef ArrayBuffer -> IO ()
+        DataCue -> Nullable ArrayBuffer -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitDataCue.data Mozilla WebKitDataCue.data documentation> 
 setData ::
         (MonadIO m, IsArrayBuffer val) => DataCue -> Maybe val -> m ()
 setData self val
   = liftIO
-      (js_setData (unDataCue self)
-         (maybe jsNull (unArrayBuffer . toArrayBuffer) val))
+      (js_setData (self) (maybeToNullable (fmap toArrayBuffer val)))
  
 foreign import javascript unsafe "$1[\"data\"]" js_getData ::
-        JSRef DataCue -> IO (JSRef ArrayBuffer)
+        DataCue -> IO (Nullable ArrayBuffer)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitDataCue.data Mozilla WebKitDataCue.data documentation> 
 getData :: (MonadIO m) => DataCue -> m (Maybe ArrayBuffer)
-getData self = liftIO ((js_getData (unDataCue self)) >>= fromJSRef)
+getData self = liftIO (nullableToMaybe <$> (js_getData (self)))
  
 foreign import javascript unsafe "$1[\"value\"] = $2;" js_setValue
-        :: JSRef DataCue -> JSRef a -> IO ()
+        :: DataCue -> JSRef -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitDataCue.value Mozilla WebKitDataCue.value documentation> 
-setValue :: (MonadIO m) => DataCue -> JSRef a -> m ()
-setValue self val = liftIO (js_setValue (unDataCue self) val)
+setValue :: (MonadIO m) => DataCue -> JSRef -> m ()
+setValue self val = liftIO (js_setValue (self) val)
  
 foreign import javascript unsafe "$1[\"value\"]" js_getValue ::
-        JSRef DataCue -> IO (JSRef a)
+        DataCue -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitDataCue.value Mozilla WebKitDataCue.value documentation> 
-getValue :: (MonadIO m) => DataCue -> m (JSRef a)
-getValue self = liftIO (js_getValue (unDataCue self))
+getValue :: (MonadIO m) => DataCue -> m JSRef
+getValue self = liftIO (js_getValue (self))
  
 foreign import javascript unsafe "$1[\"type\"]" js_getType ::
-        JSRef DataCue -> IO JSString
+        DataCue -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitDataCue.type Mozilla WebKitDataCue.type documentation> 
 getType :: (MonadIO m, FromJSString result) => DataCue -> m result
-getType self
-  = liftIO (fromJSString <$> (js_getType (unDataCue self)))
+getType self = liftIO (fromJSString <$> (js_getType (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/DataTransfer.hs b/src/GHCJS/DOM/JSFFI/Generated/DataTransfer.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/DataTransfer.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/DataTransfer.hs
@@ -9,7 +9,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -23,41 +23,37 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"clearData\"]($2)"
-        js_clearData :: JSRef DataTransfer -> JSString -> IO ()
+        js_clearData :: DataTransfer -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer.clearData Mozilla DataTransfer.clearData documentation> 
 clearData ::
           (MonadIO m, ToJSString type') => DataTransfer -> type' -> m ()
 clearData self type'
-  = liftIO (js_clearData (unDataTransfer self) (toJSString type'))
+  = liftIO (js_clearData (self) (toJSString type'))
  
 foreign import javascript unsafe "$1[\"getData\"]($2)" js_getData
-        :: JSRef DataTransfer -> JSString -> IO JSString
+        :: DataTransfer -> JSString -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer.getData Mozilla DataTransfer.getData documentation> 
 getData ::
         (MonadIO m, ToJSString type', FromJSString result) =>
           DataTransfer -> type' -> m result
 getData self type'
-  = liftIO
-      (fromJSString <$>
-         (js_getData (unDataTransfer self) (toJSString type')))
+  = liftIO (fromJSString <$> (js_getData (self) (toJSString type')))
  
 foreign import javascript unsafe "$1[\"setData\"]($2, $3)"
-        js_setData :: JSRef DataTransfer -> JSString -> JSString -> IO ()
+        js_setData :: DataTransfer -> JSString -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer.setData Mozilla DataTransfer.setData documentation> 
 setData ::
         (MonadIO m, ToJSString type', ToJSString data') =>
           DataTransfer -> type' -> data' -> m ()
 setData self type' data'
-  = liftIO
-      (js_setData (unDataTransfer self) (toJSString type')
-         (toJSString data'))
+  = liftIO (js_setData (self) (toJSString type') (toJSString data'))
  
 foreign import javascript unsafe "$1[\"setDragImage\"]($2, $3, $4)"
         js_setDragImage ::
-        JSRef DataTransfer -> JSRef Element -> Int -> Int -> IO ()
+        DataTransfer -> Nullable Element -> Int -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer.setDragImage Mozilla DataTransfer.setDragImage documentation> 
 setDragImage ::
@@ -65,71 +61,63 @@
                DataTransfer -> Maybe image -> Int -> Int -> m ()
 setDragImage self image x y
   = liftIO
-      (js_setDragImage (unDataTransfer self)
-         (maybe jsNull (unElement . toElement) image)
-         x
+      (js_setDragImage (self) (maybeToNullable (fmap toElement image)) x
          y)
  
 foreign import javascript unsafe "$1[\"dropEffect\"] = $2;"
-        js_setDropEffect :: JSRef DataTransfer -> JSString -> IO ()
+        js_setDropEffect :: DataTransfer -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer.dropEffect Mozilla DataTransfer.dropEffect documentation> 
 setDropEffect ::
               (MonadIO m, ToJSString val) => DataTransfer -> val -> m ()
 setDropEffect self val
-  = liftIO (js_setDropEffect (unDataTransfer self) (toJSString val))
+  = liftIO (js_setDropEffect (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"dropEffect\"]"
-        js_getDropEffect :: JSRef DataTransfer -> IO JSString
+        js_getDropEffect :: DataTransfer -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer.dropEffect Mozilla DataTransfer.dropEffect documentation> 
 getDropEffect ::
               (MonadIO m, FromJSString result) => DataTransfer -> m result
 getDropEffect self
-  = liftIO
-      (fromJSString <$> (js_getDropEffect (unDataTransfer self)))
+  = liftIO (fromJSString <$> (js_getDropEffect (self)))
  
 foreign import javascript unsafe "$1[\"effectAllowed\"] = $2;"
-        js_setEffectAllowed :: JSRef DataTransfer -> JSString -> IO ()
+        js_setEffectAllowed :: DataTransfer -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer.effectAllowed Mozilla DataTransfer.effectAllowed documentation> 
 setEffectAllowed ::
                  (MonadIO m, ToJSString val) => DataTransfer -> val -> m ()
 setEffectAllowed self val
-  = liftIO
-      (js_setEffectAllowed (unDataTransfer self) (toJSString val))
+  = liftIO (js_setEffectAllowed (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"effectAllowed\"]"
-        js_getEffectAllowed :: JSRef DataTransfer -> IO JSString
+        js_getEffectAllowed :: DataTransfer -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer.effectAllowed Mozilla DataTransfer.effectAllowed documentation> 
 getEffectAllowed ::
                  (MonadIO m, FromJSString result) => DataTransfer -> m result
 getEffectAllowed self
-  = liftIO
-      (fromJSString <$> (js_getEffectAllowed (unDataTransfer self)))
+  = liftIO (fromJSString <$> (js_getEffectAllowed (self)))
  
 foreign import javascript unsafe "$1[\"types\"]" js_getTypes ::
-        JSRef DataTransfer -> IO (JSRef Array)
+        DataTransfer -> IO (Nullable Array)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer.types Mozilla DataTransfer.types documentation> 
 getTypes :: (MonadIO m) => DataTransfer -> m (Maybe Array)
-getTypes self
-  = liftIO ((js_getTypes (unDataTransfer self)) >>= fromJSRef)
+getTypes self = liftIO (nullableToMaybe <$> (js_getTypes (self)))
  
 foreign import javascript unsafe "$1[\"files\"]" js_getFiles ::
-        JSRef DataTransfer -> IO (JSRef FileList)
+        DataTransfer -> IO (Nullable FileList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer.files Mozilla DataTransfer.files documentation> 
 getFiles :: (MonadIO m) => DataTransfer -> m (Maybe FileList)
-getFiles self
-  = liftIO ((js_getFiles (unDataTransfer self)) >>= fromJSRef)
+getFiles self = liftIO (nullableToMaybe <$> (js_getFiles (self)))
  
 foreign import javascript unsafe "$1[\"items\"]" js_getItems ::
-        JSRef DataTransfer -> IO (JSRef DataTransferItemList)
+        DataTransfer -> IO (Nullable DataTransferItemList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer.items Mozilla DataTransfer.items documentation> 
 getItems ::
          (MonadIO m) => DataTransfer -> m (Maybe DataTransferItemList)
-getItems self
-  = liftIO ((js_getItems (unDataTransfer self)) >>= fromJSRef)
+getItems self = liftIO (nullableToMaybe <$> (js_getItems (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/DataTransferItem.hs b/src/GHCJS/DOM/JSFFI/Generated/DataTransferItem.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/DataTransferItem.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/DataTransferItem.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -21,39 +21,34 @@
  
 foreign import javascript unsafe "$1[\"getAsString\"]($2)"
         js_getAsString ::
-        JSRef DataTransferItem -> JSRef (StringCallback callback) -> IO ()
+        DataTransferItem -> Nullable (StringCallback callback) -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DataTransferItem.getAsString Mozilla DataTransferItem.getAsString documentation> 
 getAsString ::
             (MonadIO m, ToJSString callback) =>
               DataTransferItem -> Maybe (StringCallback callback) -> m ()
 getAsString self callback
-  = liftIO
-      (js_getAsString (unDataTransferItem self)
-         (maybe jsNull pToJSRef callback))
+  = liftIO (js_getAsString (self) (maybeToNullable callback))
  
 foreign import javascript unsafe "$1[\"getAsFile\"]()" js_getAsFile
-        :: JSRef DataTransferItem -> IO (JSRef Blob)
+        :: DataTransferItem -> IO (Nullable Blob)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DataTransferItem.getAsFile Mozilla DataTransferItem.getAsFile documentation> 
 getAsFile :: (MonadIO m) => DataTransferItem -> m (Maybe Blob)
-getAsFile self
-  = liftIO ((js_getAsFile (unDataTransferItem self)) >>= fromJSRef)
+getAsFile self = liftIO (nullableToMaybe <$> (js_getAsFile (self)))
  
 foreign import javascript unsafe "$1[\"kind\"]" js_getKind ::
-        JSRef DataTransferItem -> IO JSString
+        DataTransferItem -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DataTransferItem.kind Mozilla DataTransferItem.kind documentation> 
 getKind ::
         (MonadIO m, FromJSString result) => DataTransferItem -> m result
-getKind self
-  = liftIO (fromJSString <$> (js_getKind (unDataTransferItem self)))
+getKind self = liftIO (fromJSString <$> (js_getKind (self)))
  
 foreign import javascript unsafe "$1[\"type\"]" js_getType ::
-        JSRef DataTransferItem -> IO JSString
+        DataTransferItem -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DataTransferItem.type Mozilla DataTransferItem.type documentation> 
 getType ::
         (MonadIO m, FromJSString result) => DataTransferItem -> m result
-getType self
-  = liftIO (fromJSString <$> (js_getType (unDataTransferItem self)))
+getType self = liftIO (fromJSString <$> (js_getType (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/DataTransferItemList.hs b/src/GHCJS/DOM/JSFFI/Generated/DataTransferItemList.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/DataTransferItemList.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/DataTransferItemList.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,50 +20,44 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"item\"]($2)" js_item ::
-        JSRef DataTransferItemList -> Word -> IO (JSRef DataTransferItem)
+        DataTransferItemList -> Word -> IO (Nullable DataTransferItem)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DataTransferItemList.item Mozilla DataTransferItemList.item documentation> 
 item ::
      (MonadIO m) =>
        DataTransferItemList -> Word -> m (Maybe DataTransferItem)
 item self index
-  = liftIO
-      ((js_item (unDataTransferItemList self) index) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_item (self) index))
  
 foreign import javascript unsafe "$1[\"clear\"]()" js_clear ::
-        JSRef DataTransferItemList -> IO ()
+        DataTransferItemList -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DataTransferItemList.clear Mozilla DataTransferItemList.clear documentation> 
 clear :: (MonadIO m) => DataTransferItemList -> m ()
-clear self = liftIO (js_clear (unDataTransferItemList self))
+clear self = liftIO (js_clear (self))
  
 foreign import javascript unsafe "$1[\"add\"]($2)" js_addFile ::
-        JSRef DataTransferItemList -> JSRef File -> IO ()
+        DataTransferItemList -> Nullable File -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DataTransferItemList.add Mozilla DataTransferItemList.add documentation> 
 addFile ::
         (MonadIO m) => DataTransferItemList -> Maybe File -> m ()
 addFile self file
-  = liftIO
-      (js_addFile (unDataTransferItemList self)
-         (maybe jsNull pToJSRef file))
+  = liftIO (js_addFile (self) (maybeToNullable file))
  
 foreign import javascript unsafe "$1[\"add\"]($2, $3)" js_add ::
-        JSRef DataTransferItemList -> JSString -> JSString -> IO ()
+        DataTransferItemList -> JSString -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DataTransferItemList.add Mozilla DataTransferItemList.add documentation> 
 add ::
     (MonadIO m, ToJSString data', ToJSString type') =>
       DataTransferItemList -> data' -> type' -> m ()
 add self data' type'
-  = liftIO
-      (js_add (unDataTransferItemList self) (toJSString data')
-         (toJSString type'))
+  = liftIO (js_add (self) (toJSString data') (toJSString type'))
  
 foreign import javascript unsafe "$1[\"length\"]" js_getLength ::
-        JSRef DataTransferItemList -> IO Int
+        DataTransferItemList -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DataTransferItemList.length Mozilla DataTransferItemList.length documentation> 
 getLength :: (MonadIO m) => DataTransferItemList -> m Int
-getLength self
-  = liftIO (js_getLength (unDataTransferItemList self))
+getLength self = liftIO (js_getLength (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/Database.hs b/src/GHCJS/DOM/JSFFI/Generated/Database.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/Database.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/Database.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -21,11 +21,12 @@
  
 foreign import javascript unsafe
         "$1[\"changeVersion\"]($2, $3, $4,\n$5, $6)" js_changeVersion ::
-        JSRef Database ->
+        Database ->
           JSString ->
             JSString ->
-              JSRef SQLTransactionCallback ->
-                JSRef SQLTransactionErrorCallback -> JSRef VoidCallback -> IO ()
+              Nullable SQLTransactionCallback ->
+                Nullable SQLTransactionErrorCallback ->
+                  Nullable VoidCallback -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Database.changeVersion Mozilla Database.changeVersion documentation> 
 changeVersion ::
@@ -38,17 +39,18 @@
 changeVersion self oldVersion newVersion callback errorCallback
   successCallback
   = liftIO
-      (js_changeVersion (unDatabase self) (toJSString oldVersion)
+      (js_changeVersion (self) (toJSString oldVersion)
          (toJSString newVersion)
-         (maybe jsNull pToJSRef callback)
-         (maybe jsNull pToJSRef errorCallback)
-         (maybe jsNull pToJSRef successCallback))
+         (maybeToNullable callback)
+         (maybeToNullable errorCallback)
+         (maybeToNullable successCallback))
  
 foreign import javascript unsafe "$1[\"transaction\"]($2, $3, $4)"
         js_transaction ::
-        JSRef Database ->
-          JSRef SQLTransactionCallback ->
-            JSRef SQLTransactionErrorCallback -> JSRef VoidCallback -> IO ()
+        Database ->
+          Nullable SQLTransactionCallback ->
+            Nullable SQLTransactionErrorCallback ->
+              Nullable VoidCallback -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Database.transaction Mozilla Database.transaction documentation> 
 transaction ::
@@ -58,15 +60,16 @@
                   Maybe SQLTransactionErrorCallback -> Maybe VoidCallback -> m ()
 transaction self callback errorCallback successCallback
   = liftIO
-      (js_transaction (unDatabase self) (maybe jsNull pToJSRef callback)
-         (maybe jsNull pToJSRef errorCallback)
-         (maybe jsNull pToJSRef successCallback))
+      (js_transaction (self) (maybeToNullable callback)
+         (maybeToNullable errorCallback)
+         (maybeToNullable successCallback))
  
 foreign import javascript unsafe
         "$1[\"readTransaction\"]($2, $3,\n$4)" js_readTransaction ::
-        JSRef Database ->
-          JSRef SQLTransactionCallback ->
-            JSRef SQLTransactionErrorCallback -> JSRef VoidCallback -> IO ()
+        Database ->
+          Nullable SQLTransactionCallback ->
+            Nullable SQLTransactionErrorCallback ->
+              Nullable VoidCallback -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Database.readTransaction Mozilla Database.readTransaction documentation> 
 readTransaction ::
@@ -76,16 +79,14 @@
                       Maybe SQLTransactionErrorCallback -> Maybe VoidCallback -> m ()
 readTransaction self callback errorCallback successCallback
   = liftIO
-      (js_readTransaction (unDatabase self)
-         (maybe jsNull pToJSRef callback)
-         (maybe jsNull pToJSRef errorCallback)
-         (maybe jsNull pToJSRef successCallback))
+      (js_readTransaction (self) (maybeToNullable callback)
+         (maybeToNullable errorCallback)
+         (maybeToNullable successCallback))
  
 foreign import javascript unsafe "$1[\"version\"]" js_getVersion ::
-        JSRef Database -> IO JSString
+        Database -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Database.version Mozilla Database.version documentation> 
 getVersion ::
            (MonadIO m, FromJSString result) => Database -> m result
-getVersion self
-  = liftIO (fromJSString <$> (js_getVersion (unDatabase self)))
+getVersion self = liftIO (fromJSString <$> (js_getVersion (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/DatabaseCallback.hs b/src/GHCJS/DOM/JSFFI/Generated/DatabaseCallback.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/DatabaseCallback.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/DatabaseCallback.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -23,24 +23,27 @@
                     (MonadIO m) => (Maybe Database -> IO ()) -> m DatabaseCallback
 newDatabaseCallback callback
   = liftIO
-      (syncCallback1 ThrowWouldBlock
-         (\ database ->
-            fromJSRefUnchecked database >>= \ database' -> callback database'))
+      (DatabaseCallback <$>
+         syncCallback1 ThrowWouldBlock
+           (\ database ->
+              fromJSRefUnchecked database >>= \ database' -> callback database'))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DatabaseCallback Mozilla DatabaseCallback documentation> 
 newDatabaseCallbackSync ::
                         (MonadIO m) => (Maybe Database -> IO ()) -> m DatabaseCallback
 newDatabaseCallbackSync callback
   = liftIO
-      (syncCallback1 ContinueAsync
-         (\ database ->
-            fromJSRefUnchecked database >>= \ database' -> callback database'))
+      (DatabaseCallback <$>
+         syncCallback1 ContinueAsync
+           (\ database ->
+              fromJSRefUnchecked database >>= \ database' -> callback database'))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DatabaseCallback Mozilla DatabaseCallback documentation> 
 newDatabaseCallbackAsync ::
                          (MonadIO m) => (Maybe Database -> IO ()) -> m DatabaseCallback
 newDatabaseCallbackAsync callback
   = liftIO
-      (asyncCallback1
-         (\ database ->
-            fromJSRefUnchecked database >>= \ database' -> callback database'))
+      (DatabaseCallback <$>
+         asyncCallback1
+           (\ database ->
+              fromJSRefUnchecked database >>= \ database' -> callback database'))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/DedicatedWorkerGlobalScope.hs b/src/GHCJS/DOM/JSFFI/Generated/DedicatedWorkerGlobalScope.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/DedicatedWorkerGlobalScope.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/DedicatedWorkerGlobalScope.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,16 +20,16 @@
  
 foreign import javascript unsafe "$1[\"postMessage\"]($2, $3)"
         js_postMessage ::
-        JSRef DedicatedWorkerGlobalScope -> JSRef a -> JSRef Array -> IO ()
+        DedicatedWorkerGlobalScope -> JSRef -> Nullable Array -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DedicatedWorkerGlobalScope.postMessage Mozilla DedicatedWorkerGlobalScope.postMessage documentation> 
 postMessage ::
             (MonadIO m, IsArray messagePorts) =>
-              DedicatedWorkerGlobalScope -> JSRef a -> Maybe messagePorts -> m ()
+              DedicatedWorkerGlobalScope -> JSRef -> Maybe messagePorts -> m ()
 postMessage self message messagePorts
   = liftIO
-      (js_postMessage (unDedicatedWorkerGlobalScope self) message
-         (maybe jsNull (unArray . toArray) messagePorts))
+      (js_postMessage (self) message
+         (maybeToNullable (fmap toArray messagePorts)))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DedicatedWorkerGlobalScope.onmessage Mozilla DedicatedWorkerGlobalScope.onmessage documentation> 
 message :: EventName DedicatedWorkerGlobalScope MessageEvent
diff --git a/src/GHCJS/DOM/JSFFI/Generated/DelayNode.hs b/src/GHCJS/DOM/JSFFI/Generated/DelayNode.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/DelayNode.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/DelayNode.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,9 +19,9 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"delayTime\"]"
-        js_getDelayTime :: JSRef DelayNode -> IO (JSRef AudioParam)
+        js_getDelayTime :: DelayNode -> IO (Nullable AudioParam)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DelayNode.delayTime Mozilla DelayNode.delayTime documentation> 
 getDelayTime :: (MonadIO m) => DelayNode -> m (Maybe AudioParam)
 getDelayTime self
-  = liftIO ((js_getDelayTime (unDelayNode self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getDelayTime (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/DeviceMotionEvent.hs b/src/GHCJS/DOM/JSFFI/Generated/DeviceMotionEvent.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/DeviceMotionEvent.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/DeviceMotionEvent.hs
@@ -9,7 +9,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -25,12 +25,12 @@
 foreign import javascript unsafe
         "$1[\"initDeviceMotionEvent\"]($2,\n$3, $4, $5, $6, $7, $8)"
         js_initDeviceMotionEvent ::
-        JSRef DeviceMotionEvent ->
+        DeviceMotionEvent ->
           JSString ->
             Bool ->
               Bool ->
-                JSRef Acceleration ->
-                  JSRef Acceleration -> JSRef RotationRate -> Double -> IO ()
+                Nullable Acceleration ->
+                  Nullable Acceleration -> Nullable RotationRate -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DeviceMotionEvent.initDeviceMotionEvent Mozilla DeviceMotionEvent.initDeviceMotionEvent documentation> 
 initDeviceMotionEvent ::
@@ -47,55 +47,49 @@
 initDeviceMotionEvent self type' bubbles cancelable acceleration
   accelerationIncludingGravity rotationRate interval
   = liftIO
-      (js_initDeviceMotionEvent (unDeviceMotionEvent self)
-         (toJSString type')
-         bubbles
+      (js_initDeviceMotionEvent (self) (toJSString type') bubbles
          cancelable
-         (maybe jsNull (unAcceleration . toAcceleration) acceleration)
-         (maybe jsNull (unAcceleration . toAcceleration)
-            accelerationIncludingGravity)
-         (maybe jsNull (unRotationRate . toRotationRate) rotationRate)
+         (maybeToNullable (fmap toAcceleration acceleration))
+         (maybeToNullable
+            (fmap toAcceleration accelerationIncludingGravity))
+         (maybeToNullable (fmap toRotationRate rotationRate))
          interval)
  
 foreign import javascript unsafe "$1[\"acceleration\"]"
         js_getAcceleration ::
-        JSRef DeviceMotionEvent -> IO (JSRef Acceleration)
+        DeviceMotionEvent -> IO (Nullable Acceleration)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DeviceMotionEvent.acceleration Mozilla DeviceMotionEvent.acceleration documentation> 
 getAcceleration ::
                 (MonadIO m) => DeviceMotionEvent -> m (Maybe Acceleration)
 getAcceleration self
-  = liftIO
-      ((js_getAcceleration (unDeviceMotionEvent self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getAcceleration (self)))
  
 foreign import javascript unsafe
         "$1[\"accelerationIncludingGravity\"]"
         js_getAccelerationIncludingGravity ::
-        JSRef DeviceMotionEvent -> IO (JSRef Acceleration)
+        DeviceMotionEvent -> IO (Nullable Acceleration)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DeviceMotionEvent.accelerationIncludingGravity Mozilla DeviceMotionEvent.accelerationIncludingGravity documentation> 
 getAccelerationIncludingGravity ::
                                 (MonadIO m) => DeviceMotionEvent -> m (Maybe Acceleration)
 getAccelerationIncludingGravity self
   = liftIO
-      ((js_getAccelerationIncludingGravity (unDeviceMotionEvent self))
-         >>= fromJSRef)
+      (nullableToMaybe <$> (js_getAccelerationIncludingGravity (self)))
  
 foreign import javascript unsafe "$1[\"rotationRate\"]"
         js_getRotationRate ::
-        JSRef DeviceMotionEvent -> IO (JSRef RotationRate)
+        DeviceMotionEvent -> IO (Nullable RotationRate)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DeviceMotionEvent.rotationRate Mozilla DeviceMotionEvent.rotationRate documentation> 
 getRotationRate ::
                 (MonadIO m) => DeviceMotionEvent -> m (Maybe RotationRate)
 getRotationRate self
-  = liftIO
-      ((js_getRotationRate (unDeviceMotionEvent self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getRotationRate (self)))
  
 foreign import javascript unsafe "$1[\"interval\"]" js_getInterval
-        :: JSRef DeviceMotionEvent -> IO Double
+        :: DeviceMotionEvent -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DeviceMotionEvent.interval Mozilla DeviceMotionEvent.interval documentation> 
 getInterval :: (MonadIO m) => DeviceMotionEvent -> m Double
-getInterval self
-  = liftIO (js_getInterval (unDeviceMotionEvent self))
+getInterval self = liftIO (js_getInterval (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/DeviceOrientationEvent.hs b/src/GHCJS/DOM/JSFFI/Generated/DeviceOrientationEvent.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/DeviceOrientationEvent.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/DeviceOrientationEvent.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -23,7 +23,7 @@
 foreign import javascript unsafe
         "$1[\"initDeviceOrientationEvent\"]($2,\n$3, $4, $5, $6, $7, $8)"
         js_initDeviceOrientationEvent ::
-        JSRef DeviceOrientationEvent ->
+        DeviceOrientationEvent ->
           JSString ->
             Bool -> Bool -> Double -> Double -> Double -> Bool -> IO ()
 
@@ -35,9 +35,7 @@
 initDeviceOrientationEvent self type' bubbles cancelable alpha beta
   gamma absolute
   = liftIO
-      (js_initDeviceOrientationEvent (unDeviceOrientationEvent self)
-         (toJSString type')
-         bubbles
+      (js_initDeviceOrientationEvent (self) (toJSString type') bubbles
          cancelable
          alpha
          beta
@@ -45,32 +43,29 @@
          absolute)
  
 foreign import javascript unsafe "$1[\"alpha\"]" js_getAlpha ::
-        JSRef DeviceOrientationEvent -> IO Double
+        DeviceOrientationEvent -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DeviceOrientationEvent.alpha Mozilla DeviceOrientationEvent.alpha documentation> 
 getAlpha :: (MonadIO m) => DeviceOrientationEvent -> m Double
-getAlpha self
-  = liftIO (js_getAlpha (unDeviceOrientationEvent self))
+getAlpha self = liftIO (js_getAlpha (self))
  
 foreign import javascript unsafe "$1[\"beta\"]" js_getBeta ::
-        JSRef DeviceOrientationEvent -> IO Double
+        DeviceOrientationEvent -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DeviceOrientationEvent.beta Mozilla DeviceOrientationEvent.beta documentation> 
 getBeta :: (MonadIO m) => DeviceOrientationEvent -> m Double
-getBeta self = liftIO (js_getBeta (unDeviceOrientationEvent self))
+getBeta self = liftIO (js_getBeta (self))
  
 foreign import javascript unsafe "$1[\"gamma\"]" js_getGamma ::
-        JSRef DeviceOrientationEvent -> IO Double
+        DeviceOrientationEvent -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DeviceOrientationEvent.gamma Mozilla DeviceOrientationEvent.gamma documentation> 
 getGamma :: (MonadIO m) => DeviceOrientationEvent -> m Double
-getGamma self
-  = liftIO (js_getGamma (unDeviceOrientationEvent self))
+getGamma self = liftIO (js_getGamma (self))
  
 foreign import javascript unsafe "($1[\"absolute\"] ? 1 : 0)"
-        js_getAbsolute :: JSRef DeviceOrientationEvent -> IO Bool
+        js_getAbsolute :: DeviceOrientationEvent -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DeviceOrientationEvent.absolute Mozilla DeviceOrientationEvent.absolute documentation> 
 getAbsolute :: (MonadIO m) => DeviceOrientationEvent -> m Bool
-getAbsolute self
-  = liftIO (js_getAbsolute (unDeviceOrientationEvent self))
+getAbsolute self = liftIO (js_getAbsolute (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/DeviceProximityEvent.hs b/src/GHCJS/DOM/JSFFI/Generated/DeviceProximityEvent.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/DeviceProximityEvent.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/DeviceProximityEvent.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,22 +20,22 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"value\"]" js_getValue ::
-        JSRef DeviceProximityEvent -> IO Double
+        DeviceProximityEvent -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DeviceProximityEvent.value Mozilla DeviceProximityEvent.value documentation> 
 getValue :: (MonadIO m) => DeviceProximityEvent -> m Double
-getValue self = liftIO (js_getValue (unDeviceProximityEvent self))
+getValue self = liftIO (js_getValue (self))
  
 foreign import javascript unsafe "$1[\"min\"]" js_getMin ::
-        JSRef DeviceProximityEvent -> IO Double
+        DeviceProximityEvent -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DeviceProximityEvent.min Mozilla DeviceProximityEvent.min documentation> 
 getMin :: (MonadIO m) => DeviceProximityEvent -> m Double
-getMin self = liftIO (js_getMin (unDeviceProximityEvent self))
+getMin self = liftIO (js_getMin (self))
  
 foreign import javascript unsafe "$1[\"max\"]" js_getMax ::
-        JSRef DeviceProximityEvent -> IO Double
+        DeviceProximityEvent -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DeviceProximityEvent.max Mozilla DeviceProximityEvent.max documentation> 
 getMax :: (MonadIO m) => DeviceProximityEvent -> m Double
-getMax self = liftIO (js_getMax (unDeviceProximityEvent self))
+getMax self = liftIO (js_getMax (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/Document.hs b/src/GHCJS/DOM/JSFFI/Generated/Document.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/Document.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/Document.hs
@@ -78,7 +78,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -92,15 +92,15 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "new window[\"Document\"]()"
-        js_newDocument :: IO (JSRef Document)
+        js_newDocument :: IO Document
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document Mozilla Document documentation> 
 newDocument :: (MonadIO m) => m Document
-newDocument = liftIO (js_newDocument >>= fromJSRefUnchecked)
+newDocument = liftIO (js_newDocument)
  
 foreign import javascript unsafe "$1[\"createElement\"]($2)"
         js_createElement ::
-        JSRef Document -> JSRef (Maybe JSString) -> IO (JSRef Element)
+        Document -> Nullable JSString -> IO (Nullable Element)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.createElement Mozilla Document.createElement documentation> 
 createElement ::
@@ -108,24 +108,22 @@
                 self -> Maybe tagName -> m (Maybe Element)
 createElement self tagName
   = liftIO
-      ((js_createElement (unDocument (toDocument self))
-          (toMaybeJSString tagName))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createElement (toDocument self) (toMaybeJSString tagName)))
  
 foreign import javascript unsafe "$1[\"createDocumentFragment\"]()"
         js_createDocumentFragment ::
-        JSRef Document -> IO (JSRef DocumentFragment)
+        Document -> IO (Nullable DocumentFragment)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.createDocumentFragment Mozilla Document.createDocumentFragment documentation> 
 createDocumentFragment ::
                        (MonadIO m, IsDocument self) => self -> m (Maybe DocumentFragment)
 createDocumentFragment self
   = liftIO
-      ((js_createDocumentFragment (unDocument (toDocument self))) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_createDocumentFragment (toDocument self)))
  
 foreign import javascript unsafe "$1[\"createTextNode\"]($2)"
-        js_createTextNode :: JSRef Document -> JSString -> IO (JSRef Text)
+        js_createTextNode :: Document -> JSString -> IO (Nullable Text)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.createTextNode Mozilla Document.createTextNode documentation> 
 createTextNode ::
@@ -133,13 +131,11 @@
                  self -> data' -> m (Maybe Text)
 createTextNode self data'
   = liftIO
-      ((js_createTextNode (unDocument (toDocument self))
-          (toJSString data'))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createTextNode (toDocument self) (toJSString data')))
  
 foreign import javascript unsafe "$1[\"createComment\"]($2)"
-        js_createComment ::
-        JSRef Document -> JSString -> IO (JSRef Comment)
+        js_createComment :: Document -> JSString -> IO (Nullable Comment)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.createComment Mozilla Document.createComment documentation> 
 createComment ::
@@ -147,13 +143,12 @@
                 self -> data' -> m (Maybe Comment)
 createComment self data'
   = liftIO
-      ((js_createComment (unDocument (toDocument self))
-          (toJSString data'))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createComment (toDocument self) (toJSString data')))
  
 foreign import javascript unsafe "$1[\"createCDATASection\"]($2)"
         js_createCDATASection ::
-        JSRef Document -> JSString -> IO (JSRef CDATASection)
+        Document -> JSString -> IO (Nullable CDATASection)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.createCDATASection Mozilla Document.createCDATASection documentation> 
 createCDATASection ::
@@ -161,15 +156,14 @@
                      self -> data' -> m (Maybe CDATASection)
 createCDATASection self data'
   = liftIO
-      ((js_createCDATASection (unDocument (toDocument self))
-          (toJSString data'))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createCDATASection (toDocument self) (toJSString data')))
  
 foreign import javascript unsafe
         "$1[\"createProcessingInstruction\"]($2,\n$3)"
         js_createProcessingInstruction ::
-        JSRef Document ->
-          JSString -> JSString -> IO (JSRef ProcessingInstruction)
+        Document ->
+          JSString -> JSString -> IO (Nullable ProcessingInstruction)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.createProcessingInstruction Mozilla Document.createProcessingInstruction documentation> 
 createProcessingInstruction ::
@@ -178,13 +172,13 @@
                               self -> target -> data' -> m (Maybe ProcessingInstruction)
 createProcessingInstruction self target data'
   = liftIO
-      ((js_createProcessingInstruction (unDocument (toDocument self))
-          (toJSString target)
-          (toJSString data'))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createProcessingInstruction (toDocument self)
+            (toJSString target)
+            (toJSString data')))
  
 foreign import javascript unsafe "$1[\"createAttribute\"]($2)"
-        js_createAttribute :: JSRef Document -> JSString -> IO (JSRef Attr)
+        js_createAttribute :: Document -> JSString -> IO (Nullable Attr)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.createAttribute Mozilla Document.createAttribute documentation> 
 createAttribute ::
@@ -192,13 +186,12 @@
                   self -> name -> m (Maybe Attr)
 createAttribute self name
   = liftIO
-      ((js_createAttribute (unDocument (toDocument self))
-          (toJSString name))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createAttribute (toDocument self) (toJSString name)))
  
 foreign import javascript unsafe
         "$1[\"createEntityReference\"]($2)" js_createEntityReference ::
-        JSRef Document -> JSString -> IO (JSRef EntityReference)
+        Document -> JSString -> IO (Nullable EntityReference)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.createEntityReference Mozilla Document.createEntityReference documentation> 
 createEntityReference ::
@@ -206,13 +199,12 @@
                         self -> name -> m (Maybe EntityReference)
 createEntityReference self name
   = liftIO
-      ((js_createEntityReference (unDocument (toDocument self))
-          (toJSString name))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createEntityReference (toDocument self) (toJSString name)))
  
 foreign import javascript unsafe "$1[\"getElementsByTagName\"]($2)"
         js_getElementsByTagName ::
-        JSRef Document -> JSString -> IO (JSRef NodeList)
+        Document -> JSString -> IO (Nullable NodeList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.getElementsByTagName Mozilla Document.getElementsByTagName documentation> 
 getElementsByTagName ::
@@ -220,13 +212,12 @@
                        self -> tagname -> m (Maybe NodeList)
 getElementsByTagName self tagname
   = liftIO
-      ((js_getElementsByTagName (unDocument (toDocument self))
-          (toJSString tagname))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_getElementsByTagName (toDocument self) (toJSString tagname)))
  
 foreign import javascript unsafe "$1[\"importNode\"]($2, $3)"
         js_importNode ::
-        JSRef Document -> JSRef Node -> Bool -> IO (JSRef Node)
+        Document -> Nullable Node -> Bool -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.importNode Mozilla Document.importNode documentation> 
 importNode ::
@@ -234,16 +225,15 @@
              self -> Maybe importedNode -> Bool -> m (Maybe Node)
 importNode self importedNode deep
   = liftIO
-      ((js_importNode (unDocument (toDocument self))
-          (maybe jsNull (unNode . toNode) importedNode)
-          deep)
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_importNode (toDocument self)
+            (maybeToNullable (fmap toNode importedNode))
+            deep))
  
 foreign import javascript unsafe "$1[\"createElementNS\"]($2, $3)"
         js_createElementNS ::
-        JSRef Document ->
-          JSRef (Maybe JSString) ->
-            JSRef (Maybe JSString) -> IO (JSRef Element)
+        Document ->
+          Nullable JSString -> Nullable JSString -> IO (Nullable Element)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.createElementNS Mozilla Document.createElementNS documentation> 
 createElementNS ::
@@ -253,15 +243,15 @@
                     Maybe namespaceURI -> Maybe qualifiedName -> m (Maybe Element)
 createElementNS self namespaceURI qualifiedName
   = liftIO
-      ((js_createElementNS (unDocument (toDocument self))
-          (toMaybeJSString namespaceURI)
-          (toMaybeJSString qualifiedName))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createElementNS (toDocument self)
+            (toMaybeJSString namespaceURI)
+            (toMaybeJSString qualifiedName)))
  
 foreign import javascript unsafe
         "$1[\"createAttributeNS\"]($2, $3)" js_createAttributeNS ::
-        JSRef Document ->
-          JSRef (Maybe JSString) -> JSRef (Maybe JSString) -> IO (JSRef Attr)
+        Document ->
+          Nullable JSString -> Nullable JSString -> IO (Nullable Attr)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.createAttributeNS Mozilla Document.createAttributeNS documentation> 
 createAttributeNS ::
@@ -270,16 +260,15 @@
                     self -> Maybe namespaceURI -> Maybe qualifiedName -> m (Maybe Attr)
 createAttributeNS self namespaceURI qualifiedName
   = liftIO
-      ((js_createAttributeNS (unDocument (toDocument self))
-          (toMaybeJSString namespaceURI)
-          (toMaybeJSString qualifiedName))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createAttributeNS (toDocument self)
+            (toMaybeJSString namespaceURI)
+            (toMaybeJSString qualifiedName)))
  
 foreign import javascript unsafe
         "$1[\"getElementsByTagNameNS\"]($2,\n$3)" js_getElementsByTagNameNS
         ::
-        JSRef Document ->
-          JSRef (Maybe JSString) -> JSString -> IO (JSRef NodeList)
+        Document -> Nullable JSString -> JSString -> IO (Nullable NodeList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.getElementsByTagNameNS Mozilla Document.getElementsByTagNameNS documentation> 
 getElementsByTagNameNS ::
@@ -288,14 +277,13 @@
                          self -> Maybe namespaceURI -> localName -> m (Maybe NodeList)
 getElementsByTagNameNS self namespaceURI localName
   = liftIO
-      ((js_getElementsByTagNameNS (unDocument (toDocument self))
-          (toMaybeJSString namespaceURI)
-          (toJSString localName))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_getElementsByTagNameNS (toDocument self)
+            (toMaybeJSString namespaceURI)
+            (toJSString localName)))
  
 foreign import javascript unsafe "$1[\"getElementById\"]($2)"
-        js_getElementById ::
-        JSRef Document -> JSString -> IO (JSRef Element)
+        js_getElementById :: Document -> JSString -> IO (Nullable Element)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.getElementById Mozilla Document.getElementById documentation> 
 getElementById ::
@@ -303,12 +291,11 @@
                  self -> elementId -> m (Maybe Element)
 getElementById self elementId
   = liftIO
-      ((js_getElementById (unDocument (toDocument self))
-          (toJSString elementId))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_getElementById (toDocument self) (toJSString elementId)))
  
 foreign import javascript unsafe "$1[\"adoptNode\"]($2)"
-        js_adoptNode :: JSRef Document -> JSRef Node -> IO (JSRef Node)
+        js_adoptNode :: Document -> Nullable Node -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.adoptNode Mozilla Document.adoptNode documentation> 
 adoptNode ::
@@ -316,12 +303,12 @@
             self -> Maybe source -> m (Maybe Node)
 adoptNode self source
   = liftIO
-      ((js_adoptNode (unDocument (toDocument self))
-          (maybe jsNull (unNode . toNode) source))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_adoptNode (toDocument self)
+            (maybeToNullable (fmap toNode source))))
  
 foreign import javascript unsafe "$1[\"createEvent\"]($2)"
-        js_createEvent :: JSRef Document -> JSString -> IO (JSRef Event)
+        js_createEvent :: Document -> JSString -> IO (Nullable Event)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.createEvent Mozilla Document.createEvent documentation> 
 createEvent ::
@@ -329,26 +316,24 @@
               self -> eventType -> m (Maybe Event)
 createEvent self eventType
   = liftIO
-      ((js_createEvent (unDocument (toDocument self))
-          (toJSString eventType))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createEvent (toDocument self) (toJSString eventType)))
  
 foreign import javascript unsafe "$1[\"createRange\"]()"
-        js_createRange :: JSRef Document -> IO (JSRef Range)
+        js_createRange :: Document -> IO (Nullable Range)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.createRange Mozilla Document.createRange documentation> 
 createRange ::
             (MonadIO m, IsDocument self) => self -> m (Maybe Range)
 createRange self
-  = liftIO
-      ((js_createRange (unDocument (toDocument self))) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_createRange (toDocument self)))
  
 foreign import javascript unsafe
         "$1[\"createNodeIterator\"]($2, $3,\n$4, $5)" js_createNodeIterator
         ::
-        JSRef Document ->
-          JSRef Node ->
-            Word -> JSRef NodeFilter -> Bool -> IO (JSRef NodeIterator)
+        Document ->
+          Nullable Node ->
+            Word -> Nullable NodeFilter -> Bool -> IO (Nullable NodeIterator)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.createNodeIterator Mozilla Document.createNodeIterator documentation> 
 createNodeIterator ::
@@ -359,18 +344,18 @@
 createNodeIterator self root whatToShow filter
   expandEntityReferences
   = liftIO
-      ((js_createNodeIterator (unDocument (toDocument self))
-          (maybe jsNull (unNode . toNode) root)
-          whatToShow
-          (maybe jsNull pToJSRef filter)
-          expandEntityReferences)
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createNodeIterator (toDocument self)
+            (maybeToNullable (fmap toNode root))
+            whatToShow
+            (maybeToNullable filter)
+            expandEntityReferences))
  
 foreign import javascript unsafe
         "$1[\"createTreeWalker\"]($2, $3,\n$4, $5)" js_createTreeWalker ::
-        JSRef Document ->
-          JSRef Node ->
-            Word -> JSRef NodeFilter -> Bool -> IO (JSRef TreeWalker)
+        Document ->
+          Nullable Node ->
+            Word -> Nullable NodeFilter -> Bool -> IO (Nullable TreeWalker)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.createTreeWalker Mozilla Document.createTreeWalker documentation> 
 createTreeWalker ::
@@ -380,17 +365,17 @@
                        Word -> Maybe NodeFilter -> Bool -> m (Maybe TreeWalker)
 createTreeWalker self root whatToShow filter expandEntityReferences
   = liftIO
-      ((js_createTreeWalker (unDocument (toDocument self))
-          (maybe jsNull (unNode . toNode) root)
-          whatToShow
-          (maybe jsNull pToJSRef filter)
-          expandEntityReferences)
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createTreeWalker (toDocument self)
+            (maybeToNullable (fmap toNode root))
+            whatToShow
+            (maybeToNullable filter)
+            expandEntityReferences))
  
 foreign import javascript unsafe "$1[\"getOverrideStyle\"]($2, $3)"
         js_getOverrideStyle ::
-        JSRef Document ->
-          JSRef Element -> JSString -> IO (JSRef CSSStyleDeclaration)
+        Document ->
+          Nullable Element -> JSString -> IO (Nullable CSSStyleDeclaration)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.getOverrideStyle Mozilla Document.getOverrideStyle documentation> 
 getOverrideStyle ::
@@ -400,15 +385,16 @@
                      Maybe element -> pseudoElement -> m (Maybe CSSStyleDeclaration)
 getOverrideStyle self element pseudoElement
   = liftIO
-      ((js_getOverrideStyle (unDocument (toDocument self))
-          (maybe jsNull (unElement . toElement) element)
-          (toJSString pseudoElement))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_getOverrideStyle (toDocument self)
+            (maybeToNullable (fmap toElement element))
+            (toJSString pseudoElement)))
  
 foreign import javascript unsafe "$1[\"createExpression\"]($2, $3)"
         js_createExpression ::
-        JSRef Document ->
-          JSString -> JSRef XPathNSResolver -> IO (JSRef XPathExpression)
+        Document ->
+          JSString ->
+            Nullable XPathNSResolver -> IO (Nullable XPathExpression)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.createExpression Mozilla Document.createExpression documentation> 
 createExpression ::
@@ -417,14 +403,13 @@
                      expression -> Maybe XPathNSResolver -> m (Maybe XPathExpression)
 createExpression self expression resolver
   = liftIO
-      ((js_createExpression (unDocument (toDocument self))
-          (toJSString expression)
-          (maybe jsNull pToJSRef resolver))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createExpression (toDocument self) (toJSString expression)
+            (maybeToNullable resolver)))
  
 foreign import javascript unsafe "$1[\"createNSResolver\"]($2)"
         js_createNSResolver ::
-        JSRef Document -> JSRef Node -> IO (JSRef XPathNSResolver)
+        Document -> Nullable Node -> IO (Nullable XPathNSResolver)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.createNSResolver Mozilla Document.createNSResolver documentation> 
 createNSResolver ::
@@ -432,17 +417,17 @@
                    self -> Maybe nodeResolver -> m (Maybe XPathNSResolver)
 createNSResolver self nodeResolver
   = liftIO
-      ((js_createNSResolver (unDocument (toDocument self))
-          (maybe jsNull (unNode . toNode) nodeResolver))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createNSResolver (toDocument self)
+            (maybeToNullable (fmap toNode nodeResolver))))
  
 foreign import javascript unsafe
         "$1[\"evaluate\"]($2, $3, $4, $5,\n$6)" js_evaluate ::
-        JSRef Document ->
+        Document ->
           JSString ->
-            JSRef Node ->
-              JSRef XPathNSResolver ->
-                Word -> JSRef XPathResult -> IO (JSRef XPathResult)
+            Nullable Node ->
+              Nullable XPathNSResolver ->
+                Word -> Nullable XPathResult -> IO (Nullable XPathResult)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.evaluate Mozilla Document.evaluate documentation> 
 evaluate ::
@@ -455,18 +440,16 @@
                    Word -> Maybe XPathResult -> m (Maybe XPathResult)
 evaluate self expression contextNode resolver type' inResult
   = liftIO
-      ((js_evaluate (unDocument (toDocument self))
-          (toJSString expression)
-          (maybe jsNull (unNode . toNode) contextNode)
-          (maybe jsNull pToJSRef resolver)
-          type'
-          (maybe jsNull pToJSRef inResult))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_evaluate (toDocument self) (toJSString expression)
+            (maybeToNullable (fmap toNode contextNode))
+            (maybeToNullable resolver)
+            type'
+            (maybeToNullable inResult)))
  
 foreign import javascript unsafe
         "($1[\"execCommand\"]($2, $3,\n$4) ? 1 : 0)" js_execCommand ::
-        JSRef Document ->
-          JSString -> Bool -> JSRef (Maybe JSString) -> IO Bool
+        Document -> JSString -> Bool -> Nullable JSString -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.execCommand Mozilla Document.execCommand documentation> 
 execCommand ::
@@ -475,13 +458,13 @@
               self -> command -> Bool -> Maybe value -> m Bool
 execCommand self command userInterface value
   = liftIO
-      (js_execCommand (unDocument (toDocument self)) (toJSString command)
+      (js_execCommand (toDocument self) (toJSString command)
          userInterface
          (toMaybeJSString value))
  
 foreign import javascript unsafe
         "($1[\"queryCommandEnabled\"]($2) ? 1 : 0)" js_queryCommandEnabled
-        :: JSRef Document -> JSString -> IO Bool
+        :: Document -> JSString -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.queryCommandEnabled Mozilla Document.queryCommandEnabled documentation> 
 queryCommandEnabled ::
@@ -489,12 +472,11 @@
                       self -> command -> m Bool
 queryCommandEnabled self command
   = liftIO
-      (js_queryCommandEnabled (unDocument (toDocument self))
-         (toJSString command))
+      (js_queryCommandEnabled (toDocument self) (toJSString command))
  
 foreign import javascript unsafe
         "($1[\"queryCommandIndeterm\"]($2) ? 1 : 0)"
-        js_queryCommandIndeterm :: JSRef Document -> JSString -> IO Bool
+        js_queryCommandIndeterm :: Document -> JSString -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.queryCommandIndeterm Mozilla Document.queryCommandIndeterm documentation> 
 queryCommandIndeterm ::
@@ -502,12 +484,11 @@
                        self -> command -> m Bool
 queryCommandIndeterm self command
   = liftIO
-      (js_queryCommandIndeterm (unDocument (toDocument self))
-         (toJSString command))
+      (js_queryCommandIndeterm (toDocument self) (toJSString command))
  
 foreign import javascript unsafe
         "($1[\"queryCommandState\"]($2) ? 1 : 0)" js_queryCommandState ::
-        JSRef Document -> JSString -> IO Bool
+        Document -> JSString -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.queryCommandState Mozilla Document.queryCommandState documentation> 
 queryCommandState ::
@@ -515,12 +496,11 @@
                     self -> command -> m Bool
 queryCommandState self command
   = liftIO
-      (js_queryCommandState (unDocument (toDocument self))
-         (toJSString command))
+      (js_queryCommandState (toDocument self) (toJSString command))
  
 foreign import javascript unsafe
         "($1[\"queryCommandSupported\"]($2) ? 1 : 0)"
-        js_queryCommandSupported :: JSRef Document -> JSString -> IO Bool
+        js_queryCommandSupported :: Document -> JSString -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.queryCommandSupported Mozilla Document.queryCommandSupported documentation> 
 queryCommandSupported ::
@@ -528,11 +508,10 @@
                         self -> command -> m Bool
 queryCommandSupported self command
   = liftIO
-      (js_queryCommandSupported (unDocument (toDocument self))
-         (toJSString command))
+      (js_queryCommandSupported (toDocument self) (toJSString command))
  
 foreign import javascript unsafe "$1[\"queryCommandValue\"]($2)"
-        js_queryCommandValue :: JSRef Document -> JSString -> IO JSString
+        js_queryCommandValue :: Document -> JSString -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.queryCommandValue Mozilla Document.queryCommandValue documentation> 
 queryCommandValue ::
@@ -542,12 +521,11 @@
 queryCommandValue self command
   = liftIO
       (fromJSString <$>
-         (js_queryCommandValue (unDocument (toDocument self))
-            (toJSString command)))
+         (js_queryCommandValue (toDocument self) (toJSString command)))
  
 foreign import javascript unsafe "$1[\"getElementsByName\"]($2)"
         js_getElementsByName ::
-        JSRef Document -> JSString -> IO (JSRef NodeList)
+        Document -> JSString -> IO (Nullable NodeList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.getElementsByName Mozilla Document.getElementsByName documentation> 
 getElementsByName ::
@@ -555,13 +533,12 @@
                     self -> elementName -> m (Maybe NodeList)
 getElementsByName self elementName
   = liftIO
-      ((js_getElementsByName (unDocument (toDocument self))
-          (toJSString elementName))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_getElementsByName (toDocument self) (toJSString elementName)))
  
 foreign import javascript unsafe "$1[\"elementFromPoint\"]($2, $3)"
         js_elementFromPoint ::
-        JSRef Document -> Int -> Int -> IO (JSRef Element)
+        Document -> Int -> Int -> IO (Nullable Element)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.elementFromPoint Mozilla Document.elementFromPoint documentation> 
 elementFromPoint ::
@@ -569,12 +546,11 @@
                    self -> Int -> Int -> m (Maybe Element)
 elementFromPoint self x y
   = liftIO
-      ((js_elementFromPoint (unDocument (toDocument self)) x y) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_elementFromPoint (toDocument self) x y))
  
 foreign import javascript unsafe
         "$1[\"caretRangeFromPoint\"]($2,\n$3)" js_caretRangeFromPoint ::
-        JSRef Document -> Int -> Int -> IO (JSRef Range)
+        Document -> Int -> Int -> IO (Nullable Range)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.caretRangeFromPoint Mozilla Document.caretRangeFromPoint documentation> 
 caretRangeFromPoint ::
@@ -582,25 +558,24 @@
                       self -> Int -> Int -> m (Maybe Range)
 caretRangeFromPoint self x y
   = liftIO
-      ((js_caretRangeFromPoint (unDocument (toDocument self)) x y) >>=
-         fromJSRef)
+      (nullableToMaybe <$>
+         (js_caretRangeFromPoint (toDocument self) x y))
  
 foreign import javascript unsafe "$1[\"getSelection\"]()"
-        js_getSelection :: JSRef Document -> IO (JSRef Selection)
+        js_getSelection :: Document -> IO (Nullable Selection)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.getSelection Mozilla Document.getSelection documentation> 
 getSelection ::
              (MonadIO m, IsDocument self) => self -> m (Maybe Selection)
 getSelection self
-  = liftIO
-      ((js_getSelection (unDocument (toDocument self))) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getSelection (toDocument self)))
  
 foreign import javascript unsafe
         "$1[\"getCSSCanvasContext\"]($2,\n$3, $4, $5)"
         js_getCSSCanvasContext ::
-        JSRef Document ->
+        Document ->
           JSString ->
-            JSString -> Int -> Int -> IO (JSRef CanvasRenderingContext)
+            JSString -> Int -> Int -> IO (Nullable CanvasRenderingContext)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.getCSSCanvasContext Mozilla Document.getCSSCanvasContext documentation> 
 getCSSCanvasContext ::
@@ -610,16 +585,15 @@
                         contextId -> name -> Int -> Int -> m (Maybe CanvasRenderingContext)
 getCSSCanvasContext self contextId name width height
   = liftIO
-      ((js_getCSSCanvasContext (unDocument (toDocument self))
-          (toJSString contextId)
-          (toJSString name)
-          width
-          height)
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_getCSSCanvasContext (toDocument self) (toJSString contextId)
+            (toJSString name)
+            width
+            height))
  
 foreign import javascript unsafe
         "$1[\"getElementsByClassName\"]($2)" js_getElementsByClassName ::
-        JSRef Document -> JSString -> IO (JSRef NodeList)
+        Document -> JSString -> IO (Nullable NodeList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.getElementsByClassName Mozilla Document.getElementsByClassName documentation> 
 getElementsByClassName ::
@@ -627,20 +601,18 @@
                          self -> tagname -> m (Maybe NodeList)
 getElementsByClassName self tagname
   = liftIO
-      ((js_getElementsByClassName (unDocument (toDocument self))
-          (toJSString tagname))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_getElementsByClassName (toDocument self) (toJSString tagname)))
  
 foreign import javascript unsafe "($1[\"hasFocus\"]() ? 1 : 0)"
-        js_hasFocus :: JSRef Document -> IO Bool
+        js_hasFocus :: Document -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.hasFocus Mozilla Document.hasFocus documentation> 
 hasFocus :: (MonadIO m, IsDocument self) => self -> m Bool
-hasFocus self = liftIO (js_hasFocus (unDocument (toDocument self)))
+hasFocus self = liftIO (js_hasFocus (toDocument self))
  
 foreign import javascript unsafe "$1[\"querySelector\"]($2)"
-        js_querySelector ::
-        JSRef Document -> JSString -> IO (JSRef Element)
+        js_querySelector :: Document -> JSString -> IO (Nullable Element)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.querySelector Mozilla Document.querySelector documentation> 
 querySelector ::
@@ -648,13 +620,12 @@
                 self -> selectors -> m (Maybe Element)
 querySelector self selectors
   = liftIO
-      ((js_querySelector (unDocument (toDocument self))
-          (toJSString selectors))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_querySelector (toDocument self) (toJSString selectors)))
  
 foreign import javascript unsafe "$1[\"querySelectorAll\"]($2)"
         js_querySelectorAll ::
-        JSRef Document -> JSString -> IO (JSRef NodeList)
+        Document -> JSString -> IO (Nullable NodeList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.querySelectorAll Mozilla Document.querySelectorAll documentation> 
 querySelectorAll ::
@@ -662,39 +633,38 @@
                    self -> selectors -> m (Maybe NodeList)
 querySelectorAll self selectors
   = liftIO
-      ((js_querySelectorAll (unDocument (toDocument self))
-          (toJSString selectors))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_querySelectorAll (toDocument self) (toJSString selectors)))
  
 foreign import javascript unsafe "$1[\"webkitCancelFullScreen\"]()"
-        js_webkitCancelFullScreen :: JSRef Document -> IO ()
+        js_webkitCancelFullScreen :: Document -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.webkitCancelFullScreen Mozilla Document.webkitCancelFullScreen documentation> 
 webkitCancelFullScreen ::
                        (MonadIO m, IsDocument self) => self -> m ()
 webkitCancelFullScreen self
-  = liftIO (js_webkitCancelFullScreen (unDocument (toDocument self)))
+  = liftIO (js_webkitCancelFullScreen (toDocument self))
  
 foreign import javascript unsafe "$1[\"webkitExitFullscreen\"]()"
-        js_webkitExitFullscreen :: JSRef Document -> IO ()
+        js_webkitExitFullscreen :: Document -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.webkitExitFullscreen Mozilla Document.webkitExitFullscreen documentation> 
 webkitExitFullscreen ::
                      (MonadIO m, IsDocument self) => self -> m ()
 webkitExitFullscreen self
-  = liftIO (js_webkitExitFullscreen (unDocument (toDocument self)))
+  = liftIO (js_webkitExitFullscreen (toDocument self))
  
 foreign import javascript unsafe "$1[\"exitPointerLock\"]()"
-        js_exitPointerLock :: JSRef Document -> IO ()
+        js_exitPointerLock :: Document -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.exitPointerLock Mozilla Document.exitPointerLock documentation> 
 exitPointerLock :: (MonadIO m, IsDocument self) => self -> m ()
 exitPointerLock self
-  = liftIO (js_exitPointerLock (unDocument (toDocument self)))
+  = liftIO (js_exitPointerLock (toDocument self))
  
 foreign import javascript unsafe "$1[\"webkitGetNamedFlows\"]()"
         js_webkitGetNamedFlows ::
-        JSRef Document -> IO (JSRef DOMNamedFlowCollection)
+        Document -> IO (Nullable DOMNamedFlowCollection)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.webkitGetNamedFlows Mozilla Document.webkitGetNamedFlows documentation> 
 webkitGetNamedFlows ::
@@ -702,19 +672,18 @@
                       self -> m (Maybe DOMNamedFlowCollection)
 webkitGetNamedFlows self
   = liftIO
-      ((js_webkitGetNamedFlows (unDocument (toDocument self))) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_webkitGetNamedFlows (toDocument self)))
  
 foreign import javascript unsafe
         "$1[\"createTouch\"]($2, $3, $4,\n$5, $6, $7, $8, $9, $10, $11,\n$12)"
         js_createTouch ::
-        JSRef Document ->
-          JSRef Window ->
-            JSRef EventTarget ->
+        Document ->
+          Nullable Window ->
+            Nullable EventTarget ->
               Int ->
                 Int ->
                   Int ->
-                    Int -> Int -> Int -> Int -> Float -> Float -> IO (JSRef Touch)
+                    Int -> Int -> Int -> Int -> Float -> Float -> IO (Nullable Touch)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.createTouch Mozilla Document.createTouch documentation> 
 createTouch ::
@@ -729,66 +698,60 @@
 createTouch self window target identifier pageX pageY screenX
   screenY webkitRadiusX webkitRadiusY webkitRotationAngle webkitForce
   = liftIO
-      ((js_createTouch (unDocument (toDocument self))
-          (maybe jsNull pToJSRef window)
-          (maybe jsNull (unEventTarget . toEventTarget) target)
-          identifier
-          pageX
-          pageY
-          screenX
-          screenY
-          webkitRadiusX
-          webkitRadiusY
-          webkitRotationAngle
-          webkitForce)
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createTouch (toDocument self) (maybeToNullable window)
+            (maybeToNullable (fmap toEventTarget target))
+            identifier
+            pageX
+            pageY
+            screenX
+            screenY
+            webkitRadiusX
+            webkitRadiusY
+            webkitRotationAngle
+            webkitForce))
  
 foreign import javascript unsafe "$1[\"createTouchList\"]()"
-        js_createTouchList :: JSRef Document -> IO (JSRef TouchList)
+        js_createTouchList :: Document -> IO (Nullable TouchList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.createTouchList Mozilla Document.createTouchList documentation> 
 createTouchList ::
                 (MonadIO m, IsDocument self) => self -> m (Maybe TouchList)
 createTouchList self
   = liftIO
-      ((js_createTouchList (unDocument (toDocument self))) >>= fromJSRef)
+      (nullableToMaybe <$> (js_createTouchList (toDocument self)))
  
 foreign import javascript unsafe "$1[\"doctype\"]" js_getDoctype ::
-        JSRef Document -> IO (JSRef DocumentType)
+        Document -> IO (Nullable DocumentType)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.doctype Mozilla Document.doctype documentation> 
 getDoctype ::
            (MonadIO m, IsDocument self) => self -> m (Maybe DocumentType)
 getDoctype self
-  = liftIO
-      ((js_getDoctype (unDocument (toDocument self))) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getDoctype (toDocument self)))
  
 foreign import javascript unsafe "$1[\"implementation\"]"
-        js_getImplementation ::
-        JSRef Document -> IO (JSRef DOMImplementation)
+        js_getImplementation :: Document -> IO (Nullable DOMImplementation)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.implementation Mozilla Document.implementation documentation> 
 getImplementation ::
                   (MonadIO m, IsDocument self) => self -> m (Maybe DOMImplementation)
 getImplementation self
   = liftIO
-      ((js_getImplementation (unDocument (toDocument self))) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_getImplementation (toDocument self)))
  
 foreign import javascript unsafe "$1[\"documentElement\"]"
-        js_getDocumentElement :: JSRef Document -> IO (JSRef Element)
+        js_getDocumentElement :: Document -> IO (Nullable Element)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.documentElement Mozilla Document.documentElement documentation> 
 getDocumentElement ::
                    (MonadIO m, IsDocument self) => self -> m (Maybe Element)
 getDocumentElement self
   = liftIO
-      ((js_getDocumentElement (unDocument (toDocument self))) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_getDocumentElement (toDocument self)))
  
 foreign import javascript unsafe "$1[\"inputEncoding\"]"
-        js_getInputEncoding ::
-        JSRef Document -> IO (JSRef (Maybe JSString))
+        js_getInputEncoding :: Document -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.inputEncoding Mozilla Document.inputEncoding documentation> 
 getInputEncoding ::
@@ -796,11 +759,10 @@
                    self -> m (Maybe result)
 getInputEncoding self
   = liftIO
-      (fromMaybeJSString <$>
-         (js_getInputEncoding (unDocument (toDocument self))))
+      (fromMaybeJSString <$> (js_getInputEncoding (toDocument self)))
  
 foreign import javascript unsafe "$1[\"xmlEncoding\"]"
-        js_getXmlEncoding :: JSRef Document -> IO (JSRef (Maybe JSString))
+        js_getXmlEncoding :: Document -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.xmlEncoding Mozilla Document.xmlEncoding documentation> 
 getXmlEncoding ::
@@ -808,24 +770,20 @@
                  self -> m (Maybe result)
 getXmlEncoding self
   = liftIO
-      (fromMaybeJSString <$>
-         (js_getXmlEncoding (unDocument (toDocument self))))
+      (fromMaybeJSString <$> (js_getXmlEncoding (toDocument self)))
  
 foreign import javascript unsafe "$1[\"xmlVersion\"] = $2;"
-        js_setXmlVersion ::
-        JSRef Document -> JSRef (Maybe JSString) -> IO ()
+        js_setXmlVersion :: Document -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.xmlVersion Mozilla Document.xmlVersion documentation> 
 setXmlVersion ::
               (MonadIO m, IsDocument self, ToJSString val) =>
                 self -> Maybe val -> m ()
 setXmlVersion self val
-  = liftIO
-      (js_setXmlVersion (unDocument (toDocument self))
-         (toMaybeJSString val))
+  = liftIO (js_setXmlVersion (toDocument self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"xmlVersion\"]"
-        js_getXmlVersion :: JSRef Document -> IO (JSRef (Maybe JSString))
+        js_getXmlVersion :: Document -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.xmlVersion Mozilla Document.xmlVersion documentation> 
 getXmlVersion ::
@@ -833,28 +791,27 @@
                 self -> m (Maybe result)
 getXmlVersion self
   = liftIO
-      (fromMaybeJSString <$>
-         (js_getXmlVersion (unDocument (toDocument self))))
+      (fromMaybeJSString <$> (js_getXmlVersion (toDocument self)))
  
 foreign import javascript unsafe "$1[\"xmlStandalone\"] = $2;"
-        js_setXmlStandalone :: JSRef Document -> Bool -> IO ()
+        js_setXmlStandalone :: Document -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.xmlStandalone Mozilla Document.xmlStandalone documentation> 
 setXmlStandalone ::
                  (MonadIO m, IsDocument self) => self -> Bool -> m ()
 setXmlStandalone self val
-  = liftIO (js_setXmlStandalone (unDocument (toDocument self)) val)
+  = liftIO (js_setXmlStandalone (toDocument self) val)
  
 foreign import javascript unsafe "($1[\"xmlStandalone\"] ? 1 : 0)"
-        js_getXmlStandalone :: JSRef Document -> IO Bool
+        js_getXmlStandalone :: Document -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.xmlStandalone Mozilla Document.xmlStandalone documentation> 
 getXmlStandalone :: (MonadIO m, IsDocument self) => self -> m Bool
 getXmlStandalone self
-  = liftIO (js_getXmlStandalone (unDocument (toDocument self)))
+  = liftIO (js_getXmlStandalone (toDocument self))
  
 foreign import javascript unsafe "$1[\"documentURI\"]"
-        js_getDocumentURI :: JSRef Document -> IO (JSRef (Maybe JSString))
+        js_getDocumentURI :: Document -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.documentURI Mozilla Document.documentURI documentation> 
 getDocumentURI ::
@@ -862,134 +819,120 @@
                  self -> m (Maybe result)
 getDocumentURI self
   = liftIO
-      (fromMaybeJSString <$>
-         (js_getDocumentURI (unDocument (toDocument self))))
+      (fromMaybeJSString <$> (js_getDocumentURI (toDocument self)))
  
 foreign import javascript unsafe "$1[\"defaultView\"]"
-        js_getDefaultView :: JSRef Document -> IO (JSRef Window)
+        js_getDefaultView :: Document -> IO (Nullable Window)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.defaultView Mozilla Document.defaultView documentation> 
 getDefaultView ::
                (MonadIO m, IsDocument self) => self -> m (Maybe Window)
 getDefaultView self
   = liftIO
-      ((js_getDefaultView (unDocument (toDocument self))) >>= fromJSRef)
+      (nullableToMaybe <$> (js_getDefaultView (toDocument self)))
  
 foreign import javascript unsafe "$1[\"styleSheets\"]"
-        js_getStyleSheets :: JSRef Document -> IO (JSRef StyleSheetList)
+        js_getStyleSheets :: Document -> IO (Nullable StyleSheetList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.styleSheets Mozilla Document.styleSheets documentation> 
 getStyleSheets ::
                (MonadIO m, IsDocument self) => self -> m (Maybe StyleSheetList)
 getStyleSheets self
   = liftIO
-      ((js_getStyleSheets (unDocument (toDocument self))) >>= fromJSRef)
+      (nullableToMaybe <$> (js_getStyleSheets (toDocument self)))
  
 foreign import javascript unsafe "$1[\"contentType\"]"
-        js_getContentType :: JSRef Document -> IO JSString
+        js_getContentType :: Document -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.contentType Mozilla Document.contentType documentation> 
 getContentType ::
                (MonadIO m, IsDocument self, FromJSString result) =>
                  self -> m result
 getContentType self
-  = liftIO
-      (fromJSString <$>
-         (js_getContentType (unDocument (toDocument self))))
+  = liftIO (fromJSString <$> (js_getContentType (toDocument self)))
  
 foreign import javascript unsafe "$1[\"title\"] = $2;" js_setTitle
-        :: JSRef Document -> JSRef (Maybe JSString) -> IO ()
+        :: Document -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.title Mozilla Document.title documentation> 
 setTitle ::
          (MonadIO m, IsDocument self, ToJSString val) =>
            self -> Maybe val -> m ()
 setTitle self val
-  = liftIO
-      (js_setTitle (unDocument (toDocument self)) (toMaybeJSString val))
+  = liftIO (js_setTitle (toDocument self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"title\"]" js_getTitle ::
-        JSRef Document -> IO (JSRef (Maybe JSString))
+        Document -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.title Mozilla Document.title documentation> 
 getTitle ::
          (MonadIO m, IsDocument self, FromJSString result) =>
            self -> m (Maybe result)
 getTitle self
-  = liftIO
-      (fromMaybeJSString <$>
-         (js_getTitle (unDocument (toDocument self))))
+  = liftIO (fromMaybeJSString <$> (js_getTitle (toDocument self)))
  
 foreign import javascript unsafe "$1[\"referrer\"]" js_getReferrer
-        :: JSRef Document -> IO JSString
+        :: Document -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.referrer Mozilla Document.referrer documentation> 
 getReferrer ::
             (MonadIO m, IsDocument self, FromJSString result) =>
               self -> m result
 getReferrer self
-  = liftIO
-      (fromJSString <$> (js_getReferrer (unDocument (toDocument self))))
+  = liftIO (fromJSString <$> (js_getReferrer (toDocument self)))
  
 foreign import javascript unsafe "$1[\"domain\"] = $2;"
-        js_setDomain :: JSRef Document -> JSRef (Maybe JSString) -> IO ()
+        js_setDomain :: Document -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.domain Mozilla Document.domain documentation> 
 setDomain ::
           (MonadIO m, IsDocument self, ToJSString val) =>
             self -> Maybe val -> m ()
 setDomain self val
-  = liftIO
-      (js_setDomain (unDocument (toDocument self)) (toMaybeJSString val))
+  = liftIO (js_setDomain (toDocument self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"domain\"]" js_getDomain ::
-        JSRef Document -> IO (JSRef (Maybe JSString))
+        Document -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.domain Mozilla Document.domain documentation> 
 getDomain ::
           (MonadIO m, IsDocument self, FromJSString result) =>
             self -> m (Maybe result)
 getDomain self
-  = liftIO
-      (fromMaybeJSString <$>
-         (js_getDomain (unDocument (toDocument self))))
+  = liftIO (fromMaybeJSString <$> (js_getDomain (toDocument self)))
  
 foreign import javascript unsafe "$1[\"URL\"]" js_getURL ::
-        JSRef Document -> IO JSString
+        Document -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.URL Mozilla Document.URL documentation> 
 getURL ::
        (MonadIO m, IsDocument self, FromJSString result) =>
          self -> m result
 getURL self
-  = liftIO
-      (fromJSString <$> (js_getURL (unDocument (toDocument self))))
+  = liftIO (fromJSString <$> (js_getURL (toDocument self)))
  
 foreign import javascript unsafe "$1[\"cookie\"] = $2;"
-        js_setCookie :: JSRef Document -> JSRef (Maybe JSString) -> IO ()
+        js_setCookie :: Document -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.cookie Mozilla Document.cookie documentation> 
 setCookie ::
           (MonadIO m, IsDocument self, ToJSString val) =>
             self -> Maybe val -> m ()
 setCookie self val
-  = liftIO
-      (js_setCookie (unDocument (toDocument self)) (toMaybeJSString val))
+  = liftIO (js_setCookie (toDocument self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"cookie\"]" js_getCookie ::
-        JSRef Document -> IO (JSRef (Maybe JSString))
+        Document -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.cookie Mozilla Document.cookie documentation> 
 getCookie ::
           (MonadIO m, IsDocument self, FromJSString result) =>
             self -> m (Maybe result)
 getCookie self
-  = liftIO
-      (fromMaybeJSString <$>
-         (js_getCookie (unDocument (toDocument self))))
+  = liftIO (fromMaybeJSString <$> (js_getCookie (toDocument self)))
  
 foreign import javascript unsafe "$1[\"body\"] = $2;" js_setBody ::
-        JSRef Document -> JSRef HTMLElement -> IO ()
+        Document -> Nullable HTMLElement -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.body Mozilla Document.body documentation> 
 setBody ::
@@ -997,139 +940,122 @@
           self -> Maybe val -> m ()
 setBody self val
   = liftIO
-      (js_setBody (unDocument (toDocument self))
-         (maybe jsNull (unHTMLElement . toHTMLElement) val))
+      (js_setBody (toDocument self)
+         (maybeToNullable (fmap toHTMLElement val)))
  
 foreign import javascript unsafe "$1[\"body\"]" js_getBody ::
-        JSRef Document -> IO (JSRef HTMLElement)
+        Document -> IO (Nullable HTMLElement)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.body Mozilla Document.body documentation> 
 getBody ::
         (MonadIO m, IsDocument self) => self -> m (Maybe HTMLElement)
 getBody self
-  = liftIO
-      ((js_getBody (unDocument (toDocument self))) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getBody (toDocument self)))
  
 foreign import javascript unsafe "$1[\"head\"]" js_getHead ::
-        JSRef Document -> IO (JSRef HTMLHeadElement)
+        Document -> IO (Nullable HTMLHeadElement)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.head Mozilla Document.head documentation> 
 getHead ::
         (MonadIO m, IsDocument self) => self -> m (Maybe HTMLHeadElement)
 getHead self
-  = liftIO
-      ((js_getHead (unDocument (toDocument self))) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getHead (toDocument self)))
  
 foreign import javascript unsafe "$1[\"images\"]" js_getImages ::
-        JSRef Document -> IO (JSRef HTMLCollection)
+        Document -> IO (Nullable HTMLCollection)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.images Mozilla Document.images documentation> 
 getImages ::
           (MonadIO m, IsDocument self) => self -> m (Maybe HTMLCollection)
 getImages self
-  = liftIO
-      ((js_getImages (unDocument (toDocument self))) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getImages (toDocument self)))
  
 foreign import javascript unsafe "$1[\"applets\"]" js_getApplets ::
-        JSRef Document -> IO (JSRef HTMLCollection)
+        Document -> IO (Nullable HTMLCollection)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.applets Mozilla Document.applets documentation> 
 getApplets ::
            (MonadIO m, IsDocument self) => self -> m (Maybe HTMLCollection)
 getApplets self
-  = liftIO
-      ((js_getApplets (unDocument (toDocument self))) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getApplets (toDocument self)))
  
 foreign import javascript unsafe "$1[\"links\"]" js_getLinks ::
-        JSRef Document -> IO (JSRef HTMLCollection)
+        Document -> IO (Nullable HTMLCollection)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.links Mozilla Document.links documentation> 
 getLinks ::
          (MonadIO m, IsDocument self) => self -> m (Maybe HTMLCollection)
 getLinks self
-  = liftIO
-      ((js_getLinks (unDocument (toDocument self))) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getLinks (toDocument self)))
  
 foreign import javascript unsafe "$1[\"forms\"]" js_getForms ::
-        JSRef Document -> IO (JSRef HTMLCollection)
+        Document -> IO (Nullable HTMLCollection)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.forms Mozilla Document.forms documentation> 
 getForms ::
          (MonadIO m, IsDocument self) => self -> m (Maybe HTMLCollection)
 getForms self
-  = liftIO
-      ((js_getForms (unDocument (toDocument self))) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getForms (toDocument self)))
  
 foreign import javascript unsafe "$1[\"anchors\"]" js_getAnchors ::
-        JSRef Document -> IO (JSRef HTMLCollection)
+        Document -> IO (Nullable HTMLCollection)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.anchors Mozilla Document.anchors documentation> 
 getAnchors ::
            (MonadIO m, IsDocument self) => self -> m (Maybe HTMLCollection)
 getAnchors self
-  = liftIO
-      ((js_getAnchors (unDocument (toDocument self))) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getAnchors (toDocument self)))
  
 foreign import javascript unsafe "$1[\"lastModified\"]"
-        js_getLastModified :: JSRef Document -> IO JSString
+        js_getLastModified :: Document -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.lastModified Mozilla Document.lastModified documentation> 
 getLastModified ::
                 (MonadIO m, IsDocument self, FromJSString result) =>
                   self -> m result
 getLastModified self
-  = liftIO
-      (fromJSString <$>
-         (js_getLastModified (unDocument (toDocument self))))
+  = liftIO (fromJSString <$> (js_getLastModified (toDocument self)))
  
 foreign import javascript unsafe "$1[\"location\"] = $2;"
-        js_setLocation :: JSRef Document -> JSRef Location -> IO ()
+        js_setLocation :: Document -> Nullable Location -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.location Mozilla Document.location documentation> 
 setLocation ::
             (MonadIO m, IsDocument self) => self -> Maybe Location -> m ()
 setLocation self val
-  = liftIO
-      (js_setLocation (unDocument (toDocument self))
-         (maybe jsNull pToJSRef val))
+  = liftIO (js_setLocation (toDocument self) (maybeToNullable val))
  
 foreign import javascript unsafe "$1[\"location\"]" js_getLocation
-        :: JSRef Document -> IO (JSRef Location)
+        :: Document -> IO (Nullable Location)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.location Mozilla Document.location documentation> 
 getLocation ::
             (MonadIO m, IsDocument self) => self -> m (Maybe Location)
 getLocation self
-  = liftIO
-      ((js_getLocation (unDocument (toDocument self))) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getLocation (toDocument self)))
  
 foreign import javascript unsafe "$1[\"charset\"] = $2;"
-        js_setCharset :: JSRef Document -> JSRef (Maybe JSString) -> IO ()
+        js_setCharset :: Document -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.charset Mozilla Document.charset documentation> 
 setCharset ::
            (MonadIO m, IsDocument self, ToJSString val) =>
              self -> Maybe val -> m ()
 setCharset self val
-  = liftIO
-      (js_setCharset (unDocument (toDocument self))
-         (toMaybeJSString val))
+  = liftIO (js_setCharset (toDocument self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"charset\"]" js_getCharset ::
-        JSRef Document -> IO (JSRef (Maybe JSString))
+        Document -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.charset Mozilla Document.charset documentation> 
 getCharset ::
            (MonadIO m, IsDocument self, FromJSString result) =>
              self -> m (Maybe result)
 getCharset self
-  = liftIO
-      (fromMaybeJSString <$>
-         (js_getCharset (unDocument (toDocument self))))
+  = liftIO (fromMaybeJSString <$> (js_getCharset (toDocument self)))
  
 foreign import javascript unsafe "$1[\"defaultCharset\"]"
-        js_getDefaultCharset ::
-        JSRef Document -> IO (JSRef (Maybe JSString))
+        js_getDefaultCharset :: Document -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.defaultCharset Mozilla Document.defaultCharset documentation> 
 getDefaultCharset ::
@@ -1137,11 +1063,10 @@
                     self -> m (Maybe result)
 getDefaultCharset self
   = liftIO
-      (fromMaybeJSString <$>
-         (js_getDefaultCharset (unDocument (toDocument self))))
+      (fromMaybeJSString <$> (js_getDefaultCharset (toDocument self)))
  
 foreign import javascript unsafe "$1[\"readyState\"]"
-        js_getReadyState :: JSRef Document -> IO (JSRef (Maybe JSString))
+        js_getReadyState :: Document -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.readyState Mozilla Document.readyState documentation> 
 getReadyState ::
@@ -1149,11 +1074,10 @@
                 self -> m (Maybe result)
 getReadyState self
   = liftIO
-      (fromMaybeJSString <$>
-         (js_getReadyState (unDocument (toDocument self))))
+      (fromMaybeJSString <$> (js_getReadyState (toDocument self)))
  
 foreign import javascript unsafe "$1[\"characterSet\"]"
-        js_getCharacterSet :: JSRef Document -> IO (JSRef (Maybe JSString))
+        js_getCharacterSet :: Document -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.characterSet Mozilla Document.characterSet documentation> 
 getCharacterSet ::
@@ -1161,12 +1085,10 @@
                   self -> m (Maybe result)
 getCharacterSet self
   = liftIO
-      (fromMaybeJSString <$>
-         (js_getCharacterSet (unDocument (toDocument self))))
+      (fromMaybeJSString <$> (js_getCharacterSet (toDocument self)))
  
 foreign import javascript unsafe "$1[\"preferredStylesheetSet\"]"
-        js_getPreferredStylesheetSet ::
-        JSRef Document -> IO (JSRef (Maybe JSString))
+        js_getPreferredStylesheetSet :: Document -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.preferredStylesheetSet Mozilla Document.preferredStylesheetSet documentation> 
 getPreferredStylesheetSet ::
@@ -1175,11 +1097,11 @@
 getPreferredStylesheetSet self
   = liftIO
       (fromMaybeJSString <$>
-         (js_getPreferredStylesheetSet (unDocument (toDocument self))))
+         (js_getPreferredStylesheetSet (toDocument self)))
  
 foreign import javascript unsafe
         "$1[\"selectedStylesheetSet\"] = $2;" js_setSelectedStylesheetSet
-        :: JSRef Document -> JSRef (Maybe JSString) -> IO ()
+        :: Document -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.selectedStylesheetSet Mozilla Document.selectedStylesheetSet documentation> 
 setSelectedStylesheetSet ::
@@ -1187,12 +1109,11 @@
                            self -> Maybe val -> m ()
 setSelectedStylesheetSet self val
   = liftIO
-      (js_setSelectedStylesheetSet (unDocument (toDocument self))
+      (js_setSelectedStylesheetSet (toDocument self)
          (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"selectedStylesheetSet\"]"
-        js_getSelectedStylesheetSet ::
-        JSRef Document -> IO (JSRef (Maybe JSString))
+        js_getSelectedStylesheetSet :: Document -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.selectedStylesheetSet Mozilla Document.selectedStylesheetSet documentation> 
 getSelectedStylesheetSet ::
@@ -1201,111 +1122,101 @@
 getSelectedStylesheetSet self
   = liftIO
       (fromMaybeJSString <$>
-         (js_getSelectedStylesheetSet (unDocument (toDocument self))))
+         (js_getSelectedStylesheetSet (toDocument self)))
  
 foreign import javascript unsafe "$1[\"activeElement\"]"
-        js_getActiveElement :: JSRef Document -> IO (JSRef Element)
+        js_getActiveElement :: Document -> IO (Nullable Element)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.activeElement Mozilla Document.activeElement documentation> 
 getActiveElement ::
                  (MonadIO m, IsDocument self) => self -> m (Maybe Element)
 getActiveElement self
   = liftIO
-      ((js_getActiveElement (unDocument (toDocument self))) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_getActiveElement (toDocument self)))
  
 foreign import javascript unsafe "$1[\"compatMode\"]"
-        js_getCompatMode :: JSRef Document -> IO JSString
+        js_getCompatMode :: Document -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.compatMode Mozilla Document.compatMode documentation> 
 getCompatMode ::
               (MonadIO m, IsDocument self, FromJSString result) =>
                 self -> m result
 getCompatMode self
-  = liftIO
-      (fromJSString <$>
-         (js_getCompatMode (unDocument (toDocument self))))
+  = liftIO (fromJSString <$> (js_getCompatMode (toDocument self)))
  
 foreign import javascript unsafe
         "($1[\"webkitIsFullScreen\"] ? 1 : 0)" js_getWebkitIsFullScreen ::
-        JSRef Document -> IO Bool
+        Document -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.webkitIsFullScreen Mozilla Document.webkitIsFullScreen documentation> 
 getWebkitIsFullScreen ::
                       (MonadIO m, IsDocument self) => self -> m Bool
 getWebkitIsFullScreen self
-  = liftIO (js_getWebkitIsFullScreen (unDocument (toDocument self)))
+  = liftIO (js_getWebkitIsFullScreen (toDocument self))
  
 foreign import javascript unsafe
         "($1[\"webkitFullScreenKeyboardInputAllowed\"] ? 1 : 0)"
-        js_getWebkitFullScreenKeyboardInputAllowed ::
-        JSRef Document -> IO Bool
+        js_getWebkitFullScreenKeyboardInputAllowed :: Document -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.webkitFullScreenKeyboardInputAllowed Mozilla Document.webkitFullScreenKeyboardInputAllowed documentation> 
 getWebkitFullScreenKeyboardInputAllowed ::
                                         (MonadIO m, IsDocument self) => self -> m Bool
 getWebkitFullScreenKeyboardInputAllowed self
   = liftIO
-      (js_getWebkitFullScreenKeyboardInputAllowed
-         (unDocument (toDocument self)))
+      (js_getWebkitFullScreenKeyboardInputAllowed (toDocument self))
  
 foreign import javascript unsafe
         "$1[\"webkitCurrentFullScreenElement\"]"
         js_getWebkitCurrentFullScreenElement ::
-        JSRef Document -> IO (JSRef Element)
+        Document -> IO (Nullable Element)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.webkitCurrentFullScreenElement Mozilla Document.webkitCurrentFullScreenElement documentation> 
 getWebkitCurrentFullScreenElement ::
                                   (MonadIO m, IsDocument self) => self -> m (Maybe Element)
 getWebkitCurrentFullScreenElement self
   = liftIO
-      ((js_getWebkitCurrentFullScreenElement
-          (unDocument (toDocument self)))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_getWebkitCurrentFullScreenElement (toDocument self)))
  
 foreign import javascript unsafe
         "($1[\"webkitFullscreenEnabled\"] ? 1 : 0)"
-        js_getWebkitFullscreenEnabled :: JSRef Document -> IO Bool
+        js_getWebkitFullscreenEnabled :: Document -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.webkitFullscreenEnabled Mozilla Document.webkitFullscreenEnabled documentation> 
 getWebkitFullscreenEnabled ::
                            (MonadIO m, IsDocument self) => self -> m Bool
 getWebkitFullscreenEnabled self
-  = liftIO
-      (js_getWebkitFullscreenEnabled (unDocument (toDocument self)))
+  = liftIO (js_getWebkitFullscreenEnabled (toDocument self))
  
 foreign import javascript unsafe "$1[\"webkitFullscreenElement\"]"
-        js_getWebkitFullscreenElement ::
-        JSRef Document -> IO (JSRef Element)
+        js_getWebkitFullscreenElement :: Document -> IO (Nullable Element)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.webkitFullscreenElement Mozilla Document.webkitFullscreenElement documentation> 
 getWebkitFullscreenElement ::
                            (MonadIO m, IsDocument self) => self -> m (Maybe Element)
 getWebkitFullscreenElement self
   = liftIO
-      ((js_getWebkitFullscreenElement (unDocument (toDocument self))) >>=
-         fromJSRef)
+      (nullableToMaybe <$>
+         (js_getWebkitFullscreenElement (toDocument self)))
  
 foreign import javascript unsafe "$1[\"pointerLockElement\"]"
-        js_getPointerLockElement :: JSRef Document -> IO (JSRef Element)
+        js_getPointerLockElement :: Document -> IO (Nullable Element)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.pointerLockElement Mozilla Document.pointerLockElement documentation> 
 getPointerLockElement ::
                       (MonadIO m, IsDocument self) => self -> m (Maybe Element)
 getPointerLockElement self
   = liftIO
-      ((js_getPointerLockElement (unDocument (toDocument self))) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_getPointerLockElement (toDocument self)))
  
 foreign import javascript unsafe "$1[\"fonts\"]" js_getFonts ::
-        JSRef Document -> IO (JSRef FontLoader)
+        Document -> IO (Nullable FontLoader)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.fonts Mozilla Document.fonts documentation> 
 getFonts ::
          (MonadIO m, IsDocument self) => self -> m (Maybe FontLoader)
 getFonts self
-  = liftIO
-      ((js_getFonts (unDocument (toDocument self))) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getFonts (toDocument self)))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.onabort Mozilla Document.onabort documentation> 
 abort ::
@@ -1606,7 +1517,7 @@
   = unsafeEventName (toJSString "webkitwillrevealtop")
  
 foreign import javascript unsafe "$1[\"visibilityState\"]"
-        js_getVisibilityState :: JSRef Document -> IO JSString
+        js_getVisibilityState :: Document -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.visibilityState Mozilla Document.visibilityState documentation> 
 getVisibilityState ::
@@ -1614,47 +1525,41 @@
                      self -> m result
 getVisibilityState self
   = liftIO
-      (fromJSString <$>
-         (js_getVisibilityState (unDocument (toDocument self))))
+      (fromJSString <$> (js_getVisibilityState (toDocument self)))
  
 foreign import javascript unsafe "($1[\"hidden\"] ? 1 : 0)"
-        js_getHidden :: JSRef Document -> IO Bool
+        js_getHidden :: Document -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.hidden Mozilla Document.hidden documentation> 
 getHidden :: (MonadIO m, IsDocument self) => self -> m Bool
-getHidden self
-  = liftIO (js_getHidden (unDocument (toDocument self)))
+getHidden self = liftIO (js_getHidden (toDocument self))
  
 foreign import javascript unsafe "$1[\"securityPolicy\"]"
-        js_getSecurityPolicy :: JSRef Document -> IO (JSRef SecurityPolicy)
+        js_getSecurityPolicy :: Document -> IO (Nullable SecurityPolicy)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.securityPolicy Mozilla Document.securityPolicy documentation> 
 getSecurityPolicy ::
                   (MonadIO m, IsDocument self) => self -> m (Maybe SecurityPolicy)
 getSecurityPolicy self
   = liftIO
-      ((js_getSecurityPolicy (unDocument (toDocument self))) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_getSecurityPolicy (toDocument self)))
  
 foreign import javascript unsafe "$1[\"currentScript\"]"
-        js_getCurrentScript ::
-        JSRef Document -> IO (JSRef HTMLScriptElement)
+        js_getCurrentScript :: Document -> IO (Nullable HTMLScriptElement)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.currentScript Mozilla Document.currentScript documentation> 
 getCurrentScript ::
                  (MonadIO m, IsDocument self) => self -> m (Maybe HTMLScriptElement)
 getCurrentScript self
   = liftIO
-      ((js_getCurrentScript (unDocument (toDocument self))) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_getCurrentScript (toDocument self)))
  
 foreign import javascript unsafe "$1[\"origin\"]" js_getOrigin ::
-        JSRef Document -> IO JSString
+        Document -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Document.origin Mozilla Document.origin documentation> 
 getOrigin ::
           (MonadIO m, IsDocument self, FromJSString result) =>
             self -> m result
 getOrigin self
-  = liftIO
-      (fromJSString <$> (js_getOrigin (unDocument (toDocument self))))
+  = liftIO (fromJSString <$> (js_getOrigin (toDocument self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/DocumentFragment.hs b/src/GHCJS/DOM/JSFFI/Generated/DocumentFragment.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/DocumentFragment.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/DocumentFragment.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -21,16 +21,15 @@
  
 foreign import javascript unsafe
         "new window[\"DocumentFragment\"]()" js_newDocumentFragment ::
-        IO (JSRef DocumentFragment)
+        IO DocumentFragment
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DocumentFragment Mozilla DocumentFragment documentation> 
 newDocumentFragment :: (MonadIO m) => m DocumentFragment
-newDocumentFragment
-  = liftIO (js_newDocumentFragment >>= fromJSRefUnchecked)
+newDocumentFragment = liftIO (js_newDocumentFragment)
  
 foreign import javascript unsafe "$1[\"querySelector\"]($2)"
         js_querySelector ::
-        JSRef DocumentFragment -> JSString -> IO (JSRef Element)
+        DocumentFragment -> JSString -> IO (Nullable Element)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DocumentFragment.querySelector Mozilla DocumentFragment.querySelector documentation> 
 querySelector ::
@@ -38,13 +37,12 @@
                 DocumentFragment -> selectors -> m (Maybe Element)
 querySelector self selectors
   = liftIO
-      ((js_querySelector (unDocumentFragment self)
-          (toJSString selectors))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_querySelector (self) (toJSString selectors)))
  
 foreign import javascript unsafe "$1[\"querySelectorAll\"]($2)"
         js_querySelectorAll ::
-        JSRef DocumentFragment -> JSString -> IO (JSRef NodeList)
+        DocumentFragment -> JSString -> IO (Nullable NodeList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DocumentFragment.querySelectorAll Mozilla DocumentFragment.querySelectorAll documentation> 
 querySelectorAll ::
@@ -52,6 +50,5 @@
                    DocumentFragment -> selectors -> m (Maybe NodeList)
 querySelectorAll self selectors
   = liftIO
-      ((js_querySelectorAll (unDocumentFragment self)
-          (toJSString selectors))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_querySelectorAll (self) (toJSString selectors)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/DocumentType.hs b/src/GHCJS/DOM/JSFFI/Generated/DocumentType.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/DocumentType.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/DocumentType.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -21,63 +21,57 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"name\"]" js_getName ::
-        JSRef DocumentType -> IO JSString
+        DocumentType -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DocumentType.name Mozilla DocumentType.name documentation> 
 getName ::
         (MonadIO m, FromJSString result) => DocumentType -> m result
-getName self
-  = liftIO (fromJSString <$> (js_getName (unDocumentType self)))
+getName self = liftIO (fromJSString <$> (js_getName (self)))
  
 foreign import javascript unsafe "$1[\"entities\"]" js_getEntities
-        :: JSRef DocumentType -> IO (JSRef NamedNodeMap)
+        :: DocumentType -> IO (Nullable NamedNodeMap)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DocumentType.entities Mozilla DocumentType.entities documentation> 
 getEntities ::
             (MonadIO m) => DocumentType -> m (Maybe NamedNodeMap)
 getEntities self
-  = liftIO ((js_getEntities (unDocumentType self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getEntities (self)))
  
 foreign import javascript unsafe "$1[\"notations\"]"
-        js_getNotations :: JSRef DocumentType -> IO (JSRef NamedNodeMap)
+        js_getNotations :: DocumentType -> IO (Nullable NamedNodeMap)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DocumentType.notations Mozilla DocumentType.notations documentation> 
 getNotations ::
              (MonadIO m) => DocumentType -> m (Maybe NamedNodeMap)
 getNotations self
-  = liftIO ((js_getNotations (unDocumentType self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getNotations (self)))
  
 foreign import javascript unsafe "$1[\"publicId\"]" js_getPublicId
-        :: JSRef DocumentType -> IO (JSRef (Maybe JSString))
+        :: DocumentType -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DocumentType.publicId Mozilla DocumentType.publicId documentation> 
 getPublicId ::
             (MonadIO m, FromJSString result) =>
               DocumentType -> m (Maybe result)
 getPublicId self
-  = liftIO
-      (fromMaybeJSString <$> (js_getPublicId (unDocumentType self)))
+  = liftIO (fromMaybeJSString <$> (js_getPublicId (self)))
  
 foreign import javascript unsafe "$1[\"systemId\"]" js_getSystemId
-        :: JSRef DocumentType -> IO (JSRef (Maybe JSString))
+        :: DocumentType -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DocumentType.systemId Mozilla DocumentType.systemId documentation> 
 getSystemId ::
             (MonadIO m, FromJSString result) =>
               DocumentType -> m (Maybe result)
 getSystemId self
-  = liftIO
-      (fromMaybeJSString <$> (js_getSystemId (unDocumentType self)))
+  = liftIO (fromMaybeJSString <$> (js_getSystemId (self)))
  
 foreign import javascript unsafe "$1[\"internalSubset\"]"
-        js_getInternalSubset ::
-        JSRef DocumentType -> IO (JSRef (Maybe JSString))
+        js_getInternalSubset :: DocumentType -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DocumentType.internalSubset Mozilla DocumentType.internalSubset documentation> 
 getInternalSubset ::
                   (MonadIO m, FromJSString result) =>
                     DocumentType -> m (Maybe result)
 getInternalSubset self
-  = liftIO
-      (fromMaybeJSString <$>
-         (js_getInternalSubset (unDocumentType self)))
+  = liftIO (fromMaybeJSString <$> (js_getInternalSubset (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/DynamicsCompressorNode.hs b/src/GHCJS/DOM/JSFFI/Generated/DynamicsCompressorNode.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/DynamicsCompressorNode.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/DynamicsCompressorNode.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -22,62 +22,53 @@
  
 foreign import javascript unsafe "$1[\"threshold\"]"
         js_getThreshold ::
-        JSRef DynamicsCompressorNode -> IO (JSRef AudioParam)
+        DynamicsCompressorNode -> IO (Nullable AudioParam)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DynamicsCompressorNode.threshold Mozilla DynamicsCompressorNode.threshold documentation> 
 getThreshold ::
              (MonadIO m) => DynamicsCompressorNode -> m (Maybe AudioParam)
 getThreshold self
-  = liftIO
-      ((js_getThreshold (unDynamicsCompressorNode self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getThreshold (self)))
  
 foreign import javascript unsafe "$1[\"knee\"]" js_getKnee ::
-        JSRef DynamicsCompressorNode -> IO (JSRef AudioParam)
+        DynamicsCompressorNode -> IO (Nullable AudioParam)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DynamicsCompressorNode.knee Mozilla DynamicsCompressorNode.knee documentation> 
 getKnee ::
         (MonadIO m) => DynamicsCompressorNode -> m (Maybe AudioParam)
-getKnee self
-  = liftIO
-      ((js_getKnee (unDynamicsCompressorNode self)) >>= fromJSRef)
+getKnee self = liftIO (nullableToMaybe <$> (js_getKnee (self)))
  
 foreign import javascript unsafe "$1[\"ratio\"]" js_getRatio ::
-        JSRef DynamicsCompressorNode -> IO (JSRef AudioParam)
+        DynamicsCompressorNode -> IO (Nullable AudioParam)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DynamicsCompressorNode.ratio Mozilla DynamicsCompressorNode.ratio documentation> 
 getRatio ::
          (MonadIO m) => DynamicsCompressorNode -> m (Maybe AudioParam)
-getRatio self
-  = liftIO
-      ((js_getRatio (unDynamicsCompressorNode self)) >>= fromJSRef)
+getRatio self = liftIO (nullableToMaybe <$> (js_getRatio (self)))
  
 foreign import javascript unsafe "$1[\"reduction\"]"
         js_getReduction ::
-        JSRef DynamicsCompressorNode -> IO (JSRef AudioParam)
+        DynamicsCompressorNode -> IO (Nullable AudioParam)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DynamicsCompressorNode.reduction Mozilla DynamicsCompressorNode.reduction documentation> 
 getReduction ::
              (MonadIO m) => DynamicsCompressorNode -> m (Maybe AudioParam)
 getReduction self
-  = liftIO
-      ((js_getReduction (unDynamicsCompressorNode self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getReduction (self)))
  
 foreign import javascript unsafe "$1[\"attack\"]" js_getAttack ::
-        JSRef DynamicsCompressorNode -> IO (JSRef AudioParam)
+        DynamicsCompressorNode -> IO (Nullable AudioParam)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DynamicsCompressorNode.attack Mozilla DynamicsCompressorNode.attack documentation> 
 getAttack ::
           (MonadIO m) => DynamicsCompressorNode -> m (Maybe AudioParam)
-getAttack self
-  = liftIO
-      ((js_getAttack (unDynamicsCompressorNode self)) >>= fromJSRef)
+getAttack self = liftIO (nullableToMaybe <$> (js_getAttack (self)))
  
 foreign import javascript unsafe "$1[\"release\"]" js_getRelease ::
-        JSRef DynamicsCompressorNode -> IO (JSRef AudioParam)
+        DynamicsCompressorNode -> IO (Nullable AudioParam)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/DynamicsCompressorNode.release Mozilla DynamicsCompressorNode.release documentation> 
 getRelease ::
            (MonadIO m) => DynamicsCompressorNode -> m (Maybe AudioParam)
 getRelease self
-  = liftIO
-      ((js_getRelease (unDynamicsCompressorNode self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getRelease (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/EXTBlendMinMax.hs b/src/GHCJS/DOM/JSFFI/Generated/EXTBlendMinMax.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/EXTBlendMinMax.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/EXTBlendMinMax.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/EXTTextureFilterAnisotropic.hs b/src/GHCJS/DOM/JSFFI/Generated/EXTTextureFilterAnisotropic.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/EXTTextureFilterAnisotropic.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/EXTTextureFilterAnisotropic.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/EXTsRGB.hs b/src/GHCJS/DOM/JSFFI/Generated/EXTsRGB.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/EXTsRGB.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/EXTsRGB.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/Element.hs b/src/GHCJS/DOM/JSFFI/Generated/Element.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/Element.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/Element.hs
@@ -59,7 +59,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -73,8 +73,7 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"getAttribute\"]($2)"
-        js_getAttribute ::
-        JSRef Element -> JSString -> IO (JSRef (Maybe JSString))
+        js_getAttribute :: Element -> JSString -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.getAttribute Mozilla Element.getAttribute documentation> 
 getAttribute ::
@@ -84,10 +83,10 @@
 getAttribute self name
   = liftIO
       (fromMaybeJSString <$>
-         (js_getAttribute (unElement (toElement self)) (toJSString name)))
+         (js_getAttribute (toElement self) (toJSString name)))
  
 foreign import javascript unsafe "$1[\"setAttribute\"]($2, $3)"
-        js_setAttribute :: JSRef Element -> JSString -> JSString -> IO ()
+        js_setAttribute :: Element -> JSString -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.setAttribute Mozilla Element.setAttribute documentation> 
 setAttribute ::
@@ -95,22 +94,21 @@
                self -> name -> value -> m ()
 setAttribute self name value
   = liftIO
-      (js_setAttribute (unElement (toElement self)) (toJSString name)
+      (js_setAttribute (toElement self) (toJSString name)
          (toJSString value))
  
 foreign import javascript unsafe "$1[\"removeAttribute\"]($2)"
-        js_removeAttribute :: JSRef Element -> JSString -> IO ()
+        js_removeAttribute :: Element -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.removeAttribute Mozilla Element.removeAttribute documentation> 
 removeAttribute ::
                 (MonadIO m, IsElement self, ToJSString name) =>
                   self -> name -> m ()
 removeAttribute self name
-  = liftIO
-      (js_removeAttribute (unElement (toElement self)) (toJSString name))
+  = liftIO (js_removeAttribute (toElement self) (toJSString name))
  
 foreign import javascript unsafe "$1[\"getAttributeNode\"]($2)"
-        js_getAttributeNode :: JSRef Element -> JSString -> IO (JSRef Attr)
+        js_getAttributeNode :: Element -> JSString -> IO (Nullable Attr)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.getAttributeNode Mozilla Element.getAttributeNode documentation> 
 getAttributeNode ::
@@ -118,39 +116,37 @@
                    self -> name -> m (Maybe Attr)
 getAttributeNode self name
   = liftIO
-      ((js_getAttributeNode (unElement (toElement self))
-          (toJSString name))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_getAttributeNode (toElement self) (toJSString name)))
  
 foreign import javascript unsafe "$1[\"setAttributeNode\"]($2)"
         js_setAttributeNode ::
-        JSRef Element -> JSRef Attr -> IO (JSRef Attr)
+        Element -> Nullable Attr -> IO (Nullable Attr)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.setAttributeNode Mozilla Element.setAttributeNode documentation> 
 setAttributeNode ::
                  (MonadIO m, IsElement self) => self -> Maybe Attr -> m (Maybe Attr)
 setAttributeNode self newAttr
   = liftIO
-      ((js_setAttributeNode (unElement (toElement self))
-          (maybe jsNull pToJSRef newAttr))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_setAttributeNode (toElement self) (maybeToNullable newAttr)))
  
 foreign import javascript unsafe "$1[\"removeAttributeNode\"]($2)"
         js_removeAttributeNode ::
-        JSRef Element -> JSRef Attr -> IO (JSRef Attr)
+        Element -> Nullable Attr -> IO (Nullable Attr)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.removeAttributeNode Mozilla Element.removeAttributeNode documentation> 
 removeAttributeNode ::
                     (MonadIO m, IsElement self) => self -> Maybe Attr -> m (Maybe Attr)
 removeAttributeNode self oldAttr
   = liftIO
-      ((js_removeAttributeNode (unElement (toElement self))
-          (maybe jsNull pToJSRef oldAttr))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_removeAttributeNode (toElement self)
+            (maybeToNullable oldAttr)))
  
 foreign import javascript unsafe "$1[\"getElementsByTagName\"]($2)"
         js_getElementsByTagName ::
-        JSRef Element -> JSString -> IO (JSRef NodeList)
+        Element -> JSString -> IO (Nullable NodeList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.getElementsByTagName Mozilla Element.getElementsByTagName documentation> 
 getElementsByTagName ::
@@ -158,22 +154,20 @@
                        self -> name -> m (Maybe NodeList)
 getElementsByTagName self name
   = liftIO
-      ((js_getElementsByTagName (unElement (toElement self))
-          (toJSString name))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_getElementsByTagName (toElement self) (toJSString name)))
  
 foreign import javascript unsafe
         "($1[\"hasAttributes\"]() ? 1 : 0)" js_hasAttributes ::
-        JSRef Element -> IO Bool
+        Element -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.hasAttributes Mozilla Element.hasAttributes documentation> 
 hasAttributes :: (MonadIO m, IsElement self) => self -> m Bool
-hasAttributes self
-  = liftIO (js_hasAttributes (unElement (toElement self)))
+hasAttributes self = liftIO (js_hasAttributes (toElement self))
  
 foreign import javascript unsafe "$1[\"getAttributeNS\"]($2, $3)"
         js_getAttributeNS ::
-        JSRef Element -> JSRef (Maybe JSString) -> JSString -> IO JSString
+        Element -> Nullable JSString -> JSString -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.getAttributeNS Mozilla Element.getAttributeNS documentation> 
 getAttributeNS ::
@@ -183,14 +177,12 @@
 getAttributeNS self namespaceURI localName
   = liftIO
       (fromJSString <$>
-         (js_getAttributeNS (unElement (toElement self))
-            (toMaybeJSString namespaceURI)
+         (js_getAttributeNS (toElement self) (toMaybeJSString namespaceURI)
             (toJSString localName)))
  
 foreign import javascript unsafe
         "$1[\"setAttributeNS\"]($2, $3, $4)" js_setAttributeNS ::
-        JSRef Element ->
-          JSRef (Maybe JSString) -> JSString -> JSString -> IO ()
+        Element -> Nullable JSString -> JSString -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.setAttributeNS Mozilla Element.setAttributeNS documentation> 
 setAttributeNS ::
@@ -199,14 +191,13 @@
                  self -> Maybe namespaceURI -> qualifiedName -> value -> m ()
 setAttributeNS self namespaceURI qualifiedName value
   = liftIO
-      (js_setAttributeNS (unElement (toElement self))
-         (toMaybeJSString namespaceURI)
+      (js_setAttributeNS (toElement self) (toMaybeJSString namespaceURI)
          (toJSString qualifiedName)
          (toJSString value))
  
 foreign import javascript unsafe
         "$1[\"removeAttributeNS\"]($2, $3)" js_removeAttributeNS ::
-        JSRef Element -> JSRef (Maybe JSString) -> JSString -> IO ()
+        Element -> Nullable JSString -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.removeAttributeNS Mozilla Element.removeAttributeNS documentation> 
 removeAttributeNS ::
@@ -215,15 +206,14 @@
                     self -> Maybe namespaceURI -> localName -> m ()
 removeAttributeNS self namespaceURI localName
   = liftIO
-      (js_removeAttributeNS (unElement (toElement self))
+      (js_removeAttributeNS (toElement self)
          (toMaybeJSString namespaceURI)
          (toJSString localName))
  
 foreign import javascript unsafe
         "$1[\"getElementsByTagNameNS\"]($2,\n$3)" js_getElementsByTagNameNS
         ::
-        JSRef Element ->
-          JSRef (Maybe JSString) -> JSString -> IO (JSRef NodeList)
+        Element -> Nullable JSString -> JSString -> IO (Nullable NodeList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.getElementsByTagNameNS Mozilla Element.getElementsByTagNameNS documentation> 
 getElementsByTagNameNS ::
@@ -232,15 +222,14 @@
                          self -> Maybe namespaceURI -> localName -> m (Maybe NodeList)
 getElementsByTagNameNS self namespaceURI localName
   = liftIO
-      ((js_getElementsByTagNameNS (unElement (toElement self))
-          (toMaybeJSString namespaceURI)
-          (toJSString localName))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_getElementsByTagNameNS (toElement self)
+            (toMaybeJSString namespaceURI)
+            (toJSString localName)))
  
 foreign import javascript unsafe
         "$1[\"getAttributeNodeNS\"]($2, $3)" js_getAttributeNodeNS ::
-        JSRef Element ->
-          JSRef (Maybe JSString) -> JSString -> IO (JSRef Attr)
+        Element -> Nullable JSString -> JSString -> IO (Nullable Attr)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.getAttributeNodeNS Mozilla Element.getAttributeNodeNS documentation> 
 getAttributeNodeNS ::
@@ -249,39 +238,37 @@
                      self -> Maybe namespaceURI -> localName -> m (Maybe Attr)
 getAttributeNodeNS self namespaceURI localName
   = liftIO
-      ((js_getAttributeNodeNS (unElement (toElement self))
-          (toMaybeJSString namespaceURI)
-          (toJSString localName))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_getAttributeNodeNS (toElement self)
+            (toMaybeJSString namespaceURI)
+            (toJSString localName)))
  
 foreign import javascript unsafe "$1[\"setAttributeNodeNS\"]($2)"
         js_setAttributeNodeNS ::
-        JSRef Element -> JSRef Attr -> IO (JSRef Attr)
+        Element -> Nullable Attr -> IO (Nullable Attr)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.setAttributeNodeNS Mozilla Element.setAttributeNodeNS documentation> 
 setAttributeNodeNS ::
                    (MonadIO m, IsElement self) => self -> Maybe Attr -> m (Maybe Attr)
 setAttributeNodeNS self newAttr
   = liftIO
-      ((js_setAttributeNodeNS (unElement (toElement self))
-          (maybe jsNull pToJSRef newAttr))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_setAttributeNodeNS (toElement self) (maybeToNullable newAttr)))
  
 foreign import javascript unsafe
         "($1[\"hasAttribute\"]($2) ? 1 : 0)" js_hasAttribute ::
-        JSRef Element -> JSString -> IO Bool
+        Element -> JSString -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.hasAttribute Mozilla Element.hasAttribute documentation> 
 hasAttribute ::
              (MonadIO m, IsElement self, ToJSString name) =>
                self -> name -> m Bool
 hasAttribute self name
-  = liftIO
-      (js_hasAttribute (unElement (toElement self)) (toJSString name))
+  = liftIO (js_hasAttribute (toElement self) (toJSString name))
  
 foreign import javascript unsafe
         "($1[\"hasAttributeNS\"]($2,\n$3) ? 1 : 0)" js_hasAttributeNS ::
-        JSRef Element -> JSRef (Maybe JSString) -> JSString -> IO Bool
+        Element -> Nullable JSString -> JSString -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.hasAttributeNS Mozilla Element.hasAttributeNS documentation> 
 hasAttributeNS ::
@@ -290,65 +277,62 @@
                  self -> Maybe namespaceURI -> localName -> m Bool
 hasAttributeNS self namespaceURI localName
   = liftIO
-      (js_hasAttributeNS (unElement (toElement self))
-         (toMaybeJSString namespaceURI)
+      (js_hasAttributeNS (toElement self) (toMaybeJSString namespaceURI)
          (toJSString localName))
  
 foreign import javascript unsafe "$1[\"focus\"]()" js_focus ::
-        JSRef Element -> IO ()
+        Element -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.focus Mozilla Element.focus documentation> 
 focus :: (MonadIO m, IsElement self) => self -> m ()
-focus self = liftIO (js_focus (unElement (toElement self)))
+focus self = liftIO (js_focus (toElement self))
  
 foreign import javascript unsafe "$1[\"blur\"]()" js_blur ::
-        JSRef Element -> IO ()
+        Element -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.blur Mozilla Element.blur documentation> 
 blur :: (MonadIO m, IsElement self) => self -> m ()
-blur self = liftIO (js_blur (unElement (toElement self)))
+blur self = liftIO (js_blur (toElement self))
  
 foreign import javascript unsafe "$1[\"scrollIntoView\"]($2)"
-        js_scrollIntoView :: JSRef Element -> Bool -> IO ()
+        js_scrollIntoView :: Element -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.scrollIntoView Mozilla Element.scrollIntoView documentation> 
 scrollIntoView ::
                (MonadIO m, IsElement self) => self -> Bool -> m ()
 scrollIntoView self alignWithTop
-  = liftIO
-      (js_scrollIntoView (unElement (toElement self)) alignWithTop)
+  = liftIO (js_scrollIntoView (toElement self) alignWithTop)
  
 foreign import javascript unsafe
         "$1[\"scrollIntoViewIfNeeded\"]($2)" js_scrollIntoViewIfNeeded ::
-        JSRef Element -> Bool -> IO ()
+        Element -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.scrollIntoViewIfNeeded Mozilla Element.scrollIntoViewIfNeeded documentation> 
 scrollIntoViewIfNeeded ::
                        (MonadIO m, IsElement self) => self -> Bool -> m ()
 scrollIntoViewIfNeeded self centerIfNeeded
   = liftIO
-      (js_scrollIntoViewIfNeeded (unElement (toElement self))
-         centerIfNeeded)
+      (js_scrollIntoViewIfNeeded (toElement self) centerIfNeeded)
  
 foreign import javascript unsafe "$1[\"scrollByLines\"]($2)"
-        js_scrollByLines :: JSRef Element -> Int -> IO ()
+        js_scrollByLines :: Element -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.scrollByLines Mozilla Element.scrollByLines documentation> 
 scrollByLines :: (MonadIO m, IsElement self) => self -> Int -> m ()
 scrollByLines self lines
-  = liftIO (js_scrollByLines (unElement (toElement self)) lines)
+  = liftIO (js_scrollByLines (toElement self) lines)
  
 foreign import javascript unsafe "$1[\"scrollByPages\"]($2)"
-        js_scrollByPages :: JSRef Element -> Int -> IO ()
+        js_scrollByPages :: Element -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.scrollByPages Mozilla Element.scrollByPages documentation> 
 scrollByPages :: (MonadIO m, IsElement self) => self -> Int -> m ()
 scrollByPages self pages
-  = liftIO (js_scrollByPages (unElement (toElement self)) pages)
+  = liftIO (js_scrollByPages (toElement self) pages)
  
 foreign import javascript unsafe
         "$1[\"getElementsByClassName\"]($2)" js_getElementsByClassName ::
-        JSRef Element -> JSString -> IO (JSRef NodeList)
+        Element -> JSString -> IO (Nullable NodeList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.getElementsByClassName Mozilla Element.getElementsByClassName documentation> 
 getElementsByClassName ::
@@ -356,12 +340,11 @@
                          self -> name -> m (Maybe NodeList)
 getElementsByClassName self name
   = liftIO
-      ((js_getElementsByClassName (unElement (toElement self))
-          (toJSString name))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_getElementsByClassName (toElement self) (toJSString name)))
  
 foreign import javascript unsafe "$1[\"querySelector\"]($2)"
-        js_querySelector :: JSRef Element -> JSString -> IO (JSRef Element)
+        js_querySelector :: Element -> JSString -> IO (Nullable Element)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.querySelector Mozilla Element.querySelector documentation> 
 querySelector ::
@@ -369,13 +352,12 @@
                 self -> selectors -> m (Maybe Element)
 querySelector self selectors
   = liftIO
-      ((js_querySelector (unElement (toElement self))
-          (toJSString selectors))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_querySelector (toElement self) (toJSString selectors)))
  
 foreign import javascript unsafe "$1[\"querySelectorAll\"]($2)"
         js_querySelectorAll ::
-        JSRef Element -> JSString -> IO (JSRef NodeList)
+        Element -> JSString -> IO (Nullable NodeList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.querySelectorAll Mozilla Element.querySelectorAll documentation> 
 querySelectorAll ::
@@ -383,23 +365,21 @@
                    self -> selectors -> m (Maybe NodeList)
 querySelectorAll self selectors
   = liftIO
-      ((js_querySelectorAll (unElement (toElement self))
-          (toJSString selectors))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_querySelectorAll (toElement self) (toJSString selectors)))
  
 foreign import javascript unsafe "($1[\"matches\"]($2) ? 1 : 0)"
-        js_matches :: JSRef Element -> JSString -> IO Bool
+        js_matches :: Element -> JSString -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.matches Mozilla Element.matches documentation> 
 matches ::
         (MonadIO m, IsElement self, ToJSString selectors) =>
           self -> selectors -> m Bool
 matches self selectors
-  = liftIO
-      (js_matches (unElement (toElement self)) (toJSString selectors))
+  = liftIO (js_matches (toElement self) (toJSString selectors))
  
 foreign import javascript unsafe "$1[\"closest\"]($2)" js_closest
-        :: JSRef Element -> JSString -> IO (JSRef Element)
+        :: Element -> JSString -> IO (Nullable Element)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.closest Mozilla Element.closest documentation> 
 closest ::
@@ -407,12 +387,12 @@
           self -> selectors -> m (Maybe Element)
 closest self selectors
   = liftIO
-      ((js_closest (unElement (toElement self)) (toJSString selectors))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_closest (toElement self) (toJSString selectors)))
  
 foreign import javascript unsafe
         "($1[\"webkitMatchesSelector\"]($2) ? 1 : 0)"
-        js_webkitMatchesSelector :: JSRef Element -> JSString -> IO Bool
+        js_webkitMatchesSelector :: Element -> JSString -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.webkitMatchesSelector Mozilla Element.webkitMatchesSelector documentation> 
 webkitMatchesSelector ::
@@ -420,410 +400,373 @@
                         self -> selectors -> m Bool
 webkitMatchesSelector self selectors
   = liftIO
-      (js_webkitMatchesSelector (unElement (toElement self))
-         (toJSString selectors))
+      (js_webkitMatchesSelector (toElement self) (toJSString selectors))
  
 foreign import javascript unsafe "$1[\"getClientRects\"]()"
-        js_getClientRects :: JSRef Element -> IO (JSRef ClientRectList)
+        js_getClientRects :: Element -> IO (Nullable ClientRectList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.getClientRects Mozilla Element.getClientRects documentation> 
 getClientRects ::
                (MonadIO m, IsElement self) => self -> m (Maybe ClientRectList)
 getClientRects self
-  = liftIO
-      ((js_getClientRects (unElement (toElement self))) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getClientRects (toElement self)))
  
 foreign import javascript unsafe "$1[\"getBoundingClientRect\"]()"
-        js_getBoundingClientRect :: JSRef Element -> IO (JSRef ClientRect)
+        js_getBoundingClientRect :: Element -> IO (Nullable ClientRect)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.getBoundingClientRect Mozilla Element.getBoundingClientRect documentation> 
 getBoundingClientRect ::
                       (MonadIO m, IsElement self) => self -> m (Maybe ClientRect)
 getBoundingClientRect self
   = liftIO
-      ((js_getBoundingClientRect (unElement (toElement self))) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_getBoundingClientRect (toElement self)))
  
 foreign import javascript unsafe
         "$1[\"webkitRequestFullScreen\"]($2)" js_webkitRequestFullScreen ::
-        JSRef Element -> Word -> IO ()
+        Element -> Word -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.webkitRequestFullScreen Mozilla Element.webkitRequestFullScreen documentation> 
 webkitRequestFullScreen ::
                         (MonadIO m, IsElement self) => self -> Word -> m ()
 webkitRequestFullScreen self flags
-  = liftIO
-      (js_webkitRequestFullScreen (unElement (toElement self)) flags)
+  = liftIO (js_webkitRequestFullScreen (toElement self) flags)
  
 foreign import javascript unsafe
         "$1[\"webkitRequestFullscreen\"]()" js_webkitRequestFullscreen ::
-        JSRef Element -> IO ()
+        Element -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.webkitRequestFullscreen Mozilla Element.webkitRequestFullscreen documentation> 
 webkitRequestFullscreen ::
                         (MonadIO m, IsElement self) => self -> m ()
 webkitRequestFullscreen self
-  = liftIO (js_webkitRequestFullscreen (unElement (toElement self)))
+  = liftIO (js_webkitRequestFullscreen (toElement self))
  
 foreign import javascript unsafe "$1[\"requestPointerLock\"]()"
-        js_requestPointerLock :: JSRef Element -> IO ()
+        js_requestPointerLock :: Element -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.requestPointerLock Mozilla Element.requestPointerLock documentation> 
 requestPointerLock :: (MonadIO m, IsElement self) => self -> m ()
 requestPointerLock self
-  = liftIO (js_requestPointerLock (unElement (toElement self)))
+  = liftIO (js_requestPointerLock (toElement self))
  
 foreign import javascript unsafe
         "$1[\"webkitGetRegionFlowRanges\"]()" js_webkitGetRegionFlowRanges
-        :: JSRef Element -> IO (JSRef [Maybe Range])
+        :: Element -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.webkitGetRegionFlowRanges Mozilla Element.webkitGetRegionFlowRanges documentation> 
 webkitGetRegionFlowRanges ::
                           (MonadIO m, IsElement self) => self -> m [Maybe Range]
 webkitGetRegionFlowRanges self
   = liftIO
-      ((js_webkitGetRegionFlowRanges (unElement (toElement self))) >>=
+      ((js_webkitGetRegionFlowRanges (toElement self)) >>=
          fromJSRefUnchecked)
 pattern ALLOW_KEYBOARD_INPUT = 1
  
 foreign import javascript unsafe "$1[\"tagName\"]" js_getTagName ::
-        JSRef Element -> IO (JSRef (Maybe JSString))
+        Element -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.tagName Mozilla Element.tagName documentation> 
 getTagName ::
            (MonadIO m, IsElement self, FromJSString result) =>
              self -> m (Maybe result)
 getTagName self
-  = liftIO
-      (fromMaybeJSString <$>
-         (js_getTagName (unElement (toElement self))))
+  = liftIO (fromMaybeJSString <$> (js_getTagName (toElement self)))
  
 foreign import javascript unsafe "$1[\"attributes\"]"
-        js_getAttributes :: JSRef Element -> IO (JSRef NamedNodeMap)
+        js_getAttributes :: Element -> IO (Nullable NamedNodeMap)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.attributes Mozilla Element.attributes documentation> 
 getAttributes ::
               (MonadIO m, IsElement self) => self -> m (Maybe NamedNodeMap)
 getAttributes self
-  = liftIO
-      ((js_getAttributes (unElement (toElement self))) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getAttributes (toElement self)))
  
 foreign import javascript unsafe "$1[\"style\"]" js_getStyle ::
-        JSRef Element -> IO (JSRef CSSStyleDeclaration)
+        Element -> IO (Nullable CSSStyleDeclaration)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.style Mozilla Element.style documentation> 
 getStyle ::
          (MonadIO m, IsElement self) =>
            self -> m (Maybe CSSStyleDeclaration)
 getStyle self
-  = liftIO ((js_getStyle (unElement (toElement self))) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getStyle (toElement self)))
  
 foreign import javascript unsafe "$1[\"id\"] = $2;" js_setId ::
-        JSRef Element -> JSString -> IO ()
+        Element -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.id Mozilla Element.id documentation> 
 setId ::
       (MonadIO m, IsElement self, ToJSString val) => self -> val -> m ()
 setId self val
-  = liftIO (js_setId (unElement (toElement self)) (toJSString val))
+  = liftIO (js_setId (toElement self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"id\"]" js_getId ::
-        JSRef Element -> IO JSString
+        Element -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.id Mozilla Element.id documentation> 
 getId ::
       (MonadIO m, IsElement self, FromJSString result) =>
         self -> m result
-getId self
-  = liftIO (fromJSString <$> (js_getId (unElement (toElement self))))
+getId self = liftIO (fromJSString <$> (js_getId (toElement self)))
  
 foreign import javascript unsafe "$1[\"offsetLeft\"]"
-        js_getOffsetLeft :: JSRef Element -> IO Double
+        js_getOffsetLeft :: Element -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.offsetLeft Mozilla Element.offsetLeft documentation> 
 getOffsetLeft :: (MonadIO m, IsElement self) => self -> m Double
-getOffsetLeft self
-  = liftIO (js_getOffsetLeft (unElement (toElement self)))
+getOffsetLeft self = liftIO (js_getOffsetLeft (toElement self))
  
 foreign import javascript unsafe "$1[\"offsetTop\"]"
-        js_getOffsetTop :: JSRef Element -> IO Double
+        js_getOffsetTop :: Element -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.offsetTop Mozilla Element.offsetTop documentation> 
 getOffsetTop :: (MonadIO m, IsElement self) => self -> m Double
-getOffsetTop self
-  = liftIO (js_getOffsetTop (unElement (toElement self)))
+getOffsetTop self = liftIO (js_getOffsetTop (toElement self))
  
 foreign import javascript unsafe "$1[\"offsetWidth\"]"
-        js_getOffsetWidth :: JSRef Element -> IO Double
+        js_getOffsetWidth :: Element -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.offsetWidth Mozilla Element.offsetWidth documentation> 
 getOffsetWidth :: (MonadIO m, IsElement self) => self -> m Double
-getOffsetWidth self
-  = liftIO (js_getOffsetWidth (unElement (toElement self)))
+getOffsetWidth self = liftIO (js_getOffsetWidth (toElement self))
  
 foreign import javascript unsafe "$1[\"offsetHeight\"]"
-        js_getOffsetHeight :: JSRef Element -> IO Double
+        js_getOffsetHeight :: Element -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.offsetHeight Mozilla Element.offsetHeight documentation> 
 getOffsetHeight :: (MonadIO m, IsElement self) => self -> m Double
-getOffsetHeight self
-  = liftIO (js_getOffsetHeight (unElement (toElement self)))
+getOffsetHeight self = liftIO (js_getOffsetHeight (toElement self))
  
 foreign import javascript unsafe "$1[\"clientLeft\"]"
-        js_getClientLeft :: JSRef Element -> IO Double
+        js_getClientLeft :: Element -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.clientLeft Mozilla Element.clientLeft documentation> 
 getClientLeft :: (MonadIO m, IsElement self) => self -> m Double
-getClientLeft self
-  = liftIO (js_getClientLeft (unElement (toElement self)))
+getClientLeft self = liftIO (js_getClientLeft (toElement self))
  
 foreign import javascript unsafe "$1[\"clientTop\"]"
-        js_getClientTop :: JSRef Element -> IO Double
+        js_getClientTop :: Element -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.clientTop Mozilla Element.clientTop documentation> 
 getClientTop :: (MonadIO m, IsElement self) => self -> m Double
-getClientTop self
-  = liftIO (js_getClientTop (unElement (toElement self)))
+getClientTop self = liftIO (js_getClientTop (toElement self))
  
 foreign import javascript unsafe "$1[\"clientWidth\"]"
-        js_getClientWidth :: JSRef Element -> IO Double
+        js_getClientWidth :: Element -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.clientWidth Mozilla Element.clientWidth documentation> 
 getClientWidth :: (MonadIO m, IsElement self) => self -> m Double
-getClientWidth self
-  = liftIO (js_getClientWidth (unElement (toElement self)))
+getClientWidth self = liftIO (js_getClientWidth (toElement self))
  
 foreign import javascript unsafe "$1[\"clientHeight\"]"
-        js_getClientHeight :: JSRef Element -> IO Double
+        js_getClientHeight :: Element -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.clientHeight Mozilla Element.clientHeight documentation> 
 getClientHeight :: (MonadIO m, IsElement self) => self -> m Double
-getClientHeight self
-  = liftIO (js_getClientHeight (unElement (toElement self)))
+getClientHeight self = liftIO (js_getClientHeight (toElement self))
  
 foreign import javascript unsafe "$1[\"scrollLeft\"] = $2;"
-        js_setScrollLeft :: JSRef Element -> Int -> IO ()
+        js_setScrollLeft :: Element -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.scrollLeft Mozilla Element.scrollLeft documentation> 
 setScrollLeft :: (MonadIO m, IsElement self) => self -> Int -> m ()
 setScrollLeft self val
-  = liftIO (js_setScrollLeft (unElement (toElement self)) val)
+  = liftIO (js_setScrollLeft (toElement self) val)
  
 foreign import javascript unsafe "$1[\"scrollLeft\"]"
-        js_getScrollLeft :: JSRef Element -> IO Int
+        js_getScrollLeft :: Element -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.scrollLeft Mozilla Element.scrollLeft documentation> 
 getScrollLeft :: (MonadIO m, IsElement self) => self -> m Int
-getScrollLeft self
-  = liftIO (js_getScrollLeft (unElement (toElement self)))
+getScrollLeft self = liftIO (js_getScrollLeft (toElement self))
  
 foreign import javascript unsafe "$1[\"scrollTop\"] = $2;"
-        js_setScrollTop :: JSRef Element -> Int -> IO ()
+        js_setScrollTop :: Element -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.scrollTop Mozilla Element.scrollTop documentation> 
 setScrollTop :: (MonadIO m, IsElement self) => self -> Int -> m ()
 setScrollTop self val
-  = liftIO (js_setScrollTop (unElement (toElement self)) val)
+  = liftIO (js_setScrollTop (toElement self) val)
  
 foreign import javascript unsafe "$1[\"scrollTop\"]"
-        js_getScrollTop :: JSRef Element -> IO Int
+        js_getScrollTop :: Element -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.scrollTop Mozilla Element.scrollTop documentation> 
 getScrollTop :: (MonadIO m, IsElement self) => self -> m Int
-getScrollTop self
-  = liftIO (js_getScrollTop (unElement (toElement self)))
+getScrollTop self = liftIO (js_getScrollTop (toElement self))
  
 foreign import javascript unsafe "$1[\"scrollWidth\"]"
-        js_getScrollWidth :: JSRef Element -> IO Int
+        js_getScrollWidth :: Element -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.scrollWidth Mozilla Element.scrollWidth documentation> 
 getScrollWidth :: (MonadIO m, IsElement self) => self -> m Int
-getScrollWidth self
-  = liftIO (js_getScrollWidth (unElement (toElement self)))
+getScrollWidth self = liftIO (js_getScrollWidth (toElement self))
  
 foreign import javascript unsafe "$1[\"scrollHeight\"]"
-        js_getScrollHeight :: JSRef Element -> IO Int
+        js_getScrollHeight :: Element -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.scrollHeight Mozilla Element.scrollHeight documentation> 
 getScrollHeight :: (MonadIO m, IsElement self) => self -> m Int
-getScrollHeight self
-  = liftIO (js_getScrollHeight (unElement (toElement self)))
+getScrollHeight self = liftIO (js_getScrollHeight (toElement self))
  
 foreign import javascript unsafe "$1[\"offsetParent\"]"
-        js_getOffsetParent :: JSRef Element -> IO (JSRef Element)
+        js_getOffsetParent :: Element -> IO (Nullable Element)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.offsetParent Mozilla Element.offsetParent documentation> 
 getOffsetParent ::
                 (MonadIO m, IsElement self) => self -> m (Maybe Element)
 getOffsetParent self
   = liftIO
-      ((js_getOffsetParent (unElement (toElement self))) >>= fromJSRef)
+      (nullableToMaybe <$> (js_getOffsetParent (toElement self)))
  
 foreign import javascript unsafe "$1[\"innerHTML\"] = $2;"
-        js_setInnerHTML :: JSRef Element -> JSRef (Maybe JSString) -> IO ()
+        js_setInnerHTML :: Element -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.innerHTML Mozilla Element.innerHTML documentation> 
 setInnerHTML ::
              (MonadIO m, IsElement self, ToJSString val) =>
                self -> Maybe val -> m ()
 setInnerHTML self val
-  = liftIO
-      (js_setInnerHTML (unElement (toElement self))
-         (toMaybeJSString val))
+  = liftIO (js_setInnerHTML (toElement self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"innerHTML\"]"
-        js_getInnerHTML :: JSRef Element -> IO (JSRef (Maybe JSString))
+        js_getInnerHTML :: Element -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.innerHTML Mozilla Element.innerHTML documentation> 
 getInnerHTML ::
              (MonadIO m, IsElement self, FromJSString result) =>
                self -> m (Maybe result)
 getInnerHTML self
-  = liftIO
-      (fromMaybeJSString <$>
-         (js_getInnerHTML (unElement (toElement self))))
+  = liftIO (fromMaybeJSString <$> (js_getInnerHTML (toElement self)))
  
 foreign import javascript unsafe "$1[\"outerHTML\"] = $2;"
-        js_setOuterHTML :: JSRef Element -> JSRef (Maybe JSString) -> IO ()
+        js_setOuterHTML :: Element -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.outerHTML Mozilla Element.outerHTML documentation> 
 setOuterHTML ::
              (MonadIO m, IsElement self, ToJSString val) =>
                self -> Maybe val -> m ()
 setOuterHTML self val
-  = liftIO
-      (js_setOuterHTML (unElement (toElement self))
-         (toMaybeJSString val))
+  = liftIO (js_setOuterHTML (toElement self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"outerHTML\"]"
-        js_getOuterHTML :: JSRef Element -> IO (JSRef (Maybe JSString))
+        js_getOuterHTML :: Element -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.outerHTML Mozilla Element.outerHTML documentation> 
 getOuterHTML ::
              (MonadIO m, IsElement self, FromJSString result) =>
                self -> m (Maybe result)
 getOuterHTML self
-  = liftIO
-      (fromMaybeJSString <$>
-         (js_getOuterHTML (unElement (toElement self))))
+  = liftIO (fromMaybeJSString <$> (js_getOuterHTML (toElement self)))
  
 foreign import javascript unsafe "$1[\"className\"] = $2;"
-        js_setClassName :: JSRef Element -> JSString -> IO ()
+        js_setClassName :: Element -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.className Mozilla Element.className documentation> 
 setClassName ::
              (MonadIO m, IsElement self, ToJSString val) => self -> val -> m ()
 setClassName self val
-  = liftIO
-      (js_setClassName (unElement (toElement self)) (toJSString val))
+  = liftIO (js_setClassName (toElement self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"className\"]"
-        js_getClassName :: JSRef Element -> IO JSString
+        js_getClassName :: Element -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.className Mozilla Element.className documentation> 
 getClassName ::
              (MonadIO m, IsElement self, FromJSString result) =>
                self -> m result
 getClassName self
-  = liftIO
-      (fromJSString <$> (js_getClassName (unElement (toElement self))))
+  = liftIO (fromJSString <$> (js_getClassName (toElement self)))
  
 foreign import javascript unsafe "$1[\"classList\"]"
-        js_getClassList :: JSRef Element -> IO (JSRef DOMTokenList)
+        js_getClassList :: Element -> IO (Nullable DOMTokenList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.classList Mozilla Element.classList documentation> 
 getClassList ::
              (MonadIO m, IsElement self) => self -> m (Maybe DOMTokenList)
 getClassList self
-  = liftIO
-      ((js_getClassList (unElement (toElement self))) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getClassList (toElement self)))
  
 foreign import javascript unsafe "$1[\"dataset\"]" js_getDataset ::
-        JSRef Element -> IO (JSRef DOMStringMap)
+        Element -> IO (Nullable DOMStringMap)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.dataset Mozilla Element.dataset documentation> 
 getDataset ::
            (MonadIO m, IsElement self) => self -> m (Maybe DOMStringMap)
 getDataset self
-  = liftIO
-      ((js_getDataset (unElement (toElement self))) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getDataset (toElement self)))
  
 foreign import javascript unsafe "$1[\"firstElementChild\"]"
-        js_getFirstElementChild :: JSRef Element -> IO (JSRef Element)
+        js_getFirstElementChild :: Element -> IO (Nullable Element)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.firstElementChild Mozilla Element.firstElementChild documentation> 
 getFirstElementChild ::
                      (MonadIO m, IsElement self) => self -> m (Maybe Element)
 getFirstElementChild self
   = liftIO
-      ((js_getFirstElementChild (unElement (toElement self))) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_getFirstElementChild (toElement self)))
  
 foreign import javascript unsafe "$1[\"lastElementChild\"]"
-        js_getLastElementChild :: JSRef Element -> IO (JSRef Element)
+        js_getLastElementChild :: Element -> IO (Nullable Element)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.lastElementChild Mozilla Element.lastElementChild documentation> 
 getLastElementChild ::
                     (MonadIO m, IsElement self) => self -> m (Maybe Element)
 getLastElementChild self
   = liftIO
-      ((js_getLastElementChild (unElement (toElement self))) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_getLastElementChild (toElement self)))
  
 foreign import javascript unsafe "$1[\"previousElementSibling\"]"
-        js_getPreviousElementSibling :: JSRef Element -> IO (JSRef Element)
+        js_getPreviousElementSibling :: Element -> IO (Nullable Element)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.previousElementSibling Mozilla Element.previousElementSibling documentation> 
 getPreviousElementSibling ::
                           (MonadIO m, IsElement self) => self -> m (Maybe Element)
 getPreviousElementSibling self
   = liftIO
-      ((js_getPreviousElementSibling (unElement (toElement self))) >>=
-         fromJSRef)
+      (nullableToMaybe <$>
+         (js_getPreviousElementSibling (toElement self)))
  
 foreign import javascript unsafe "$1[\"nextElementSibling\"]"
-        js_getNextElementSibling :: JSRef Element -> IO (JSRef Element)
+        js_getNextElementSibling :: Element -> IO (Nullable Element)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.nextElementSibling Mozilla Element.nextElementSibling documentation> 
 getNextElementSibling ::
                       (MonadIO m, IsElement self) => self -> m (Maybe Element)
 getNextElementSibling self
   = liftIO
-      ((js_getNextElementSibling (unElement (toElement self))) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_getNextElementSibling (toElement self)))
  
 foreign import javascript unsafe "$1[\"childElementCount\"]"
-        js_getChildElementCount :: JSRef Element -> IO Word
+        js_getChildElementCount :: Element -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.childElementCount Mozilla Element.childElementCount documentation> 
 getChildElementCount ::
                      (MonadIO m, IsElement self) => self -> m Word
 getChildElementCount self
-  = liftIO (js_getChildElementCount (unElement (toElement self)))
+  = liftIO (js_getChildElementCount (toElement self))
  
 foreign import javascript unsafe "$1[\"uiactions\"] = $2;"
-        js_setUiactions :: JSRef Element -> JSString -> IO ()
+        js_setUiactions :: Element -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.uiactions Mozilla Element.uiactions documentation> 
 setUiactions ::
              (MonadIO m, IsElement self, ToJSString val) => self -> val -> m ()
 setUiactions self val
-  = liftIO
-      (js_setUiactions (unElement (toElement self)) (toJSString val))
+  = liftIO (js_setUiactions (toElement self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"uiactions\"]"
-        js_getUiactions :: JSRef Element -> IO JSString
+        js_getUiactions :: Element -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.uiactions Mozilla Element.uiactions documentation> 
 getUiactions ::
              (MonadIO m, IsElement self, FromJSString result) =>
                self -> m result
 getUiactions self
-  = liftIO
-      (fromJSString <$> (js_getUiactions (unElement (toElement self))))
+  = liftIO (fromJSString <$> (js_getUiactions (toElement self)))
  
 foreign import javascript unsafe "$1[\"webkitRegionOverset\"]"
-        js_getWebkitRegionOverset :: JSRef Element -> IO JSString
+        js_getWebkitRegionOverset :: Element -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.webkitRegionOverset Mozilla Element.webkitRegionOverset documentation> 
 getWebkitRegionOverset ::
@@ -831,8 +774,7 @@
                          self -> m result
 getWebkitRegionOverset self
   = liftIO
-      (fromJSString <$>
-         (js_getWebkitRegionOverset (unElement (toElement self))))
+      (fromJSString <$> (js_getWebkitRegionOverset (toElement self)))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Element.onabort Mozilla Element.onabort documentation> 
 abort ::
diff --git a/src/GHCJS/DOM/JSFFI/Generated/Entity.hs b/src/GHCJS/DOM/JSFFI/Generated/Entity.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/Entity.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/Entity.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,29 +20,28 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"publicId\"]" js_getPublicId
-        :: JSRef Entity -> IO (JSRef (Maybe JSString))
+        :: Entity -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Entity.publicId Mozilla Entity.publicId documentation> 
 getPublicId ::
             (MonadIO m, FromJSString result) => Entity -> m (Maybe result)
 getPublicId self
-  = liftIO (fromMaybeJSString <$> (js_getPublicId (unEntity self)))
+  = liftIO (fromMaybeJSString <$> (js_getPublicId (self)))
  
 foreign import javascript unsafe "$1[\"systemId\"]" js_getSystemId
-        :: JSRef Entity -> IO (JSRef (Maybe JSString))
+        :: Entity -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Entity.systemId Mozilla Entity.systemId documentation> 
 getSystemId ::
             (MonadIO m, FromJSString result) => Entity -> m (Maybe result)
 getSystemId self
-  = liftIO (fromMaybeJSString <$> (js_getSystemId (unEntity self)))
+  = liftIO (fromMaybeJSString <$> (js_getSystemId (self)))
  
 foreign import javascript unsafe "$1[\"notationName\"]"
-        js_getNotationName :: JSRef Entity -> IO (JSRef (Maybe JSString))
+        js_getNotationName :: Entity -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Entity.notationName Mozilla Entity.notationName documentation> 
 getNotationName ::
                 (MonadIO m, FromJSString result) => Entity -> m (Maybe result)
 getNotationName self
-  = liftIO
-      (fromMaybeJSString <$> (js_getNotationName (unEntity self)))
+  = liftIO (fromMaybeJSString <$> (js_getNotationName (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/Enums.hs b/src/GHCJS/DOM/JSFFI/Generated/Enums.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/Enums.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/Enums.hs
@@ -46,7 +46,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -77,16 +77,16 @@
  
 instance FromJSRef KeyType where
         fromJSRefUnchecked = return . pFromJSRef
-        fromJSRef = return . pFromJSRef . castRef
+        fromJSRef = return . pFromJSRef
  
 foreign import javascript unsafe "\"secret\"" js_KeyTypeSecret ::
-        JSRef KeyType
+        JSRef
  
 foreign import javascript unsafe "\"public\"" js_KeyTypePublic ::
-        JSRef KeyType
+        JSRef
  
 foreign import javascript unsafe "\"private\"" js_KeyTypePrivate ::
-        JSRef KeyType
+        JSRef
  
 data KeyUsage = KeyUsageEncrypt
               | KeyUsageDecrypt
@@ -123,31 +123,31 @@
  
 instance FromJSRef KeyUsage where
         fromJSRefUnchecked = return . pFromJSRef
-        fromJSRef = return . pFromJSRef . castRef
+        fromJSRef = return . pFromJSRef
  
 foreign import javascript unsafe "\"encrypt\"" js_KeyUsageEncrypt
-        :: JSRef KeyUsage
+        :: JSRef
  
 foreign import javascript unsafe "\"decrypt\"" js_KeyUsageDecrypt
-        :: JSRef KeyUsage
+        :: JSRef
  
 foreign import javascript unsafe "\"sign\"" js_KeyUsageSign ::
-        JSRef KeyUsage
+        JSRef
  
 foreign import javascript unsafe "\"verify\"" js_KeyUsageVerify ::
-        JSRef KeyUsage
+        JSRef
  
 foreign import javascript unsafe "\"deriveKey\""
-        js_KeyUsageDeriveKey :: JSRef KeyUsage
+        js_KeyUsageDeriveKey :: JSRef
  
 foreign import javascript unsafe "\"deriveBits\""
-        js_KeyUsageDeriveBits :: JSRef KeyUsage
+        js_KeyUsageDeriveBits :: JSRef
  
 foreign import javascript unsafe "\"wrapKey\"" js_KeyUsageWrapKey
-        :: JSRef KeyUsage
+        :: JSRef
  
 foreign import javascript unsafe "\"unwrapKey\""
-        js_KeyUsageUnwrapKey :: JSRef KeyUsage
+        js_KeyUsageUnwrapKey :: JSRef
  
 data CanvasWindingRule = CanvasWindingRuleNonzero
                        | CanvasWindingRuleEvenodd
@@ -168,13 +168,13 @@
  
 instance FromJSRef CanvasWindingRule where
         fromJSRefUnchecked = return . pFromJSRef
-        fromJSRef = return . pFromJSRef . castRef
+        fromJSRef = return . pFromJSRef
  
 foreign import javascript unsafe "\"nonzero\""
-        js_CanvasWindingRuleNonzero :: JSRef CanvasWindingRule
+        js_CanvasWindingRuleNonzero :: JSRef
  
 foreign import javascript unsafe "\"evenodd\""
-        js_CanvasWindingRuleEvenodd :: JSRef CanvasWindingRule
+        js_CanvasWindingRuleEvenodd :: JSRef
  
 data VideoPresentationMode = VideoPresentationModeFullscreen
                            | VideoPresentationModeOptimized
@@ -205,16 +205,16 @@
  
 instance FromJSRef VideoPresentationMode where
         fromJSRefUnchecked = return . pFromJSRef
-        fromJSRef = return . pFromJSRef . castRef
+        fromJSRef = return . pFromJSRef
  
 foreign import javascript unsafe "\"fullscreen\""
-        js_VideoPresentationModeFullscreen :: JSRef VideoPresentationMode
+        js_VideoPresentationModeFullscreen :: JSRef
  
 foreign import javascript unsafe "\"optimized\""
-        js_VideoPresentationModeOptimized :: JSRef VideoPresentationMode
+        js_VideoPresentationModeOptimized :: JSRef
  
 foreign import javascript unsafe "\"inline\""
-        js_VideoPresentationModeInline :: JSRef VideoPresentationMode
+        js_VideoPresentationModeInline :: JSRef
  
 data TextTrackMode = TextTrackModeDisabled
                    | TextTrackModeHidden
@@ -239,16 +239,16 @@
  
 instance FromJSRef TextTrackMode where
         fromJSRefUnchecked = return . pFromJSRef
-        fromJSRef = return . pFromJSRef . castRef
+        fromJSRef = return . pFromJSRef
  
 foreign import javascript unsafe "\"disabled\""
-        js_TextTrackModeDisabled :: JSRef TextTrackMode
+        js_TextTrackModeDisabled :: JSRef
  
 foreign import javascript unsafe "\"hidden\""
-        js_TextTrackModeHidden :: JSRef TextTrackMode
+        js_TextTrackModeHidden :: JSRef
  
 foreign import javascript unsafe "\"showing\""
-        js_TextTrackModeShowing :: JSRef TextTrackMode
+        js_TextTrackModeShowing :: JSRef
  
 data TextTrackKind = TextTrackKindSubtitles
                    | TextTrackKindCaptions
@@ -282,22 +282,22 @@
  
 instance FromJSRef TextTrackKind where
         fromJSRefUnchecked = return . pFromJSRef
-        fromJSRef = return . pFromJSRef . castRef
+        fromJSRef = return . pFromJSRef
  
 foreign import javascript unsafe "\"subtitles\""
-        js_TextTrackKindSubtitles :: JSRef TextTrackKind
+        js_TextTrackKindSubtitles :: JSRef
  
 foreign import javascript unsafe "\"captions\""
-        js_TextTrackKindCaptions :: JSRef TextTrackKind
+        js_TextTrackKindCaptions :: JSRef
  
 foreign import javascript unsafe "\"descriptions\""
-        js_TextTrackKindDescriptions :: JSRef TextTrackKind
+        js_TextTrackKindDescriptions :: JSRef
  
 foreign import javascript unsafe "\"chapters\""
-        js_TextTrackKindChapters :: JSRef TextTrackKind
+        js_TextTrackKindChapters :: JSRef
  
 foreign import javascript unsafe "\"metadata\""
-        js_TextTrackKindMetadata :: JSRef TextTrackKind
+        js_TextTrackKindMetadata :: JSRef
  
 data DeviceType = DeviceTypeNone
                 | DeviceTypeAirplay
@@ -319,16 +319,16 @@
  
 instance FromJSRef DeviceType where
         fromJSRefUnchecked = return . pFromJSRef
-        fromJSRef = return . pFromJSRef . castRef
+        fromJSRef = return . pFromJSRef
  
 foreign import javascript unsafe "\"none\"" js_DeviceTypeNone ::
-        JSRef DeviceType
+        JSRef
  
 foreign import javascript unsafe "\"airplay\"" js_DeviceTypeAirplay
-        :: JSRef DeviceType
+        :: JSRef
  
 foreign import javascript unsafe "\"tvout\"" js_DeviceTypeTvout ::
-        JSRef DeviceType
+        JSRef
  
 data MediaUIPartID = MediaUIPartIDOptimizedFullscreenButton
                    | MediaUIPartIDOptimizedFullscreenPlaceholder
@@ -353,15 +353,14 @@
  
 instance FromJSRef MediaUIPartID where
         fromJSRefUnchecked = return . pFromJSRef
-        fromJSRef = return . pFromJSRef . castRef
+        fromJSRef = return . pFromJSRef
  
 foreign import javascript unsafe "\"optimized-fullscreen-button\""
-        js_MediaUIPartIDOptimizedFullscreenButton :: JSRef MediaUIPartID
+        js_MediaUIPartIDOptimizedFullscreenButton :: JSRef
  
 foreign import javascript unsafe
         "\"optimized-fullscreen-placeholder\""
-        js_MediaUIPartIDOptimizedFullscreenPlaceholder ::
-        JSRef MediaUIPartID
+        js_MediaUIPartIDOptimizedFullscreenPlaceholder :: JSRef
  
 data EndOfStreamError = EndOfStreamErrorNetwork
                       | EndOfStreamErrorDecode
@@ -382,13 +381,13 @@
  
 instance FromJSRef EndOfStreamError where
         fromJSRefUnchecked = return . pFromJSRef
-        fromJSRef = return . pFromJSRef . castRef
+        fromJSRef = return . pFromJSRef
  
 foreign import javascript unsafe "\"network\""
-        js_EndOfStreamErrorNetwork :: JSRef EndOfStreamError
+        js_EndOfStreamErrorNetwork :: JSRef
  
 foreign import javascript unsafe "\"decode\""
-        js_EndOfStreamErrorDecode :: JSRef EndOfStreamError
+        js_EndOfStreamErrorDecode :: JSRef
  
 data AppendMode = AppendModeSegments
                 | AppendModeSequence
@@ -407,13 +406,13 @@
  
 instance FromJSRef AppendMode where
         fromJSRefUnchecked = return . pFromJSRef
-        fromJSRef = return . pFromJSRef . castRef
+        fromJSRef = return . pFromJSRef
  
 foreign import javascript unsafe "\"segments\""
-        js_AppendModeSegments :: JSRef AppendMode
+        js_AppendModeSegments :: JSRef
  
 foreign import javascript unsafe "\"sequence\""
-        js_AppendModeSequence :: JSRef AppendMode
+        js_AppendModeSequence :: JSRef
  
 data SourceTypeEnum = SourceTypeEnumNone
                     | SourceTypeEnumCamera
@@ -437,16 +436,16 @@
  
 instance FromJSRef SourceTypeEnum where
         fromJSRefUnchecked = return . pFromJSRef
-        fromJSRef = return . pFromJSRef . castRef
+        fromJSRef = return . pFromJSRef
  
 foreign import javascript unsafe "\"none\"" js_SourceTypeEnumNone
-        :: JSRef SourceTypeEnum
+        :: JSRef
  
 foreign import javascript unsafe "\"camera\""
-        js_SourceTypeEnumCamera :: JSRef SourceTypeEnum
+        js_SourceTypeEnumCamera :: JSRef
  
 foreign import javascript unsafe "\"microphone\""
-        js_SourceTypeEnumMicrophone :: JSRef SourceTypeEnum
+        js_SourceTypeEnumMicrophone :: JSRef
  
 data VideoFacingModeEnum = VideoFacingModeEnumUser
                          | VideoFacingModeEnumEnvironment
@@ -477,19 +476,19 @@
  
 instance FromJSRef VideoFacingModeEnum where
         fromJSRefUnchecked = return . pFromJSRef
-        fromJSRef = return . pFromJSRef . castRef
+        fromJSRef = return . pFromJSRef
  
 foreign import javascript unsafe "\"user\""
-        js_VideoFacingModeEnumUser :: JSRef VideoFacingModeEnum
+        js_VideoFacingModeEnumUser :: JSRef
  
 foreign import javascript unsafe "\"environment\""
-        js_VideoFacingModeEnumEnvironment :: JSRef VideoFacingModeEnum
+        js_VideoFacingModeEnumEnvironment :: JSRef
  
 foreign import javascript unsafe "\"left\""
-        js_VideoFacingModeEnumLeft :: JSRef VideoFacingModeEnum
+        js_VideoFacingModeEnumLeft :: JSRef
  
 foreign import javascript unsafe "\"right\""
-        js_VideoFacingModeEnumRight :: JSRef VideoFacingModeEnum
+        js_VideoFacingModeEnumRight :: JSRef
  
 data MediaStreamTrackState = MediaStreamTrackStateNew
                            | MediaStreamTrackStateLive
@@ -516,16 +515,16 @@
  
 instance FromJSRef MediaStreamTrackState where
         fromJSRefUnchecked = return . pFromJSRef
-        fromJSRef = return . pFromJSRef . castRef
+        fromJSRef = return . pFromJSRef
  
 foreign import javascript unsafe "\"new\""
-        js_MediaStreamTrackStateNew :: JSRef MediaStreamTrackState
+        js_MediaStreamTrackStateNew :: JSRef
  
 foreign import javascript unsafe "\"live\""
-        js_MediaStreamTrackStateLive :: JSRef MediaStreamTrackState
+        js_MediaStreamTrackStateLive :: JSRef
  
 foreign import javascript unsafe "\"ended\""
-        js_MediaStreamTrackStateEnded :: JSRef MediaStreamTrackState
+        js_MediaStreamTrackStateEnded :: JSRef
  
 data RTCIceTransportsEnum = RTCIceTransportsEnumNone
                           | RTCIceTransportsEnumRelay
@@ -551,16 +550,16 @@
  
 instance FromJSRef RTCIceTransportsEnum where
         fromJSRefUnchecked = return . pFromJSRef
-        fromJSRef = return . pFromJSRef . castRef
+        fromJSRef = return . pFromJSRef
  
 foreign import javascript unsafe "\"none\""
-        js_RTCIceTransportsEnumNone :: JSRef RTCIceTransportsEnum
+        js_RTCIceTransportsEnumNone :: JSRef
  
 foreign import javascript unsafe "\"relay\""
-        js_RTCIceTransportsEnumRelay :: JSRef RTCIceTransportsEnum
+        js_RTCIceTransportsEnumRelay :: JSRef
  
 foreign import javascript unsafe "\"all\""
-        js_RTCIceTransportsEnumAll :: JSRef RTCIceTransportsEnum
+        js_RTCIceTransportsEnumAll :: JSRef
  
 data RTCIdentityOptionEnum = RTCIdentityOptionEnumYes
                            | RTCIdentityOptionEnumNo
@@ -587,16 +586,16 @@
  
 instance FromJSRef RTCIdentityOptionEnum where
         fromJSRefUnchecked = return . pFromJSRef
-        fromJSRef = return . pFromJSRef . castRef
+        fromJSRef = return . pFromJSRef
  
 foreign import javascript unsafe "\"yes\""
-        js_RTCIdentityOptionEnumYes :: JSRef RTCIdentityOptionEnum
+        js_RTCIdentityOptionEnumYes :: JSRef
  
 foreign import javascript unsafe "\"no\""
-        js_RTCIdentityOptionEnumNo :: JSRef RTCIdentityOptionEnum
+        js_RTCIdentityOptionEnumNo :: JSRef
  
 foreign import javascript unsafe "\"ifconfigured\""
-        js_RTCIdentityOptionEnumIfconfigured :: JSRef RTCIdentityOptionEnum
+        js_RTCIdentityOptionEnumIfconfigured :: JSRef
  
 data ReadableStreamStateType = ReadableStreamStateTypeReadable
                              | ReadableStreamStateTypeWaiting
@@ -633,19 +632,19 @@
  
 instance FromJSRef ReadableStreamStateType where
         fromJSRefUnchecked = return . pFromJSRef
-        fromJSRef = return . pFromJSRef . castRef
+        fromJSRef = return . pFromJSRef
  
 foreign import javascript unsafe "\"readable\""
-        js_ReadableStreamStateTypeReadable :: JSRef ReadableStreamStateType
+        js_ReadableStreamStateTypeReadable :: JSRef
  
 foreign import javascript unsafe "\"waiting\""
-        js_ReadableStreamStateTypeWaiting :: JSRef ReadableStreamStateType
+        js_ReadableStreamStateTypeWaiting :: JSRef
  
 foreign import javascript unsafe "\"closed\""
-        js_ReadableStreamStateTypeClosed :: JSRef ReadableStreamStateType
+        js_ReadableStreamStateTypeClosed :: JSRef
  
 foreign import javascript unsafe "\"errored\""
-        js_ReadableStreamStateTypeErrored :: JSRef ReadableStreamStateType
+        js_ReadableStreamStateTypeErrored :: JSRef
  
 data OverSampleType = OverSampleTypeNone
                     | OverSampleType2x
@@ -667,16 +666,16 @@
  
 instance FromJSRef OverSampleType where
         fromJSRefUnchecked = return . pFromJSRef
-        fromJSRef = return . pFromJSRef . castRef
+        fromJSRef = return . pFromJSRef
  
 foreign import javascript unsafe "\"none\"" js_OverSampleTypeNone
-        :: JSRef OverSampleType
+        :: JSRef
  
 foreign import javascript unsafe "\"2x\"" js_OverSampleType2x ::
-        JSRef OverSampleType
+        JSRef
  
 foreign import javascript unsafe "\"4x\"" js_OverSampleType4x ::
-        JSRef OverSampleType
+        JSRef
  
 data PageOverlayType = PageOverlayTypeView
                      | PageOverlayTypeDocument
@@ -697,13 +696,13 @@
  
 instance FromJSRef PageOverlayType where
         fromJSRefUnchecked = return . pFromJSRef
-        fromJSRef = return . pFromJSRef . castRef
+        fromJSRef = return . pFromJSRef
  
 foreign import javascript unsafe "\"view\"" js_PageOverlayTypeView
-        :: JSRef PageOverlayType
+        :: JSRef
  
 foreign import javascript unsafe "\"document\""
-        js_PageOverlayTypeDocument :: JSRef PageOverlayType
+        js_PageOverlayTypeDocument :: JSRef
  
 data XMLHttpRequestResponseType = XMLHttpRequestResponseType
                                 | XMLHttpRequestResponseTypeArraybuffer
@@ -751,27 +750,22 @@
  
 instance FromJSRef XMLHttpRequestResponseType where
         fromJSRefUnchecked = return . pFromJSRef
-        fromJSRef = return . pFromJSRef . castRef
+        fromJSRef = return . pFromJSRef
  
 foreign import javascript unsafe "\"\""
-        js_XMLHttpRequestResponseType :: JSRef XMLHttpRequestResponseType
+        js_XMLHttpRequestResponseType :: JSRef
  
 foreign import javascript unsafe "\"arraybuffer\""
-        js_XMLHttpRequestResponseTypeArraybuffer ::
-        JSRef XMLHttpRequestResponseType
+        js_XMLHttpRequestResponseTypeArraybuffer :: JSRef
  
 foreign import javascript unsafe "\"blob\""
-        js_XMLHttpRequestResponseTypeBlob ::
-        JSRef XMLHttpRequestResponseType
+        js_XMLHttpRequestResponseTypeBlob :: JSRef
  
 foreign import javascript unsafe "\"document\""
-        js_XMLHttpRequestResponseTypeDocument ::
-        JSRef XMLHttpRequestResponseType
+        js_XMLHttpRequestResponseTypeDocument :: JSRef
  
 foreign import javascript unsafe "\"json\""
-        js_XMLHttpRequestResponseTypeJson ::
-        JSRef XMLHttpRequestResponseType
+        js_XMLHttpRequestResponseTypeJson :: JSRef
  
 foreign import javascript unsafe "\"text\""
-        js_XMLHttpRequestResponseTypeText ::
-        JSRef XMLHttpRequestResponseType
+        js_XMLHttpRequestResponseTypeText :: JSRef
diff --git a/src/GHCJS/DOM/JSFFI/Generated/ErrorEvent.hs b/src/GHCJS/DOM/JSFFI/Generated/ErrorEvent.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/ErrorEvent.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/ErrorEvent.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,33 +20,32 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"message\"]" js_getMessage ::
-        JSRef ErrorEvent -> IO JSString
+        ErrorEvent -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ErrorEvent.message Mozilla ErrorEvent.message documentation> 
 getMessage ::
            (MonadIO m, FromJSString result) => ErrorEvent -> m result
-getMessage self
-  = liftIO (fromJSString <$> (js_getMessage (unErrorEvent self)))
+getMessage self = liftIO (fromJSString <$> (js_getMessage (self)))
  
 foreign import javascript unsafe "$1[\"filename\"]" js_getFilename
-        :: JSRef ErrorEvent -> IO JSString
+        :: ErrorEvent -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ErrorEvent.filename Mozilla ErrorEvent.filename documentation> 
 getFilename ::
             (MonadIO m, FromJSString result) => ErrorEvent -> m result
 getFilename self
-  = liftIO (fromJSString <$> (js_getFilename (unErrorEvent self)))
+  = liftIO (fromJSString <$> (js_getFilename (self)))
  
 foreign import javascript unsafe "$1[\"lineno\"]" js_getLineno ::
-        JSRef ErrorEvent -> IO Word
+        ErrorEvent -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ErrorEvent.lineno Mozilla ErrorEvent.lineno documentation> 
 getLineno :: (MonadIO m) => ErrorEvent -> m Word
-getLineno self = liftIO (js_getLineno (unErrorEvent self))
+getLineno self = liftIO (js_getLineno (self))
  
 foreign import javascript unsafe "$1[\"colno\"]" js_getColno ::
-        JSRef ErrorEvent -> IO Word
+        ErrorEvent -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ErrorEvent.colno Mozilla ErrorEvent.colno documentation> 
 getColno :: (MonadIO m) => ErrorEvent -> m Word
-getColno self = liftIO (js_getColno (unErrorEvent self))
+getColno self = liftIO (js_getColno (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/Event.hs b/src/GHCJS/DOM/JSFFI/Generated/Event.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/Event.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/Event.hs
@@ -21,7 +21,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -34,23 +34,21 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"stopPropagation\"]()"
-        js_stopPropagation :: JSRef Event -> IO ()
+        js_stopPropagation :: Event -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Event.stopPropagation Mozilla Event.stopPropagation documentation> 
 stopPropagation :: (MonadIO m, IsEvent self) => self -> m ()
-stopPropagation self
-  = liftIO (js_stopPropagation (unEvent (toEvent self)))
+stopPropagation self = liftIO (js_stopPropagation (toEvent self))
  
 foreign import javascript unsafe "$1[\"preventDefault\"]()"
-        js_preventDefault :: JSRef Event -> IO ()
+        js_preventDefault :: Event -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Event.preventDefault Mozilla Event.preventDefault documentation> 
 preventDefault :: (MonadIO m, IsEvent self) => self -> m ()
-preventDefault self
-  = liftIO (js_preventDefault (unEvent (toEvent self)))
+preventDefault self = liftIO (js_preventDefault (toEvent self))
  
 foreign import javascript unsafe "$1[\"initEvent\"]($2, $3, $4)"
-        js_initEvent :: JSRef Event -> JSString -> Bool -> Bool -> IO ()
+        js_initEvent :: Event -> JSString -> Bool -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Event.initEvent Mozilla Event.initEvent documentation> 
 initEvent ::
@@ -58,19 +56,18 @@
             self -> eventTypeArg -> Bool -> Bool -> m ()
 initEvent self eventTypeArg canBubbleArg cancelableArg
   = liftIO
-      (js_initEvent (unEvent (toEvent self)) (toJSString eventTypeArg)
-         canBubbleArg
+      (js_initEvent (toEvent self) (toJSString eventTypeArg) canBubbleArg
          cancelableArg)
  
 foreign import javascript unsafe
         "$1[\"stopImmediatePropagation\"]()" js_stopImmediatePropagation ::
-        JSRef Event -> IO ()
+        Event -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Event.stopImmediatePropagation Mozilla Event.stopImmediatePropagation documentation> 
 stopImmediatePropagation ::
                          (MonadIO m, IsEvent self) => self -> m ()
 stopImmediatePropagation self
-  = liftIO (js_stopImmediatePropagation (unEvent (toEvent self)))
+  = liftIO (js_stopImmediatePropagation (toEvent self))
 pattern NONE = 0
 pattern CAPTURING_PHASE = 1
 pattern AT_TARGET = 2
@@ -93,122 +90,114 @@
 pattern CHANGE = 32768
  
 foreign import javascript unsafe "$1[\"type\"]" js_getType ::
-        JSRef Event -> IO JSString
+        Event -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Event.type Mozilla Event.type documentation> 
 getType ::
         (MonadIO m, IsEvent self, FromJSString result) => self -> m result
 getType self
-  = liftIO (fromJSString <$> (js_getType (unEvent (toEvent self))))
+  = liftIO (fromJSString <$> (js_getType (toEvent self)))
  
 foreign import javascript unsafe "$1[\"target\"]" js_getTarget ::
-        JSRef Event -> IO (JSRef EventTarget)
+        Event -> IO (Nullable EventTarget)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Event.target Mozilla Event.target documentation> 
 getTarget ::
           (MonadIO m, IsEvent self) => self -> m (Maybe EventTarget)
 getTarget self
-  = liftIO ((js_getTarget (unEvent (toEvent self))) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getTarget (toEvent self)))
  
 foreign import javascript unsafe "$1[\"currentTarget\"]"
-        js_getCurrentTarget :: JSRef Event -> IO (JSRef EventTarget)
+        js_getCurrentTarget :: Event -> IO (Nullable EventTarget)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Event.currentTarget Mozilla Event.currentTarget documentation> 
 getCurrentTarget ::
                  (MonadIO m, IsEvent self) => self -> m (Maybe EventTarget)
 getCurrentTarget self
-  = liftIO
-      ((js_getCurrentTarget (unEvent (toEvent self))) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getCurrentTarget (toEvent self)))
  
 foreign import javascript unsafe "$1[\"eventPhase\"]"
-        js_getEventPhase :: JSRef Event -> IO Word
+        js_getEventPhase :: Event -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Event.eventPhase Mozilla Event.eventPhase documentation> 
 getEventPhase :: (MonadIO m, IsEvent self) => self -> m Word
-getEventPhase self
-  = liftIO (js_getEventPhase (unEvent (toEvent self)))
+getEventPhase self = liftIO (js_getEventPhase (toEvent self))
  
 foreign import javascript unsafe "($1[\"bubbles\"] ? 1 : 0)"
-        js_getBubbles :: JSRef Event -> IO Bool
+        js_getBubbles :: Event -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Event.bubbles Mozilla Event.bubbles documentation> 
 getBubbles :: (MonadIO m, IsEvent self) => self -> m Bool
-getBubbles self = liftIO (js_getBubbles (unEvent (toEvent self)))
+getBubbles self = liftIO (js_getBubbles (toEvent self))
  
 foreign import javascript unsafe "($1[\"cancelable\"] ? 1 : 0)"
-        js_getCancelable :: JSRef Event -> IO Bool
+        js_getCancelable :: Event -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Event.cancelable Mozilla Event.cancelable documentation> 
 getCancelable :: (MonadIO m, IsEvent self) => self -> m Bool
-getCancelable self
-  = liftIO (js_getCancelable (unEvent (toEvent self)))
+getCancelable self = liftIO (js_getCancelable (toEvent self))
  
 foreign import javascript unsafe "$1[\"timeStamp\"]"
-        js_getTimeStamp :: JSRef Event -> IO Word
+        js_getTimeStamp :: Event -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Event.timeStamp Mozilla Event.timeStamp documentation> 
 getTimeStamp :: (MonadIO m, IsEvent self) => self -> m Word
-getTimeStamp self
-  = liftIO (js_getTimeStamp (unEvent (toEvent self)))
+getTimeStamp self = liftIO (js_getTimeStamp (toEvent self))
  
 foreign import javascript unsafe
         "($1[\"defaultPrevented\"] ? 1 : 0)" js_getDefaultPrevented ::
-        JSRef Event -> IO Bool
+        Event -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Event.defaultPrevented Mozilla Event.defaultPrevented documentation> 
 getDefaultPrevented :: (MonadIO m, IsEvent self) => self -> m Bool
 getDefaultPrevented self
-  = liftIO (js_getDefaultPrevented (unEvent (toEvent self)))
+  = liftIO (js_getDefaultPrevented (toEvent self))
  
 foreign import javascript unsafe "$1[\"srcElement\"]"
-        js_getSrcElement :: JSRef Event -> IO (JSRef EventTarget)
+        js_getSrcElement :: Event -> IO (Nullable EventTarget)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Event.srcElement Mozilla Event.srcElement documentation> 
 getSrcElement ::
               (MonadIO m, IsEvent self) => self -> m (Maybe EventTarget)
 getSrcElement self
-  = liftIO
-      ((js_getSrcElement (unEvent (toEvent self))) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getSrcElement (toEvent self)))
  
 foreign import javascript unsafe "$1[\"returnValue\"] = $2;"
-        js_setReturnValue :: JSRef Event -> Bool -> IO ()
+        js_setReturnValue :: Event -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Event.returnValue Mozilla Event.returnValue documentation> 
 setReturnValue :: (MonadIO m, IsEvent self) => self -> Bool -> m ()
 setReturnValue self val
-  = liftIO (js_setReturnValue (unEvent (toEvent self)) val)
+  = liftIO (js_setReturnValue (toEvent self) val)
  
 foreign import javascript unsafe "($1[\"returnValue\"] ? 1 : 0)"
-        js_getReturnValue :: JSRef Event -> IO Bool
+        js_getReturnValue :: Event -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Event.returnValue Mozilla Event.returnValue documentation> 
 getReturnValue :: (MonadIO m, IsEvent self) => self -> m Bool
-getReturnValue self
-  = liftIO (js_getReturnValue (unEvent (toEvent self)))
+getReturnValue self = liftIO (js_getReturnValue (toEvent self))
  
 foreign import javascript unsafe "$1[\"cancelBubble\"] = $2;"
-        js_setCancelBubble :: JSRef Event -> Bool -> IO ()
+        js_setCancelBubble :: Event -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Event.cancelBubble Mozilla Event.cancelBubble documentation> 
 setCancelBubble ::
                 (MonadIO m, IsEvent self) => self -> Bool -> m ()
 setCancelBubble self val
-  = liftIO (js_setCancelBubble (unEvent (toEvent self)) val)
+  = liftIO (js_setCancelBubble (toEvent self) val)
  
 foreign import javascript unsafe "($1[\"cancelBubble\"] ? 1 : 0)"
-        js_getCancelBubble :: JSRef Event -> IO Bool
+        js_getCancelBubble :: Event -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Event.cancelBubble Mozilla Event.cancelBubble documentation> 
 getCancelBubble :: (MonadIO m, IsEvent self) => self -> m Bool
-getCancelBubble self
-  = liftIO (js_getCancelBubble (unEvent (toEvent self)))
+getCancelBubble self = liftIO (js_getCancelBubble (toEvent self))
  
 foreign import javascript unsafe "$1[\"clipboardData\"]"
-        js_getClipboardData :: JSRef Event -> IO (JSRef DataTransfer)
+        js_getClipboardData :: Event -> IO (Nullable DataTransfer)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Event.clipboardData Mozilla Event.clipboardData documentation> 
 getClipboardData ::
                  (MonadIO m, IsEvent self) => self -> m (Maybe DataTransfer)
 getClipboardData self
-  = liftIO
-      ((js_getClipboardData (unEvent (toEvent self))) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getClipboardData (toEvent self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/EventListener.hs b/src/GHCJS/DOM/JSFFI/Generated/EventListener.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/EventListener.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/EventListener.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,12 +19,11 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"handleEvent\"]($2)"
-        js_handleEvent :: JSRef EventListener -> JSRef Event -> IO ()
+        js_handleEvent :: EventListener -> Nullable Event -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/EventListener.handleEvent Mozilla EventListener.handleEvent documentation> 
 handleEvent ::
             (MonadIO m, IsEvent evt) => EventListener -> Maybe evt -> m ()
 handleEvent self evt
   = liftIO
-      (js_handleEvent (unEventListener self)
-         (maybe jsNull (unEvent . toEvent) evt))
+      (js_handleEvent (self) (maybeToNullable (fmap toEvent evt)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/EventSource.hs b/src/GHCJS/DOM/JSFFI/Generated/EventSource.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/EventSource.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/EventSource.hs
@@ -8,7 +8,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -23,7 +23,7 @@
  
 foreign import javascript unsafe
         "new window[\"EventSource\"]($1,\n$2)" js_newEventSource ::
-        JSString -> JSRef Dictionary -> IO (JSRef EventSource)
+        JSString -> Nullable Dictionary -> IO EventSource
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/EventSource Mozilla EventSource documentation> 
 newEventSource ::
@@ -32,43 +32,40 @@
 newEventSource url eventSourceInit
   = liftIO
       (js_newEventSource (toJSString url)
-         (maybe jsNull (unDictionary . toDictionary) eventSourceInit)
-         >>= fromJSRefUnchecked)
+         (maybeToNullable (fmap toDictionary eventSourceInit)))
  
 foreign import javascript unsafe "$1[\"close\"]()" js_close ::
-        JSRef EventSource -> IO ()
+        EventSource -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/EventSource.close Mozilla EventSource.close documentation> 
 close :: (MonadIO m) => EventSource -> m ()
-close self = liftIO (js_close (unEventSource self))
+close self = liftIO (js_close (self))
 pattern CONNECTING = 0
 pattern OPEN = 1
 pattern CLOSED = 2
  
 foreign import javascript unsafe "$1[\"url\"]" js_getUrl ::
-        JSRef EventSource -> IO JSString
+        EventSource -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/EventSource.url Mozilla EventSource.url documentation> 
 getUrl ::
        (MonadIO m, FromJSString result) => EventSource -> m result
-getUrl self
-  = liftIO (fromJSString <$> (js_getUrl (unEventSource self)))
+getUrl self = liftIO (fromJSString <$> (js_getUrl (self)))
  
 foreign import javascript unsafe
         "($1[\"withCredentials\"] ? 1 : 0)" js_getWithCredentials ::
-        JSRef EventSource -> IO Bool
+        EventSource -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/EventSource.withCredentials Mozilla EventSource.withCredentials documentation> 
 getWithCredentials :: (MonadIO m) => EventSource -> m Bool
-getWithCredentials self
-  = liftIO (js_getWithCredentials (unEventSource self))
+getWithCredentials self = liftIO (js_getWithCredentials (self))
  
 foreign import javascript unsafe "$1[\"readyState\"]"
-        js_getReadyState :: JSRef EventSource -> IO Word
+        js_getReadyState :: EventSource -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/EventSource.readyState Mozilla EventSource.readyState documentation> 
 getReadyState :: (MonadIO m) => EventSource -> m Word
-getReadyState self = liftIO (js_getReadyState (unEventSource self))
+getReadyState self = liftIO (js_getReadyState (self))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/EventSource.onopen Mozilla EventSource.onopen documentation> 
 open :: EventName EventSource Event
diff --git a/src/GHCJS/DOM/JSFFI/Generated/EventTarget.hs b/src/GHCJS/DOM/JSFFI/Generated/EventTarget.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/EventTarget.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/EventTarget.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,8 +20,7 @@
  
 foreign import javascript unsafe
         "$1[\"addEventListener\"]($2, $3,\n$4)" js_addEventListener ::
-        JSRef EventTarget ->
-          JSString -> JSRef EventListener -> Bool -> IO ()
+        EventTarget -> JSString -> Nullable EventListener -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/EventTarget.addEventListener Mozilla EventTarget.addEventListener documentation> 
 addEventListener ::
@@ -29,16 +28,14 @@
                    self -> type' -> Maybe EventListener -> Bool -> m ()
 addEventListener self type' listener useCapture
   = liftIO
-      (js_addEventListener (unEventTarget (toEventTarget self))
-         (toJSString type')
-         (maybe jsNull pToJSRef listener)
+      (js_addEventListener (toEventTarget self) (toJSString type')
+         (maybeToNullable listener)
          useCapture)
  
 foreign import javascript unsafe
         "$1[\"removeEventListener\"]($2,\n$3, $4)" js_removeEventListener
         ::
-        JSRef EventTarget ->
-          JSString -> JSRef EventListener -> Bool -> IO ()
+        EventTarget -> JSString -> Nullable EventListener -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/EventTarget.removeEventListener Mozilla EventTarget.removeEventListener documentation> 
 removeEventListener ::
@@ -46,14 +43,13 @@
                       self -> type' -> Maybe EventListener -> Bool -> m ()
 removeEventListener self type' listener useCapture
   = liftIO
-      (js_removeEventListener (unEventTarget (toEventTarget self))
-         (toJSString type')
-         (maybe jsNull pToJSRef listener)
+      (js_removeEventListener (toEventTarget self) (toJSString type')
+         (maybeToNullable listener)
          useCapture)
  
 foreign import javascript unsafe
         "($1[\"dispatchEvent\"]($2) ? 1 : 0)" js_dispatchEvent ::
-        JSRef EventTarget -> JSRef Event -> IO Bool
+        EventTarget -> Nullable Event -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/EventTarget.dispatchEvent Mozilla EventTarget.dispatchEvent documentation> 
 dispatchEvent ::
@@ -61,5 +57,5 @@
                 self -> Maybe event -> m Bool
 dispatchEvent self event
   = liftIO
-      (js_dispatchEvent (unEventTarget (toEventTarget self))
-         (maybe jsNull (unEvent . toEvent) event))
+      (js_dispatchEvent (toEventTarget self)
+         (maybeToNullable (fmap toEvent event)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/File.hs b/src/GHCJS/DOM/JSFFI/Generated/File.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/File.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/File.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,16 +19,16 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"name\"]" js_getName ::
-        JSRef File -> IO JSString
+        File -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/File.name Mozilla File.name documentation> 
 getName :: (MonadIO m, FromJSString result) => File -> m result
-getName self = liftIO (fromJSString <$> (js_getName (unFile self)))
+getName self = liftIO (fromJSString <$> (js_getName (self)))
  
 foreign import javascript unsafe "$1[\"lastModifiedDate\"]"
-        js_getLastModifiedDate :: JSRef File -> IO (JSRef Date)
+        js_getLastModifiedDate :: File -> IO (Nullable Date)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/File.lastModifiedDate Mozilla File.lastModifiedDate documentation> 
 getLastModifiedDate :: (MonadIO m) => File -> m (Maybe Date)
 getLastModifiedDate self
-  = liftIO ((js_getLastModifiedDate (unFile self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getLastModifiedDate (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/FileError.hs b/src/GHCJS/DOM/JSFFI/Generated/FileError.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/FileError.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/FileError.hs
@@ -10,7 +10,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -36,8 +36,8 @@
 pattern PATH_EXISTS_ERR = 12
  
 foreign import javascript unsafe "$1[\"code\"]" js_getCode ::
-        JSRef FileError -> IO Word
+        FileError -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/FileError.code Mozilla FileError.code documentation> 
 getCode :: (MonadIO m) => FileError -> m Word
-getCode self = liftIO (js_getCode (unFileError self))
+getCode self = liftIO (js_getCode (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/FileList.hs b/src/GHCJS/DOM/JSFFI/Generated/FileList.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/FileList.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/FileList.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,16 +19,16 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"item\"]($2)" js_item ::
-        JSRef FileList -> Word -> IO (JSRef File)
+        FileList -> Word -> IO (Nullable File)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/FileList.item Mozilla FileList.item documentation> 
 item :: (MonadIO m) => FileList -> Word -> m (Maybe File)
 item self index
-  = liftIO ((js_item (unFileList self) index) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_item (self) index))
  
 foreign import javascript unsafe "$1[\"length\"]" js_getLength ::
-        JSRef FileList -> IO Word
+        FileList -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/FileList.length Mozilla FileList.length documentation> 
 getLength :: (MonadIO m) => FileList -> m Word
-getLength self = liftIO (js_getLength (unFileList self))
+getLength self = liftIO (js_getLength (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/FileReader.hs b/src/GHCJS/DOM/JSFFI/Generated/FileReader.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/FileReader.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/FileReader.hs
@@ -10,7 +10,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -24,37 +24,34 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "new window[\"FileReader\"]()"
-        js_newFileReader :: IO (JSRef FileReader)
+        js_newFileReader :: IO FileReader
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/FileReader Mozilla FileReader documentation> 
 newFileReader :: (MonadIO m) => m FileReader
-newFileReader = liftIO (js_newFileReader >>= fromJSRefUnchecked)
+newFileReader = liftIO (js_newFileReader)
  
 foreign import javascript unsafe "$1[\"readAsArrayBuffer\"]($2)"
-        js_readAsArrayBuffer :: JSRef FileReader -> JSRef Blob -> IO ()
+        js_readAsArrayBuffer :: FileReader -> Nullable Blob -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/FileReader.readAsArrayBuffer Mozilla FileReader.readAsArrayBuffer documentation> 
 readAsArrayBuffer ::
                   (MonadIO m, IsBlob blob) => FileReader -> Maybe blob -> m ()
 readAsArrayBuffer self blob
   = liftIO
-      (js_readAsArrayBuffer (unFileReader self)
-         (maybe jsNull (unBlob . toBlob) blob))
+      (js_readAsArrayBuffer (self) (maybeToNullable (fmap toBlob blob)))
  
 foreign import javascript unsafe "$1[\"readAsBinaryString\"]($2)"
-        js_readAsBinaryString :: JSRef FileReader -> JSRef Blob -> IO ()
+        js_readAsBinaryString :: FileReader -> Nullable Blob -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/FileReader.readAsBinaryString Mozilla FileReader.readAsBinaryString documentation> 
 readAsBinaryString ::
                    (MonadIO m, IsBlob blob) => FileReader -> Maybe blob -> m ()
 readAsBinaryString self blob
   = liftIO
-      (js_readAsBinaryString (unFileReader self)
-         (maybe jsNull (unBlob . toBlob) blob))
+      (js_readAsBinaryString (self) (maybeToNullable (fmap toBlob blob)))
  
 foreign import javascript unsafe "$1[\"readAsText\"]($2, $3)"
-        js_readAsText ::
-        JSRef FileReader -> JSRef Blob -> JSString -> IO ()
+        js_readAsText :: FileReader -> Nullable Blob -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/FileReader.readAsText Mozilla FileReader.readAsText documentation> 
 readAsText ::
@@ -62,52 +59,49 @@
              FileReader -> Maybe blob -> encoding -> m ()
 readAsText self blob encoding
   = liftIO
-      (js_readAsText (unFileReader self)
-         (maybe jsNull (unBlob . toBlob) blob)
+      (js_readAsText (self) (maybeToNullable (fmap toBlob blob))
          (toJSString encoding))
  
 foreign import javascript unsafe "$1[\"readAsDataURL\"]($2)"
-        js_readAsDataURL :: JSRef FileReader -> JSRef Blob -> IO ()
+        js_readAsDataURL :: FileReader -> Nullable Blob -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/FileReader.readAsDataURL Mozilla FileReader.readAsDataURL documentation> 
 readAsDataURL ::
               (MonadIO m, IsBlob blob) => FileReader -> Maybe blob -> m ()
 readAsDataURL self blob
   = liftIO
-      (js_readAsDataURL (unFileReader self)
-         (maybe jsNull (unBlob . toBlob) blob))
+      (js_readAsDataURL (self) (maybeToNullable (fmap toBlob blob)))
  
 foreign import javascript unsafe "$1[\"abort\"]()" js_abort ::
-        JSRef FileReader -> IO ()
+        FileReader -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/FileReader.abort Mozilla FileReader.abort documentation> 
 abort :: (MonadIO m) => FileReader -> m ()
-abort self = liftIO (js_abort (unFileReader self))
+abort self = liftIO (js_abort (self))
 pattern EMPTY = 0
 pattern LOADING = 1
 pattern DONE = 2
  
 foreign import javascript unsafe "$1[\"readyState\"]"
-        js_getReadyState :: JSRef FileReader -> IO Word
+        js_getReadyState :: FileReader -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/FileReader.readyState Mozilla FileReader.readyState documentation> 
 getReadyState :: (MonadIO m) => FileReader -> m Word
-getReadyState self = liftIO (js_getReadyState (unFileReader self))
+getReadyState self = liftIO (js_getReadyState (self))
  
 foreign import javascript unsafe "$1[\"result\"]" js_getResult ::
-        JSRef FileReader -> IO (JSRef a)
+        FileReader -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/FileReader.result Mozilla FileReader.result documentation> 
-getResult :: (MonadIO m) => FileReader -> m (JSRef a)
-getResult self = liftIO (js_getResult (unFileReader self))
+getResult :: (MonadIO m) => FileReader -> m JSRef
+getResult self = liftIO (js_getResult (self))
  
 foreign import javascript unsafe "$1[\"error\"]" js_getError ::
-        JSRef FileReader -> IO (JSRef FileError)
+        FileReader -> IO (Nullable FileError)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/FileReader.error Mozilla FileReader.error documentation> 
 getError :: (MonadIO m) => FileReader -> m (Maybe FileError)
-getError self
-  = liftIO ((js_getError (unFileReader self)) >>= fromJSRef)
+getError self = liftIO (nullableToMaybe <$> (js_getError (self)))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/FileReader.onloadstart Mozilla FileReader.onloadstart documentation> 
 loadStart :: EventName FileReader ProgressEvent
diff --git a/src/GHCJS/DOM/JSFFI/Generated/FileReaderSync.hs b/src/GHCJS/DOM/JSFFI/Generated/FileReaderSync.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/FileReaderSync.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/FileReaderSync.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -21,16 +21,15 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "new window[\"FileReaderSync\"]()"
-        js_newFileReaderSync :: IO (JSRef FileReaderSync)
+        js_newFileReaderSync :: IO FileReaderSync
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/FileReaderSync Mozilla FileReaderSync documentation> 
 newFileReaderSync :: (MonadIO m) => m FileReaderSync
-newFileReaderSync
-  = liftIO (js_newFileReaderSync >>= fromJSRefUnchecked)
+newFileReaderSync = liftIO (js_newFileReaderSync)
  
 foreign import javascript unsafe "$1[\"readAsArrayBuffer\"]($2)"
         js_readAsArrayBuffer ::
-        JSRef FileReaderSync -> JSRef Blob -> IO (JSRef ArrayBuffer)
+        FileReaderSync -> Nullable Blob -> IO (Nullable ArrayBuffer)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/FileReaderSync.readAsArrayBuffer Mozilla FileReaderSync.readAsArrayBuffer documentation> 
 readAsArrayBuffer ::
@@ -38,13 +37,12 @@
                     FileReaderSync -> Maybe blob -> m (Maybe ArrayBuffer)
 readAsArrayBuffer self blob
   = liftIO
-      ((js_readAsArrayBuffer (unFileReaderSync self)
-          (maybe jsNull (unBlob . toBlob) blob))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_readAsArrayBuffer (self) (maybeToNullable (fmap toBlob blob))))
  
 foreign import javascript unsafe "$1[\"readAsBinaryString\"]($2)"
         js_readAsBinaryString ::
-        JSRef FileReaderSync -> JSRef Blob -> IO JSString
+        FileReaderSync -> Nullable Blob -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/FileReaderSync.readAsBinaryString Mozilla FileReaderSync.readAsBinaryString documentation> 
 readAsBinaryString ::
@@ -53,12 +51,12 @@
 readAsBinaryString self blob
   = liftIO
       (fromJSString <$>
-         (js_readAsBinaryString (unFileReaderSync self)
-            (maybe jsNull (unBlob . toBlob) blob)))
+         (js_readAsBinaryString (self)
+            (maybeToNullable (fmap toBlob blob))))
  
 foreign import javascript unsafe "$1[\"readAsText\"]($2, $3)"
         js_readAsText ::
-        JSRef FileReaderSync -> JSRef Blob -> JSString -> IO JSString
+        FileReaderSync -> Nullable Blob -> JSString -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/FileReaderSync.readAsText Mozilla FileReaderSync.readAsText documentation> 
 readAsText ::
@@ -68,13 +66,11 @@
 readAsText self blob encoding
   = liftIO
       (fromJSString <$>
-         (js_readAsText (unFileReaderSync self)
-            (maybe jsNull (unBlob . toBlob) blob)
+         (js_readAsText (self) (maybeToNullable (fmap toBlob blob))
             (toJSString encoding)))
  
 foreign import javascript unsafe "$1[\"readAsDataURL\"]($2)"
-        js_readAsDataURL ::
-        JSRef FileReaderSync -> JSRef Blob -> IO JSString
+        js_readAsDataURL :: FileReaderSync -> Nullable Blob -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/FileReaderSync.readAsDataURL Mozilla FileReaderSync.readAsDataURL documentation> 
 readAsDataURL ::
@@ -83,5 +79,4 @@
 readAsDataURL self blob
   = liftIO
       (fromJSString <$>
-         (js_readAsDataURL (unFileReaderSync self)
-            (maybe jsNull (unBlob . toBlob) blob)))
+         (js_readAsDataURL (self) (maybeToNullable (fmap toBlob blob))))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/FocusEvent.hs b/src/GHCJS/DOM/JSFFI/Generated/FocusEvent.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/FocusEvent.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/FocusEvent.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,10 +19,10 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"relatedTarget\"]"
-        js_getRelatedTarget :: JSRef FocusEvent -> IO (JSRef EventTarget)
+        js_getRelatedTarget :: FocusEvent -> IO (Nullable EventTarget)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/FocusEvent.relatedTarget Mozilla FocusEvent.relatedTarget documentation> 
 getRelatedTarget ::
                  (MonadIO m) => FocusEvent -> m (Maybe EventTarget)
 getRelatedTarget self
-  = liftIO ((js_getRelatedTarget (unFocusEvent self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getRelatedTarget (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/FontLoader.hs b/src/GHCJS/DOM/JSFFI/Generated/FontLoader.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/FontLoader.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/FontLoader.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -22,19 +22,17 @@
  
 foreign import javascript unsafe
         "($1[\"checkFont\"]($2,\n$3) ? 1 : 0)" js_checkFont ::
-        JSRef FontLoader -> JSString -> JSString -> IO Bool
+        FontLoader -> JSString -> JSString -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/FontLoader.checkFont Mozilla FontLoader.checkFont documentation> 
 checkFont ::
           (MonadIO m, ToJSString font, ToJSString text) =>
             FontLoader -> font -> text -> m Bool
 checkFont self font text
-  = liftIO
-      (js_checkFont (unFontLoader self) (toJSString font)
-         (toJSString text))
+  = liftIO (js_checkFont (self) (toJSString font) (toJSString text))
  
 foreign import javascript unsafe "$1[\"loadFont\"]($2)" js_loadFont
-        :: JSRef FontLoader -> JSRef Dictionary -> IO ()
+        :: FontLoader -> Nullable Dictionary -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/FontLoader.loadFont Mozilla FontLoader.loadFont documentation> 
 loadFont ::
@@ -42,20 +40,18 @@
            FontLoader -> Maybe params -> m ()
 loadFont self params
   = liftIO
-      (js_loadFont (unFontLoader self)
-         (maybe jsNull (unDictionary . toDictionary) params))
+      (js_loadFont (self) (maybeToNullable (fmap toDictionary params)))
  
 foreign import javascript unsafe "$1[\"notifyWhenFontsReady\"]($2)"
         js_notifyWhenFontsReady ::
-        JSRef FontLoader -> JSRef VoidCallback -> IO ()
+        FontLoader -> Nullable VoidCallback -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/FontLoader.notifyWhenFontsReady Mozilla FontLoader.notifyWhenFontsReady documentation> 
 notifyWhenFontsReady ::
                      (MonadIO m) => FontLoader -> Maybe VoidCallback -> m ()
 notifyWhenFontsReady self callback
   = liftIO
-      (js_notifyWhenFontsReady (unFontLoader self)
-         (maybe jsNull pToJSRef callback))
+      (js_notifyWhenFontsReady (self) (maybeToNullable callback))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/FontLoader.onloading Mozilla FontLoader.onloading documentation> 
 loading :: EventName FontLoader Event
@@ -78,8 +74,8 @@
 error = unsafeEventName (toJSString "error")
  
 foreign import javascript unsafe "($1[\"loading\"] ? 1 : 0)"
-        js_getLoading :: JSRef FontLoader -> IO Bool
+        js_getLoading :: FontLoader -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/FontLoader.loading Mozilla FontLoader.loading documentation> 
 getLoading :: (MonadIO m) => FontLoader -> m Bool
-getLoading self = liftIO (js_getLoading (unFontLoader self))
+getLoading self = liftIO (js_getLoading (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/FormData.hs b/src/GHCJS/DOM/JSFFI/Generated/FormData.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/FormData.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/FormData.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,18 +19,14 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "new window[\"FormData\"]($1)"
-        js_newFormData :: JSRef HTMLFormElement -> IO (JSRef FormData)
+        js_newFormData :: Nullable HTMLFormElement -> IO FormData
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/FormData Mozilla FormData documentation> 
 newFormData :: (MonadIO m) => Maybe HTMLFormElement -> m FormData
-newFormData form
-  = liftIO
-      (js_newFormData (maybe jsNull pToJSRef form) >>=
-         fromJSRefUnchecked)
+newFormData form = liftIO (js_newFormData (maybeToNullable form))
  
 foreign import javascript unsafe "$1[\"append\"]($2, $3, $4)"
-        js_append ::
-        JSRef FormData -> JSString -> JSString -> JSString -> IO ()
+        js_append :: FormData -> JSString -> JSString -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/FormData.append Mozilla FormData.append documentation> 
 append ::
@@ -39,5 +35,5 @@
          FormData -> name -> value -> filename -> m ()
 append self name value filename
   = liftIO
-      (js_append (unFormData self) (toJSString name) (toJSString value)
+      (js_append (self) (toJSString name) (toJSString value)
          (toJSString filename))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/GainNode.hs b/src/GHCJS/DOM/JSFFI/Generated/GainNode.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/GainNode.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/GainNode.hs
@@ -4,7 +4,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -18,9 +18,8 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"gain\"]" js_getGain ::
-        JSRef GainNode -> IO (JSRef AudioParam)
+        GainNode -> IO (Nullable AudioParam)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/GainNode.gain Mozilla GainNode.gain documentation> 
 getGain :: (MonadIO m) => GainNode -> m (Maybe AudioParam)
-getGain self
-  = liftIO ((js_getGain (unGainNode self)) >>= fromJSRef)
+getGain self = liftIO (nullableToMaybe <$> (js_getGain (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/Gamepad.hs b/src/GHCJS/DOM/JSFFI/Generated/Gamepad.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/Gamepad.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/Gamepad.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -21,54 +21,52 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"id\"]" js_getId ::
-        JSRef Gamepad -> IO JSString
+        Gamepad -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Gamepad.id Mozilla Gamepad.id documentation> 
 getId :: (MonadIO m, FromJSString result) => Gamepad -> m result
-getId self = liftIO (fromJSString <$> (js_getId (unGamepad self)))
+getId self = liftIO (fromJSString <$> (js_getId (self)))
  
 foreign import javascript unsafe "$1[\"index\"]" js_getIndex ::
-        JSRef Gamepad -> IO Word
+        Gamepad -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Gamepad.index Mozilla Gamepad.index documentation> 
 getIndex :: (MonadIO m) => Gamepad -> m Word
-getIndex self = liftIO (js_getIndex (unGamepad self))
+getIndex self = liftIO (js_getIndex (self))
  
 foreign import javascript unsafe "($1[\"connected\"] ? 1 : 0)"
-        js_getConnected :: JSRef Gamepad -> IO Bool
+        js_getConnected :: Gamepad -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Gamepad.connected Mozilla Gamepad.connected documentation> 
 getConnected :: (MonadIO m) => Gamepad -> m Bool
-getConnected self = liftIO (js_getConnected (unGamepad self))
+getConnected self = liftIO (js_getConnected (self))
  
 foreign import javascript unsafe "$1[\"timestamp\"]"
-        js_getTimestamp :: JSRef Gamepad -> IO Double
+        js_getTimestamp :: Gamepad -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Gamepad.timestamp Mozilla Gamepad.timestamp documentation> 
 getTimestamp :: (MonadIO m) => Gamepad -> m Double
-getTimestamp self = liftIO (js_getTimestamp (unGamepad self))
+getTimestamp self = liftIO (js_getTimestamp (self))
  
 foreign import javascript unsafe "$1[\"mapping\"]" js_getMapping ::
-        JSRef Gamepad -> IO JSString
+        Gamepad -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Gamepad.mapping Mozilla Gamepad.mapping documentation> 
 getMapping ::
            (MonadIO m, FromJSString result) => Gamepad -> m result
-getMapping self
-  = liftIO (fromJSString <$> (js_getMapping (unGamepad self)))
+getMapping self = liftIO (fromJSString <$> (js_getMapping (self)))
  
 foreign import javascript unsafe "$1[\"axes\"]" js_getAxes ::
-        JSRef Gamepad -> IO (JSRef [Double])
+        Gamepad -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Gamepad.axes Mozilla Gamepad.axes documentation> 
 getAxes :: (MonadIO m) => Gamepad -> m [Double]
-getAxes self
-  = liftIO ((js_getAxes (unGamepad self)) >>= fromJSRefUnchecked)
+getAxes self = liftIO ((js_getAxes (self)) >>= fromJSRefUnchecked)
  
 foreign import javascript unsafe "$1[\"buttons\"]" js_getButtons ::
-        JSRef Gamepad -> IO (JSRef [Maybe GamepadButton])
+        Gamepad -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Gamepad.buttons Mozilla Gamepad.buttons documentation> 
 getButtons :: (MonadIO m) => Gamepad -> m [Maybe GamepadButton]
 getButtons self
-  = liftIO ((js_getButtons (unGamepad self)) >>= fromJSRefUnchecked)
+  = liftIO ((js_getButtons (self)) >>= fromJSRefUnchecked)
diff --git a/src/GHCJS/DOM/JSFFI/Generated/GamepadButton.hs b/src/GHCJS/DOM/JSFFI/Generated/GamepadButton.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/GamepadButton.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/GamepadButton.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,15 +19,15 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "($1[\"pressed\"] ? 1 : 0)"
-        js_getPressed :: JSRef GamepadButton -> IO Bool
+        js_getPressed :: GamepadButton -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/GamepadButton.pressed Mozilla GamepadButton.pressed documentation> 
 getPressed :: (MonadIO m) => GamepadButton -> m Bool
-getPressed self = liftIO (js_getPressed (unGamepadButton self))
+getPressed self = liftIO (js_getPressed (self))
  
 foreign import javascript unsafe "$1[\"value\"]" js_getValue ::
-        JSRef GamepadButton -> IO Double
+        GamepadButton -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/GamepadButton.value Mozilla GamepadButton.value documentation> 
 getValue :: (MonadIO m) => GamepadButton -> m Double
-getValue self = liftIO (js_getValue (unGamepadButton self))
+getValue self = liftIO (js_getValue (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/GamepadEvent.hs b/src/GHCJS/DOM/JSFFI/Generated/GamepadEvent.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/GamepadEvent.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/GamepadEvent.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,9 +19,9 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"gamepad\"]" js_getGamepad ::
-        JSRef GamepadEvent -> IO (JSRef Gamepad)
+        GamepadEvent -> IO (Nullable Gamepad)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/GamepadEvent.gamepad Mozilla GamepadEvent.gamepad documentation> 
 getGamepad :: (MonadIO m) => GamepadEvent -> m (Maybe Gamepad)
 getGamepad self
-  = liftIO ((js_getGamepad (unGamepadEvent self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getGamepad (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/Geolocation.hs b/src/GHCJS/DOM/JSFFI/Generated/Geolocation.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/Geolocation.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/Geolocation.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -21,9 +21,9 @@
  
 foreign import javascript unsafe
         "$1[\"getCurrentPosition\"]($2, $3,\n$4)" js_getCurrentPosition ::
-        JSRef Geolocation ->
-          JSRef PositionCallback ->
-            JSRef PositionErrorCallback -> JSRef PositionOptions -> IO ()
+        Geolocation ->
+          Nullable PositionCallback ->
+            Nullable PositionErrorCallback -> Nullable PositionOptions -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Geolocation.getCurrentPosition Mozilla Geolocation.getCurrentPosition documentation> 
 getCurrentPosition ::
@@ -33,16 +33,16 @@
                          Maybe PositionErrorCallback -> Maybe options -> m ()
 getCurrentPosition self successCallback errorCallback options
   = liftIO
-      (js_getCurrentPosition (unGeolocation self)
-         (maybe jsNull pToJSRef successCallback)
-         (maybe jsNull pToJSRef errorCallback)
-         (maybe jsNull (unPositionOptions . toPositionOptions) options))
+      (js_getCurrentPosition (self) (maybeToNullable successCallback)
+         (maybeToNullable errorCallback)
+         (maybeToNullable (fmap toPositionOptions options)))
  
 foreign import javascript unsafe
         "$1[\"watchPosition\"]($2, $3, $4)" js_watchPosition ::
-        JSRef Geolocation ->
-          JSRef PositionCallback ->
-            JSRef PositionErrorCallback -> JSRef PositionOptions -> IO Int
+        Geolocation ->
+          Nullable PositionCallback ->
+            Nullable PositionErrorCallback ->
+              Nullable PositionOptions -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Geolocation.watchPosition Mozilla Geolocation.watchPosition documentation> 
 watchPosition ::
@@ -52,15 +52,13 @@
                     Maybe PositionErrorCallback -> Maybe options -> m Int
 watchPosition self successCallback errorCallback options
   = liftIO
-      (js_watchPosition (unGeolocation self)
-         (maybe jsNull pToJSRef successCallback)
-         (maybe jsNull pToJSRef errorCallback)
-         (maybe jsNull (unPositionOptions . toPositionOptions) options))
+      (js_watchPosition (self) (maybeToNullable successCallback)
+         (maybeToNullable errorCallback)
+         (maybeToNullable (fmap toPositionOptions options)))
  
 foreign import javascript unsafe "$1[\"clearWatch\"]($2)"
-        js_clearWatch :: JSRef Geolocation -> Int -> IO ()
+        js_clearWatch :: Geolocation -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Geolocation.clearWatch Mozilla Geolocation.clearWatch documentation> 
 clearWatch :: (MonadIO m) => Geolocation -> Int -> m ()
-clearWatch self watchID
-  = liftIO (js_clearWatch (unGeolocation self) watchID)
+clearWatch self watchID = liftIO (js_clearWatch (self) watchID)
diff --git a/src/GHCJS/DOM/JSFFI/Generated/Geoposition.hs b/src/GHCJS/DOM/JSFFI/Generated/Geoposition.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/Geoposition.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/Geoposition.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,16 +19,15 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"coords\"]" js_getCoords ::
-        JSRef Geoposition -> IO (JSRef Coordinates)
+        Geoposition -> IO (Nullable Coordinates)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Geoposition.coords Mozilla Geoposition.coords documentation> 
 getCoords :: (MonadIO m) => Geoposition -> m (Maybe Coordinates)
-getCoords self
-  = liftIO ((js_getCoords (unGeoposition self)) >>= fromJSRef)
+getCoords self = liftIO (nullableToMaybe <$> (js_getCoords (self)))
  
 foreign import javascript unsafe "$1[\"timestamp\"]"
-        js_getTimestamp :: JSRef Geoposition -> IO Word
+        js_getTimestamp :: Geoposition -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Geoposition.timestamp Mozilla Geoposition.timestamp documentation> 
 getTimestamp :: (MonadIO m) => Geoposition -> m Word
-getTimestamp self = liftIO (js_getTimestamp (unGeoposition self))
+getTimestamp self = liftIO (js_getTimestamp (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLAllCollection.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLAllCollection.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLAllCollection.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLAllCollection.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,16 +20,15 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"item\"]($2)" js_item ::
-        JSRef HTMLAllCollection -> Word -> IO (JSRef Node)
+        HTMLAllCollection -> Word -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAllCollection.item Mozilla HTMLAllCollection.item documentation> 
 item :: (MonadIO m) => HTMLAllCollection -> Word -> m (Maybe Node)
 item self index
-  = liftIO ((js_item (unHTMLAllCollection self) index) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_item (self) index))
  
 foreign import javascript unsafe "$1[\"namedItem\"]($2)"
-        js_namedItem ::
-        JSRef HTMLAllCollection -> JSString -> IO (JSRef Node)
+        js_namedItem :: HTMLAllCollection -> JSString -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAllCollection.namedItem Mozilla HTMLAllCollection.namedItem documentation> 
 namedItem ::
@@ -37,24 +36,21 @@
             HTMLAllCollection -> name -> m (Maybe Node)
 namedItem self name
   = liftIO
-      ((js_namedItem (unHTMLAllCollection self) (toJSString name)) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_namedItem (self) (toJSString name)))
  
 foreign import javascript unsafe "$1[\"tags\"]($2)" js_tags ::
-        JSRef HTMLAllCollection -> JSString -> IO (JSRef NodeList)
+        HTMLAllCollection -> JSString -> IO (Nullable NodeList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAllCollection.tags Mozilla HTMLAllCollection.tags documentation> 
 tags ::
      (MonadIO m, ToJSString name) =>
        HTMLAllCollection -> name -> m (Maybe NodeList)
 tags self name
-  = liftIO
-      ((js_tags (unHTMLAllCollection self) (toJSString name)) >>=
-         fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_tags (self) (toJSString name)))
  
 foreign import javascript unsafe "$1[\"length\"]" js_getLength ::
-        JSRef HTMLAllCollection -> IO Word
+        HTMLAllCollection -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAllCollection.length Mozilla HTMLAllCollection.length documentation> 
 getLength :: (MonadIO m) => HTMLAllCollection -> m Word
-getLength self = liftIO (js_getLength (unHTMLAllCollection self))
+getLength self = liftIO (js_getLength (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLAnchorElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLAnchorElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLAnchorElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLAnchorElement.hs
@@ -21,7 +21,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -35,432 +35,375 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"toString\"]()" js_toString
-        :: JSRef HTMLAnchorElement -> IO JSString
+        :: HTMLAnchorElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement.toString Mozilla HTMLAnchorElement.toString documentation> 
 toString ::
          (MonadIO m, FromJSString result) => HTMLAnchorElement -> m result
-toString self
-  = liftIO
-      (fromJSString <$> (js_toString (unHTMLAnchorElement self)))
+toString self = liftIO (fromJSString <$> (js_toString (self)))
  
 foreign import javascript unsafe "$1[\"charset\"] = $2;"
-        js_setCharset :: JSRef HTMLAnchorElement -> JSString -> IO ()
+        js_setCharset :: HTMLAnchorElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement.charset Mozilla HTMLAnchorElement.charset documentation> 
 setCharset ::
            (MonadIO m, ToJSString val) => HTMLAnchorElement -> val -> m ()
 setCharset self val
-  = liftIO
-      (js_setCharset (unHTMLAnchorElement self) (toJSString val))
+  = liftIO (js_setCharset (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"charset\"]" js_getCharset ::
-        JSRef HTMLAnchorElement -> IO JSString
+        HTMLAnchorElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement.charset Mozilla HTMLAnchorElement.charset documentation> 
 getCharset ::
            (MonadIO m, FromJSString result) => HTMLAnchorElement -> m result
-getCharset self
-  = liftIO
-      (fromJSString <$> (js_getCharset (unHTMLAnchorElement self)))
+getCharset self = liftIO (fromJSString <$> (js_getCharset (self)))
  
 foreign import javascript unsafe "$1[\"coords\"] = $2;"
-        js_setCoords :: JSRef HTMLAnchorElement -> JSString -> IO ()
+        js_setCoords :: HTMLAnchorElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement.coords Mozilla HTMLAnchorElement.coords documentation> 
 setCoords ::
           (MonadIO m, ToJSString val) => HTMLAnchorElement -> val -> m ()
-setCoords self val
-  = liftIO (js_setCoords (unHTMLAnchorElement self) (toJSString val))
+setCoords self val = liftIO (js_setCoords (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"coords\"]" js_getCoords ::
-        JSRef HTMLAnchorElement -> IO JSString
+        HTMLAnchorElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement.coords Mozilla HTMLAnchorElement.coords documentation> 
 getCoords ::
           (MonadIO m, FromJSString result) => HTMLAnchorElement -> m result
-getCoords self
-  = liftIO
-      (fromJSString <$> (js_getCoords (unHTMLAnchorElement self)))
+getCoords self = liftIO (fromJSString <$> (js_getCoords (self)))
  
 foreign import javascript unsafe "$1[\"download\"] = $2;"
-        js_setDownload :: JSRef HTMLAnchorElement -> JSString -> IO ()
+        js_setDownload :: HTMLAnchorElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement.download Mozilla HTMLAnchorElement.download documentation> 
 setDownload ::
             (MonadIO m, ToJSString val) => HTMLAnchorElement -> val -> m ()
 setDownload self val
-  = liftIO
-      (js_setDownload (unHTMLAnchorElement self) (toJSString val))
+  = liftIO (js_setDownload (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"download\"]" js_getDownload
-        :: JSRef HTMLAnchorElement -> IO JSString
+        :: HTMLAnchorElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement.download Mozilla HTMLAnchorElement.download documentation> 
 getDownload ::
             (MonadIO m, FromJSString result) => HTMLAnchorElement -> m result
 getDownload self
-  = liftIO
-      (fromJSString <$> (js_getDownload (unHTMLAnchorElement self)))
+  = liftIO (fromJSString <$> (js_getDownload (self)))
  
 foreign import javascript unsafe "$1[\"href\"] = $2;" js_setHref ::
-        JSRef HTMLAnchorElement -> JSString -> IO ()
+        HTMLAnchorElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement.href Mozilla HTMLAnchorElement.href documentation> 
 setHref ::
         (MonadIO m, ToJSString val) => HTMLAnchorElement -> val -> m ()
-setHref self val
-  = liftIO (js_setHref (unHTMLAnchorElement self) (toJSString val))
+setHref self val = liftIO (js_setHref (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"href\"]" js_getHref ::
-        JSRef HTMLAnchorElement -> IO JSString
+        HTMLAnchorElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement.href Mozilla HTMLAnchorElement.href documentation> 
 getHref ::
         (MonadIO m, FromJSString result) => HTMLAnchorElement -> m result
-getHref self
-  = liftIO (fromJSString <$> (js_getHref (unHTMLAnchorElement self)))
+getHref self = liftIO (fromJSString <$> (js_getHref (self)))
  
 foreign import javascript unsafe "$1[\"hreflang\"] = $2;"
-        js_setHreflang :: JSRef HTMLAnchorElement -> JSString -> IO ()
+        js_setHreflang :: HTMLAnchorElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement.hreflang Mozilla HTMLAnchorElement.hreflang documentation> 
 setHreflang ::
             (MonadIO m, ToJSString val) => HTMLAnchorElement -> val -> m ()
 setHreflang self val
-  = liftIO
-      (js_setHreflang (unHTMLAnchorElement self) (toJSString val))
+  = liftIO (js_setHreflang (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"hreflang\"]" js_getHreflang
-        :: JSRef HTMLAnchorElement -> IO JSString
+        :: HTMLAnchorElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement.hreflang Mozilla HTMLAnchorElement.hreflang documentation> 
 getHreflang ::
             (MonadIO m, FromJSString result) => HTMLAnchorElement -> m result
 getHreflang self
-  = liftIO
-      (fromJSString <$> (js_getHreflang (unHTMLAnchorElement self)))
+  = liftIO (fromJSString <$> (js_getHreflang (self)))
  
 foreign import javascript unsafe "$1[\"name\"] = $2;" js_setName ::
-        JSRef HTMLAnchorElement -> JSString -> IO ()
+        HTMLAnchorElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement.name Mozilla HTMLAnchorElement.name documentation> 
 setName ::
         (MonadIO m, ToJSString val) => HTMLAnchorElement -> val -> m ()
-setName self val
-  = liftIO (js_setName (unHTMLAnchorElement self) (toJSString val))
+setName self val = liftIO (js_setName (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"name\"]" js_getName ::
-        JSRef HTMLAnchorElement -> IO JSString
+        HTMLAnchorElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement.name Mozilla HTMLAnchorElement.name documentation> 
 getName ::
         (MonadIO m, FromJSString result) => HTMLAnchorElement -> m result
-getName self
-  = liftIO (fromJSString <$> (js_getName (unHTMLAnchorElement self)))
+getName self = liftIO (fromJSString <$> (js_getName (self)))
  
 foreign import javascript unsafe "$1[\"ping\"] = $2;" js_setPing ::
-        JSRef HTMLAnchorElement -> JSString -> IO ()
+        HTMLAnchorElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement.ping Mozilla HTMLAnchorElement.ping documentation> 
 setPing ::
         (MonadIO m, ToJSString val) => HTMLAnchorElement -> val -> m ()
-setPing self val
-  = liftIO (js_setPing (unHTMLAnchorElement self) (toJSString val))
+setPing self val = liftIO (js_setPing (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"ping\"]" js_getPing ::
-        JSRef HTMLAnchorElement -> IO JSString
+        HTMLAnchorElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement.ping Mozilla HTMLAnchorElement.ping documentation> 
 getPing ::
         (MonadIO m, FromJSString result) => HTMLAnchorElement -> m result
-getPing self
-  = liftIO (fromJSString <$> (js_getPing (unHTMLAnchorElement self)))
+getPing self = liftIO (fromJSString <$> (js_getPing (self)))
  
 foreign import javascript unsafe "$1[\"rel\"] = $2;" js_setRel ::
-        JSRef HTMLAnchorElement -> JSString -> IO ()
+        HTMLAnchorElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement.rel Mozilla HTMLAnchorElement.rel documentation> 
 setRel ::
        (MonadIO m, ToJSString val) => HTMLAnchorElement -> val -> m ()
-setRel self val
-  = liftIO (js_setRel (unHTMLAnchorElement self) (toJSString val))
+setRel self val = liftIO (js_setRel (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"rel\"]" js_getRel ::
-        JSRef HTMLAnchorElement -> IO JSString
+        HTMLAnchorElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement.rel Mozilla HTMLAnchorElement.rel documentation> 
 getRel ::
        (MonadIO m, FromJSString result) => HTMLAnchorElement -> m result
-getRel self
-  = liftIO (fromJSString <$> (js_getRel (unHTMLAnchorElement self)))
+getRel self = liftIO (fromJSString <$> (js_getRel (self)))
  
 foreign import javascript unsafe "$1[\"rev\"] = $2;" js_setRev ::
-        JSRef HTMLAnchorElement -> JSString -> IO ()
+        HTMLAnchorElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement.rev Mozilla HTMLAnchorElement.rev documentation> 
 setRev ::
        (MonadIO m, ToJSString val) => HTMLAnchorElement -> val -> m ()
-setRev self val
-  = liftIO (js_setRev (unHTMLAnchorElement self) (toJSString val))
+setRev self val = liftIO (js_setRev (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"rev\"]" js_getRev ::
-        JSRef HTMLAnchorElement -> IO JSString
+        HTMLAnchorElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement.rev Mozilla HTMLAnchorElement.rev documentation> 
 getRev ::
        (MonadIO m, FromJSString result) => HTMLAnchorElement -> m result
-getRev self
-  = liftIO (fromJSString <$> (js_getRev (unHTMLAnchorElement self)))
+getRev self = liftIO (fromJSString <$> (js_getRev (self)))
  
 foreign import javascript unsafe "$1[\"shape\"] = $2;" js_setShape
-        :: JSRef HTMLAnchorElement -> JSString -> IO ()
+        :: HTMLAnchorElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement.shape Mozilla HTMLAnchorElement.shape documentation> 
 setShape ::
          (MonadIO m, ToJSString val) => HTMLAnchorElement -> val -> m ()
-setShape self val
-  = liftIO (js_setShape (unHTMLAnchorElement self) (toJSString val))
+setShape self val = liftIO (js_setShape (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"shape\"]" js_getShape ::
-        JSRef HTMLAnchorElement -> IO JSString
+        HTMLAnchorElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement.shape Mozilla HTMLAnchorElement.shape documentation> 
 getShape ::
          (MonadIO m, FromJSString result) => HTMLAnchorElement -> m result
-getShape self
-  = liftIO
-      (fromJSString <$> (js_getShape (unHTMLAnchorElement self)))
+getShape self = liftIO (fromJSString <$> (js_getShape (self)))
  
 foreign import javascript unsafe "$1[\"target\"] = $2;"
-        js_setTarget :: JSRef HTMLAnchorElement -> JSString -> IO ()
+        js_setTarget :: HTMLAnchorElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement.target Mozilla HTMLAnchorElement.target documentation> 
 setTarget ::
           (MonadIO m, ToJSString val) => HTMLAnchorElement -> val -> m ()
-setTarget self val
-  = liftIO (js_setTarget (unHTMLAnchorElement self) (toJSString val))
+setTarget self val = liftIO (js_setTarget (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"target\"]" js_getTarget ::
-        JSRef HTMLAnchorElement -> IO JSString
+        HTMLAnchorElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement.target Mozilla HTMLAnchorElement.target documentation> 
 getTarget ::
           (MonadIO m, FromJSString result) => HTMLAnchorElement -> m result
-getTarget self
-  = liftIO
-      (fromJSString <$> (js_getTarget (unHTMLAnchorElement self)))
+getTarget self = liftIO (fromJSString <$> (js_getTarget (self)))
  
 foreign import javascript unsafe "$1[\"type\"] = $2;" js_setType ::
-        JSRef HTMLAnchorElement -> JSString -> IO ()
+        HTMLAnchorElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement.type Mozilla HTMLAnchorElement.type documentation> 
 setType ::
         (MonadIO m, ToJSString val) => HTMLAnchorElement -> val -> m ()
-setType self val
-  = liftIO (js_setType (unHTMLAnchorElement self) (toJSString val))
+setType self val = liftIO (js_setType (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"type\"]" js_getType ::
-        JSRef HTMLAnchorElement -> IO JSString
+        HTMLAnchorElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement.type Mozilla HTMLAnchorElement.type documentation> 
 getType ::
         (MonadIO m, FromJSString result) => HTMLAnchorElement -> m result
-getType self
-  = liftIO (fromJSString <$> (js_getType (unHTMLAnchorElement self)))
+getType self = liftIO (fromJSString <$> (js_getType (self)))
  
 foreign import javascript unsafe "$1[\"hash\"] = $2;" js_setHash ::
-        JSRef HTMLAnchorElement -> JSRef (Maybe JSString) -> IO ()
+        HTMLAnchorElement -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement.hash Mozilla HTMLAnchorElement.hash documentation> 
 setHash ::
         (MonadIO m, ToJSString val) =>
           HTMLAnchorElement -> Maybe val -> m ()
-setHash self val
-  = liftIO
-      (js_setHash (unHTMLAnchorElement self) (toMaybeJSString val))
+setHash self val = liftIO (js_setHash (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"hash\"]" js_getHash ::
-        JSRef HTMLAnchorElement -> IO (JSRef (Maybe JSString))
+        HTMLAnchorElement -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement.hash Mozilla HTMLAnchorElement.hash documentation> 
 getHash ::
         (MonadIO m, FromJSString result) =>
           HTMLAnchorElement -> m (Maybe result)
-getHash self
-  = liftIO
-      (fromMaybeJSString <$> (js_getHash (unHTMLAnchorElement self)))
+getHash self = liftIO (fromMaybeJSString <$> (js_getHash (self)))
  
 foreign import javascript unsafe "$1[\"host\"] = $2;" js_setHost ::
-        JSRef HTMLAnchorElement -> JSRef (Maybe JSString) -> IO ()
+        HTMLAnchorElement -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement.host Mozilla HTMLAnchorElement.host documentation> 
 setHost ::
         (MonadIO m, ToJSString val) =>
           HTMLAnchorElement -> Maybe val -> m ()
-setHost self val
-  = liftIO
-      (js_setHost (unHTMLAnchorElement self) (toMaybeJSString val))
+setHost self val = liftIO (js_setHost (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"host\"]" js_getHost ::
-        JSRef HTMLAnchorElement -> IO (JSRef (Maybe JSString))
+        HTMLAnchorElement -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement.host Mozilla HTMLAnchorElement.host documentation> 
 getHost ::
         (MonadIO m, FromJSString result) =>
           HTMLAnchorElement -> m (Maybe result)
-getHost self
-  = liftIO
-      (fromMaybeJSString <$> (js_getHost (unHTMLAnchorElement self)))
+getHost self = liftIO (fromMaybeJSString <$> (js_getHost (self)))
  
 foreign import javascript unsafe "$1[\"hostname\"] = $2;"
-        js_setHostname ::
-        JSRef HTMLAnchorElement -> JSRef (Maybe JSString) -> IO ()
+        js_setHostname :: HTMLAnchorElement -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement.hostname Mozilla HTMLAnchorElement.hostname documentation> 
 setHostname ::
             (MonadIO m, ToJSString val) =>
               HTMLAnchorElement -> Maybe val -> m ()
 setHostname self val
-  = liftIO
-      (js_setHostname (unHTMLAnchorElement self) (toMaybeJSString val))
+  = liftIO (js_setHostname (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"hostname\"]" js_getHostname
-        :: JSRef HTMLAnchorElement -> IO (JSRef (Maybe JSString))
+        :: HTMLAnchorElement -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement.hostname Mozilla HTMLAnchorElement.hostname documentation> 
 getHostname ::
             (MonadIO m, FromJSString result) =>
               HTMLAnchorElement -> m (Maybe result)
 getHostname self
-  = liftIO
-      (fromMaybeJSString <$> (js_getHostname (unHTMLAnchorElement self)))
+  = liftIO (fromMaybeJSString <$> (js_getHostname (self)))
  
 foreign import javascript unsafe "$1[\"pathname\"] = $2;"
-        js_setPathname ::
-        JSRef HTMLAnchorElement -> JSRef (Maybe JSString) -> IO ()
+        js_setPathname :: HTMLAnchorElement -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement.pathname Mozilla HTMLAnchorElement.pathname documentation> 
 setPathname ::
             (MonadIO m, ToJSString val) =>
               HTMLAnchorElement -> Maybe val -> m ()
 setPathname self val
-  = liftIO
-      (js_setPathname (unHTMLAnchorElement self) (toMaybeJSString val))
+  = liftIO (js_setPathname (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"pathname\"]" js_getPathname
-        :: JSRef HTMLAnchorElement -> IO (JSRef (Maybe JSString))
+        :: HTMLAnchorElement -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement.pathname Mozilla HTMLAnchorElement.pathname documentation> 
 getPathname ::
             (MonadIO m, FromJSString result) =>
               HTMLAnchorElement -> m (Maybe result)
 getPathname self
-  = liftIO
-      (fromMaybeJSString <$> (js_getPathname (unHTMLAnchorElement self)))
+  = liftIO (fromMaybeJSString <$> (js_getPathname (self)))
  
 foreign import javascript unsafe "$1[\"port\"] = $2;" js_setPort ::
-        JSRef HTMLAnchorElement -> JSRef (Maybe JSString) -> IO ()
+        HTMLAnchorElement -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement.port Mozilla HTMLAnchorElement.port documentation> 
 setPort ::
         (MonadIO m, ToJSString val) =>
           HTMLAnchorElement -> Maybe val -> m ()
-setPort self val
-  = liftIO
-      (js_setPort (unHTMLAnchorElement self) (toMaybeJSString val))
+setPort self val = liftIO (js_setPort (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"port\"]" js_getPort ::
-        JSRef HTMLAnchorElement -> IO (JSRef (Maybe JSString))
+        HTMLAnchorElement -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement.port Mozilla HTMLAnchorElement.port documentation> 
 getPort ::
         (MonadIO m, FromJSString result) =>
           HTMLAnchorElement -> m (Maybe result)
-getPort self
-  = liftIO
-      (fromMaybeJSString <$> (js_getPort (unHTMLAnchorElement self)))
+getPort self = liftIO (fromMaybeJSString <$> (js_getPort (self)))
  
 foreign import javascript unsafe "$1[\"protocol\"] = $2;"
-        js_setProtocol ::
-        JSRef HTMLAnchorElement -> JSRef (Maybe JSString) -> IO ()
+        js_setProtocol :: HTMLAnchorElement -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement.protocol Mozilla HTMLAnchorElement.protocol documentation> 
 setProtocol ::
             (MonadIO m, ToJSString val) =>
               HTMLAnchorElement -> Maybe val -> m ()
 setProtocol self val
-  = liftIO
-      (js_setProtocol (unHTMLAnchorElement self) (toMaybeJSString val))
+  = liftIO (js_setProtocol (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"protocol\"]" js_getProtocol
-        :: JSRef HTMLAnchorElement -> IO (JSRef (Maybe JSString))
+        :: HTMLAnchorElement -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement.protocol Mozilla HTMLAnchorElement.protocol documentation> 
 getProtocol ::
             (MonadIO m, FromJSString result) =>
               HTMLAnchorElement -> m (Maybe result)
 getProtocol self
-  = liftIO
-      (fromMaybeJSString <$> (js_getProtocol (unHTMLAnchorElement self)))
+  = liftIO (fromMaybeJSString <$> (js_getProtocol (self)))
  
 foreign import javascript unsafe "$1[\"search\"] = $2;"
-        js_setSearch ::
-        JSRef HTMLAnchorElement -> JSRef (Maybe JSString) -> IO ()
+        js_setSearch :: HTMLAnchorElement -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement.search Mozilla HTMLAnchorElement.search documentation> 
 setSearch ::
           (MonadIO m, ToJSString val) =>
             HTMLAnchorElement -> Maybe val -> m ()
 setSearch self val
-  = liftIO
-      (js_setSearch (unHTMLAnchorElement self) (toMaybeJSString val))
+  = liftIO (js_setSearch (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"search\"]" js_getSearch ::
-        JSRef HTMLAnchorElement -> IO (JSRef (Maybe JSString))
+        HTMLAnchorElement -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement.search Mozilla HTMLAnchorElement.search documentation> 
 getSearch ::
           (MonadIO m, FromJSString result) =>
             HTMLAnchorElement -> m (Maybe result)
 getSearch self
-  = liftIO
-      (fromMaybeJSString <$> (js_getSearch (unHTMLAnchorElement self)))
+  = liftIO (fromMaybeJSString <$> (js_getSearch (self)))
  
 foreign import javascript unsafe "$1[\"origin\"]" js_getOrigin ::
-        JSRef HTMLAnchorElement -> IO (JSRef (Maybe JSString))
+        HTMLAnchorElement -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement.origin Mozilla HTMLAnchorElement.origin documentation> 
 getOrigin ::
           (MonadIO m, FromJSString result) =>
             HTMLAnchorElement -> m (Maybe result)
 getOrigin self
-  = liftIO
-      (fromMaybeJSString <$> (js_getOrigin (unHTMLAnchorElement self)))
+  = liftIO (fromMaybeJSString <$> (js_getOrigin (self)))
  
 foreign import javascript unsafe "$1[\"text\"] = $2;" js_setText ::
-        JSRef HTMLAnchorElement -> JSString -> IO ()
+        HTMLAnchorElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement.text Mozilla HTMLAnchorElement.text documentation> 
 setText ::
         (MonadIO m, ToJSString val) => HTMLAnchorElement -> val -> m ()
-setText self val
-  = liftIO (js_setText (unHTMLAnchorElement self) (toJSString val))
+setText self val = liftIO (js_setText (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"text\"]" js_getText ::
-        JSRef HTMLAnchorElement -> IO JSString
+        HTMLAnchorElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement.text Mozilla HTMLAnchorElement.text documentation> 
 getText ::
         (MonadIO m, FromJSString result) => HTMLAnchorElement -> m result
-getText self
-  = liftIO (fromJSString <$> (js_getText (unHTMLAnchorElement self)))
+getText self = liftIO (fromJSString <$> (js_getText (self)))
  
 foreign import javascript unsafe "$1[\"relList\"]" js_getRelList ::
-        JSRef HTMLAnchorElement -> IO (JSRef DOMTokenList)
+        HTMLAnchorElement -> IO (Nullable DOMTokenList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement.relList Mozilla HTMLAnchorElement.relList documentation> 
 getRelList ::
            (MonadIO m) => HTMLAnchorElement -> m (Maybe DOMTokenList)
 getRelList self
-  = liftIO ((js_getRelList (unHTMLAnchorElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getRelList (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLAppletElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLAppletElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLAppletElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLAppletElement.hs
@@ -13,7 +13,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -27,209 +27,180 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"align\"] = $2;" js_setAlign
-        :: JSRef HTMLAppletElement -> JSString -> IO ()
+        :: HTMLAppletElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAppletElement.align Mozilla HTMLAppletElement.align documentation> 
 setAlign ::
          (MonadIO m, ToJSString val) => HTMLAppletElement -> val -> m ()
-setAlign self val
-  = liftIO (js_setAlign (unHTMLAppletElement self) (toJSString val))
+setAlign self val = liftIO (js_setAlign (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"align\"]" js_getAlign ::
-        JSRef HTMLAppletElement -> IO JSString
+        HTMLAppletElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAppletElement.align Mozilla HTMLAppletElement.align documentation> 
 getAlign ::
          (MonadIO m, FromJSString result) => HTMLAppletElement -> m result
-getAlign self
-  = liftIO
-      (fromJSString <$> (js_getAlign (unHTMLAppletElement self)))
+getAlign self = liftIO (fromJSString <$> (js_getAlign (self)))
  
 foreign import javascript unsafe "$1[\"alt\"] = $2;" js_setAlt ::
-        JSRef HTMLAppletElement -> JSString -> IO ()
+        HTMLAppletElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAppletElement.alt Mozilla HTMLAppletElement.alt documentation> 
 setAlt ::
        (MonadIO m, ToJSString val) => HTMLAppletElement -> val -> m ()
-setAlt self val
-  = liftIO (js_setAlt (unHTMLAppletElement self) (toJSString val))
+setAlt self val = liftIO (js_setAlt (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"alt\"]" js_getAlt ::
-        JSRef HTMLAppletElement -> IO JSString
+        HTMLAppletElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAppletElement.alt Mozilla HTMLAppletElement.alt documentation> 
 getAlt ::
        (MonadIO m, FromJSString result) => HTMLAppletElement -> m result
-getAlt self
-  = liftIO (fromJSString <$> (js_getAlt (unHTMLAppletElement self)))
+getAlt self = liftIO (fromJSString <$> (js_getAlt (self)))
  
 foreign import javascript unsafe "$1[\"archive\"] = $2;"
-        js_setArchive :: JSRef HTMLAppletElement -> JSString -> IO ()
+        js_setArchive :: HTMLAppletElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAppletElement.archive Mozilla HTMLAppletElement.archive documentation> 
 setArchive ::
            (MonadIO m, ToJSString val) => HTMLAppletElement -> val -> m ()
 setArchive self val
-  = liftIO
-      (js_setArchive (unHTMLAppletElement self) (toJSString val))
+  = liftIO (js_setArchive (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"archive\"]" js_getArchive ::
-        JSRef HTMLAppletElement -> IO JSString
+        HTMLAppletElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAppletElement.archive Mozilla HTMLAppletElement.archive documentation> 
 getArchive ::
            (MonadIO m, FromJSString result) => HTMLAppletElement -> m result
-getArchive self
-  = liftIO
-      (fromJSString <$> (js_getArchive (unHTMLAppletElement self)))
+getArchive self = liftIO (fromJSString <$> (js_getArchive (self)))
  
 foreign import javascript unsafe "$1[\"code\"] = $2;" js_setCode ::
-        JSRef HTMLAppletElement -> JSString -> IO ()
+        HTMLAppletElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAppletElement.code Mozilla HTMLAppletElement.code documentation> 
 setCode ::
         (MonadIO m, ToJSString val) => HTMLAppletElement -> val -> m ()
-setCode self val
-  = liftIO (js_setCode (unHTMLAppletElement self) (toJSString val))
+setCode self val = liftIO (js_setCode (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"code\"]" js_getCode ::
-        JSRef HTMLAppletElement -> IO JSString
+        HTMLAppletElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAppletElement.code Mozilla HTMLAppletElement.code documentation> 
 getCode ::
         (MonadIO m, FromJSString result) => HTMLAppletElement -> m result
-getCode self
-  = liftIO (fromJSString <$> (js_getCode (unHTMLAppletElement self)))
+getCode self = liftIO (fromJSString <$> (js_getCode (self)))
  
 foreign import javascript unsafe "$1[\"codeBase\"] = $2;"
-        js_setCodeBase :: JSRef HTMLAppletElement -> JSString -> IO ()
+        js_setCodeBase :: HTMLAppletElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAppletElement.codeBase Mozilla HTMLAppletElement.codeBase documentation> 
 setCodeBase ::
             (MonadIO m, ToJSString val) => HTMLAppletElement -> val -> m ()
 setCodeBase self val
-  = liftIO
-      (js_setCodeBase (unHTMLAppletElement self) (toJSString val))
+  = liftIO (js_setCodeBase (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"codeBase\"]" js_getCodeBase
-        :: JSRef HTMLAppletElement -> IO JSString
+        :: HTMLAppletElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAppletElement.codeBase Mozilla HTMLAppletElement.codeBase documentation> 
 getCodeBase ::
             (MonadIO m, FromJSString result) => HTMLAppletElement -> m result
 getCodeBase self
-  = liftIO
-      (fromJSString <$> (js_getCodeBase (unHTMLAppletElement self)))
+  = liftIO (fromJSString <$> (js_getCodeBase (self)))
  
 foreign import javascript unsafe "$1[\"height\"] = $2;"
-        js_setHeight :: JSRef HTMLAppletElement -> JSString -> IO ()
+        js_setHeight :: HTMLAppletElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAppletElement.height Mozilla HTMLAppletElement.height documentation> 
 setHeight ::
           (MonadIO m, ToJSString val) => HTMLAppletElement -> val -> m ()
-setHeight self val
-  = liftIO (js_setHeight (unHTMLAppletElement self) (toJSString val))
+setHeight self val = liftIO (js_setHeight (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"height\"]" js_getHeight ::
-        JSRef HTMLAppletElement -> IO JSString
+        HTMLAppletElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAppletElement.height Mozilla HTMLAppletElement.height documentation> 
 getHeight ::
           (MonadIO m, FromJSString result) => HTMLAppletElement -> m result
-getHeight self
-  = liftIO
-      (fromJSString <$> (js_getHeight (unHTMLAppletElement self)))
+getHeight self = liftIO (fromJSString <$> (js_getHeight (self)))
  
 foreign import javascript unsafe "$1[\"hspace\"] = $2;"
-        js_setHspace :: JSRef HTMLAppletElement -> JSString -> IO ()
+        js_setHspace :: HTMLAppletElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAppletElement.hspace Mozilla HTMLAppletElement.hspace documentation> 
 setHspace ::
           (MonadIO m, ToJSString val) => HTMLAppletElement -> val -> m ()
-setHspace self val
-  = liftIO (js_setHspace (unHTMLAppletElement self) (toJSString val))
+setHspace self val = liftIO (js_setHspace (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"hspace\"]" js_getHspace ::
-        JSRef HTMLAppletElement -> IO JSString
+        HTMLAppletElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAppletElement.hspace Mozilla HTMLAppletElement.hspace documentation> 
 getHspace ::
           (MonadIO m, FromJSString result) => HTMLAppletElement -> m result
-getHspace self
-  = liftIO
-      (fromJSString <$> (js_getHspace (unHTMLAppletElement self)))
+getHspace self = liftIO (fromJSString <$> (js_getHspace (self)))
  
 foreign import javascript unsafe "$1[\"name\"] = $2;" js_setName ::
-        JSRef HTMLAppletElement -> JSString -> IO ()
+        HTMLAppletElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAppletElement.name Mozilla HTMLAppletElement.name documentation> 
 setName ::
         (MonadIO m, ToJSString val) => HTMLAppletElement -> val -> m ()
-setName self val
-  = liftIO (js_setName (unHTMLAppletElement self) (toJSString val))
+setName self val = liftIO (js_setName (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"name\"]" js_getName ::
-        JSRef HTMLAppletElement -> IO JSString
+        HTMLAppletElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAppletElement.name Mozilla HTMLAppletElement.name documentation> 
 getName ::
         (MonadIO m, FromJSString result) => HTMLAppletElement -> m result
-getName self
-  = liftIO (fromJSString <$> (js_getName (unHTMLAppletElement self)))
+getName self = liftIO (fromJSString <$> (js_getName (self)))
  
 foreign import javascript unsafe "$1[\"object\"] = $2;"
-        js_setObject :: JSRef HTMLAppletElement -> JSString -> IO ()
+        js_setObject :: HTMLAppletElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAppletElement.object Mozilla HTMLAppletElement.object documentation> 
 setObject ::
           (MonadIO m, ToJSString val) => HTMLAppletElement -> val -> m ()
-setObject self val
-  = liftIO (js_setObject (unHTMLAppletElement self) (toJSString val))
+setObject self val = liftIO (js_setObject (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"object\"]" js_getObject ::
-        JSRef HTMLAppletElement -> IO JSString
+        HTMLAppletElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAppletElement.object Mozilla HTMLAppletElement.object documentation> 
 getObject ::
           (MonadIO m, FromJSString result) => HTMLAppletElement -> m result
-getObject self
-  = liftIO
-      (fromJSString <$> (js_getObject (unHTMLAppletElement self)))
+getObject self = liftIO (fromJSString <$> (js_getObject (self)))
  
 foreign import javascript unsafe "$1[\"vspace\"] = $2;"
-        js_setVspace :: JSRef HTMLAppletElement -> JSString -> IO ()
+        js_setVspace :: HTMLAppletElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAppletElement.vspace Mozilla HTMLAppletElement.vspace documentation> 
 setVspace ::
           (MonadIO m, ToJSString val) => HTMLAppletElement -> val -> m ()
-setVspace self val
-  = liftIO (js_setVspace (unHTMLAppletElement self) (toJSString val))
+setVspace self val = liftIO (js_setVspace (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"vspace\"]" js_getVspace ::
-        JSRef HTMLAppletElement -> IO JSString
+        HTMLAppletElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAppletElement.vspace Mozilla HTMLAppletElement.vspace documentation> 
 getVspace ::
           (MonadIO m, FromJSString result) => HTMLAppletElement -> m result
-getVspace self
-  = liftIO
-      (fromJSString <$> (js_getVspace (unHTMLAppletElement self)))
+getVspace self = liftIO (fromJSString <$> (js_getVspace (self)))
  
 foreign import javascript unsafe "$1[\"width\"] = $2;" js_setWidth
-        :: JSRef HTMLAppletElement -> JSString -> IO ()
+        :: HTMLAppletElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAppletElement.width Mozilla HTMLAppletElement.width documentation> 
 setWidth ::
          (MonadIO m, ToJSString val) => HTMLAppletElement -> val -> m ()
-setWidth self val
-  = liftIO (js_setWidth (unHTMLAppletElement self) (toJSString val))
+setWidth self val = liftIO (js_setWidth (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"width\"]" js_getWidth ::
-        JSRef HTMLAppletElement -> IO JSString
+        HTMLAppletElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAppletElement.width Mozilla HTMLAppletElement.width documentation> 
 getWidth ::
          (MonadIO m, FromJSString result) => HTMLAppletElement -> m result
-getWidth self
-  = liftIO
-      (fromJSString <$> (js_getWidth (unHTMLAppletElement self)))
+getWidth self = liftIO (fromJSString <$> (js_getWidth (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLAreaElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLAreaElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLAreaElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLAreaElement.hs
@@ -13,7 +13,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -27,217 +27,195 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"alt\"] = $2;" js_setAlt ::
-        JSRef HTMLAreaElement -> JSString -> IO ()
+        HTMLAreaElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAreaElement.alt Mozilla HTMLAreaElement.alt documentation> 
 setAlt ::
        (MonadIO m, ToJSString val) => HTMLAreaElement -> val -> m ()
-setAlt self val
-  = liftIO (js_setAlt (unHTMLAreaElement self) (toJSString val))
+setAlt self val = liftIO (js_setAlt (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"alt\"]" js_getAlt ::
-        JSRef HTMLAreaElement -> IO JSString
+        HTMLAreaElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAreaElement.alt Mozilla HTMLAreaElement.alt documentation> 
 getAlt ::
        (MonadIO m, FromJSString result) => HTMLAreaElement -> m result
-getAlt self
-  = liftIO (fromJSString <$> (js_getAlt (unHTMLAreaElement self)))
+getAlt self = liftIO (fromJSString <$> (js_getAlt (self)))
  
 foreign import javascript unsafe "$1[\"coords\"] = $2;"
-        js_setCoords :: JSRef HTMLAreaElement -> JSString -> IO ()
+        js_setCoords :: HTMLAreaElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAreaElement.coords Mozilla HTMLAreaElement.coords documentation> 
 setCoords ::
           (MonadIO m, ToJSString val) => HTMLAreaElement -> val -> m ()
-setCoords self val
-  = liftIO (js_setCoords (unHTMLAreaElement self) (toJSString val))
+setCoords self val = liftIO (js_setCoords (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"coords\"]" js_getCoords ::
-        JSRef HTMLAreaElement -> IO JSString
+        HTMLAreaElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAreaElement.coords Mozilla HTMLAreaElement.coords documentation> 
 getCoords ::
           (MonadIO m, FromJSString result) => HTMLAreaElement -> m result
-getCoords self
-  = liftIO (fromJSString <$> (js_getCoords (unHTMLAreaElement self)))
+getCoords self = liftIO (fromJSString <$> (js_getCoords (self)))
  
 foreign import javascript unsafe "$1[\"href\"] = $2;" js_setHref ::
-        JSRef HTMLAreaElement -> JSString -> IO ()
+        HTMLAreaElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAreaElement.href Mozilla HTMLAreaElement.href documentation> 
 setHref ::
         (MonadIO m, ToJSString val) => HTMLAreaElement -> val -> m ()
-setHref self val
-  = liftIO (js_setHref (unHTMLAreaElement self) (toJSString val))
+setHref self val = liftIO (js_setHref (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"href\"]" js_getHref ::
-        JSRef HTMLAreaElement -> IO JSString
+        HTMLAreaElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAreaElement.href Mozilla HTMLAreaElement.href documentation> 
 getHref ::
         (MonadIO m, FromJSString result) => HTMLAreaElement -> m result
-getHref self
-  = liftIO (fromJSString <$> (js_getHref (unHTMLAreaElement self)))
+getHref self = liftIO (fromJSString <$> (js_getHref (self)))
  
 foreign import javascript unsafe "$1[\"noHref\"] = $2;"
-        js_setNoHref :: JSRef HTMLAreaElement -> Bool -> IO ()
+        js_setNoHref :: HTMLAreaElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAreaElement.noHref Mozilla HTMLAreaElement.noHref documentation> 
 setNoHref :: (MonadIO m) => HTMLAreaElement -> Bool -> m ()
-setNoHref self val
-  = liftIO (js_setNoHref (unHTMLAreaElement self) val)
+setNoHref self val = liftIO (js_setNoHref (self) val)
  
 foreign import javascript unsafe "($1[\"noHref\"] ? 1 : 0)"
-        js_getNoHref :: JSRef HTMLAreaElement -> IO Bool
+        js_getNoHref :: HTMLAreaElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAreaElement.noHref Mozilla HTMLAreaElement.noHref documentation> 
 getNoHref :: (MonadIO m) => HTMLAreaElement -> m Bool
-getNoHref self = liftIO (js_getNoHref (unHTMLAreaElement self))
+getNoHref self = liftIO (js_getNoHref (self))
  
 foreign import javascript unsafe "$1[\"ping\"] = $2;" js_setPing ::
-        JSRef HTMLAreaElement -> JSString -> IO ()
+        HTMLAreaElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAreaElement.ping Mozilla HTMLAreaElement.ping documentation> 
 setPing ::
         (MonadIO m, ToJSString val) => HTMLAreaElement -> val -> m ()
-setPing self val
-  = liftIO (js_setPing (unHTMLAreaElement self) (toJSString val))
+setPing self val = liftIO (js_setPing (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"ping\"]" js_getPing ::
-        JSRef HTMLAreaElement -> IO JSString
+        HTMLAreaElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAreaElement.ping Mozilla HTMLAreaElement.ping documentation> 
 getPing ::
         (MonadIO m, FromJSString result) => HTMLAreaElement -> m result
-getPing self
-  = liftIO (fromJSString <$> (js_getPing (unHTMLAreaElement self)))
+getPing self = liftIO (fromJSString <$> (js_getPing (self)))
  
 foreign import javascript unsafe "$1[\"rel\"] = $2;" js_setRel ::
-        JSRef HTMLAreaElement -> JSString -> IO ()
+        HTMLAreaElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAreaElement.rel Mozilla HTMLAreaElement.rel documentation> 
 setRel ::
        (MonadIO m, ToJSString val) => HTMLAreaElement -> val -> m ()
-setRel self val
-  = liftIO (js_setRel (unHTMLAreaElement self) (toJSString val))
+setRel self val = liftIO (js_setRel (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"rel\"]" js_getRel ::
-        JSRef HTMLAreaElement -> IO JSString
+        HTMLAreaElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAreaElement.rel Mozilla HTMLAreaElement.rel documentation> 
 getRel ::
        (MonadIO m, FromJSString result) => HTMLAreaElement -> m result
-getRel self
-  = liftIO (fromJSString <$> (js_getRel (unHTMLAreaElement self)))
+getRel self = liftIO (fromJSString <$> (js_getRel (self)))
  
 foreign import javascript unsafe "$1[\"shape\"] = $2;" js_setShape
-        :: JSRef HTMLAreaElement -> JSString -> IO ()
+        :: HTMLAreaElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAreaElement.shape Mozilla HTMLAreaElement.shape documentation> 
 setShape ::
          (MonadIO m, ToJSString val) => HTMLAreaElement -> val -> m ()
-setShape self val
-  = liftIO (js_setShape (unHTMLAreaElement self) (toJSString val))
+setShape self val = liftIO (js_setShape (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"shape\"]" js_getShape ::
-        JSRef HTMLAreaElement -> IO JSString
+        HTMLAreaElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAreaElement.shape Mozilla HTMLAreaElement.shape documentation> 
 getShape ::
          (MonadIO m, FromJSString result) => HTMLAreaElement -> m result
-getShape self
-  = liftIO (fromJSString <$> (js_getShape (unHTMLAreaElement self)))
+getShape self = liftIO (fromJSString <$> (js_getShape (self)))
  
 foreign import javascript unsafe "$1[\"target\"] = $2;"
-        js_setTarget :: JSRef HTMLAreaElement -> JSString -> IO ()
+        js_setTarget :: HTMLAreaElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAreaElement.target Mozilla HTMLAreaElement.target documentation> 
 setTarget ::
           (MonadIO m, ToJSString val) => HTMLAreaElement -> val -> m ()
-setTarget self val
-  = liftIO (js_setTarget (unHTMLAreaElement self) (toJSString val))
+setTarget self val = liftIO (js_setTarget (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"target\"]" js_getTarget ::
-        JSRef HTMLAreaElement -> IO JSString
+        HTMLAreaElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAreaElement.target Mozilla HTMLAreaElement.target documentation> 
 getTarget ::
           (MonadIO m, FromJSString result) => HTMLAreaElement -> m result
-getTarget self
-  = liftIO (fromJSString <$> (js_getTarget (unHTMLAreaElement self)))
+getTarget self = liftIO (fromJSString <$> (js_getTarget (self)))
  
 foreign import javascript unsafe "$1[\"hash\"]" js_getHash ::
-        JSRef HTMLAreaElement -> IO JSString
+        HTMLAreaElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAreaElement.hash Mozilla HTMLAreaElement.hash documentation> 
 getHash ::
         (MonadIO m, FromJSString result) => HTMLAreaElement -> m result
-getHash self
-  = liftIO (fromJSString <$> (js_getHash (unHTMLAreaElement self)))
+getHash self = liftIO (fromJSString <$> (js_getHash (self)))
  
 foreign import javascript unsafe "$1[\"host\"]" js_getHost ::
-        JSRef HTMLAreaElement -> IO JSString
+        HTMLAreaElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAreaElement.host Mozilla HTMLAreaElement.host documentation> 
 getHost ::
         (MonadIO m, FromJSString result) => HTMLAreaElement -> m result
-getHost self
-  = liftIO (fromJSString <$> (js_getHost (unHTMLAreaElement self)))
+getHost self = liftIO (fromJSString <$> (js_getHost (self)))
  
 foreign import javascript unsafe "$1[\"hostname\"]" js_getHostname
-        :: JSRef HTMLAreaElement -> IO JSString
+        :: HTMLAreaElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAreaElement.hostname Mozilla HTMLAreaElement.hostname documentation> 
 getHostname ::
             (MonadIO m, FromJSString result) => HTMLAreaElement -> m result
 getHostname self
-  = liftIO
-      (fromJSString <$> (js_getHostname (unHTMLAreaElement self)))
+  = liftIO (fromJSString <$> (js_getHostname (self)))
  
 foreign import javascript unsafe "$1[\"pathname\"]" js_getPathname
-        :: JSRef HTMLAreaElement -> IO JSString
+        :: HTMLAreaElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAreaElement.pathname Mozilla HTMLAreaElement.pathname documentation> 
 getPathname ::
             (MonadIO m, FromJSString result) => HTMLAreaElement -> m result
 getPathname self
-  = liftIO
-      (fromJSString <$> (js_getPathname (unHTMLAreaElement self)))
+  = liftIO (fromJSString <$> (js_getPathname (self)))
  
 foreign import javascript unsafe "$1[\"port\"]" js_getPort ::
-        JSRef HTMLAreaElement -> IO JSString
+        HTMLAreaElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAreaElement.port Mozilla HTMLAreaElement.port documentation> 
 getPort ::
         (MonadIO m, FromJSString result) => HTMLAreaElement -> m result
-getPort self
-  = liftIO (fromJSString <$> (js_getPort (unHTMLAreaElement self)))
+getPort self = liftIO (fromJSString <$> (js_getPort (self)))
  
 foreign import javascript unsafe "$1[\"protocol\"]" js_getProtocol
-        :: JSRef HTMLAreaElement -> IO JSString
+        :: HTMLAreaElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAreaElement.protocol Mozilla HTMLAreaElement.protocol documentation> 
 getProtocol ::
             (MonadIO m, FromJSString result) => HTMLAreaElement -> m result
 getProtocol self
-  = liftIO
-      (fromJSString <$> (js_getProtocol (unHTMLAreaElement self)))
+  = liftIO (fromJSString <$> (js_getProtocol (self)))
  
 foreign import javascript unsafe "$1[\"search\"]" js_getSearch ::
-        JSRef HTMLAreaElement -> IO JSString
+        HTMLAreaElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAreaElement.search Mozilla HTMLAreaElement.search documentation> 
 getSearch ::
           (MonadIO m, FromJSString result) => HTMLAreaElement -> m result
-getSearch self
-  = liftIO (fromJSString <$> (js_getSearch (unHTMLAreaElement self)))
+getSearch self = liftIO (fromJSString <$> (js_getSearch (self)))
  
 foreign import javascript unsafe "$1[\"relList\"]" js_getRelList ::
-        JSRef HTMLAreaElement -> IO (JSRef DOMTokenList)
+        HTMLAreaElement -> IO (Nullable DOMTokenList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAreaElement.relList Mozilla HTMLAreaElement.relList documentation> 
 getRelList ::
            (MonadIO m) => HTMLAreaElement -> m (Maybe DOMTokenList)
 getRelList self
-  = liftIO ((js_getRelList (unHTMLAreaElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getRelList (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLBRElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLBRElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLBRElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLBRElement.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,19 +19,17 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"clear\"] = $2;" js_setClear
-        :: JSRef HTMLBRElement -> JSString -> IO ()
+        :: HTMLBRElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLBRElement.clear Mozilla HTMLBRElement.clear documentation> 
 setClear ::
          (MonadIO m, ToJSString val) => HTMLBRElement -> val -> m ()
-setClear self val
-  = liftIO (js_setClear (unHTMLBRElement self) (toJSString val))
+setClear self val = liftIO (js_setClear (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"clear\"]" js_getClear ::
-        JSRef HTMLBRElement -> IO JSString
+        HTMLBRElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLBRElement.clear Mozilla HTMLBRElement.clear documentation> 
 getClear ::
          (MonadIO m, FromJSString result) => HTMLBRElement -> m result
-getClear self
-  = liftIO (fromJSString <$> (js_getClear (unHTMLBRElement self)))
+getClear self = liftIO (fromJSString <$> (js_getClear (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLBaseElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLBaseElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLBaseElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLBaseElement.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,40 +20,34 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"href\"] = $2;" js_setHref ::
-        JSRef HTMLBaseElement -> JSRef (Maybe JSString) -> IO ()
+        HTMLBaseElement -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLBaseElement.href Mozilla HTMLBaseElement.href documentation> 
 setHref ::
         (MonadIO m, ToJSString val) => HTMLBaseElement -> Maybe val -> m ()
-setHref self val
-  = liftIO
-      (js_setHref (unHTMLBaseElement self) (toMaybeJSString val))
+setHref self val = liftIO (js_setHref (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"href\"]" js_getHref ::
-        JSRef HTMLBaseElement -> IO (JSRef (Maybe JSString))
+        HTMLBaseElement -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLBaseElement.href Mozilla HTMLBaseElement.href documentation> 
 getHref ::
         (MonadIO m, FromJSString result) =>
           HTMLBaseElement -> m (Maybe result)
-getHref self
-  = liftIO
-      (fromMaybeJSString <$> (js_getHref (unHTMLBaseElement self)))
+getHref self = liftIO (fromMaybeJSString <$> (js_getHref (self)))
  
 foreign import javascript unsafe "$1[\"target\"] = $2;"
-        js_setTarget :: JSRef HTMLBaseElement -> JSString -> IO ()
+        js_setTarget :: HTMLBaseElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLBaseElement.target Mozilla HTMLBaseElement.target documentation> 
 setTarget ::
           (MonadIO m, ToJSString val) => HTMLBaseElement -> val -> m ()
-setTarget self val
-  = liftIO (js_setTarget (unHTMLBaseElement self) (toJSString val))
+setTarget self val = liftIO (js_setTarget (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"target\"]" js_getTarget ::
-        JSRef HTMLBaseElement -> IO JSString
+        HTMLBaseElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLBaseElement.target Mozilla HTMLBaseElement.target documentation> 
 getTarget ::
           (MonadIO m, FromJSString result) => HTMLBaseElement -> m result
-getTarget self
-  = liftIO (fromJSString <$> (js_getTarget (unHTMLBaseElement self)))
+getTarget self = liftIO (fromJSString <$> (js_getTarget (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLBaseFontElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLBaseFontElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLBaseFontElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLBaseFontElement.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -21,55 +21,47 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"color\"] = $2;" js_setColor
-        :: JSRef HTMLBaseFontElement -> JSString -> IO ()
+        :: HTMLBaseFontElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLBaseFontElement.color Mozilla HTMLBaseFontElement.color documentation> 
 setColor ::
          (MonadIO m, ToJSString val) => HTMLBaseFontElement -> val -> m ()
-setColor self val
-  = liftIO
-      (js_setColor (unHTMLBaseFontElement self) (toJSString val))
+setColor self val = liftIO (js_setColor (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"color\"]" js_getColor ::
-        JSRef HTMLBaseFontElement -> IO JSString
+        HTMLBaseFontElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLBaseFontElement.color Mozilla HTMLBaseFontElement.color documentation> 
 getColor ::
          (MonadIO m, FromJSString result) => HTMLBaseFontElement -> m result
-getColor self
-  = liftIO
-      (fromJSString <$> (js_getColor (unHTMLBaseFontElement self)))
+getColor self = liftIO (fromJSString <$> (js_getColor (self)))
  
 foreign import javascript unsafe "$1[\"face\"] = $2;" js_setFace ::
-        JSRef HTMLBaseFontElement -> JSString -> IO ()
+        HTMLBaseFontElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLBaseFontElement.face Mozilla HTMLBaseFontElement.face documentation> 
 setFace ::
         (MonadIO m, ToJSString val) => HTMLBaseFontElement -> val -> m ()
-setFace self val
-  = liftIO (js_setFace (unHTMLBaseFontElement self) (toJSString val))
+setFace self val = liftIO (js_setFace (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"face\"]" js_getFace ::
-        JSRef HTMLBaseFontElement -> IO JSString
+        HTMLBaseFontElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLBaseFontElement.face Mozilla HTMLBaseFontElement.face documentation> 
 getFace ::
         (MonadIO m, FromJSString result) => HTMLBaseFontElement -> m result
-getFace self
-  = liftIO
-      (fromJSString <$> (js_getFace (unHTMLBaseFontElement self)))
+getFace self = liftIO (fromJSString <$> (js_getFace (self)))
  
 foreign import javascript unsafe "$1[\"size\"] = $2;" js_setSize ::
-        JSRef HTMLBaseFontElement -> Int -> IO ()
+        HTMLBaseFontElement -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLBaseFontElement.size Mozilla HTMLBaseFontElement.size documentation> 
 setSize :: (MonadIO m) => HTMLBaseFontElement -> Int -> m ()
-setSize self val
-  = liftIO (js_setSize (unHTMLBaseFontElement self) val)
+setSize self val = liftIO (js_setSize (self) val)
  
 foreign import javascript unsafe "$1[\"size\"]" js_getSize ::
-        JSRef HTMLBaseFontElement -> IO Int
+        HTMLBaseFontElement -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLBaseFontElement.size Mozilla HTMLBaseFontElement.size documentation> 
 getSize :: (MonadIO m) => HTMLBaseFontElement -> m Int
-getSize self = liftIO (js_getSize (unHTMLBaseFontElement self))
+getSize self = liftIO (js_getSize (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLBodyElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLBodyElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLBodyElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLBodyElement.hs
@@ -11,7 +11,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -25,115 +25,103 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"aLink\"] = $2;" js_setALink
-        :: JSRef HTMLBodyElement -> JSString -> IO ()
+        :: HTMLBodyElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLBodyElement.aLink Mozilla HTMLBodyElement.aLink documentation> 
 setALink ::
          (MonadIO m, ToJSString val) => HTMLBodyElement -> val -> m ()
-setALink self val
-  = liftIO (js_setALink (unHTMLBodyElement self) (toJSString val))
+setALink self val = liftIO (js_setALink (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"aLink\"]" js_getALink ::
-        JSRef HTMLBodyElement -> IO JSString
+        HTMLBodyElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLBodyElement.aLink Mozilla HTMLBodyElement.aLink documentation> 
 getALink ::
          (MonadIO m, FromJSString result) => HTMLBodyElement -> m result
-getALink self
-  = liftIO (fromJSString <$> (js_getALink (unHTMLBodyElement self)))
+getALink self = liftIO (fromJSString <$> (js_getALink (self)))
  
 foreign import javascript unsafe "$1[\"background\"] = $2;"
-        js_setBackground :: JSRef HTMLBodyElement -> JSString -> IO ()
+        js_setBackground :: HTMLBodyElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLBodyElement.background Mozilla HTMLBodyElement.background documentation> 
 setBackground ::
               (MonadIO m, ToJSString val) => HTMLBodyElement -> val -> m ()
 setBackground self val
-  = liftIO
-      (js_setBackground (unHTMLBodyElement self) (toJSString val))
+  = liftIO (js_setBackground (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"background\"]"
-        js_getBackground :: JSRef HTMLBodyElement -> IO JSString
+        js_getBackground :: HTMLBodyElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLBodyElement.background Mozilla HTMLBodyElement.background documentation> 
 getBackground ::
               (MonadIO m, FromJSString result) => HTMLBodyElement -> m result
 getBackground self
-  = liftIO
-      (fromJSString <$> (js_getBackground (unHTMLBodyElement self)))
+  = liftIO (fromJSString <$> (js_getBackground (self)))
  
 foreign import javascript unsafe "$1[\"bgColor\"] = $2;"
-        js_setBgColor :: JSRef HTMLBodyElement -> JSString -> IO ()
+        js_setBgColor :: HTMLBodyElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLBodyElement.bgColor Mozilla HTMLBodyElement.bgColor documentation> 
 setBgColor ::
            (MonadIO m, ToJSString val) => HTMLBodyElement -> val -> m ()
 setBgColor self val
-  = liftIO (js_setBgColor (unHTMLBodyElement self) (toJSString val))
+  = liftIO (js_setBgColor (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"bgColor\"]" js_getBgColor ::
-        JSRef HTMLBodyElement -> IO JSString
+        HTMLBodyElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLBodyElement.bgColor Mozilla HTMLBodyElement.bgColor documentation> 
 getBgColor ::
            (MonadIO m, FromJSString result) => HTMLBodyElement -> m result
-getBgColor self
-  = liftIO
-      (fromJSString <$> (js_getBgColor (unHTMLBodyElement self)))
+getBgColor self = liftIO (fromJSString <$> (js_getBgColor (self)))
  
 foreign import javascript unsafe "$1[\"link\"] = $2;" js_setLink ::
-        JSRef HTMLBodyElement -> JSString -> IO ()
+        HTMLBodyElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLBodyElement.link Mozilla HTMLBodyElement.link documentation> 
 setLink ::
         (MonadIO m, ToJSString val) => HTMLBodyElement -> val -> m ()
-setLink self val
-  = liftIO (js_setLink (unHTMLBodyElement self) (toJSString val))
+setLink self val = liftIO (js_setLink (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"link\"]" js_getLink ::
-        JSRef HTMLBodyElement -> IO JSString
+        HTMLBodyElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLBodyElement.link Mozilla HTMLBodyElement.link documentation> 
 getLink ::
         (MonadIO m, FromJSString result) => HTMLBodyElement -> m result
-getLink self
-  = liftIO (fromJSString <$> (js_getLink (unHTMLBodyElement self)))
+getLink self = liftIO (fromJSString <$> (js_getLink (self)))
  
 foreign import javascript unsafe "$1[\"text\"] = $2;" js_setText ::
-        JSRef HTMLBodyElement -> JSString -> IO ()
+        HTMLBodyElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLBodyElement.text Mozilla HTMLBodyElement.text documentation> 
 setText ::
         (MonadIO m, ToJSString val) => HTMLBodyElement -> val -> m ()
-setText self val
-  = liftIO (js_setText (unHTMLBodyElement self) (toJSString val))
+setText self val = liftIO (js_setText (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"text\"]" js_getText ::
-        JSRef HTMLBodyElement -> IO JSString
+        HTMLBodyElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLBodyElement.text Mozilla HTMLBodyElement.text documentation> 
 getText ::
         (MonadIO m, FromJSString result) => HTMLBodyElement -> m result
-getText self
-  = liftIO (fromJSString <$> (js_getText (unHTMLBodyElement self)))
+getText self = liftIO (fromJSString <$> (js_getText (self)))
  
 foreign import javascript unsafe "$1[\"vLink\"] = $2;" js_setVLink
-        :: JSRef HTMLBodyElement -> JSString -> IO ()
+        :: HTMLBodyElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLBodyElement.vLink Mozilla HTMLBodyElement.vLink documentation> 
 setVLink ::
          (MonadIO m, ToJSString val) => HTMLBodyElement -> val -> m ()
-setVLink self val
-  = liftIO (js_setVLink (unHTMLBodyElement self) (toJSString val))
+setVLink self val = liftIO (js_setVLink (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"vLink\"]" js_getVLink ::
-        JSRef HTMLBodyElement -> IO JSString
+        HTMLBodyElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLBodyElement.vLink Mozilla HTMLBodyElement.vLink documentation> 
 getVLink ::
          (MonadIO m, FromJSString result) => HTMLBodyElement -> m result
-getVLink self
-  = liftIO (fromJSString <$> (js_getVLink (unHTMLBodyElement self)))
+getVLink self = liftIO (fromJSString <$> (js_getVLink (self)))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLBodyElement.onbeforeunload Mozilla HTMLBodyElement.onbeforeunload documentation> 
 beforeUnload :: EventName HTMLBodyElement BeforeUnloadEvent
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLButtonElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLButtonElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLButtonElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLButtonElement.hs
@@ -18,7 +18,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -33,267 +33,230 @@
  
 foreign import javascript unsafe
         "($1[\"checkValidity\"]() ? 1 : 0)" js_checkValidity ::
-        JSRef HTMLButtonElement -> IO Bool
+        HTMLButtonElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLButtonElement.checkValidity Mozilla HTMLButtonElement.checkValidity documentation> 
 checkValidity :: (MonadIO m) => HTMLButtonElement -> m Bool
-checkValidity self
-  = liftIO (js_checkValidity (unHTMLButtonElement self))
+checkValidity self = liftIO (js_checkValidity (self))
  
 foreign import javascript unsafe "$1[\"setCustomValidity\"]($2)"
         js_setCustomValidity ::
-        JSRef HTMLButtonElement -> JSRef (Maybe JSString) -> IO ()
+        HTMLButtonElement -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLButtonElement.setCustomValidity Mozilla HTMLButtonElement.setCustomValidity documentation> 
 setCustomValidity ::
                   (MonadIO m, ToJSString error) =>
                     HTMLButtonElement -> Maybe error -> m ()
 setCustomValidity self error
-  = liftIO
-      (js_setCustomValidity (unHTMLButtonElement self)
-         (toMaybeJSString error))
+  = liftIO (js_setCustomValidity (self) (toMaybeJSString error))
  
 foreign import javascript unsafe "$1[\"autofocus\"] = $2;"
-        js_setAutofocus :: JSRef HTMLButtonElement -> Bool -> IO ()
+        js_setAutofocus :: HTMLButtonElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLButtonElement.autofocus Mozilla HTMLButtonElement.autofocus documentation> 
 setAutofocus :: (MonadIO m) => HTMLButtonElement -> Bool -> m ()
-setAutofocus self val
-  = liftIO (js_setAutofocus (unHTMLButtonElement self) val)
+setAutofocus self val = liftIO (js_setAutofocus (self) val)
  
 foreign import javascript unsafe "($1[\"autofocus\"] ? 1 : 0)"
-        js_getAutofocus :: JSRef HTMLButtonElement -> IO Bool
+        js_getAutofocus :: HTMLButtonElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLButtonElement.autofocus Mozilla HTMLButtonElement.autofocus documentation> 
 getAutofocus :: (MonadIO m) => HTMLButtonElement -> m Bool
-getAutofocus self
-  = liftIO (js_getAutofocus (unHTMLButtonElement self))
+getAutofocus self = liftIO (js_getAutofocus (self))
  
 foreign import javascript unsafe "$1[\"disabled\"] = $2;"
-        js_setDisabled :: JSRef HTMLButtonElement -> Bool -> IO ()
+        js_setDisabled :: HTMLButtonElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLButtonElement.disabled Mozilla HTMLButtonElement.disabled documentation> 
 setDisabled :: (MonadIO m) => HTMLButtonElement -> Bool -> m ()
-setDisabled self val
-  = liftIO (js_setDisabled (unHTMLButtonElement self) val)
+setDisabled self val = liftIO (js_setDisabled (self) val)
  
 foreign import javascript unsafe "($1[\"disabled\"] ? 1 : 0)"
-        js_getDisabled :: JSRef HTMLButtonElement -> IO Bool
+        js_getDisabled :: HTMLButtonElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLButtonElement.disabled Mozilla HTMLButtonElement.disabled documentation> 
 getDisabled :: (MonadIO m) => HTMLButtonElement -> m Bool
-getDisabled self
-  = liftIO (js_getDisabled (unHTMLButtonElement self))
+getDisabled self = liftIO (js_getDisabled (self))
  
 foreign import javascript unsafe "$1[\"form\"]" js_getForm ::
-        JSRef HTMLButtonElement -> IO (JSRef HTMLFormElement)
+        HTMLButtonElement -> IO (Nullable HTMLFormElement)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLButtonElement.form Mozilla HTMLButtonElement.form documentation> 
 getForm ::
         (MonadIO m) => HTMLButtonElement -> m (Maybe HTMLFormElement)
-getForm self
-  = liftIO ((js_getForm (unHTMLButtonElement self)) >>= fromJSRef)
+getForm self = liftIO (nullableToMaybe <$> (js_getForm (self)))
  
 foreign import javascript unsafe "$1[\"formAction\"] = $2;"
-        js_setFormAction :: JSRef HTMLButtonElement -> JSString -> IO ()
+        js_setFormAction :: HTMLButtonElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLButtonElement.formAction Mozilla HTMLButtonElement.formAction documentation> 
 setFormAction ::
               (MonadIO m, ToJSString val) => HTMLButtonElement -> val -> m ()
 setFormAction self val
-  = liftIO
-      (js_setFormAction (unHTMLButtonElement self) (toJSString val))
+  = liftIO (js_setFormAction (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"formAction\"]"
-        js_getFormAction :: JSRef HTMLButtonElement -> IO JSString
+        js_getFormAction :: HTMLButtonElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLButtonElement.formAction Mozilla HTMLButtonElement.formAction documentation> 
 getFormAction ::
               (MonadIO m, FromJSString result) => HTMLButtonElement -> m result
 getFormAction self
-  = liftIO
-      (fromJSString <$> (js_getFormAction (unHTMLButtonElement self)))
+  = liftIO (fromJSString <$> (js_getFormAction (self)))
  
 foreign import javascript unsafe "$1[\"formEnctype\"] = $2;"
         js_setFormEnctype ::
-        JSRef HTMLButtonElement -> JSRef (Maybe JSString) -> IO ()
+        HTMLButtonElement -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLButtonElement.formEnctype Mozilla HTMLButtonElement.formEnctype documentation> 
 setFormEnctype ::
                (MonadIO m, ToJSString val) =>
                  HTMLButtonElement -> Maybe val -> m ()
 setFormEnctype self val
-  = liftIO
-      (js_setFormEnctype (unHTMLButtonElement self)
-         (toMaybeJSString val))
+  = liftIO (js_setFormEnctype (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"formEnctype\"]"
-        js_getFormEnctype ::
-        JSRef HTMLButtonElement -> IO (JSRef (Maybe JSString))
+        js_getFormEnctype :: HTMLButtonElement -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLButtonElement.formEnctype Mozilla HTMLButtonElement.formEnctype documentation> 
 getFormEnctype ::
                (MonadIO m, FromJSString result) =>
                  HTMLButtonElement -> m (Maybe result)
 getFormEnctype self
-  = liftIO
-      (fromMaybeJSString <$>
-         (js_getFormEnctype (unHTMLButtonElement self)))
+  = liftIO (fromMaybeJSString <$> (js_getFormEnctype (self)))
  
 foreign import javascript unsafe "$1[\"formMethod\"] = $2;"
-        js_setFormMethod ::
-        JSRef HTMLButtonElement -> JSRef (Maybe JSString) -> IO ()
+        js_setFormMethod :: HTMLButtonElement -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLButtonElement.formMethod Mozilla HTMLButtonElement.formMethod documentation> 
 setFormMethod ::
               (MonadIO m, ToJSString val) =>
                 HTMLButtonElement -> Maybe val -> m ()
 setFormMethod self val
-  = liftIO
-      (js_setFormMethod (unHTMLButtonElement self) (toMaybeJSString val))
+  = liftIO (js_setFormMethod (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"formMethod\"]"
-        js_getFormMethod ::
-        JSRef HTMLButtonElement -> IO (JSRef (Maybe JSString))
+        js_getFormMethod :: HTMLButtonElement -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLButtonElement.formMethod Mozilla HTMLButtonElement.formMethod documentation> 
 getFormMethod ::
               (MonadIO m, FromJSString result) =>
                 HTMLButtonElement -> m (Maybe result)
 getFormMethod self
-  = liftIO
-      (fromMaybeJSString <$>
-         (js_getFormMethod (unHTMLButtonElement self)))
+  = liftIO (fromMaybeJSString <$> (js_getFormMethod (self)))
  
 foreign import javascript unsafe "$1[\"formNoValidate\"] = $2;"
-        js_setFormNoValidate :: JSRef HTMLButtonElement -> Bool -> IO ()
+        js_setFormNoValidate :: HTMLButtonElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLButtonElement.formNoValidate Mozilla HTMLButtonElement.formNoValidate documentation> 
 setFormNoValidate ::
                   (MonadIO m) => HTMLButtonElement -> Bool -> m ()
 setFormNoValidate self val
-  = liftIO (js_setFormNoValidate (unHTMLButtonElement self) val)
+  = liftIO (js_setFormNoValidate (self) val)
  
 foreign import javascript unsafe "($1[\"formNoValidate\"] ? 1 : 0)"
-        js_getFormNoValidate :: JSRef HTMLButtonElement -> IO Bool
+        js_getFormNoValidate :: HTMLButtonElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLButtonElement.formNoValidate Mozilla HTMLButtonElement.formNoValidate documentation> 
 getFormNoValidate :: (MonadIO m) => HTMLButtonElement -> m Bool
-getFormNoValidate self
-  = liftIO (js_getFormNoValidate (unHTMLButtonElement self))
+getFormNoValidate self = liftIO (js_getFormNoValidate (self))
  
 foreign import javascript unsafe "$1[\"formTarget\"] = $2;"
-        js_setFormTarget :: JSRef HTMLButtonElement -> JSString -> IO ()
+        js_setFormTarget :: HTMLButtonElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLButtonElement.formTarget Mozilla HTMLButtonElement.formTarget documentation> 
 setFormTarget ::
               (MonadIO m, ToJSString val) => HTMLButtonElement -> val -> m ()
 setFormTarget self val
-  = liftIO
-      (js_setFormTarget (unHTMLButtonElement self) (toJSString val))
+  = liftIO (js_setFormTarget (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"formTarget\"]"
-        js_getFormTarget :: JSRef HTMLButtonElement -> IO JSString
+        js_getFormTarget :: HTMLButtonElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLButtonElement.formTarget Mozilla HTMLButtonElement.formTarget documentation> 
 getFormTarget ::
               (MonadIO m, FromJSString result) => HTMLButtonElement -> m result
 getFormTarget self
-  = liftIO
-      (fromJSString <$> (js_getFormTarget (unHTMLButtonElement self)))
+  = liftIO (fromJSString <$> (js_getFormTarget (self)))
  
 foreign import javascript unsafe "$1[\"name\"] = $2;" js_setName ::
-        JSRef HTMLButtonElement -> JSString -> IO ()
+        HTMLButtonElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLButtonElement.name Mozilla HTMLButtonElement.name documentation> 
 setName ::
         (MonadIO m, ToJSString val) => HTMLButtonElement -> val -> m ()
-setName self val
-  = liftIO (js_setName (unHTMLButtonElement self) (toJSString val))
+setName self val = liftIO (js_setName (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"name\"]" js_getName ::
-        JSRef HTMLButtonElement -> IO JSString
+        HTMLButtonElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLButtonElement.name Mozilla HTMLButtonElement.name documentation> 
 getName ::
         (MonadIO m, FromJSString result) => HTMLButtonElement -> m result
-getName self
-  = liftIO (fromJSString <$> (js_getName (unHTMLButtonElement self)))
+getName self = liftIO (fromJSString <$> (js_getName (self)))
  
 foreign import javascript unsafe "$1[\"type\"] = $2;" js_setType ::
-        JSRef HTMLButtonElement -> JSRef (Maybe JSString) -> IO ()
+        HTMLButtonElement -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLButtonElement.type Mozilla HTMLButtonElement.type documentation> 
 setType ::
         (MonadIO m, ToJSString val) =>
           HTMLButtonElement -> Maybe val -> m ()
-setType self val
-  = liftIO
-      (js_setType (unHTMLButtonElement self) (toMaybeJSString val))
+setType self val = liftIO (js_setType (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"type\"]" js_getType ::
-        JSRef HTMLButtonElement -> IO (JSRef (Maybe JSString))
+        HTMLButtonElement -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLButtonElement.type Mozilla HTMLButtonElement.type documentation> 
 getType ::
         (MonadIO m, FromJSString result) =>
           HTMLButtonElement -> m (Maybe result)
-getType self
-  = liftIO
-      (fromMaybeJSString <$> (js_getType (unHTMLButtonElement self)))
+getType self = liftIO (fromMaybeJSString <$> (js_getType (self)))
  
 foreign import javascript unsafe "$1[\"value\"] = $2;" js_setValue
-        :: JSRef HTMLButtonElement -> JSString -> IO ()
+        :: HTMLButtonElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLButtonElement.value Mozilla HTMLButtonElement.value documentation> 
 setValue ::
          (MonadIO m, ToJSString val) => HTMLButtonElement -> val -> m ()
-setValue self val
-  = liftIO (js_setValue (unHTMLButtonElement self) (toJSString val))
+setValue self val = liftIO (js_setValue (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"value\"]" js_getValue ::
-        JSRef HTMLButtonElement -> IO JSString
+        HTMLButtonElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLButtonElement.value Mozilla HTMLButtonElement.value documentation> 
 getValue ::
          (MonadIO m, FromJSString result) => HTMLButtonElement -> m result
-getValue self
-  = liftIO
-      (fromJSString <$> (js_getValue (unHTMLButtonElement self)))
+getValue self = liftIO (fromJSString <$> (js_getValue (self)))
  
 foreign import javascript unsafe "($1[\"willValidate\"] ? 1 : 0)"
-        js_getWillValidate :: JSRef HTMLButtonElement -> IO Bool
+        js_getWillValidate :: HTMLButtonElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLButtonElement.willValidate Mozilla HTMLButtonElement.willValidate documentation> 
 getWillValidate :: (MonadIO m) => HTMLButtonElement -> m Bool
-getWillValidate self
-  = liftIO (js_getWillValidate (unHTMLButtonElement self))
+getWillValidate self = liftIO (js_getWillValidate (self))
  
 foreign import javascript unsafe "$1[\"validity\"]" js_getValidity
-        :: JSRef HTMLButtonElement -> IO (JSRef ValidityState)
+        :: HTMLButtonElement -> IO (Nullable ValidityState)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLButtonElement.validity Mozilla HTMLButtonElement.validity documentation> 
 getValidity ::
             (MonadIO m) => HTMLButtonElement -> m (Maybe ValidityState)
 getValidity self
-  = liftIO
-      ((js_getValidity (unHTMLButtonElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getValidity (self)))
  
 foreign import javascript unsafe "$1[\"validationMessage\"]"
-        js_getValidationMessage :: JSRef HTMLButtonElement -> IO JSString
+        js_getValidationMessage :: HTMLButtonElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLButtonElement.validationMessage Mozilla HTMLButtonElement.validationMessage documentation> 
 getValidationMessage ::
                      (MonadIO m, FromJSString result) => HTMLButtonElement -> m result
 getValidationMessage self
-  = liftIO
-      (fromJSString <$>
-         (js_getValidationMessage (unHTMLButtonElement self)))
+  = liftIO (fromJSString <$> (js_getValidationMessage (self)))
  
 foreign import javascript unsafe "$1[\"labels\"]" js_getLabels ::
-        JSRef HTMLButtonElement -> IO (JSRef NodeList)
+        HTMLButtonElement -> IO (Nullable NodeList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLButtonElement.labels Mozilla HTMLButtonElement.labels documentation> 
 getLabels :: (MonadIO m) => HTMLButtonElement -> m (Maybe NodeList)
-getLabels self
-  = liftIO ((js_getLabels (unHTMLButtonElement self)) >>= fromJSRef)
+getLabels self = liftIO (nullableToMaybe <$> (js_getLabels (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLCanvasElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLCanvasElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLCanvasElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLCanvasElement.hs
@@ -8,7 +8,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -23,7 +23,7 @@
  
 foreign import javascript unsafe "$1[\"toDataURL\"]($2)"
         js_toDataURL ::
-        JSRef HTMLCanvasElement -> JSRef (Maybe JSString) -> IO JSString
+        HTMLCanvasElement -> Nullable JSString -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement.toDataURL Mozilla HTMLCanvasElement.toDataURL documentation> 
 toDataURL ::
@@ -31,60 +31,53 @@
             HTMLCanvasElement -> Maybe type' -> m result
 toDataURL self type'
   = liftIO
-      (fromJSString <$>
-         (js_toDataURL (unHTMLCanvasElement self) (toMaybeJSString type')))
+      (fromJSString <$> (js_toDataURL (self) (toMaybeJSString type')))
  
 foreign import javascript unsafe "$1[\"getContext\"]($2)"
-        js_getContext ::
-        JSRef HTMLCanvasElement -> JSString -> IO (JSRef a)
+        js_getContext :: HTMLCanvasElement -> JSString -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement.getContext Mozilla HTMLCanvasElement.getContext documentation> 
 getContext ::
            (MonadIO m, ToJSString contextId) =>
-             HTMLCanvasElement -> contextId -> m (JSRef a)
+             HTMLCanvasElement -> contextId -> m JSRef
 getContext self contextId
-  = liftIO
-      (js_getContext (unHTMLCanvasElement self) (toJSString contextId))
+  = liftIO (js_getContext (self) (toJSString contextId))
  
 foreign import javascript unsafe
         "$1[\"probablySupportsContext\"]($2)" js_probablySupportsContext ::
-        JSRef HTMLCanvasElement -> JSString -> IO (JSRef a)
+        HTMLCanvasElement -> JSString -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement.probablySupportsContext Mozilla HTMLCanvasElement.probablySupportsContext documentation> 
 probablySupportsContext ::
                         (MonadIO m, ToJSString contextId) =>
-                          HTMLCanvasElement -> contextId -> m (JSRef a)
+                          HTMLCanvasElement -> contextId -> m JSRef
 probablySupportsContext self contextId
-  = liftIO
-      (js_probablySupportsContext (unHTMLCanvasElement self)
-         (toJSString contextId))
+  = liftIO (js_probablySupportsContext (self) (toJSString contextId))
  
 foreign import javascript unsafe "$1[\"width\"] = $2;" js_setWidth
-        :: JSRef HTMLCanvasElement -> Int -> IO ()
+        :: HTMLCanvasElement -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement.width Mozilla HTMLCanvasElement.width documentation> 
 setWidth :: (MonadIO m) => HTMLCanvasElement -> Int -> m ()
-setWidth self val
-  = liftIO (js_setWidth (unHTMLCanvasElement self) val)
+setWidth self val = liftIO (js_setWidth (self) val)
  
 foreign import javascript unsafe "$1[\"width\"]" js_getWidth ::
-        JSRef HTMLCanvasElement -> IO Int
+        HTMLCanvasElement -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement.width Mozilla HTMLCanvasElement.width documentation> 
 getWidth :: (MonadIO m) => HTMLCanvasElement -> m Int
-getWidth self = liftIO (js_getWidth (unHTMLCanvasElement self))
+getWidth self = liftIO (js_getWidth (self))
  
 foreign import javascript unsafe "$1[\"height\"] = $2;"
-        js_setHeight :: JSRef HTMLCanvasElement -> Int -> IO ()
+        js_setHeight :: HTMLCanvasElement -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement.height Mozilla HTMLCanvasElement.height documentation> 
 setHeight :: (MonadIO m) => HTMLCanvasElement -> Int -> m ()
-setHeight self val
-  = liftIO (js_setHeight (unHTMLCanvasElement self) val)
+setHeight self val = liftIO (js_setHeight (self) val)
  
 foreign import javascript unsafe "$1[\"height\"]" js_getHeight ::
-        JSRef HTMLCanvasElement -> IO Int
+        HTMLCanvasElement -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement.height Mozilla HTMLCanvasElement.height documentation> 
 getHeight :: (MonadIO m) => HTMLCanvasElement -> m Int
-getHeight self = liftIO (js_getHeight (unHTMLCanvasElement self))
+getHeight self = liftIO (js_getHeight (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLCollection.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLCollection.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLCollection.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLCollection.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,7 +20,7 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"item\"]($2)" js_item ::
-        JSRef HTMLCollection -> Word -> IO (JSRef Node)
+        HTMLCollection -> Word -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLCollection.item Mozilla HTMLCollection.item documentation> 
 item ::
@@ -28,11 +28,10 @@
        self -> Word -> m (Maybe Node)
 item self index
   = liftIO
-      ((js_item (unHTMLCollection (toHTMLCollection self)) index) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_item (toHTMLCollection self) index))
  
 foreign import javascript unsafe "$1[\"namedItem\"]($2)"
-        js_namedItem :: JSRef HTMLCollection -> JSString -> IO (JSRef Node)
+        js_namedItem :: HTMLCollection -> JSString -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLCollection.namedItem Mozilla HTMLCollection.namedItem documentation> 
 namedItem ::
@@ -40,14 +39,12 @@
             self -> name -> m (Maybe Node)
 namedItem self name
   = liftIO
-      ((js_namedItem (unHTMLCollection (toHTMLCollection self))
-          (toJSString name))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_namedItem (toHTMLCollection self) (toJSString name)))
  
 foreign import javascript unsafe "$1[\"length\"]" js_getLength ::
-        JSRef HTMLCollection -> IO Word
+        HTMLCollection -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLCollection.length Mozilla HTMLCollection.length documentation> 
 getLength :: (MonadIO m, IsHTMLCollection self) => self -> m Word
-getLength self
-  = liftIO (js_getLength (unHTMLCollection (toHTMLCollection self)))
+getLength self = liftIO (js_getLength (toHTMLCollection self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLDListElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLDListElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLDListElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLDListElement.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,16 +19,15 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"compact\"] = $2;"
-        js_setCompact :: JSRef HTMLDListElement -> Bool -> IO ()
+        js_setCompact :: HTMLDListElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLDListElement.compact Mozilla HTMLDListElement.compact documentation> 
 setCompact :: (MonadIO m) => HTMLDListElement -> Bool -> m ()
-setCompact self val
-  = liftIO (js_setCompact (unHTMLDListElement self) val)
+setCompact self val = liftIO (js_setCompact (self) val)
  
 foreign import javascript unsafe "($1[\"compact\"] ? 1 : 0)"
-        js_getCompact :: JSRef HTMLDListElement -> IO Bool
+        js_getCompact :: HTMLDListElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLDListElement.compact Mozilla HTMLDListElement.compact documentation> 
 getCompact :: (MonadIO m) => HTMLDListElement -> m Bool
-getCompact self = liftIO (js_getCompact (unHTMLDListElement self))
+getCompact self = liftIO (js_getCompact (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLDataListElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLDataListElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLDataListElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLDataListElement.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,11 +19,10 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"options\"]" js_getOptions ::
-        JSRef HTMLDataListElement -> IO (JSRef HTMLCollection)
+        HTMLDataListElement -> IO (Nullable HTMLCollection)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLDataListElement.options Mozilla HTMLDataListElement.options documentation> 
 getOptions ::
            (MonadIO m) => HTMLDataListElement -> m (Maybe HTMLCollection)
 getOptions self
-  = liftIO
-      ((js_getOptions (unHTMLDataListElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getOptions (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLDetailsElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLDetailsElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLDetailsElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLDetailsElement.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,16 +19,15 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"open\"] = $2;" js_setOpen ::
-        JSRef HTMLDetailsElement -> Bool -> IO ()
+        HTMLDetailsElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLDetailsElement.open Mozilla HTMLDetailsElement.open documentation> 
 setOpen :: (MonadIO m) => HTMLDetailsElement -> Bool -> m ()
-setOpen self val
-  = liftIO (js_setOpen (unHTMLDetailsElement self) val)
+setOpen self val = liftIO (js_setOpen (self) val)
  
 foreign import javascript unsafe "($1[\"open\"] ? 1 : 0)"
-        js_getOpen :: JSRef HTMLDetailsElement -> IO Bool
+        js_getOpen :: HTMLDetailsElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLDetailsElement.open Mozilla HTMLDetailsElement.open documentation> 
 getOpen :: (MonadIO m) => HTMLDetailsElement -> m Bool
-getOpen self = liftIO (js_getOpen (unHTMLDetailsElement self))
+getOpen self = liftIO (js_getOpen (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLDirectoryElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLDirectoryElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLDirectoryElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLDirectoryElement.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,17 +20,15 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"compact\"] = $2;"
-        js_setCompact :: JSRef HTMLDirectoryElement -> Bool -> IO ()
+        js_setCompact :: HTMLDirectoryElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLDirectoryElement.compact Mozilla HTMLDirectoryElement.compact documentation> 
 setCompact :: (MonadIO m) => HTMLDirectoryElement -> Bool -> m ()
-setCompact self val
-  = liftIO (js_setCompact (unHTMLDirectoryElement self) val)
+setCompact self val = liftIO (js_setCompact (self) val)
  
 foreign import javascript unsafe "($1[\"compact\"] ? 1 : 0)"
-        js_getCompact :: JSRef HTMLDirectoryElement -> IO Bool
+        js_getCompact :: HTMLDirectoryElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLDirectoryElement.compact Mozilla HTMLDirectoryElement.compact documentation> 
 getCompact :: (MonadIO m) => HTMLDirectoryElement -> m Bool
-getCompact self
-  = liftIO (js_getCompact (unHTMLDirectoryElement self))
+getCompact self = liftIO (js_getCompact (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLDivElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLDivElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLDivElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLDivElement.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,19 +19,17 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"align\"] = $2;" js_setAlign
-        :: JSRef HTMLDivElement -> JSString -> IO ()
+        :: HTMLDivElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLDivElement.align Mozilla HTMLDivElement.align documentation> 
 setAlign ::
          (MonadIO m, ToJSString val) => HTMLDivElement -> val -> m ()
-setAlign self val
-  = liftIO (js_setAlign (unHTMLDivElement self) (toJSString val))
+setAlign self val = liftIO (js_setAlign (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"align\"]" js_getAlign ::
-        JSRef HTMLDivElement -> IO JSString
+        HTMLDivElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLDivElement.align Mozilla HTMLDivElement.align documentation> 
 getAlign ::
          (MonadIO m, FromJSString result) => HTMLDivElement -> m result
-getAlign self
-  = liftIO (fromJSString <$> (js_getAlign (unHTMLDivElement self)))
+getAlign self = liftIO (fromJSString <$> (js_getAlign (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLDocument.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLDocument.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLDocument.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLDocument.hs
@@ -16,7 +16,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -30,271 +30,240 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"open\"]()" js_open ::
-        JSRef HTMLDocument -> IO ()
+        HTMLDocument -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLDocument.open Mozilla HTMLDocument.open documentation> 
 open :: (MonadIO m) => HTMLDocument -> m ()
-open self = liftIO (js_open (unHTMLDocument self))
+open self = liftIO (js_open (self))
  
 foreign import javascript unsafe "$1[\"close\"]()" js_close ::
-        JSRef HTMLDocument -> IO ()
+        HTMLDocument -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLDocument.close Mozilla HTMLDocument.close documentation> 
 close :: (MonadIO m) => HTMLDocument -> m ()
-close self = liftIO (js_close (unHTMLDocument self))
+close self = liftIO (js_close (self))
  
 foreign import javascript unsafe "$1[\"write\"]($2)" js_write ::
-        JSRef HTMLDocument -> JSString -> IO ()
+        HTMLDocument -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLDocument.write Mozilla HTMLDocument.write documentation> 
 write ::
       (MonadIO m, ToJSString text) => HTMLDocument -> text -> m ()
-write self text
-  = liftIO (js_write (unHTMLDocument self) (toJSString text))
+write self text = liftIO (js_write (self) (toJSString text))
  
 foreign import javascript unsafe "$1[\"writeln\"]($2)" js_writeln
-        :: JSRef HTMLDocument -> JSString -> IO ()
+        :: HTMLDocument -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLDocument.writeln Mozilla HTMLDocument.writeln documentation> 
 writeln ::
         (MonadIO m, ToJSString text) => HTMLDocument -> text -> m ()
-writeln self text
-  = liftIO (js_writeln (unHTMLDocument self) (toJSString text))
+writeln self text = liftIO (js_writeln (self) (toJSString text))
  
 foreign import javascript unsafe "$1[\"clear\"]()" js_clear ::
-        JSRef HTMLDocument -> IO ()
+        HTMLDocument -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLDocument.clear Mozilla HTMLDocument.clear documentation> 
 clear :: (MonadIO m) => HTMLDocument -> m ()
-clear self = liftIO (js_clear (unHTMLDocument self))
+clear self = liftIO (js_clear (self))
  
 foreign import javascript unsafe "$1[\"captureEvents\"]()"
-        js_captureEvents :: JSRef HTMLDocument -> IO ()
+        js_captureEvents :: HTMLDocument -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLDocument.captureEvents Mozilla HTMLDocument.captureEvents documentation> 
 captureEvents :: (MonadIO m) => HTMLDocument -> m ()
-captureEvents self
-  = liftIO (js_captureEvents (unHTMLDocument self))
+captureEvents self = liftIO (js_captureEvents (self))
  
 foreign import javascript unsafe "$1[\"releaseEvents\"]()"
-        js_releaseEvents :: JSRef HTMLDocument -> IO ()
+        js_releaseEvents :: HTMLDocument -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLDocument.releaseEvents Mozilla HTMLDocument.releaseEvents documentation> 
 releaseEvents :: (MonadIO m) => HTMLDocument -> m ()
-releaseEvents self
-  = liftIO (js_releaseEvents (unHTMLDocument self))
+releaseEvents self = liftIO (js_releaseEvents (self))
  
 foreign import javascript unsafe "$1[\"embeds\"]" js_getEmbeds ::
-        JSRef HTMLDocument -> IO (JSRef HTMLCollection)
+        HTMLDocument -> IO (Nullable HTMLCollection)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLDocument.embeds Mozilla HTMLDocument.embeds documentation> 
 getEmbeds ::
           (MonadIO m) => HTMLDocument -> m (Maybe HTMLCollection)
-getEmbeds self
-  = liftIO ((js_getEmbeds (unHTMLDocument self)) >>= fromJSRef)
+getEmbeds self = liftIO (nullableToMaybe <$> (js_getEmbeds (self)))
  
 foreign import javascript unsafe "$1[\"plugins\"]" js_getPlugins ::
-        JSRef HTMLDocument -> IO (JSRef HTMLCollection)
+        HTMLDocument -> IO (Nullable HTMLCollection)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLDocument.plugins Mozilla HTMLDocument.plugins documentation> 
 getPlugins ::
            (MonadIO m) => HTMLDocument -> m (Maybe HTMLCollection)
 getPlugins self
-  = liftIO ((js_getPlugins (unHTMLDocument self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getPlugins (self)))
  
 foreign import javascript unsafe "$1[\"scripts\"]" js_getScripts ::
-        JSRef HTMLDocument -> IO (JSRef HTMLCollection)
+        HTMLDocument -> IO (Nullable HTMLCollection)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLDocument.scripts Mozilla HTMLDocument.scripts documentation> 
 getScripts ::
            (MonadIO m) => HTMLDocument -> m (Maybe HTMLCollection)
 getScripts self
-  = liftIO ((js_getScripts (unHTMLDocument self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getScripts (self)))
  
 foreign import javascript unsafe "$1[\"all\"]" js_getAll ::
-        JSRef HTMLDocument -> IO (JSRef HTMLAllCollection)
+        HTMLDocument -> IO (Nullable HTMLAllCollection)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLDocument.all Mozilla HTMLDocument.all documentation> 
 getAll ::
        (MonadIO m) => HTMLDocument -> m (Maybe HTMLAllCollection)
-getAll self
-  = liftIO ((js_getAll (unHTMLDocument self)) >>= fromJSRef)
+getAll self = liftIO (nullableToMaybe <$> (js_getAll (self)))
  
 foreign import javascript unsafe "$1[\"width\"]" js_getWidth ::
-        JSRef HTMLDocument -> IO Int
+        HTMLDocument -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLDocument.width Mozilla HTMLDocument.width documentation> 
 getWidth :: (MonadIO m) => HTMLDocument -> m Int
-getWidth self = liftIO (js_getWidth (unHTMLDocument self))
+getWidth self = liftIO (js_getWidth (self))
  
 foreign import javascript unsafe "$1[\"height\"]" js_getHeight ::
-        JSRef HTMLDocument -> IO Int
+        HTMLDocument -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLDocument.height Mozilla HTMLDocument.height documentation> 
 getHeight :: (MonadIO m) => HTMLDocument -> m Int
-getHeight self = liftIO (js_getHeight (unHTMLDocument self))
+getHeight self = liftIO (js_getHeight (self))
  
 foreign import javascript unsafe "$1[\"dir\"] = $2;" js_setDir ::
-        JSRef HTMLDocument -> JSRef (Maybe JSString) -> IO ()
+        HTMLDocument -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLDocument.dir Mozilla HTMLDocument.dir documentation> 
 setDir ::
        (MonadIO m, ToJSString val) => HTMLDocument -> Maybe val -> m ()
-setDir self val
-  = liftIO (js_setDir (unHTMLDocument self) (toMaybeJSString val))
+setDir self val = liftIO (js_setDir (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"dir\"]" js_getDir ::
-        JSRef HTMLDocument -> IO (JSRef (Maybe JSString))
+        HTMLDocument -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLDocument.dir Mozilla HTMLDocument.dir documentation> 
 getDir ::
        (MonadIO m, FromJSString result) =>
          HTMLDocument -> m (Maybe result)
-getDir self
-  = liftIO (fromMaybeJSString <$> (js_getDir (unHTMLDocument self)))
+getDir self = liftIO (fromMaybeJSString <$> (js_getDir (self)))
  
 foreign import javascript unsafe "$1[\"designMode\"] = $2;"
-        js_setDesignMode ::
-        JSRef HTMLDocument -> JSRef (Maybe JSString) -> IO ()
+        js_setDesignMode :: HTMLDocument -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLDocument.designMode Mozilla HTMLDocument.designMode documentation> 
 setDesignMode ::
               (MonadIO m, ToJSString val) => HTMLDocument -> Maybe val -> m ()
 setDesignMode self val
-  = liftIO
-      (js_setDesignMode (unHTMLDocument self) (toMaybeJSString val))
+  = liftIO (js_setDesignMode (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"designMode\"]"
-        js_getDesignMode ::
-        JSRef HTMLDocument -> IO (JSRef (Maybe JSString))
+        js_getDesignMode :: HTMLDocument -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLDocument.designMode Mozilla HTMLDocument.designMode documentation> 
 getDesignMode ::
               (MonadIO m, FromJSString result) =>
                 HTMLDocument -> m (Maybe result)
 getDesignMode self
-  = liftIO
-      (fromMaybeJSString <$> (js_getDesignMode (unHTMLDocument self)))
+  = liftIO (fromMaybeJSString <$> (js_getDesignMode (self)))
  
 foreign import javascript unsafe "$1[\"compatMode\"]"
-        js_getCompatMode :: JSRef HTMLDocument -> IO JSString
+        js_getCompatMode :: HTMLDocument -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLDocument.compatMode Mozilla HTMLDocument.compatMode documentation> 
 getCompatMode ::
               (MonadIO m, FromJSString result) => HTMLDocument -> m result
 getCompatMode self
-  = liftIO
-      (fromJSString <$> (js_getCompatMode (unHTMLDocument self)))
+  = liftIO (fromJSString <$> (js_getCompatMode (self)))
  
 foreign import javascript unsafe "$1[\"bgColor\"] = $2;"
-        js_setBgColor ::
-        JSRef HTMLDocument -> JSRef (Maybe JSString) -> IO ()
+        js_setBgColor :: HTMLDocument -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLDocument.bgColor Mozilla HTMLDocument.bgColor documentation> 
 setBgColor ::
            (MonadIO m, ToJSString val) => HTMLDocument -> Maybe val -> m ()
 setBgColor self val
-  = liftIO
-      (js_setBgColor (unHTMLDocument self) (toMaybeJSString val))
+  = liftIO (js_setBgColor (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"bgColor\"]" js_getBgColor ::
-        JSRef HTMLDocument -> IO (JSRef (Maybe JSString))
+        HTMLDocument -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLDocument.bgColor Mozilla HTMLDocument.bgColor documentation> 
 getBgColor ::
            (MonadIO m, FromJSString result) =>
              HTMLDocument -> m (Maybe result)
 getBgColor self
-  = liftIO
-      (fromMaybeJSString <$> (js_getBgColor (unHTMLDocument self)))
+  = liftIO (fromMaybeJSString <$> (js_getBgColor (self)))
  
 foreign import javascript unsafe "$1[\"fgColor\"] = $2;"
-        js_setFgColor ::
-        JSRef HTMLDocument -> JSRef (Maybe JSString) -> IO ()
+        js_setFgColor :: HTMLDocument -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLDocument.fgColor Mozilla HTMLDocument.fgColor documentation> 
 setFgColor ::
            (MonadIO m, ToJSString val) => HTMLDocument -> Maybe val -> m ()
 setFgColor self val
-  = liftIO
-      (js_setFgColor (unHTMLDocument self) (toMaybeJSString val))
+  = liftIO (js_setFgColor (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"fgColor\"]" js_getFgColor ::
-        JSRef HTMLDocument -> IO (JSRef (Maybe JSString))
+        HTMLDocument -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLDocument.fgColor Mozilla HTMLDocument.fgColor documentation> 
 getFgColor ::
            (MonadIO m, FromJSString result) =>
              HTMLDocument -> m (Maybe result)
 getFgColor self
-  = liftIO
-      (fromMaybeJSString <$> (js_getFgColor (unHTMLDocument self)))
+  = liftIO (fromMaybeJSString <$> (js_getFgColor (self)))
  
 foreign import javascript unsafe "$1[\"alinkColor\"] = $2;"
-        js_setAlinkColor ::
-        JSRef HTMLDocument -> JSRef (Maybe JSString) -> IO ()
+        js_setAlinkColor :: HTMLDocument -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLDocument.alinkColor Mozilla HTMLDocument.alinkColor documentation> 
 setAlinkColor ::
               (MonadIO m, ToJSString val) => HTMLDocument -> Maybe val -> m ()
 setAlinkColor self val
-  = liftIO
-      (js_setAlinkColor (unHTMLDocument self) (toMaybeJSString val))
+  = liftIO (js_setAlinkColor (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"alinkColor\"]"
-        js_getAlinkColor ::
-        JSRef HTMLDocument -> IO (JSRef (Maybe JSString))
+        js_getAlinkColor :: HTMLDocument -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLDocument.alinkColor Mozilla HTMLDocument.alinkColor documentation> 
 getAlinkColor ::
               (MonadIO m, FromJSString result) =>
                 HTMLDocument -> m (Maybe result)
 getAlinkColor self
-  = liftIO
-      (fromMaybeJSString <$> (js_getAlinkColor (unHTMLDocument self)))
+  = liftIO (fromMaybeJSString <$> (js_getAlinkColor (self)))
  
 foreign import javascript unsafe "$1[\"linkColor\"] = $2;"
-        js_setLinkColor ::
-        JSRef HTMLDocument -> JSRef (Maybe JSString) -> IO ()
+        js_setLinkColor :: HTMLDocument -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLDocument.linkColor Mozilla HTMLDocument.linkColor documentation> 
 setLinkColor ::
              (MonadIO m, ToJSString val) => HTMLDocument -> Maybe val -> m ()
 setLinkColor self val
-  = liftIO
-      (js_setLinkColor (unHTMLDocument self) (toMaybeJSString val))
+  = liftIO (js_setLinkColor (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"linkColor\"]"
-        js_getLinkColor ::
-        JSRef HTMLDocument -> IO (JSRef (Maybe JSString))
+        js_getLinkColor :: HTMLDocument -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLDocument.linkColor Mozilla HTMLDocument.linkColor documentation> 
 getLinkColor ::
              (MonadIO m, FromJSString result) =>
                HTMLDocument -> m (Maybe result)
 getLinkColor self
-  = liftIO
-      (fromMaybeJSString <$> (js_getLinkColor (unHTMLDocument self)))
+  = liftIO (fromMaybeJSString <$> (js_getLinkColor (self)))
  
 foreign import javascript unsafe "$1[\"vlinkColor\"] = $2;"
-        js_setVlinkColor ::
-        JSRef HTMLDocument -> JSRef (Maybe JSString) -> IO ()
+        js_setVlinkColor :: HTMLDocument -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLDocument.vlinkColor Mozilla HTMLDocument.vlinkColor documentation> 
 setVlinkColor ::
               (MonadIO m, ToJSString val) => HTMLDocument -> Maybe val -> m ()
 setVlinkColor self val
-  = liftIO
-      (js_setVlinkColor (unHTMLDocument self) (toMaybeJSString val))
+  = liftIO (js_setVlinkColor (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"vlinkColor\"]"
-        js_getVlinkColor ::
-        JSRef HTMLDocument -> IO (JSRef (Maybe JSString))
+        js_getVlinkColor :: HTMLDocument -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLDocument.vlinkColor Mozilla HTMLDocument.vlinkColor documentation> 
 getVlinkColor ::
               (MonadIO m, FromJSString result) =>
                 HTMLDocument -> m (Maybe result)
 getVlinkColor self
-  = liftIO
-      (fromMaybeJSString <$> (js_getVlinkColor (unHTMLDocument self)))
+  = liftIO (fromMaybeJSString <$> (js_getVlinkColor (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLElement.hs
@@ -21,7 +21,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -37,8 +37,8 @@
 foreign import javascript unsafe
         "$1[\"insertAdjacentElement\"]($2,\n$3)" js_insertAdjacentElement
         ::
-        JSRef HTMLElement ->
-          JSString -> JSRef Element -> IO (JSRef Element)
+        HTMLElement ->
+          JSString -> Nullable Element -> IO (Nullable Element)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement.insertAdjacentElement Mozilla HTMLElement.insertAdjacentElement documentation> 
 insertAdjacentElement ::
@@ -47,14 +47,13 @@
                         self -> where' -> Maybe element -> m (Maybe Element)
 insertAdjacentElement self where' element
   = liftIO
-      ((js_insertAdjacentElement (unHTMLElement (toHTMLElement self))
-          (toJSString where')
-          (maybe jsNull (unElement . toElement) element))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_insertAdjacentElement (toHTMLElement self) (toJSString where')
+            (maybeToNullable (fmap toElement element))))
  
 foreign import javascript unsafe
         "$1[\"insertAdjacentHTML\"]($2, $3)" js_insertAdjacentHTML ::
-        JSRef HTMLElement -> JSString -> JSString -> IO ()
+        HTMLElement -> JSString -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement.insertAdjacentHTML Mozilla HTMLElement.insertAdjacentHTML documentation> 
 insertAdjacentHTML ::
@@ -63,13 +62,12 @@
                      self -> where' -> html -> m ()
 insertAdjacentHTML self where' html
   = liftIO
-      (js_insertAdjacentHTML (unHTMLElement (toHTMLElement self))
-         (toJSString where')
+      (js_insertAdjacentHTML (toHTMLElement self) (toJSString where')
          (toJSString html))
  
 foreign import javascript unsafe
         "$1[\"insertAdjacentText\"]($2, $3)" js_insertAdjacentText ::
-        JSRef HTMLElement -> JSString -> JSString -> IO ()
+        HTMLElement -> JSString -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement.insertAdjacentText Mozilla HTMLElement.insertAdjacentText documentation> 
 insertAdjacentText ::
@@ -78,138 +76,126 @@
                      self -> where' -> text -> m ()
 insertAdjacentText self where' text
   = liftIO
-      (js_insertAdjacentText (unHTMLElement (toHTMLElement self))
-         (toJSString where')
+      (js_insertAdjacentText (toHTMLElement self) (toJSString where')
          (toJSString text))
  
 foreign import javascript unsafe "$1[\"click\"]()" js_click ::
-        JSRef HTMLElement -> IO ()
+        HTMLElement -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement.click Mozilla HTMLElement.click documentation> 
 click :: (MonadIO m, IsHTMLElement self) => self -> m ()
-click self = liftIO (js_click (unHTMLElement (toHTMLElement self)))
+click self = liftIO (js_click (toHTMLElement self))
  
 foreign import javascript unsafe "$1[\"title\"] = $2;" js_setTitle
-        :: JSRef HTMLElement -> JSString -> IO ()
+        :: HTMLElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement.title Mozilla HTMLElement.title documentation> 
 setTitle ::
          (MonadIO m, IsHTMLElement self, ToJSString val) =>
            self -> val -> m ()
 setTitle self val
-  = liftIO
-      (js_setTitle (unHTMLElement (toHTMLElement self)) (toJSString val))
+  = liftIO (js_setTitle (toHTMLElement self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"title\"]" js_getTitle ::
-        JSRef HTMLElement -> IO JSString
+        HTMLElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement.title Mozilla HTMLElement.title documentation> 
 getTitle ::
          (MonadIO m, IsHTMLElement self, FromJSString result) =>
            self -> m result
 getTitle self
-  = liftIO
-      (fromJSString <$>
-         (js_getTitle (unHTMLElement (toHTMLElement self))))
+  = liftIO (fromJSString <$> (js_getTitle (toHTMLElement self)))
  
 foreign import javascript unsafe "$1[\"lang\"] = $2;" js_setLang ::
-        JSRef HTMLElement -> JSString -> IO ()
+        HTMLElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement.lang Mozilla HTMLElement.lang documentation> 
 setLang ::
         (MonadIO m, IsHTMLElement self, ToJSString val) =>
           self -> val -> m ()
 setLang self val
-  = liftIO
-      (js_setLang (unHTMLElement (toHTMLElement self)) (toJSString val))
+  = liftIO (js_setLang (toHTMLElement self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"lang\"]" js_getLang ::
-        JSRef HTMLElement -> IO JSString
+        HTMLElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement.lang Mozilla HTMLElement.lang documentation> 
 getLang ::
         (MonadIO m, IsHTMLElement self, FromJSString result) =>
           self -> m result
 getLang self
-  = liftIO
-      (fromJSString <$>
-         (js_getLang (unHTMLElement (toHTMLElement self))))
+  = liftIO (fromJSString <$> (js_getLang (toHTMLElement self)))
  
 foreign import javascript unsafe "$1[\"translate\"] = $2;"
-        js_setTranslate :: JSRef HTMLElement -> Bool -> IO ()
+        js_setTranslate :: HTMLElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement.translate Mozilla HTMLElement.translate documentation> 
 setTranslate ::
              (MonadIO m, IsHTMLElement self) => self -> Bool -> m ()
 setTranslate self val
-  = liftIO (js_setTranslate (unHTMLElement (toHTMLElement self)) val)
+  = liftIO (js_setTranslate (toHTMLElement self) val)
  
 foreign import javascript unsafe "($1[\"translate\"] ? 1 : 0)"
-        js_getTranslate :: JSRef HTMLElement -> IO Bool
+        js_getTranslate :: HTMLElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement.translate Mozilla HTMLElement.translate documentation> 
 getTranslate :: (MonadIO m, IsHTMLElement self) => self -> m Bool
-getTranslate self
-  = liftIO (js_getTranslate (unHTMLElement (toHTMLElement self)))
+getTranslate self = liftIO (js_getTranslate (toHTMLElement self))
  
 foreign import javascript unsafe "$1[\"dir\"] = $2;" js_setDir ::
-        JSRef HTMLElement -> JSString -> IO ()
+        HTMLElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement.dir Mozilla HTMLElement.dir documentation> 
 setDir ::
        (MonadIO m, IsHTMLElement self, ToJSString val) =>
          self -> val -> m ()
 setDir self val
-  = liftIO
-      (js_setDir (unHTMLElement (toHTMLElement self)) (toJSString val))
+  = liftIO (js_setDir (toHTMLElement self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"dir\"]" js_getDir ::
-        JSRef HTMLElement -> IO JSString
+        HTMLElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement.dir Mozilla HTMLElement.dir documentation> 
 getDir ::
        (MonadIO m, IsHTMLElement self, FromJSString result) =>
          self -> m result
 getDir self
-  = liftIO
-      (fromJSString <$> (js_getDir (unHTMLElement (toHTMLElement self))))
+  = liftIO (fromJSString <$> (js_getDir (toHTMLElement self)))
  
 foreign import javascript unsafe "$1[\"tabIndex\"] = $2;"
-        js_setTabIndex :: JSRef HTMLElement -> Int -> IO ()
+        js_setTabIndex :: HTMLElement -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement.tabIndex Mozilla HTMLElement.tabIndex documentation> 
 setTabIndex ::
             (MonadIO m, IsHTMLElement self) => self -> Int -> m ()
 setTabIndex self val
-  = liftIO (js_setTabIndex (unHTMLElement (toHTMLElement self)) val)
+  = liftIO (js_setTabIndex (toHTMLElement self) val)
  
 foreign import javascript unsafe "$1[\"tabIndex\"]" js_getTabIndex
-        :: JSRef HTMLElement -> IO Int
+        :: HTMLElement -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement.tabIndex Mozilla HTMLElement.tabIndex documentation> 
 getTabIndex :: (MonadIO m, IsHTMLElement self) => self -> m Int
-getTabIndex self
-  = liftIO (js_getTabIndex (unHTMLElement (toHTMLElement self)))
+getTabIndex self = liftIO (js_getTabIndex (toHTMLElement self))
  
 foreign import javascript unsafe "$1[\"draggable\"] = $2;"
-        js_setDraggable :: JSRef HTMLElement -> Bool -> IO ()
+        js_setDraggable :: HTMLElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement.draggable Mozilla HTMLElement.draggable documentation> 
 setDraggable ::
              (MonadIO m, IsHTMLElement self) => self -> Bool -> m ()
 setDraggable self val
-  = liftIO (js_setDraggable (unHTMLElement (toHTMLElement self)) val)
+  = liftIO (js_setDraggable (toHTMLElement self) val)
  
 foreign import javascript unsafe "($1[\"draggable\"] ? 1 : 0)"
-        js_getDraggable :: JSRef HTMLElement -> IO Bool
+        js_getDraggable :: HTMLElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement.draggable Mozilla HTMLElement.draggable documentation> 
 getDraggable :: (MonadIO m, IsHTMLElement self) => self -> m Bool
-getDraggable self
-  = liftIO (js_getDraggable (unHTMLElement (toHTMLElement self)))
+getDraggable self = liftIO (js_getDraggable (toHTMLElement self))
  
 foreign import javascript unsafe "$1[\"webkitdropzone\"] = $2;"
-        js_setWebkitdropzone :: JSRef HTMLElement -> JSString -> IO ()
+        js_setWebkitdropzone :: HTMLElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement.webkitdropzone Mozilla HTMLElement.webkitdropzone documentation> 
 setWebkitdropzone ::
@@ -217,11 +203,10 @@
                     self -> val -> m ()
 setWebkitdropzone self val
   = liftIO
-      (js_setWebkitdropzone (unHTMLElement (toHTMLElement self))
-         (toJSString val))
+      (js_setWebkitdropzone (toHTMLElement self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"webkitdropzone\"]"
-        js_getWebkitdropzone :: JSRef HTMLElement -> IO JSString
+        js_getWebkitdropzone :: HTMLElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement.webkitdropzone Mozilla HTMLElement.webkitdropzone documentation> 
 getWebkitdropzone ::
@@ -229,53 +214,45 @@
                     self -> m result
 getWebkitdropzone self
   = liftIO
-      (fromJSString <$>
-         (js_getWebkitdropzone (unHTMLElement (toHTMLElement self))))
+      (fromJSString <$> (js_getWebkitdropzone (toHTMLElement self)))
  
 foreign import javascript unsafe "$1[\"hidden\"] = $2;"
-        js_setHidden :: JSRef HTMLElement -> Bool -> IO ()
+        js_setHidden :: HTMLElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement.hidden Mozilla HTMLElement.hidden documentation> 
 setHidden ::
           (MonadIO m, IsHTMLElement self) => self -> Bool -> m ()
-setHidden self val
-  = liftIO (js_setHidden (unHTMLElement (toHTMLElement self)) val)
+setHidden self val = liftIO (js_setHidden (toHTMLElement self) val)
  
 foreign import javascript unsafe "($1[\"hidden\"] ? 1 : 0)"
-        js_getHidden :: JSRef HTMLElement -> IO Bool
+        js_getHidden :: HTMLElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement.hidden Mozilla HTMLElement.hidden documentation> 
 getHidden :: (MonadIO m, IsHTMLElement self) => self -> m Bool
-getHidden self
-  = liftIO (js_getHidden (unHTMLElement (toHTMLElement self)))
+getHidden self = liftIO (js_getHidden (toHTMLElement self))
  
 foreign import javascript unsafe "$1[\"accessKey\"] = $2;"
-        js_setAccessKey :: JSRef HTMLElement -> JSString -> IO ()
+        js_setAccessKey :: HTMLElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement.accessKey Mozilla HTMLElement.accessKey documentation> 
 setAccessKey ::
              (MonadIO m, IsHTMLElement self, ToJSString val) =>
                self -> val -> m ()
 setAccessKey self val
-  = liftIO
-      (js_setAccessKey (unHTMLElement (toHTMLElement self))
-         (toJSString val))
+  = liftIO (js_setAccessKey (toHTMLElement self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"accessKey\"]"
-        js_getAccessKey :: JSRef HTMLElement -> IO JSString
+        js_getAccessKey :: HTMLElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement.accessKey Mozilla HTMLElement.accessKey documentation> 
 getAccessKey ::
              (MonadIO m, IsHTMLElement self, FromJSString result) =>
                self -> m result
 getAccessKey self
-  = liftIO
-      (fromJSString <$>
-         (js_getAccessKey (unHTMLElement (toHTMLElement self))))
+  = liftIO (fromJSString <$> (js_getAccessKey (toHTMLElement self)))
  
 foreign import javascript unsafe "$1[\"innerText\"] = $2;"
-        js_setInnerText ::
-        JSRef HTMLElement -> JSRef (Maybe JSString) -> IO ()
+        js_setInnerText :: HTMLElement -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement.innerText Mozilla HTMLElement.innerText documentation> 
 setInnerText ::
@@ -283,11 +260,10 @@
                self -> Maybe val -> m ()
 setInnerText self val
   = liftIO
-      (js_setInnerText (unHTMLElement (toHTMLElement self))
-         (toMaybeJSString val))
+      (js_setInnerText (toHTMLElement self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"innerText\"]"
-        js_getInnerText :: JSRef HTMLElement -> IO (JSRef (Maybe JSString))
+        js_getInnerText :: HTMLElement -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement.innerText Mozilla HTMLElement.innerText documentation> 
 getInnerText ::
@@ -295,12 +271,10 @@
                self -> m (Maybe result)
 getInnerText self
   = liftIO
-      (fromMaybeJSString <$>
-         (js_getInnerText (unHTMLElement (toHTMLElement self))))
+      (fromMaybeJSString <$> (js_getInnerText (toHTMLElement self)))
  
 foreign import javascript unsafe "$1[\"outerText\"] = $2;"
-        js_setOuterText ::
-        JSRef HTMLElement -> JSRef (Maybe JSString) -> IO ()
+        js_setOuterText :: HTMLElement -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement.outerText Mozilla HTMLElement.outerText documentation> 
 setOuterText ::
@@ -308,11 +282,10 @@
                self -> Maybe val -> m ()
 setOuterText self val
   = liftIO
-      (js_setOuterText (unHTMLElement (toHTMLElement self))
-         (toMaybeJSString val))
+      (js_setOuterText (toHTMLElement self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"outerText\"]"
-        js_getOuterText :: JSRef HTMLElement -> IO (JSRef (Maybe JSString))
+        js_getOuterText :: HTMLElement -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement.outerText Mozilla HTMLElement.outerText documentation> 
 getOuterText ::
@@ -320,23 +293,20 @@
                self -> m (Maybe result)
 getOuterText self
   = liftIO
-      (fromMaybeJSString <$>
-         (js_getOuterText (unHTMLElement (toHTMLElement self))))
+      (fromMaybeJSString <$> (js_getOuterText (toHTMLElement self)))
  
 foreign import javascript unsafe "$1[\"children\"]" js_getChildren
-        :: JSRef HTMLElement -> IO (JSRef HTMLCollection)
+        :: HTMLElement -> IO (Nullable HTMLCollection)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement.children Mozilla HTMLElement.children documentation> 
 getChildren ::
             (MonadIO m, IsHTMLElement self) => self -> m (Maybe HTMLCollection)
 getChildren self
   = liftIO
-      ((js_getChildren (unHTMLElement (toHTMLElement self))) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_getChildren (toHTMLElement self)))
  
 foreign import javascript unsafe "$1[\"contentEditable\"] = $2;"
-        js_setContentEditable ::
-        JSRef HTMLElement -> JSRef (Maybe JSString) -> IO ()
+        js_setContentEditable :: HTMLElement -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement.contentEditable Mozilla HTMLElement.contentEditable documentation> 
 setContentEditable ::
@@ -344,12 +314,10 @@
                      self -> Maybe val -> m ()
 setContentEditable self val
   = liftIO
-      (js_setContentEditable (unHTMLElement (toHTMLElement self))
-         (toMaybeJSString val))
+      (js_setContentEditable (toHTMLElement self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"contentEditable\"]"
-        js_getContentEditable ::
-        JSRef HTMLElement -> IO (JSRef (Maybe JSString))
+        js_getContentEditable :: HTMLElement -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement.contentEditable Mozilla HTMLElement.contentEditable documentation> 
 getContentEditable ::
@@ -358,33 +326,30 @@
 getContentEditable self
   = liftIO
       (fromMaybeJSString <$>
-         (js_getContentEditable (unHTMLElement (toHTMLElement self))))
+         (js_getContentEditable (toHTMLElement self)))
  
 foreign import javascript unsafe
         "($1[\"isContentEditable\"] ? 1 : 0)" js_getIsContentEditable ::
-        JSRef HTMLElement -> IO Bool
+        HTMLElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement.isContentEditable Mozilla HTMLElement.isContentEditable documentation> 
 getIsContentEditable ::
                      (MonadIO m, IsHTMLElement self) => self -> m Bool
 getIsContentEditable self
-  = liftIO
-      (js_getIsContentEditable (unHTMLElement (toHTMLElement self)))
+  = liftIO (js_getIsContentEditable (toHTMLElement self))
  
 foreign import javascript unsafe "$1[\"spellcheck\"] = $2;"
-        js_setSpellcheck :: JSRef HTMLElement -> Bool -> IO ()
+        js_setSpellcheck :: HTMLElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement.spellcheck Mozilla HTMLElement.spellcheck documentation> 
 setSpellcheck ::
               (MonadIO m, IsHTMLElement self) => self -> Bool -> m ()
 setSpellcheck self val
-  = liftIO
-      (js_setSpellcheck (unHTMLElement (toHTMLElement self)) val)
+  = liftIO (js_setSpellcheck (toHTMLElement self) val)
  
 foreign import javascript unsafe "($1[\"spellcheck\"] ? 1 : 0)"
-        js_getSpellcheck :: JSRef HTMLElement -> IO Bool
+        js_getSpellcheck :: HTMLElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement.spellcheck Mozilla HTMLElement.spellcheck documentation> 
 getSpellcheck :: (MonadIO m, IsHTMLElement self) => self -> m Bool
-getSpellcheck self
-  = liftIO (js_getSpellcheck (unHTMLElement (toHTMLElement self)))
+getSpellcheck self = liftIO (js_getSpellcheck (toHTMLElement self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLEmbedElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLEmbedElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLEmbedElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLEmbedElement.hs
@@ -9,7 +9,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -23,121 +23,106 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"getSVGDocument\"]()"
-        js_getSVGDocument ::
-        JSRef HTMLEmbedElement -> IO (JSRef SVGDocument)
+        js_getSVGDocument :: HTMLEmbedElement -> IO (Nullable SVGDocument)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLEmbedElement.getSVGDocument Mozilla HTMLEmbedElement.getSVGDocument documentation> 
 getSVGDocument ::
                (MonadIO m) => HTMLEmbedElement -> m (Maybe SVGDocument)
 getSVGDocument self
-  = liftIO
-      ((js_getSVGDocument (unHTMLEmbedElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getSVGDocument (self)))
  
 foreign import javascript unsafe "$1[\"align\"] = $2;" js_setAlign
-        :: JSRef HTMLEmbedElement -> JSString -> IO ()
+        :: HTMLEmbedElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLEmbedElement.align Mozilla HTMLEmbedElement.align documentation> 
 setAlign ::
          (MonadIO m, ToJSString val) => HTMLEmbedElement -> val -> m ()
-setAlign self val
-  = liftIO (js_setAlign (unHTMLEmbedElement self) (toJSString val))
+setAlign self val = liftIO (js_setAlign (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"align\"]" js_getAlign ::
-        JSRef HTMLEmbedElement -> IO JSString
+        HTMLEmbedElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLEmbedElement.align Mozilla HTMLEmbedElement.align documentation> 
 getAlign ::
          (MonadIO m, FromJSString result) => HTMLEmbedElement -> m result
-getAlign self
-  = liftIO (fromJSString <$> (js_getAlign (unHTMLEmbedElement self)))
+getAlign self = liftIO (fromJSString <$> (js_getAlign (self)))
  
 foreign import javascript unsafe "$1[\"height\"] = $2;"
-        js_setHeight :: JSRef HTMLEmbedElement -> JSString -> IO ()
+        js_setHeight :: HTMLEmbedElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLEmbedElement.height Mozilla HTMLEmbedElement.height documentation> 
 setHeight ::
           (MonadIO m, ToJSString val) => HTMLEmbedElement -> val -> m ()
-setHeight self val
-  = liftIO (js_setHeight (unHTMLEmbedElement self) (toJSString val))
+setHeight self val = liftIO (js_setHeight (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"height\"]" js_getHeight ::
-        JSRef HTMLEmbedElement -> IO JSString
+        HTMLEmbedElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLEmbedElement.height Mozilla HTMLEmbedElement.height documentation> 
 getHeight ::
           (MonadIO m, FromJSString result) => HTMLEmbedElement -> m result
-getHeight self
-  = liftIO
-      (fromJSString <$> (js_getHeight (unHTMLEmbedElement self)))
+getHeight self = liftIO (fromJSString <$> (js_getHeight (self)))
  
 foreign import javascript unsafe "$1[\"name\"] = $2;" js_setName ::
-        JSRef HTMLEmbedElement -> JSString -> IO ()
+        HTMLEmbedElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLEmbedElement.name Mozilla HTMLEmbedElement.name documentation> 
 setName ::
         (MonadIO m, ToJSString val) => HTMLEmbedElement -> val -> m ()
-setName self val
-  = liftIO (js_setName (unHTMLEmbedElement self) (toJSString val))
+setName self val = liftIO (js_setName (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"name\"]" js_getName ::
-        JSRef HTMLEmbedElement -> IO JSString
+        HTMLEmbedElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLEmbedElement.name Mozilla HTMLEmbedElement.name documentation> 
 getName ::
         (MonadIO m, FromJSString result) => HTMLEmbedElement -> m result
-getName self
-  = liftIO (fromJSString <$> (js_getName (unHTMLEmbedElement self)))
+getName self = liftIO (fromJSString <$> (js_getName (self)))
  
 foreign import javascript unsafe "$1[\"src\"] = $2;" js_setSrc ::
-        JSRef HTMLEmbedElement -> JSString -> IO ()
+        HTMLEmbedElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLEmbedElement.src Mozilla HTMLEmbedElement.src documentation> 
 setSrc ::
        (MonadIO m, ToJSString val) => HTMLEmbedElement -> val -> m ()
-setSrc self val
-  = liftIO (js_setSrc (unHTMLEmbedElement self) (toJSString val))
+setSrc self val = liftIO (js_setSrc (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"src\"]" js_getSrc ::
-        JSRef HTMLEmbedElement -> IO JSString
+        HTMLEmbedElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLEmbedElement.src Mozilla HTMLEmbedElement.src documentation> 
 getSrc ::
        (MonadIO m, FromJSString result) => HTMLEmbedElement -> m result
-getSrc self
-  = liftIO (fromJSString <$> (js_getSrc (unHTMLEmbedElement self)))
+getSrc self = liftIO (fromJSString <$> (js_getSrc (self)))
  
 foreign import javascript unsafe "$1[\"type\"] = $2;" js_setType ::
-        JSRef HTMLEmbedElement -> JSString -> IO ()
+        HTMLEmbedElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLEmbedElement.type Mozilla HTMLEmbedElement.type documentation> 
 setType ::
         (MonadIO m, ToJSString val) => HTMLEmbedElement -> val -> m ()
-setType self val
-  = liftIO (js_setType (unHTMLEmbedElement self) (toJSString val))
+setType self val = liftIO (js_setType (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"type\"]" js_getType ::
-        JSRef HTMLEmbedElement -> IO JSString
+        HTMLEmbedElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLEmbedElement.type Mozilla HTMLEmbedElement.type documentation> 
 getType ::
         (MonadIO m, FromJSString result) => HTMLEmbedElement -> m result
-getType self
-  = liftIO (fromJSString <$> (js_getType (unHTMLEmbedElement self)))
+getType self = liftIO (fromJSString <$> (js_getType (self)))
  
 foreign import javascript unsafe "$1[\"width\"] = $2;" js_setWidth
-        :: JSRef HTMLEmbedElement -> JSString -> IO ()
+        :: HTMLEmbedElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLEmbedElement.width Mozilla HTMLEmbedElement.width documentation> 
 setWidth ::
          (MonadIO m, ToJSString val) => HTMLEmbedElement -> val -> m ()
-setWidth self val
-  = liftIO (js_setWidth (unHTMLEmbedElement self) (toJSString val))
+setWidth self val = liftIO (js_setWidth (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"width\"]" js_getWidth ::
-        JSRef HTMLEmbedElement -> IO JSString
+        HTMLEmbedElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLEmbedElement.width Mozilla HTMLEmbedElement.width documentation> 
 getWidth ::
          (MonadIO m, FromJSString result) => HTMLEmbedElement -> m result
-getWidth self
-  = liftIO (fromJSString <$> (js_getWidth (unHTMLEmbedElement self)))
+getWidth self = liftIO (fromJSString <$> (js_getWidth (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLFieldSetElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLFieldSetElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLFieldSetElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLFieldSetElement.hs
@@ -10,7 +10,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -25,115 +25,99 @@
  
 foreign import javascript unsafe
         "($1[\"checkValidity\"]() ? 1 : 0)" js_checkValidity ::
-        JSRef HTMLFieldSetElement -> IO Bool
+        HTMLFieldSetElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFieldSetElement.checkValidity Mozilla HTMLFieldSetElement.checkValidity documentation> 
 checkValidity :: (MonadIO m) => HTMLFieldSetElement -> m Bool
-checkValidity self
-  = liftIO (js_checkValidity (unHTMLFieldSetElement self))
+checkValidity self = liftIO (js_checkValidity (self))
  
 foreign import javascript unsafe "$1[\"setCustomValidity\"]($2)"
         js_setCustomValidity ::
-        JSRef HTMLFieldSetElement -> JSRef (Maybe JSString) -> IO ()
+        HTMLFieldSetElement -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFieldSetElement.setCustomValidity Mozilla HTMLFieldSetElement.setCustomValidity documentation> 
 setCustomValidity ::
                   (MonadIO m, ToJSString error) =>
                     HTMLFieldSetElement -> Maybe error -> m ()
 setCustomValidity self error
-  = liftIO
-      (js_setCustomValidity (unHTMLFieldSetElement self)
-         (toMaybeJSString error))
+  = liftIO (js_setCustomValidity (self) (toMaybeJSString error))
  
 foreign import javascript unsafe "$1[\"disabled\"] = $2;"
-        js_setDisabled :: JSRef HTMLFieldSetElement -> Bool -> IO ()
+        js_setDisabled :: HTMLFieldSetElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFieldSetElement.disabled Mozilla HTMLFieldSetElement.disabled documentation> 
 setDisabled :: (MonadIO m) => HTMLFieldSetElement -> Bool -> m ()
-setDisabled self val
-  = liftIO (js_setDisabled (unHTMLFieldSetElement self) val)
+setDisabled self val = liftIO (js_setDisabled (self) val)
  
 foreign import javascript unsafe "($1[\"disabled\"] ? 1 : 0)"
-        js_getDisabled :: JSRef HTMLFieldSetElement -> IO Bool
+        js_getDisabled :: HTMLFieldSetElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFieldSetElement.disabled Mozilla HTMLFieldSetElement.disabled documentation> 
 getDisabled :: (MonadIO m) => HTMLFieldSetElement -> m Bool
-getDisabled self
-  = liftIO (js_getDisabled (unHTMLFieldSetElement self))
+getDisabled self = liftIO (js_getDisabled (self))
  
 foreign import javascript unsafe "$1[\"form\"]" js_getForm ::
-        JSRef HTMLFieldSetElement -> IO (JSRef HTMLFormElement)
+        HTMLFieldSetElement -> IO (Nullable HTMLFormElement)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFieldSetElement.form Mozilla HTMLFieldSetElement.form documentation> 
 getForm ::
         (MonadIO m) => HTMLFieldSetElement -> m (Maybe HTMLFormElement)
-getForm self
-  = liftIO ((js_getForm (unHTMLFieldSetElement self)) >>= fromJSRef)
+getForm self = liftIO (nullableToMaybe <$> (js_getForm (self)))
  
 foreign import javascript unsafe "$1[\"name\"] = $2;" js_setName ::
-        JSRef HTMLFieldSetElement -> JSString -> IO ()
+        HTMLFieldSetElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFieldSetElement.name Mozilla HTMLFieldSetElement.name documentation> 
 setName ::
         (MonadIO m, ToJSString val) => HTMLFieldSetElement -> val -> m ()
-setName self val
-  = liftIO (js_setName (unHTMLFieldSetElement self) (toJSString val))
+setName self val = liftIO (js_setName (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"name\"]" js_getName ::
-        JSRef HTMLFieldSetElement -> IO JSString
+        HTMLFieldSetElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFieldSetElement.name Mozilla HTMLFieldSetElement.name documentation> 
 getName ::
         (MonadIO m, FromJSString result) => HTMLFieldSetElement -> m result
-getName self
-  = liftIO
-      (fromJSString <$> (js_getName (unHTMLFieldSetElement self)))
+getName self = liftIO (fromJSString <$> (js_getName (self)))
  
 foreign import javascript unsafe "$1[\"type\"]" js_getType ::
-        JSRef HTMLFieldSetElement -> IO JSString
+        HTMLFieldSetElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFieldSetElement.type Mozilla HTMLFieldSetElement.type documentation> 
 getType ::
         (MonadIO m, FromJSString result) => HTMLFieldSetElement -> m result
-getType self
-  = liftIO
-      (fromJSString <$> (js_getType (unHTMLFieldSetElement self)))
+getType self = liftIO (fromJSString <$> (js_getType (self)))
  
 foreign import javascript unsafe "$1[\"elements\"]" js_getElements
-        :: JSRef HTMLFieldSetElement -> IO (JSRef HTMLCollection)
+        :: HTMLFieldSetElement -> IO (Nullable HTMLCollection)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFieldSetElement.elements Mozilla HTMLFieldSetElement.elements documentation> 
 getElements ::
             (MonadIO m) => HTMLFieldSetElement -> m (Maybe HTMLCollection)
 getElements self
-  = liftIO
-      ((js_getElements (unHTMLFieldSetElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getElements (self)))
  
 foreign import javascript unsafe "($1[\"willValidate\"] ? 1 : 0)"
-        js_getWillValidate :: JSRef HTMLFieldSetElement -> IO Bool
+        js_getWillValidate :: HTMLFieldSetElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFieldSetElement.willValidate Mozilla HTMLFieldSetElement.willValidate documentation> 
 getWillValidate :: (MonadIO m) => HTMLFieldSetElement -> m Bool
-getWillValidate self
-  = liftIO (js_getWillValidate (unHTMLFieldSetElement self))
+getWillValidate self = liftIO (js_getWillValidate (self))
  
 foreign import javascript unsafe "$1[\"validity\"]" js_getValidity
-        :: JSRef HTMLFieldSetElement -> IO (JSRef ValidityState)
+        :: HTMLFieldSetElement -> IO (Nullable ValidityState)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFieldSetElement.validity Mozilla HTMLFieldSetElement.validity documentation> 
 getValidity ::
             (MonadIO m) => HTMLFieldSetElement -> m (Maybe ValidityState)
 getValidity self
-  = liftIO
-      ((js_getValidity (unHTMLFieldSetElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getValidity (self)))
  
 foreign import javascript unsafe "$1[\"validationMessage\"]"
-        js_getValidationMessage :: JSRef HTMLFieldSetElement -> IO JSString
+        js_getValidationMessage :: HTMLFieldSetElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFieldSetElement.validationMessage Mozilla HTMLFieldSetElement.validationMessage documentation> 
 getValidationMessage ::
                      (MonadIO m, FromJSString result) => HTMLFieldSetElement -> m result
 getValidationMessage self
-  = liftIO
-      (fromJSString <$>
-         (js_getValidationMessage (unHTMLFieldSetElement self)))
+  = liftIO (fromJSString <$> (js_getValidationMessage (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLFontElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLFontElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLFontElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLFontElement.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,55 +20,49 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"color\"] = $2;" js_setColor
-        :: JSRef HTMLFontElement -> JSString -> IO ()
+        :: HTMLFontElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFontElement.color Mozilla HTMLFontElement.color documentation> 
 setColor ::
          (MonadIO m, ToJSString val) => HTMLFontElement -> val -> m ()
-setColor self val
-  = liftIO (js_setColor (unHTMLFontElement self) (toJSString val))
+setColor self val = liftIO (js_setColor (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"color\"]" js_getColor ::
-        JSRef HTMLFontElement -> IO JSString
+        HTMLFontElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFontElement.color Mozilla HTMLFontElement.color documentation> 
 getColor ::
          (MonadIO m, FromJSString result) => HTMLFontElement -> m result
-getColor self
-  = liftIO (fromJSString <$> (js_getColor (unHTMLFontElement self)))
+getColor self = liftIO (fromJSString <$> (js_getColor (self)))
  
 foreign import javascript unsafe "$1[\"face\"] = $2;" js_setFace ::
-        JSRef HTMLFontElement -> JSString -> IO ()
+        HTMLFontElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFontElement.face Mozilla HTMLFontElement.face documentation> 
 setFace ::
         (MonadIO m, ToJSString val) => HTMLFontElement -> val -> m ()
-setFace self val
-  = liftIO (js_setFace (unHTMLFontElement self) (toJSString val))
+setFace self val = liftIO (js_setFace (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"face\"]" js_getFace ::
-        JSRef HTMLFontElement -> IO JSString
+        HTMLFontElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFontElement.face Mozilla HTMLFontElement.face documentation> 
 getFace ::
         (MonadIO m, FromJSString result) => HTMLFontElement -> m result
-getFace self
-  = liftIO (fromJSString <$> (js_getFace (unHTMLFontElement self)))
+getFace self = liftIO (fromJSString <$> (js_getFace (self)))
  
 foreign import javascript unsafe "$1[\"size\"] = $2;" js_setSize ::
-        JSRef HTMLFontElement -> JSString -> IO ()
+        HTMLFontElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFontElement.size Mozilla HTMLFontElement.size documentation> 
 setSize ::
         (MonadIO m, ToJSString val) => HTMLFontElement -> val -> m ()
-setSize self val
-  = liftIO (js_setSize (unHTMLFontElement self) (toJSString val))
+setSize self val = liftIO (js_setSize (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"size\"]" js_getSize ::
-        JSRef HTMLFontElement -> IO JSString
+        HTMLFontElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFontElement.size Mozilla HTMLFontElement.size documentation> 
 getSize ::
         (MonadIO m, FromJSString result) => HTMLFontElement -> m result
-getSize self
-  = liftIO (fromJSString <$> (js_getSize (unHTMLFontElement self)))
+getSize self = liftIO (fromJSString <$> (js_getSize (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLFormControlsCollection.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLFormControlsCollection.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLFormControlsCollection.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLFormControlsCollection.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,18 +20,17 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"_get\"]($2)" js__get ::
-        JSRef HTMLFormControlsCollection -> Word -> IO (JSRef Node)
+        HTMLFormControlsCollection -> Word -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormControlsCollection._get Mozilla HTMLFormControlsCollection._get documentation> 
 _get ::
      (MonadIO m) => HTMLFormControlsCollection -> Word -> m (Maybe Node)
 _get self index
-  = liftIO
-      ((js__get (unHTMLFormControlsCollection self) index) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js__get (self) index))
  
 foreign import javascript unsafe "$1[\"namedItem\"]($2)"
         js_namedItem ::
-        JSRef HTMLFormControlsCollection -> JSString -> IO (JSRef Node)
+        HTMLFormControlsCollection -> JSString -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormControlsCollection.namedItem Mozilla HTMLFormControlsCollection.namedItem documentation> 
 namedItem ::
@@ -39,6 +38,4 @@
             HTMLFormControlsCollection -> name -> m (Maybe Node)
 namedItem self name
   = liftIO
-      ((js_namedItem (unHTMLFormControlsCollection self)
-          (toJSString name))
-         >>= fromJSRef)
+      (nullableToMaybe <$> (js_namedItem (self) (toJSString name)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLFormElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLFormElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLFormElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLFormElement.hs
@@ -19,7 +19,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -33,276 +33,246 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"_get\"]($2)" js__get ::
-        JSRef HTMLFormElement -> Word -> IO (JSRef Element)
+        HTMLFormElement -> Word -> IO (Nullable Element)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement._get Mozilla HTMLFormElement._get documentation> 
 _get :: (MonadIO m) => HTMLFormElement -> Word -> m (Maybe Element)
 _get self index
-  = liftIO ((js__get (unHTMLFormElement self) index) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js__get (self) index))
  
 foreign import javascript unsafe "$1[\"submit\"]()" js_submit ::
-        JSRef HTMLFormElement -> IO ()
+        HTMLFormElement -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement.submit Mozilla HTMLFormElement.submit documentation> 
 submit :: (MonadIO m) => HTMLFormElement -> m ()
-submit self = liftIO (js_submit (unHTMLFormElement self))
+submit self = liftIO (js_submit (self))
  
 foreign import javascript unsafe "$1[\"reset\"]()" js_reset ::
-        JSRef HTMLFormElement -> IO ()
+        HTMLFormElement -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement.reset Mozilla HTMLFormElement.reset documentation> 
 reset :: (MonadIO m) => HTMLFormElement -> m ()
-reset self = liftIO (js_reset (unHTMLFormElement self))
+reset self = liftIO (js_reset (self))
  
 foreign import javascript unsafe
         "($1[\"checkValidity\"]() ? 1 : 0)" js_checkValidity ::
-        JSRef HTMLFormElement -> IO Bool
+        HTMLFormElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement.checkValidity Mozilla HTMLFormElement.checkValidity documentation> 
 checkValidity :: (MonadIO m) => HTMLFormElement -> m Bool
-checkValidity self
-  = liftIO (js_checkValidity (unHTMLFormElement self))
+checkValidity self = liftIO (js_checkValidity (self))
  
 foreign import javascript unsafe "$1[\"requestAutocomplete\"]()"
-        js_requestAutocomplete :: JSRef HTMLFormElement -> IO ()
+        js_requestAutocomplete :: HTMLFormElement -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement.requestAutocomplete Mozilla HTMLFormElement.requestAutocomplete documentation> 
 requestAutocomplete :: (MonadIO m) => HTMLFormElement -> m ()
-requestAutocomplete self
-  = liftIO (js_requestAutocomplete (unHTMLFormElement self))
+requestAutocomplete self = liftIO (js_requestAutocomplete (self))
  
 foreign import javascript unsafe "$1[\"acceptCharset\"] = $2;"
-        js_setAcceptCharset :: JSRef HTMLFormElement -> JSString -> IO ()
+        js_setAcceptCharset :: HTMLFormElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement.acceptCharset Mozilla HTMLFormElement.acceptCharset documentation> 
 setAcceptCharset ::
                  (MonadIO m, ToJSString val) => HTMLFormElement -> val -> m ()
 setAcceptCharset self val
-  = liftIO
-      (js_setAcceptCharset (unHTMLFormElement self) (toJSString val))
+  = liftIO (js_setAcceptCharset (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"acceptCharset\"]"
-        js_getAcceptCharset :: JSRef HTMLFormElement -> IO JSString
+        js_getAcceptCharset :: HTMLFormElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement.acceptCharset Mozilla HTMLFormElement.acceptCharset documentation> 
 getAcceptCharset ::
                  (MonadIO m, FromJSString result) => HTMLFormElement -> m result
 getAcceptCharset self
-  = liftIO
-      (fromJSString <$> (js_getAcceptCharset (unHTMLFormElement self)))
+  = liftIO (fromJSString <$> (js_getAcceptCharset (self)))
  
 foreign import javascript unsafe "$1[\"action\"] = $2;"
-        js_setAction :: JSRef HTMLFormElement -> JSString -> IO ()
+        js_setAction :: HTMLFormElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement.action Mozilla HTMLFormElement.action documentation> 
 setAction ::
           (MonadIO m, ToJSString val) => HTMLFormElement -> val -> m ()
-setAction self val
-  = liftIO (js_setAction (unHTMLFormElement self) (toJSString val))
+setAction self val = liftIO (js_setAction (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"action\"]" js_getAction ::
-        JSRef HTMLFormElement -> IO JSString
+        HTMLFormElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement.action Mozilla HTMLFormElement.action documentation> 
 getAction ::
           (MonadIO m, FromJSString result) => HTMLFormElement -> m result
-getAction self
-  = liftIO (fromJSString <$> (js_getAction (unHTMLFormElement self)))
+getAction self = liftIO (fromJSString <$> (js_getAction (self)))
  
 foreign import javascript unsafe "$1[\"autocomplete\"] = $2;"
-        js_setAutocomplete :: JSRef HTMLFormElement -> JSString -> IO ()
+        js_setAutocomplete :: HTMLFormElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement.autocomplete Mozilla HTMLFormElement.autocomplete documentation> 
 setAutocomplete ::
                 (MonadIO m, ToJSString val) => HTMLFormElement -> val -> m ()
 setAutocomplete self val
-  = liftIO
-      (js_setAutocomplete (unHTMLFormElement self) (toJSString val))
+  = liftIO (js_setAutocomplete (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"autocomplete\"]"
-        js_getAutocomplete :: JSRef HTMLFormElement -> IO JSString
+        js_getAutocomplete :: HTMLFormElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement.autocomplete Mozilla HTMLFormElement.autocomplete documentation> 
 getAutocomplete ::
                 (MonadIO m, FromJSString result) => HTMLFormElement -> m result
 getAutocomplete self
-  = liftIO
-      (fromJSString <$> (js_getAutocomplete (unHTMLFormElement self)))
+  = liftIO (fromJSString <$> (js_getAutocomplete (self)))
  
 foreign import javascript unsafe "$1[\"enctype\"] = $2;"
-        js_setEnctype ::
-        JSRef HTMLFormElement -> JSRef (Maybe JSString) -> IO ()
+        js_setEnctype :: HTMLFormElement -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement.enctype Mozilla HTMLFormElement.enctype documentation> 
 setEnctype ::
            (MonadIO m, ToJSString val) => HTMLFormElement -> Maybe val -> m ()
 setEnctype self val
-  = liftIO
-      (js_setEnctype (unHTMLFormElement self) (toMaybeJSString val))
+  = liftIO (js_setEnctype (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"enctype\"]" js_getEnctype ::
-        JSRef HTMLFormElement -> IO (JSRef (Maybe JSString))
+        HTMLFormElement -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement.enctype Mozilla HTMLFormElement.enctype documentation> 
 getEnctype ::
            (MonadIO m, FromJSString result) =>
              HTMLFormElement -> m (Maybe result)
 getEnctype self
-  = liftIO
-      (fromMaybeJSString <$> (js_getEnctype (unHTMLFormElement self)))
+  = liftIO (fromMaybeJSString <$> (js_getEnctype (self)))
  
 foreign import javascript unsafe "$1[\"encoding\"] = $2;"
-        js_setEncoding ::
-        JSRef HTMLFormElement -> JSRef (Maybe JSString) -> IO ()
+        js_setEncoding :: HTMLFormElement -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement.encoding Mozilla HTMLFormElement.encoding documentation> 
 setEncoding ::
             (MonadIO m, ToJSString val) => HTMLFormElement -> Maybe val -> m ()
 setEncoding self val
-  = liftIO
-      (js_setEncoding (unHTMLFormElement self) (toMaybeJSString val))
+  = liftIO (js_setEncoding (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"encoding\"]" js_getEncoding
-        :: JSRef HTMLFormElement -> IO (JSRef (Maybe JSString))
+        :: HTMLFormElement -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement.encoding Mozilla HTMLFormElement.encoding documentation> 
 getEncoding ::
             (MonadIO m, FromJSString result) =>
               HTMLFormElement -> m (Maybe result)
 getEncoding self
-  = liftIO
-      (fromMaybeJSString <$> (js_getEncoding (unHTMLFormElement self)))
+  = liftIO (fromMaybeJSString <$> (js_getEncoding (self)))
  
 foreign import javascript unsafe "$1[\"method\"] = $2;"
-        js_setMethod ::
-        JSRef HTMLFormElement -> JSRef (Maybe JSString) -> IO ()
+        js_setMethod :: HTMLFormElement -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement.method Mozilla HTMLFormElement.method documentation> 
 setMethod ::
           (MonadIO m, ToJSString val) => HTMLFormElement -> Maybe val -> m ()
 setMethod self val
-  = liftIO
-      (js_setMethod (unHTMLFormElement self) (toMaybeJSString val))
+  = liftIO (js_setMethod (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"method\"]" js_getMethod ::
-        JSRef HTMLFormElement -> IO (JSRef (Maybe JSString))
+        HTMLFormElement -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement.method Mozilla HTMLFormElement.method documentation> 
 getMethod ::
           (MonadIO m, FromJSString result) =>
             HTMLFormElement -> m (Maybe result)
 getMethod self
-  = liftIO
-      (fromMaybeJSString <$> (js_getMethod (unHTMLFormElement self)))
+  = liftIO (fromMaybeJSString <$> (js_getMethod (self)))
  
 foreign import javascript unsafe "$1[\"name\"] = $2;" js_setName ::
-        JSRef HTMLFormElement -> JSString -> IO ()
+        HTMLFormElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement.name Mozilla HTMLFormElement.name documentation> 
 setName ::
         (MonadIO m, ToJSString val) => HTMLFormElement -> val -> m ()
-setName self val
-  = liftIO (js_setName (unHTMLFormElement self) (toJSString val))
+setName self val = liftIO (js_setName (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"name\"]" js_getName ::
-        JSRef HTMLFormElement -> IO JSString
+        HTMLFormElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement.name Mozilla HTMLFormElement.name documentation> 
 getName ::
         (MonadIO m, FromJSString result) => HTMLFormElement -> m result
-getName self
-  = liftIO (fromJSString <$> (js_getName (unHTMLFormElement self)))
+getName self = liftIO (fromJSString <$> (js_getName (self)))
  
 foreign import javascript unsafe "$1[\"noValidate\"] = $2;"
-        js_setNoValidate :: JSRef HTMLFormElement -> Bool -> IO ()
+        js_setNoValidate :: HTMLFormElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement.noValidate Mozilla HTMLFormElement.noValidate documentation> 
 setNoValidate :: (MonadIO m) => HTMLFormElement -> Bool -> m ()
-setNoValidate self val
-  = liftIO (js_setNoValidate (unHTMLFormElement self) val)
+setNoValidate self val = liftIO (js_setNoValidate (self) val)
  
 foreign import javascript unsafe "($1[\"noValidate\"] ? 1 : 0)"
-        js_getNoValidate :: JSRef HTMLFormElement -> IO Bool
+        js_getNoValidate :: HTMLFormElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement.noValidate Mozilla HTMLFormElement.noValidate documentation> 
 getNoValidate :: (MonadIO m) => HTMLFormElement -> m Bool
-getNoValidate self
-  = liftIO (js_getNoValidate (unHTMLFormElement self))
+getNoValidate self = liftIO (js_getNoValidate (self))
  
 foreign import javascript unsafe "$1[\"target\"] = $2;"
-        js_setTarget :: JSRef HTMLFormElement -> JSString -> IO ()
+        js_setTarget :: HTMLFormElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement.target Mozilla HTMLFormElement.target documentation> 
 setTarget ::
           (MonadIO m, ToJSString val) => HTMLFormElement -> val -> m ()
-setTarget self val
-  = liftIO (js_setTarget (unHTMLFormElement self) (toJSString val))
+setTarget self val = liftIO (js_setTarget (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"target\"]" js_getTarget ::
-        JSRef HTMLFormElement -> IO JSString
+        HTMLFormElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement.target Mozilla HTMLFormElement.target documentation> 
 getTarget ::
           (MonadIO m, FromJSString result) => HTMLFormElement -> m result
-getTarget self
-  = liftIO (fromJSString <$> (js_getTarget (unHTMLFormElement self)))
+getTarget self = liftIO (fromJSString <$> (js_getTarget (self)))
  
 foreign import javascript unsafe "$1[\"elements\"]" js_getElements
-        :: JSRef HTMLFormElement -> IO (JSRef HTMLCollection)
+        :: HTMLFormElement -> IO (Nullable HTMLCollection)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement.elements Mozilla HTMLFormElement.elements documentation> 
 getElements ::
             (MonadIO m) => HTMLFormElement -> m (Maybe HTMLCollection)
 getElements self
-  = liftIO ((js_getElements (unHTMLFormElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getElements (self)))
  
 foreign import javascript unsafe "$1[\"length\"]" js_getLength ::
-        JSRef HTMLFormElement -> IO Int
+        HTMLFormElement -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement.length Mozilla HTMLFormElement.length documentation> 
 getLength :: (MonadIO m) => HTMLFormElement -> m Int
-getLength self = liftIO (js_getLength (unHTMLFormElement self))
+getLength self = liftIO (js_getLength (self))
  
 foreign import javascript unsafe "$1[\"autocorrect\"] = $2;"
-        js_setAutocorrect :: JSRef HTMLFormElement -> Bool -> IO ()
+        js_setAutocorrect :: HTMLFormElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement.autocorrect Mozilla HTMLFormElement.autocorrect documentation> 
 setAutocorrect :: (MonadIO m) => HTMLFormElement -> Bool -> m ()
-setAutocorrect self val
-  = liftIO (js_setAutocorrect (unHTMLFormElement self) val)
+setAutocorrect self val = liftIO (js_setAutocorrect (self) val)
  
 foreign import javascript unsafe "($1[\"autocorrect\"] ? 1 : 0)"
-        js_getAutocorrect :: JSRef HTMLFormElement -> IO Bool
+        js_getAutocorrect :: HTMLFormElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement.autocorrect Mozilla HTMLFormElement.autocorrect documentation> 
 getAutocorrect :: (MonadIO m) => HTMLFormElement -> m Bool
-getAutocorrect self
-  = liftIO (js_getAutocorrect (unHTMLFormElement self))
+getAutocorrect self = liftIO (js_getAutocorrect (self))
  
 foreign import javascript unsafe "$1[\"autocapitalize\"] = $2;"
         js_setAutocapitalize ::
-        JSRef HTMLFormElement -> JSRef (Maybe JSString) -> IO ()
+        HTMLFormElement -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement.autocapitalize Mozilla HTMLFormElement.autocapitalize documentation> 
 setAutocapitalize ::
                   (MonadIO m, ToJSString val) => HTMLFormElement -> Maybe val -> m ()
 setAutocapitalize self val
-  = liftIO
-      (js_setAutocapitalize (unHTMLFormElement self)
-         (toMaybeJSString val))
+  = liftIO (js_setAutocapitalize (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"autocapitalize\"]"
-        js_getAutocapitalize ::
-        JSRef HTMLFormElement -> IO (JSRef (Maybe JSString))
+        js_getAutocapitalize :: HTMLFormElement -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement.autocapitalize Mozilla HTMLFormElement.autocapitalize documentation> 
 getAutocapitalize ::
                   (MonadIO m, FromJSString result) =>
                     HTMLFormElement -> m (Maybe result)
 getAutocapitalize self
-  = liftIO
-      (fromMaybeJSString <$>
-         (js_getAutocapitalize (unHTMLFormElement self)))
+  = liftIO (fromMaybeJSString <$> (js_getAutocapitalize (self)))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement.onautocomplete Mozilla HTMLFormElement.onautocomplete documentation> 
 autocomplete :: EventName HTMLFormElement onautocomplete
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLFrameElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLFrameElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLFrameElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLFrameElement.hs
@@ -16,7 +16,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -30,222 +30,198 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"getSVGDocument\"]()"
-        js_getSVGDocument ::
-        JSRef HTMLFrameElement -> IO (JSRef SVGDocument)
+        js_getSVGDocument :: HTMLFrameElement -> IO (Nullable SVGDocument)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFrameElement.getSVGDocument Mozilla HTMLFrameElement.getSVGDocument documentation> 
 getSVGDocument ::
                (MonadIO m) => HTMLFrameElement -> m (Maybe SVGDocument)
 getSVGDocument self
-  = liftIO
-      ((js_getSVGDocument (unHTMLFrameElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getSVGDocument (self)))
  
 foreign import javascript unsafe "$1[\"frameBorder\"] = $2;"
-        js_setFrameBorder :: JSRef HTMLFrameElement -> JSString -> IO ()
+        js_setFrameBorder :: HTMLFrameElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFrameElement.frameBorder Mozilla HTMLFrameElement.frameBorder documentation> 
 setFrameBorder ::
                (MonadIO m, ToJSString val) => HTMLFrameElement -> val -> m ()
 setFrameBorder self val
-  = liftIO
-      (js_setFrameBorder (unHTMLFrameElement self) (toJSString val))
+  = liftIO (js_setFrameBorder (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"frameBorder\"]"
-        js_getFrameBorder :: JSRef HTMLFrameElement -> IO JSString
+        js_getFrameBorder :: HTMLFrameElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFrameElement.frameBorder Mozilla HTMLFrameElement.frameBorder documentation> 
 getFrameBorder ::
                (MonadIO m, FromJSString result) => HTMLFrameElement -> m result
 getFrameBorder self
-  = liftIO
-      (fromJSString <$> (js_getFrameBorder (unHTMLFrameElement self)))
+  = liftIO (fromJSString <$> (js_getFrameBorder (self)))
  
 foreign import javascript unsafe "$1[\"longDesc\"] = $2;"
-        js_setLongDesc :: JSRef HTMLFrameElement -> JSString -> IO ()
+        js_setLongDesc :: HTMLFrameElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFrameElement.longDesc Mozilla HTMLFrameElement.longDesc documentation> 
 setLongDesc ::
             (MonadIO m, ToJSString val) => HTMLFrameElement -> val -> m ()
 setLongDesc self val
-  = liftIO
-      (js_setLongDesc (unHTMLFrameElement self) (toJSString val))
+  = liftIO (js_setLongDesc (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"longDesc\"]" js_getLongDesc
-        :: JSRef HTMLFrameElement -> IO JSString
+        :: HTMLFrameElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFrameElement.longDesc Mozilla HTMLFrameElement.longDesc documentation> 
 getLongDesc ::
             (MonadIO m, FromJSString result) => HTMLFrameElement -> m result
 getLongDesc self
-  = liftIO
-      (fromJSString <$> (js_getLongDesc (unHTMLFrameElement self)))
+  = liftIO (fromJSString <$> (js_getLongDesc (self)))
  
 foreign import javascript unsafe "$1[\"marginHeight\"] = $2;"
-        js_setMarginHeight :: JSRef HTMLFrameElement -> JSString -> IO ()
+        js_setMarginHeight :: HTMLFrameElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFrameElement.marginHeight Mozilla HTMLFrameElement.marginHeight documentation> 
 setMarginHeight ::
                 (MonadIO m, ToJSString val) => HTMLFrameElement -> val -> m ()
 setMarginHeight self val
-  = liftIO
-      (js_setMarginHeight (unHTMLFrameElement self) (toJSString val))
+  = liftIO (js_setMarginHeight (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"marginHeight\"]"
-        js_getMarginHeight :: JSRef HTMLFrameElement -> IO JSString
+        js_getMarginHeight :: HTMLFrameElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFrameElement.marginHeight Mozilla HTMLFrameElement.marginHeight documentation> 
 getMarginHeight ::
                 (MonadIO m, FromJSString result) => HTMLFrameElement -> m result
 getMarginHeight self
-  = liftIO
-      (fromJSString <$> (js_getMarginHeight (unHTMLFrameElement self)))
+  = liftIO (fromJSString <$> (js_getMarginHeight (self)))
  
 foreign import javascript unsafe "$1[\"marginWidth\"] = $2;"
-        js_setMarginWidth :: JSRef HTMLFrameElement -> JSString -> IO ()
+        js_setMarginWidth :: HTMLFrameElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFrameElement.marginWidth Mozilla HTMLFrameElement.marginWidth documentation> 
 setMarginWidth ::
                (MonadIO m, ToJSString val) => HTMLFrameElement -> val -> m ()
 setMarginWidth self val
-  = liftIO
-      (js_setMarginWidth (unHTMLFrameElement self) (toJSString val))
+  = liftIO (js_setMarginWidth (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"marginWidth\"]"
-        js_getMarginWidth :: JSRef HTMLFrameElement -> IO JSString
+        js_getMarginWidth :: HTMLFrameElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFrameElement.marginWidth Mozilla HTMLFrameElement.marginWidth documentation> 
 getMarginWidth ::
                (MonadIO m, FromJSString result) => HTMLFrameElement -> m result
 getMarginWidth self
-  = liftIO
-      (fromJSString <$> (js_getMarginWidth (unHTMLFrameElement self)))
+  = liftIO (fromJSString <$> (js_getMarginWidth (self)))
  
 foreign import javascript unsafe "$1[\"name\"] = $2;" js_setName ::
-        JSRef HTMLFrameElement -> JSString -> IO ()
+        HTMLFrameElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFrameElement.name Mozilla HTMLFrameElement.name documentation> 
 setName ::
         (MonadIO m, ToJSString val) => HTMLFrameElement -> val -> m ()
-setName self val
-  = liftIO (js_setName (unHTMLFrameElement self) (toJSString val))
+setName self val = liftIO (js_setName (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"name\"]" js_getName ::
-        JSRef HTMLFrameElement -> IO JSString
+        HTMLFrameElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFrameElement.name Mozilla HTMLFrameElement.name documentation> 
 getName ::
         (MonadIO m, FromJSString result) => HTMLFrameElement -> m result
-getName self
-  = liftIO (fromJSString <$> (js_getName (unHTMLFrameElement self)))
+getName self = liftIO (fromJSString <$> (js_getName (self)))
  
 foreign import javascript unsafe "$1[\"noResize\"] = $2;"
-        js_setNoResize :: JSRef HTMLFrameElement -> Bool -> IO ()
+        js_setNoResize :: HTMLFrameElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFrameElement.noResize Mozilla HTMLFrameElement.noResize documentation> 
 setNoResize :: (MonadIO m) => HTMLFrameElement -> Bool -> m ()
-setNoResize self val
-  = liftIO (js_setNoResize (unHTMLFrameElement self) val)
+setNoResize self val = liftIO (js_setNoResize (self) val)
  
 foreign import javascript unsafe "($1[\"noResize\"] ? 1 : 0)"
-        js_getNoResize :: JSRef HTMLFrameElement -> IO Bool
+        js_getNoResize :: HTMLFrameElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFrameElement.noResize Mozilla HTMLFrameElement.noResize documentation> 
 getNoResize :: (MonadIO m) => HTMLFrameElement -> m Bool
-getNoResize self
-  = liftIO (js_getNoResize (unHTMLFrameElement self))
+getNoResize self = liftIO (js_getNoResize (self))
  
 foreign import javascript unsafe "$1[\"scrolling\"] = $2;"
-        js_setScrolling :: JSRef HTMLFrameElement -> JSString -> IO ()
+        js_setScrolling :: HTMLFrameElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFrameElement.scrolling Mozilla HTMLFrameElement.scrolling documentation> 
 setScrolling ::
              (MonadIO m, ToJSString val) => HTMLFrameElement -> val -> m ()
 setScrolling self val
-  = liftIO
-      (js_setScrolling (unHTMLFrameElement self) (toJSString val))
+  = liftIO (js_setScrolling (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"scrolling\"]"
-        js_getScrolling :: JSRef HTMLFrameElement -> IO JSString
+        js_getScrolling :: HTMLFrameElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFrameElement.scrolling Mozilla HTMLFrameElement.scrolling documentation> 
 getScrolling ::
              (MonadIO m, FromJSString result) => HTMLFrameElement -> m result
 getScrolling self
-  = liftIO
-      (fromJSString <$> (js_getScrolling (unHTMLFrameElement self)))
+  = liftIO (fromJSString <$> (js_getScrolling (self)))
  
 foreign import javascript unsafe "$1[\"src\"] = $2;" js_setSrc ::
-        JSRef HTMLFrameElement -> JSString -> IO ()
+        HTMLFrameElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFrameElement.src Mozilla HTMLFrameElement.src documentation> 
 setSrc ::
        (MonadIO m, ToJSString val) => HTMLFrameElement -> val -> m ()
-setSrc self val
-  = liftIO (js_setSrc (unHTMLFrameElement self) (toJSString val))
+setSrc self val = liftIO (js_setSrc (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"src\"]" js_getSrc ::
-        JSRef HTMLFrameElement -> IO JSString
+        HTMLFrameElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFrameElement.src Mozilla HTMLFrameElement.src documentation> 
 getSrc ::
        (MonadIO m, FromJSString result) => HTMLFrameElement -> m result
-getSrc self
-  = liftIO (fromJSString <$> (js_getSrc (unHTMLFrameElement self)))
+getSrc self = liftIO (fromJSString <$> (js_getSrc (self)))
  
 foreign import javascript unsafe "$1[\"contentDocument\"]"
-        js_getContentDocument ::
-        JSRef HTMLFrameElement -> IO (JSRef Document)
+        js_getContentDocument :: HTMLFrameElement -> IO (Nullable Document)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFrameElement.contentDocument Mozilla HTMLFrameElement.contentDocument documentation> 
 getContentDocument ::
                    (MonadIO m) => HTMLFrameElement -> m (Maybe Document)
 getContentDocument self
-  = liftIO
-      ((js_getContentDocument (unHTMLFrameElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getContentDocument (self)))
  
 foreign import javascript unsafe "$1[\"contentWindow\"]"
-        js_getContentWindow :: JSRef HTMLFrameElement -> IO (JSRef Window)
+        js_getContentWindow :: HTMLFrameElement -> IO (Nullable Window)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFrameElement.contentWindow Mozilla HTMLFrameElement.contentWindow documentation> 
 getContentWindow ::
                  (MonadIO m) => HTMLFrameElement -> m (Maybe Window)
 getContentWindow self
-  = liftIO
-      ((js_getContentWindow (unHTMLFrameElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getContentWindow (self)))
  
 foreign import javascript unsafe "$1[\"location\"] = $2;"
-        js_setLocation ::
-        JSRef HTMLFrameElement -> JSRef (Maybe JSString) -> IO ()
+        js_setLocation :: HTMLFrameElement -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFrameElement.location Mozilla HTMLFrameElement.location documentation> 
 setLocation ::
             (MonadIO m, ToJSString val) =>
               HTMLFrameElement -> Maybe val -> m ()
 setLocation self val
-  = liftIO
-      (js_setLocation (unHTMLFrameElement self) (toMaybeJSString val))
+  = liftIO (js_setLocation (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"location\"]" js_getLocation
-        :: JSRef HTMLFrameElement -> IO (JSRef (Maybe JSString))
+        :: HTMLFrameElement -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFrameElement.location Mozilla HTMLFrameElement.location documentation> 
 getLocation ::
             (MonadIO m, FromJSString result) =>
               HTMLFrameElement -> m (Maybe result)
 getLocation self
-  = liftIO
-      (fromMaybeJSString <$> (js_getLocation (unHTMLFrameElement self)))
+  = liftIO (fromMaybeJSString <$> (js_getLocation (self)))
  
 foreign import javascript unsafe "$1[\"width\"]" js_getWidth ::
-        JSRef HTMLFrameElement -> IO Int
+        HTMLFrameElement -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFrameElement.width Mozilla HTMLFrameElement.width documentation> 
 getWidth :: (MonadIO m) => HTMLFrameElement -> m Int
-getWidth self = liftIO (js_getWidth (unHTMLFrameElement self))
+getWidth self = liftIO (js_getWidth (self))
  
 foreign import javascript unsafe "$1[\"height\"]" js_getHeight ::
-        JSRef HTMLFrameElement -> IO Int
+        HTMLFrameElement -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFrameElement.height Mozilla HTMLFrameElement.height documentation> 
 getHeight :: (MonadIO m) => HTMLFrameElement -> m Int
-getHeight self = liftIO (js_getHeight (unHTMLFrameElement self))
+getHeight self = liftIO (js_getHeight (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLFrameSetElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLFrameSetElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLFrameSetElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLFrameSetElement.hs
@@ -8,7 +8,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -22,42 +22,36 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"cols\"] = $2;" js_setCols ::
-        JSRef HTMLFrameSetElement -> JSString -> IO ()
+        HTMLFrameSetElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFrameSetElement.cols Mozilla HTMLFrameSetElement.cols documentation> 
 setCols ::
         (MonadIO m, ToJSString val) => HTMLFrameSetElement -> val -> m ()
-setCols self val
-  = liftIO (js_setCols (unHTMLFrameSetElement self) (toJSString val))
+setCols self val = liftIO (js_setCols (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"cols\"]" js_getCols ::
-        JSRef HTMLFrameSetElement -> IO JSString
+        HTMLFrameSetElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFrameSetElement.cols Mozilla HTMLFrameSetElement.cols documentation> 
 getCols ::
         (MonadIO m, FromJSString result) => HTMLFrameSetElement -> m result
-getCols self
-  = liftIO
-      (fromJSString <$> (js_getCols (unHTMLFrameSetElement self)))
+getCols self = liftIO (fromJSString <$> (js_getCols (self)))
  
 foreign import javascript unsafe "$1[\"rows\"] = $2;" js_setRows ::
-        JSRef HTMLFrameSetElement -> JSString -> IO ()
+        HTMLFrameSetElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFrameSetElement.rows Mozilla HTMLFrameSetElement.rows documentation> 
 setRows ::
         (MonadIO m, ToJSString val) => HTMLFrameSetElement -> val -> m ()
-setRows self val
-  = liftIO (js_setRows (unHTMLFrameSetElement self) (toJSString val))
+setRows self val = liftIO (js_setRows (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"rows\"]" js_getRows ::
-        JSRef HTMLFrameSetElement -> IO JSString
+        HTMLFrameSetElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFrameSetElement.rows Mozilla HTMLFrameSetElement.rows documentation> 
 getRows ::
         (MonadIO m, FromJSString result) => HTMLFrameSetElement -> m result
-getRows self
-  = liftIO
-      (fromJSString <$> (js_getRows (unHTMLFrameSetElement self)))
+getRows self = liftIO (fromJSString <$> (js_getRows (self)))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFrameSetElement.onbeforeunload Mozilla HTMLFrameSetElement.onbeforeunload documentation> 
 beforeUnload :: EventName HTMLFrameSetElement BeforeUnloadEvent
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLHRElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLHRElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLHRElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLHRElement.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -21,70 +21,63 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"align\"] = $2;" js_setAlign
-        :: JSRef HTMLHRElement -> JSString -> IO ()
+        :: HTMLHRElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLHRElement.align Mozilla HTMLHRElement.align documentation> 
 setAlign ::
          (MonadIO m, ToJSString val) => HTMLHRElement -> val -> m ()
-setAlign self val
-  = liftIO (js_setAlign (unHTMLHRElement self) (toJSString val))
+setAlign self val = liftIO (js_setAlign (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"align\"]" js_getAlign ::
-        JSRef HTMLHRElement -> IO JSString
+        HTMLHRElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLHRElement.align Mozilla HTMLHRElement.align documentation> 
 getAlign ::
          (MonadIO m, FromJSString result) => HTMLHRElement -> m result
-getAlign self
-  = liftIO (fromJSString <$> (js_getAlign (unHTMLHRElement self)))
+getAlign self = liftIO (fromJSString <$> (js_getAlign (self)))
  
 foreign import javascript unsafe "$1[\"noShade\"] = $2;"
-        js_setNoShade :: JSRef HTMLHRElement -> Bool -> IO ()
+        js_setNoShade :: HTMLHRElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLHRElement.noShade Mozilla HTMLHRElement.noShade documentation> 
 setNoShade :: (MonadIO m) => HTMLHRElement -> Bool -> m ()
-setNoShade self val
-  = liftIO (js_setNoShade (unHTMLHRElement self) val)
+setNoShade self val = liftIO (js_setNoShade (self) val)
  
 foreign import javascript unsafe "($1[\"noShade\"] ? 1 : 0)"
-        js_getNoShade :: JSRef HTMLHRElement -> IO Bool
+        js_getNoShade :: HTMLHRElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLHRElement.noShade Mozilla HTMLHRElement.noShade documentation> 
 getNoShade :: (MonadIO m) => HTMLHRElement -> m Bool
-getNoShade self = liftIO (js_getNoShade (unHTMLHRElement self))
+getNoShade self = liftIO (js_getNoShade (self))
  
 foreign import javascript unsafe "$1[\"size\"] = $2;" js_setSize ::
-        JSRef HTMLHRElement -> JSString -> IO ()
+        HTMLHRElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLHRElement.size Mozilla HTMLHRElement.size documentation> 
 setSize ::
         (MonadIO m, ToJSString val) => HTMLHRElement -> val -> m ()
-setSize self val
-  = liftIO (js_setSize (unHTMLHRElement self) (toJSString val))
+setSize self val = liftIO (js_setSize (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"size\"]" js_getSize ::
-        JSRef HTMLHRElement -> IO JSString
+        HTMLHRElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLHRElement.size Mozilla HTMLHRElement.size documentation> 
 getSize ::
         (MonadIO m, FromJSString result) => HTMLHRElement -> m result
-getSize self
-  = liftIO (fromJSString <$> (js_getSize (unHTMLHRElement self)))
+getSize self = liftIO (fromJSString <$> (js_getSize (self)))
  
 foreign import javascript unsafe "$1[\"width\"] = $2;" js_setWidth
-        :: JSRef HTMLHRElement -> JSString -> IO ()
+        :: HTMLHRElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLHRElement.width Mozilla HTMLHRElement.width documentation> 
 setWidth ::
          (MonadIO m, ToJSString val) => HTMLHRElement -> val -> m ()
-setWidth self val
-  = liftIO (js_setWidth (unHTMLHRElement self) (toJSString val))
+setWidth self val = liftIO (js_setWidth (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"width\"]" js_getWidth ::
-        JSRef HTMLHRElement -> IO JSString
+        HTMLHRElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLHRElement.width Mozilla HTMLHRElement.width documentation> 
 getWidth ::
          (MonadIO m, FromJSString result) => HTMLHRElement -> m result
-getWidth self
-  = liftIO (fromJSString <$> (js_getWidth (unHTMLHRElement self)))
+getWidth self = liftIO (fromJSString <$> (js_getWidth (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLHeadElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLHeadElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLHeadElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLHeadElement.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,20 +19,18 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"profile\"] = $2;"
-        js_setProfile :: JSRef HTMLHeadElement -> JSString -> IO ()
+        js_setProfile :: HTMLHeadElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLHeadElement.profile Mozilla HTMLHeadElement.profile documentation> 
 setProfile ::
            (MonadIO m, ToJSString val) => HTMLHeadElement -> val -> m ()
 setProfile self val
-  = liftIO (js_setProfile (unHTMLHeadElement self) (toJSString val))
+  = liftIO (js_setProfile (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"profile\"]" js_getProfile ::
-        JSRef HTMLHeadElement -> IO JSString
+        HTMLHeadElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLHeadElement.profile Mozilla HTMLHeadElement.profile documentation> 
 getProfile ::
            (MonadIO m, FromJSString result) => HTMLHeadElement -> m result
-getProfile self
-  = liftIO
-      (fromJSString <$> (js_getProfile (unHTMLHeadElement self)))
+getProfile self = liftIO (fromJSString <$> (js_getProfile (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLHeadingElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLHeadingElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLHeadingElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLHeadingElement.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,20 +19,17 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"align\"] = $2;" js_setAlign
-        :: JSRef HTMLHeadingElement -> JSString -> IO ()
+        :: HTMLHeadingElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLHeadingElement.align Mozilla HTMLHeadingElement.align documentation> 
 setAlign ::
          (MonadIO m, ToJSString val) => HTMLHeadingElement -> val -> m ()
-setAlign self val
-  = liftIO (js_setAlign (unHTMLHeadingElement self) (toJSString val))
+setAlign self val = liftIO (js_setAlign (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"align\"]" js_getAlign ::
-        JSRef HTMLHeadingElement -> IO JSString
+        HTMLHeadingElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLHeadingElement.align Mozilla HTMLHeadingElement.align documentation> 
 getAlign ::
          (MonadIO m, FromJSString result) => HTMLHeadingElement -> m result
-getAlign self
-  = liftIO
-      (fromJSString <$> (js_getAlign (unHTMLHeadingElement self)))
+getAlign self = liftIO (fromJSString <$> (js_getAlign (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLHtmlElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLHtmlElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLHtmlElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLHtmlElement.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,39 +20,36 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"version\"] = $2;"
-        js_setVersion :: JSRef HTMLHtmlElement -> JSString -> IO ()
+        js_setVersion :: HTMLHtmlElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLHtmlElement.version Mozilla HTMLHtmlElement.version documentation> 
 setVersion ::
            (MonadIO m, ToJSString val) => HTMLHtmlElement -> val -> m ()
 setVersion self val
-  = liftIO (js_setVersion (unHTMLHtmlElement self) (toJSString val))
+  = liftIO (js_setVersion (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"version\"]" js_getVersion ::
-        JSRef HTMLHtmlElement -> IO JSString
+        HTMLHtmlElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLHtmlElement.version Mozilla HTMLHtmlElement.version documentation> 
 getVersion ::
            (MonadIO m, FromJSString result) => HTMLHtmlElement -> m result
-getVersion self
-  = liftIO
-      (fromJSString <$> (js_getVersion (unHTMLHtmlElement self)))
+getVersion self = liftIO (fromJSString <$> (js_getVersion (self)))
  
 foreign import javascript unsafe "$1[\"manifest\"] = $2;"
-        js_setManifest :: JSRef HTMLHtmlElement -> JSString -> IO ()
+        js_setManifest :: HTMLHtmlElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLHtmlElement.manifest Mozilla HTMLHtmlElement.manifest documentation> 
 setManifest ::
             (MonadIO m, ToJSString val) => HTMLHtmlElement -> val -> m ()
 setManifest self val
-  = liftIO (js_setManifest (unHTMLHtmlElement self) (toJSString val))
+  = liftIO (js_setManifest (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"manifest\"]" js_getManifest
-        :: JSRef HTMLHtmlElement -> IO JSString
+        :: HTMLHtmlElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLHtmlElement.manifest Mozilla HTMLHtmlElement.manifest documentation> 
 getManifest ::
             (MonadIO m, FromJSString result) => HTMLHtmlElement -> m result
 getManifest self
-  = liftIO
-      (fromJSString <$> (js_getManifest (unHTMLHtmlElement self)))
+  = liftIO (fromJSString <$> (js_getManifest (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLIFrameElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLIFrameElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLIFrameElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLIFrameElement.hs
@@ -18,7 +18,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -32,265 +32,232 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"getSVGDocument\"]()"
-        js_getSVGDocument ::
-        JSRef HTMLIFrameElement -> IO (JSRef SVGDocument)
+        js_getSVGDocument :: HTMLIFrameElement -> IO (Nullable SVGDocument)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement.getSVGDocument Mozilla HTMLIFrameElement.getSVGDocument documentation> 
 getSVGDocument ::
                (MonadIO m) => HTMLIFrameElement -> m (Maybe SVGDocument)
 getSVGDocument self
-  = liftIO
-      ((js_getSVGDocument (unHTMLIFrameElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getSVGDocument (self)))
  
 foreign import javascript unsafe "$1[\"align\"] = $2;" js_setAlign
-        :: JSRef HTMLIFrameElement -> JSString -> IO ()
+        :: HTMLIFrameElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement.align Mozilla HTMLIFrameElement.align documentation> 
 setAlign ::
          (MonadIO m, ToJSString val) => HTMLIFrameElement -> val -> m ()
-setAlign self val
-  = liftIO (js_setAlign (unHTMLIFrameElement self) (toJSString val))
+setAlign self val = liftIO (js_setAlign (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"align\"]" js_getAlign ::
-        JSRef HTMLIFrameElement -> IO JSString
+        HTMLIFrameElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement.align Mozilla HTMLIFrameElement.align documentation> 
 getAlign ::
          (MonadIO m, FromJSString result) => HTMLIFrameElement -> m result
-getAlign self
-  = liftIO
-      (fromJSString <$> (js_getAlign (unHTMLIFrameElement self)))
+getAlign self = liftIO (fromJSString <$> (js_getAlign (self)))
  
 foreign import javascript unsafe "$1[\"frameBorder\"] = $2;"
-        js_setFrameBorder :: JSRef HTMLIFrameElement -> JSString -> IO ()
+        js_setFrameBorder :: HTMLIFrameElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement.frameBorder Mozilla HTMLIFrameElement.frameBorder documentation> 
 setFrameBorder ::
                (MonadIO m, ToJSString val) => HTMLIFrameElement -> val -> m ()
 setFrameBorder self val
-  = liftIO
-      (js_setFrameBorder (unHTMLIFrameElement self) (toJSString val))
+  = liftIO (js_setFrameBorder (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"frameBorder\"]"
-        js_getFrameBorder :: JSRef HTMLIFrameElement -> IO JSString
+        js_getFrameBorder :: HTMLIFrameElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement.frameBorder Mozilla HTMLIFrameElement.frameBorder documentation> 
 getFrameBorder ::
                (MonadIO m, FromJSString result) => HTMLIFrameElement -> m result
 getFrameBorder self
-  = liftIO
-      (fromJSString <$> (js_getFrameBorder (unHTMLIFrameElement self)))
+  = liftIO (fromJSString <$> (js_getFrameBorder (self)))
  
 foreign import javascript unsafe "$1[\"height\"] = $2;"
-        js_setHeight :: JSRef HTMLIFrameElement -> JSString -> IO ()
+        js_setHeight :: HTMLIFrameElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement.height Mozilla HTMLIFrameElement.height documentation> 
 setHeight ::
           (MonadIO m, ToJSString val) => HTMLIFrameElement -> val -> m ()
-setHeight self val
-  = liftIO (js_setHeight (unHTMLIFrameElement self) (toJSString val))
+setHeight self val = liftIO (js_setHeight (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"height\"]" js_getHeight ::
-        JSRef HTMLIFrameElement -> IO JSString
+        HTMLIFrameElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement.height Mozilla HTMLIFrameElement.height documentation> 
 getHeight ::
           (MonadIO m, FromJSString result) => HTMLIFrameElement -> m result
-getHeight self
-  = liftIO
-      (fromJSString <$> (js_getHeight (unHTMLIFrameElement self)))
+getHeight self = liftIO (fromJSString <$> (js_getHeight (self)))
  
 foreign import javascript unsafe "$1[\"longDesc\"] = $2;"
-        js_setLongDesc :: JSRef HTMLIFrameElement -> JSString -> IO ()
+        js_setLongDesc :: HTMLIFrameElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement.longDesc Mozilla HTMLIFrameElement.longDesc documentation> 
 setLongDesc ::
             (MonadIO m, ToJSString val) => HTMLIFrameElement -> val -> m ()
 setLongDesc self val
-  = liftIO
-      (js_setLongDesc (unHTMLIFrameElement self) (toJSString val))
+  = liftIO (js_setLongDesc (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"longDesc\"]" js_getLongDesc
-        :: JSRef HTMLIFrameElement -> IO JSString
+        :: HTMLIFrameElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement.longDesc Mozilla HTMLIFrameElement.longDesc documentation> 
 getLongDesc ::
             (MonadIO m, FromJSString result) => HTMLIFrameElement -> m result
 getLongDesc self
-  = liftIO
-      (fromJSString <$> (js_getLongDesc (unHTMLIFrameElement self)))
+  = liftIO (fromJSString <$> (js_getLongDesc (self)))
  
 foreign import javascript unsafe "$1[\"marginHeight\"] = $2;"
-        js_setMarginHeight :: JSRef HTMLIFrameElement -> JSString -> IO ()
+        js_setMarginHeight :: HTMLIFrameElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement.marginHeight Mozilla HTMLIFrameElement.marginHeight documentation> 
 setMarginHeight ::
                 (MonadIO m, ToJSString val) => HTMLIFrameElement -> val -> m ()
 setMarginHeight self val
-  = liftIO
-      (js_setMarginHeight (unHTMLIFrameElement self) (toJSString val))
+  = liftIO (js_setMarginHeight (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"marginHeight\"]"
-        js_getMarginHeight :: JSRef HTMLIFrameElement -> IO JSString
+        js_getMarginHeight :: HTMLIFrameElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement.marginHeight Mozilla HTMLIFrameElement.marginHeight documentation> 
 getMarginHeight ::
                 (MonadIO m, FromJSString result) => HTMLIFrameElement -> m result
 getMarginHeight self
-  = liftIO
-      (fromJSString <$> (js_getMarginHeight (unHTMLIFrameElement self)))
+  = liftIO (fromJSString <$> (js_getMarginHeight (self)))
  
 foreign import javascript unsafe "$1[\"marginWidth\"] = $2;"
-        js_setMarginWidth :: JSRef HTMLIFrameElement -> JSString -> IO ()
+        js_setMarginWidth :: HTMLIFrameElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement.marginWidth Mozilla HTMLIFrameElement.marginWidth documentation> 
 setMarginWidth ::
                (MonadIO m, ToJSString val) => HTMLIFrameElement -> val -> m ()
 setMarginWidth self val
-  = liftIO
-      (js_setMarginWidth (unHTMLIFrameElement self) (toJSString val))
+  = liftIO (js_setMarginWidth (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"marginWidth\"]"
-        js_getMarginWidth :: JSRef HTMLIFrameElement -> IO JSString
+        js_getMarginWidth :: HTMLIFrameElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement.marginWidth Mozilla HTMLIFrameElement.marginWidth documentation> 
 getMarginWidth ::
                (MonadIO m, FromJSString result) => HTMLIFrameElement -> m result
 getMarginWidth self
-  = liftIO
-      (fromJSString <$> (js_getMarginWidth (unHTMLIFrameElement self)))
+  = liftIO (fromJSString <$> (js_getMarginWidth (self)))
  
 foreign import javascript unsafe "$1[\"name\"] = $2;" js_setName ::
-        JSRef HTMLIFrameElement -> JSString -> IO ()
+        HTMLIFrameElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement.name Mozilla HTMLIFrameElement.name documentation> 
 setName ::
         (MonadIO m, ToJSString val) => HTMLIFrameElement -> val -> m ()
-setName self val
-  = liftIO (js_setName (unHTMLIFrameElement self) (toJSString val))
+setName self val = liftIO (js_setName (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"name\"]" js_getName ::
-        JSRef HTMLIFrameElement -> IO JSString
+        HTMLIFrameElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement.name Mozilla HTMLIFrameElement.name documentation> 
 getName ::
         (MonadIO m, FromJSString result) => HTMLIFrameElement -> m result
-getName self
-  = liftIO (fromJSString <$> (js_getName (unHTMLIFrameElement self)))
+getName self = liftIO (fromJSString <$> (js_getName (self)))
  
 foreign import javascript unsafe "$1[\"sandbox\"] = $2;"
-        js_setSandbox :: JSRef HTMLIFrameElement -> JSString -> IO ()
+        js_setSandbox :: HTMLIFrameElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement.sandbox Mozilla HTMLIFrameElement.sandbox documentation> 
 setSandbox ::
            (MonadIO m, ToJSString val) => HTMLIFrameElement -> val -> m ()
 setSandbox self val
-  = liftIO
-      (js_setSandbox (unHTMLIFrameElement self) (toJSString val))
+  = liftIO (js_setSandbox (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"sandbox\"]" js_getSandbox ::
-        JSRef HTMLIFrameElement -> IO JSString
+        HTMLIFrameElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement.sandbox Mozilla HTMLIFrameElement.sandbox documentation> 
 getSandbox ::
            (MonadIO m, FromJSString result) => HTMLIFrameElement -> m result
-getSandbox self
-  = liftIO
-      (fromJSString <$> (js_getSandbox (unHTMLIFrameElement self)))
+getSandbox self = liftIO (fromJSString <$> (js_getSandbox (self)))
  
 foreign import javascript unsafe "$1[\"scrolling\"] = $2;"
-        js_setScrolling :: JSRef HTMLIFrameElement -> JSString -> IO ()
+        js_setScrolling :: HTMLIFrameElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement.scrolling Mozilla HTMLIFrameElement.scrolling documentation> 
 setScrolling ::
              (MonadIO m, ToJSString val) => HTMLIFrameElement -> val -> m ()
 setScrolling self val
-  = liftIO
-      (js_setScrolling (unHTMLIFrameElement self) (toJSString val))
+  = liftIO (js_setScrolling (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"scrolling\"]"
-        js_getScrolling :: JSRef HTMLIFrameElement -> IO JSString
+        js_getScrolling :: HTMLIFrameElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement.scrolling Mozilla HTMLIFrameElement.scrolling documentation> 
 getScrolling ::
              (MonadIO m, FromJSString result) => HTMLIFrameElement -> m result
 getScrolling self
-  = liftIO
-      (fromJSString <$> (js_getScrolling (unHTMLIFrameElement self)))
+  = liftIO (fromJSString <$> (js_getScrolling (self)))
  
 foreign import javascript unsafe "$1[\"src\"] = $2;" js_setSrc ::
-        JSRef HTMLIFrameElement -> JSString -> IO ()
+        HTMLIFrameElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement.src Mozilla HTMLIFrameElement.src documentation> 
 setSrc ::
        (MonadIO m, ToJSString val) => HTMLIFrameElement -> val -> m ()
-setSrc self val
-  = liftIO (js_setSrc (unHTMLIFrameElement self) (toJSString val))
+setSrc self val = liftIO (js_setSrc (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"src\"]" js_getSrc ::
-        JSRef HTMLIFrameElement -> IO JSString
+        HTMLIFrameElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement.src Mozilla HTMLIFrameElement.src documentation> 
 getSrc ::
        (MonadIO m, FromJSString result) => HTMLIFrameElement -> m result
-getSrc self
-  = liftIO (fromJSString <$> (js_getSrc (unHTMLIFrameElement self)))
+getSrc self = liftIO (fromJSString <$> (js_getSrc (self)))
  
 foreign import javascript unsafe "$1[\"srcdoc\"] = $2;"
-        js_setSrcdoc :: JSRef HTMLIFrameElement -> JSString -> IO ()
+        js_setSrcdoc :: HTMLIFrameElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement.srcdoc Mozilla HTMLIFrameElement.srcdoc documentation> 
 setSrcdoc ::
           (MonadIO m, ToJSString val) => HTMLIFrameElement -> val -> m ()
-setSrcdoc self val
-  = liftIO (js_setSrcdoc (unHTMLIFrameElement self) (toJSString val))
+setSrcdoc self val = liftIO (js_setSrcdoc (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"srcdoc\"]" js_getSrcdoc ::
-        JSRef HTMLIFrameElement -> IO JSString
+        HTMLIFrameElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement.srcdoc Mozilla HTMLIFrameElement.srcdoc documentation> 
 getSrcdoc ::
           (MonadIO m, FromJSString result) => HTMLIFrameElement -> m result
-getSrcdoc self
-  = liftIO
-      (fromJSString <$> (js_getSrcdoc (unHTMLIFrameElement self)))
+getSrcdoc self = liftIO (fromJSString <$> (js_getSrcdoc (self)))
  
 foreign import javascript unsafe "$1[\"width\"] = $2;" js_setWidth
-        :: JSRef HTMLIFrameElement -> JSString -> IO ()
+        :: HTMLIFrameElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement.width Mozilla HTMLIFrameElement.width documentation> 
 setWidth ::
          (MonadIO m, ToJSString val) => HTMLIFrameElement -> val -> m ()
-setWidth self val
-  = liftIO (js_setWidth (unHTMLIFrameElement self) (toJSString val))
+setWidth self val = liftIO (js_setWidth (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"width\"]" js_getWidth ::
-        JSRef HTMLIFrameElement -> IO JSString
+        HTMLIFrameElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement.width Mozilla HTMLIFrameElement.width documentation> 
 getWidth ::
          (MonadIO m, FromJSString result) => HTMLIFrameElement -> m result
-getWidth self
-  = liftIO
-      (fromJSString <$> (js_getWidth (unHTMLIFrameElement self)))
+getWidth self = liftIO (fromJSString <$> (js_getWidth (self)))
  
 foreign import javascript unsafe "$1[\"contentDocument\"]"
         js_getContentDocument ::
-        JSRef HTMLIFrameElement -> IO (JSRef Document)
+        HTMLIFrameElement -> IO (Nullable Document)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement.contentDocument Mozilla HTMLIFrameElement.contentDocument documentation> 
 getContentDocument ::
                    (MonadIO m) => HTMLIFrameElement -> m (Maybe Document)
 getContentDocument self
-  = liftIO
-      ((js_getContentDocument (unHTMLIFrameElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getContentDocument (self)))
  
 foreign import javascript unsafe "$1[\"contentWindow\"]"
-        js_getContentWindow :: JSRef HTMLIFrameElement -> IO (JSRef Window)
+        js_getContentWindow :: HTMLIFrameElement -> IO (Nullable Window)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement.contentWindow Mozilla HTMLIFrameElement.contentWindow documentation> 
 getContentWindow ::
                  (MonadIO m) => HTMLIFrameElement -> m (Maybe Window)
 getContentWindow self
-  = liftIO
-      ((js_getContentWindow (unHTMLIFrameElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getContentWindow (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLImageElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLImageElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLImageElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLImageElement.hs
@@ -20,7 +20,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -34,330 +34,295 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"name\"] = $2;" js_setName ::
-        JSRef HTMLImageElement -> JSString -> IO ()
+        HTMLImageElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement.name Mozilla HTMLImageElement.name documentation> 
 setName ::
         (MonadIO m, ToJSString val) => HTMLImageElement -> val -> m ()
-setName self val
-  = liftIO (js_setName (unHTMLImageElement self) (toJSString val))
+setName self val = liftIO (js_setName (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"name\"]" js_getName ::
-        JSRef HTMLImageElement -> IO JSString
+        HTMLImageElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement.name Mozilla HTMLImageElement.name documentation> 
 getName ::
         (MonadIO m, FromJSString result) => HTMLImageElement -> m result
-getName self
-  = liftIO (fromJSString <$> (js_getName (unHTMLImageElement self)))
+getName self = liftIO (fromJSString <$> (js_getName (self)))
  
 foreign import javascript unsafe "$1[\"align\"] = $2;" js_setAlign
-        :: JSRef HTMLImageElement -> JSString -> IO ()
+        :: HTMLImageElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement.align Mozilla HTMLImageElement.align documentation> 
 setAlign ::
          (MonadIO m, ToJSString val) => HTMLImageElement -> val -> m ()
-setAlign self val
-  = liftIO (js_setAlign (unHTMLImageElement self) (toJSString val))
+setAlign self val = liftIO (js_setAlign (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"align\"]" js_getAlign ::
-        JSRef HTMLImageElement -> IO JSString
+        HTMLImageElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement.align Mozilla HTMLImageElement.align documentation> 
 getAlign ::
          (MonadIO m, FromJSString result) => HTMLImageElement -> m result
-getAlign self
-  = liftIO (fromJSString <$> (js_getAlign (unHTMLImageElement self)))
+getAlign self = liftIO (fromJSString <$> (js_getAlign (self)))
  
 foreign import javascript unsafe "$1[\"alt\"] = $2;" js_setAlt ::
-        JSRef HTMLImageElement -> JSString -> IO ()
+        HTMLImageElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement.alt Mozilla HTMLImageElement.alt documentation> 
 setAlt ::
        (MonadIO m, ToJSString val) => HTMLImageElement -> val -> m ()
-setAlt self val
-  = liftIO (js_setAlt (unHTMLImageElement self) (toJSString val))
+setAlt self val = liftIO (js_setAlt (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"alt\"]" js_getAlt ::
-        JSRef HTMLImageElement -> IO JSString
+        HTMLImageElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement.alt Mozilla HTMLImageElement.alt documentation> 
 getAlt ::
        (MonadIO m, FromJSString result) => HTMLImageElement -> m result
-getAlt self
-  = liftIO (fromJSString <$> (js_getAlt (unHTMLImageElement self)))
+getAlt self = liftIO (fromJSString <$> (js_getAlt (self)))
  
 foreign import javascript unsafe "$1[\"border\"] = $2;"
-        js_setBorder :: JSRef HTMLImageElement -> JSString -> IO ()
+        js_setBorder :: HTMLImageElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement.border Mozilla HTMLImageElement.border documentation> 
 setBorder ::
           (MonadIO m, ToJSString val) => HTMLImageElement -> val -> m ()
-setBorder self val
-  = liftIO (js_setBorder (unHTMLImageElement self) (toJSString val))
+setBorder self val = liftIO (js_setBorder (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"border\"]" js_getBorder ::
-        JSRef HTMLImageElement -> IO JSString
+        HTMLImageElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement.border Mozilla HTMLImageElement.border documentation> 
 getBorder ::
           (MonadIO m, FromJSString result) => HTMLImageElement -> m result
-getBorder self
-  = liftIO
-      (fromJSString <$> (js_getBorder (unHTMLImageElement self)))
+getBorder self = liftIO (fromJSString <$> (js_getBorder (self)))
  
 foreign import javascript unsafe "$1[\"crossOrigin\"] = $2;"
-        js_setCrossOrigin :: JSRef HTMLImageElement -> JSString -> IO ()
+        js_setCrossOrigin :: HTMLImageElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement.crossOrigin Mozilla HTMLImageElement.crossOrigin documentation> 
 setCrossOrigin ::
                (MonadIO m, ToJSString val) => HTMLImageElement -> val -> m ()
 setCrossOrigin self val
-  = liftIO
-      (js_setCrossOrigin (unHTMLImageElement self) (toJSString val))
+  = liftIO (js_setCrossOrigin (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"crossOrigin\"]"
-        js_getCrossOrigin :: JSRef HTMLImageElement -> IO JSString
+        js_getCrossOrigin :: HTMLImageElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement.crossOrigin Mozilla HTMLImageElement.crossOrigin documentation> 
 getCrossOrigin ::
                (MonadIO m, FromJSString result) => HTMLImageElement -> m result
 getCrossOrigin self
-  = liftIO
-      (fromJSString <$> (js_getCrossOrigin (unHTMLImageElement self)))
+  = liftIO (fromJSString <$> (js_getCrossOrigin (self)))
  
 foreign import javascript unsafe "$1[\"height\"] = $2;"
-        js_setHeight :: JSRef HTMLImageElement -> Int -> IO ()
+        js_setHeight :: HTMLImageElement -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement.height Mozilla HTMLImageElement.height documentation> 
 setHeight :: (MonadIO m) => HTMLImageElement -> Int -> m ()
-setHeight self val
-  = liftIO (js_setHeight (unHTMLImageElement self) val)
+setHeight self val = liftIO (js_setHeight (self) val)
  
 foreign import javascript unsafe "$1[\"height\"]" js_getHeight ::
-        JSRef HTMLImageElement -> IO Int
+        HTMLImageElement -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement.height Mozilla HTMLImageElement.height documentation> 
 getHeight :: (MonadIO m) => HTMLImageElement -> m Int
-getHeight self = liftIO (js_getHeight (unHTMLImageElement self))
+getHeight self = liftIO (js_getHeight (self))
  
 foreign import javascript unsafe "$1[\"hspace\"] = $2;"
-        js_setHspace :: JSRef HTMLImageElement -> Int -> IO ()
+        js_setHspace :: HTMLImageElement -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement.hspace Mozilla HTMLImageElement.hspace documentation> 
 setHspace :: (MonadIO m) => HTMLImageElement -> Int -> m ()
-setHspace self val
-  = liftIO (js_setHspace (unHTMLImageElement self) val)
+setHspace self val = liftIO (js_setHspace (self) val)
  
 foreign import javascript unsafe "$1[\"hspace\"]" js_getHspace ::
-        JSRef HTMLImageElement -> IO Int
+        HTMLImageElement -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement.hspace Mozilla HTMLImageElement.hspace documentation> 
 getHspace :: (MonadIO m) => HTMLImageElement -> m Int
-getHspace self = liftIO (js_getHspace (unHTMLImageElement self))
+getHspace self = liftIO (js_getHspace (self))
  
 foreign import javascript unsafe "$1[\"isMap\"] = $2;" js_setIsMap
-        :: JSRef HTMLImageElement -> Bool -> IO ()
+        :: HTMLImageElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement.isMap Mozilla HTMLImageElement.isMap documentation> 
 setIsMap :: (MonadIO m) => HTMLImageElement -> Bool -> m ()
-setIsMap self val
-  = liftIO (js_setIsMap (unHTMLImageElement self) val)
+setIsMap self val = liftIO (js_setIsMap (self) val)
  
 foreign import javascript unsafe "($1[\"isMap\"] ? 1 : 0)"
-        js_getIsMap :: JSRef HTMLImageElement -> IO Bool
+        js_getIsMap :: HTMLImageElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement.isMap Mozilla HTMLImageElement.isMap documentation> 
 getIsMap :: (MonadIO m) => HTMLImageElement -> m Bool
-getIsMap self = liftIO (js_getIsMap (unHTMLImageElement self))
+getIsMap self = liftIO (js_getIsMap (self))
  
 foreign import javascript unsafe "$1[\"longDesc\"] = $2;"
-        js_setLongDesc :: JSRef HTMLImageElement -> JSString -> IO ()
+        js_setLongDesc :: HTMLImageElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement.longDesc Mozilla HTMLImageElement.longDesc documentation> 
 setLongDesc ::
             (MonadIO m, ToJSString val) => HTMLImageElement -> val -> m ()
 setLongDesc self val
-  = liftIO
-      (js_setLongDesc (unHTMLImageElement self) (toJSString val))
+  = liftIO (js_setLongDesc (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"longDesc\"]" js_getLongDesc
-        :: JSRef HTMLImageElement -> IO JSString
+        :: HTMLImageElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement.longDesc Mozilla HTMLImageElement.longDesc documentation> 
 getLongDesc ::
             (MonadIO m, FromJSString result) => HTMLImageElement -> m result
 getLongDesc self
-  = liftIO
-      (fromJSString <$> (js_getLongDesc (unHTMLImageElement self)))
+  = liftIO (fromJSString <$> (js_getLongDesc (self)))
  
 foreign import javascript unsafe "$1[\"src\"] = $2;" js_setSrc ::
-        JSRef HTMLImageElement -> JSString -> IO ()
+        HTMLImageElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement.src Mozilla HTMLImageElement.src documentation> 
 setSrc ::
        (MonadIO m, ToJSString val) => HTMLImageElement -> val -> m ()
-setSrc self val
-  = liftIO (js_setSrc (unHTMLImageElement self) (toJSString val))
+setSrc self val = liftIO (js_setSrc (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"src\"]" js_getSrc ::
-        JSRef HTMLImageElement -> IO JSString
+        HTMLImageElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement.src Mozilla HTMLImageElement.src documentation> 
 getSrc ::
        (MonadIO m, FromJSString result) => HTMLImageElement -> m result
-getSrc self
-  = liftIO (fromJSString <$> (js_getSrc (unHTMLImageElement self)))
+getSrc self = liftIO (fromJSString <$> (js_getSrc (self)))
  
 foreign import javascript unsafe "$1[\"srcset\"] = $2;"
-        js_setSrcset :: JSRef HTMLImageElement -> JSString -> IO ()
+        js_setSrcset :: HTMLImageElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement.srcset Mozilla HTMLImageElement.srcset documentation> 
 setSrcset ::
           (MonadIO m, ToJSString val) => HTMLImageElement -> val -> m ()
-setSrcset self val
-  = liftIO (js_setSrcset (unHTMLImageElement self) (toJSString val))
+setSrcset self val = liftIO (js_setSrcset (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"srcset\"]" js_getSrcset ::
-        JSRef HTMLImageElement -> IO JSString
+        HTMLImageElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement.srcset Mozilla HTMLImageElement.srcset documentation> 
 getSrcset ::
           (MonadIO m, FromJSString result) => HTMLImageElement -> m result
-getSrcset self
-  = liftIO
-      (fromJSString <$> (js_getSrcset (unHTMLImageElement self)))
+getSrcset self = liftIO (fromJSString <$> (js_getSrcset (self)))
  
 foreign import javascript unsafe "$1[\"sizes\"] = $2;" js_setSizes
-        :: JSRef HTMLImageElement -> JSString -> IO ()
+        :: HTMLImageElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement.sizes Mozilla HTMLImageElement.sizes documentation> 
 setSizes ::
          (MonadIO m, ToJSString val) => HTMLImageElement -> val -> m ()
-setSizes self val
-  = liftIO (js_setSizes (unHTMLImageElement self) (toJSString val))
+setSizes self val = liftIO (js_setSizes (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"sizes\"]" js_getSizes ::
-        JSRef HTMLImageElement -> IO JSString
+        HTMLImageElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement.sizes Mozilla HTMLImageElement.sizes documentation> 
 getSizes ::
          (MonadIO m, FromJSString result) => HTMLImageElement -> m result
-getSizes self
-  = liftIO (fromJSString <$> (js_getSizes (unHTMLImageElement self)))
+getSizes self = liftIO (fromJSString <$> (js_getSizes (self)))
  
 foreign import javascript unsafe "$1[\"currentSrc\"]"
-        js_getCurrentSrc :: JSRef HTMLImageElement -> IO JSString
+        js_getCurrentSrc :: HTMLImageElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement.currentSrc Mozilla HTMLImageElement.currentSrc documentation> 
 getCurrentSrc ::
               (MonadIO m, FromJSString result) => HTMLImageElement -> m result
 getCurrentSrc self
-  = liftIO
-      (fromJSString <$> (js_getCurrentSrc (unHTMLImageElement self)))
+  = liftIO (fromJSString <$> (js_getCurrentSrc (self)))
  
 foreign import javascript unsafe "$1[\"useMap\"] = $2;"
-        js_setUseMap :: JSRef HTMLImageElement -> JSString -> IO ()
+        js_setUseMap :: HTMLImageElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement.useMap Mozilla HTMLImageElement.useMap documentation> 
 setUseMap ::
           (MonadIO m, ToJSString val) => HTMLImageElement -> val -> m ()
-setUseMap self val
-  = liftIO (js_setUseMap (unHTMLImageElement self) (toJSString val))
+setUseMap self val = liftIO (js_setUseMap (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"useMap\"]" js_getUseMap ::
-        JSRef HTMLImageElement -> IO JSString
+        HTMLImageElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement.useMap Mozilla HTMLImageElement.useMap documentation> 
 getUseMap ::
           (MonadIO m, FromJSString result) => HTMLImageElement -> m result
-getUseMap self
-  = liftIO
-      (fromJSString <$> (js_getUseMap (unHTMLImageElement self)))
+getUseMap self = liftIO (fromJSString <$> (js_getUseMap (self)))
  
 foreign import javascript unsafe "$1[\"vspace\"] = $2;"
-        js_setVspace :: JSRef HTMLImageElement -> Int -> IO ()
+        js_setVspace :: HTMLImageElement -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement.vspace Mozilla HTMLImageElement.vspace documentation> 
 setVspace :: (MonadIO m) => HTMLImageElement -> Int -> m ()
-setVspace self val
-  = liftIO (js_setVspace (unHTMLImageElement self) val)
+setVspace self val = liftIO (js_setVspace (self) val)
  
 foreign import javascript unsafe "$1[\"vspace\"]" js_getVspace ::
-        JSRef HTMLImageElement -> IO Int
+        HTMLImageElement -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement.vspace Mozilla HTMLImageElement.vspace documentation> 
 getVspace :: (MonadIO m) => HTMLImageElement -> m Int
-getVspace self = liftIO (js_getVspace (unHTMLImageElement self))
+getVspace self = liftIO (js_getVspace (self))
  
 foreign import javascript unsafe "$1[\"width\"] = $2;" js_setWidth
-        :: JSRef HTMLImageElement -> Int -> IO ()
+        :: HTMLImageElement -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement.width Mozilla HTMLImageElement.width documentation> 
 setWidth :: (MonadIO m) => HTMLImageElement -> Int -> m ()
-setWidth self val
-  = liftIO (js_setWidth (unHTMLImageElement self) val)
+setWidth self val = liftIO (js_setWidth (self) val)
  
 foreign import javascript unsafe "$1[\"width\"]" js_getWidth ::
-        JSRef HTMLImageElement -> IO Int
+        HTMLImageElement -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement.width Mozilla HTMLImageElement.width documentation> 
 getWidth :: (MonadIO m) => HTMLImageElement -> m Int
-getWidth self = liftIO (js_getWidth (unHTMLImageElement self))
+getWidth self = liftIO (js_getWidth (self))
  
 foreign import javascript unsafe "($1[\"complete\"] ? 1 : 0)"
-        js_getComplete :: JSRef HTMLImageElement -> IO Bool
+        js_getComplete :: HTMLImageElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement.complete Mozilla HTMLImageElement.complete documentation> 
 getComplete :: (MonadIO m) => HTMLImageElement -> m Bool
-getComplete self
-  = liftIO (js_getComplete (unHTMLImageElement self))
+getComplete self = liftIO (js_getComplete (self))
  
 foreign import javascript unsafe "$1[\"lowsrc\"] = $2;"
-        js_setLowsrc :: JSRef HTMLImageElement -> JSString -> IO ()
+        js_setLowsrc :: HTMLImageElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement.lowsrc Mozilla HTMLImageElement.lowsrc documentation> 
 setLowsrc ::
           (MonadIO m, ToJSString val) => HTMLImageElement -> val -> m ()
-setLowsrc self val
-  = liftIO (js_setLowsrc (unHTMLImageElement self) (toJSString val))
+setLowsrc self val = liftIO (js_setLowsrc (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"lowsrc\"]" js_getLowsrc ::
-        JSRef HTMLImageElement -> IO JSString
+        HTMLImageElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement.lowsrc Mozilla HTMLImageElement.lowsrc documentation> 
 getLowsrc ::
           (MonadIO m, FromJSString result) => HTMLImageElement -> m result
-getLowsrc self
-  = liftIO
-      (fromJSString <$> (js_getLowsrc (unHTMLImageElement self)))
+getLowsrc self = liftIO (fromJSString <$> (js_getLowsrc (self)))
  
 foreign import javascript unsafe "$1[\"naturalHeight\"]"
-        js_getNaturalHeight :: JSRef HTMLImageElement -> IO Int
+        js_getNaturalHeight :: HTMLImageElement -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement.naturalHeight Mozilla HTMLImageElement.naturalHeight documentation> 
 getNaturalHeight :: (MonadIO m) => HTMLImageElement -> m Int
-getNaturalHeight self
-  = liftIO (js_getNaturalHeight (unHTMLImageElement self))
+getNaturalHeight self = liftIO (js_getNaturalHeight (self))
  
 foreign import javascript unsafe "$1[\"naturalWidth\"]"
-        js_getNaturalWidth :: JSRef HTMLImageElement -> IO Int
+        js_getNaturalWidth :: HTMLImageElement -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement.naturalWidth Mozilla HTMLImageElement.naturalWidth documentation> 
 getNaturalWidth :: (MonadIO m) => HTMLImageElement -> m Int
-getNaturalWidth self
-  = liftIO (js_getNaturalWidth (unHTMLImageElement self))
+getNaturalWidth self = liftIO (js_getNaturalWidth (self))
  
 foreign import javascript unsafe "$1[\"x\"]" js_getX ::
-        JSRef HTMLImageElement -> IO Int
+        HTMLImageElement -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement.x Mozilla HTMLImageElement.x documentation> 
 getX :: (MonadIO m) => HTMLImageElement -> m Int
-getX self = liftIO (js_getX (unHTMLImageElement self))
+getX self = liftIO (js_getX (self))
  
 foreign import javascript unsafe "$1[\"y\"]" js_getY ::
-        JSRef HTMLImageElement -> IO Int
+        HTMLImageElement -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement.y Mozilla HTMLImageElement.y documentation> 
 getY :: (MonadIO m) => HTMLImageElement -> m Int
-getY self = liftIO (js_getY (unHTMLImageElement self))
+getY self = liftIO (js_getY (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLInputElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLInputElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLInputElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLInputElement.hs
@@ -55,7 +55,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -69,64 +69,58 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"stepUp\"]($2)" js_stepUp ::
-        JSRef HTMLInputElement -> Int -> IO ()
+        HTMLInputElement -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.stepUp Mozilla HTMLInputElement.stepUp documentation> 
 stepUp :: (MonadIO m) => HTMLInputElement -> Int -> m ()
-stepUp self n = liftIO (js_stepUp (unHTMLInputElement self) n)
+stepUp self n = liftIO (js_stepUp (self) n)
  
 foreign import javascript unsafe "$1[\"stepDown\"]($2)" js_stepDown
-        :: JSRef HTMLInputElement -> Int -> IO ()
+        :: HTMLInputElement -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.stepDown Mozilla HTMLInputElement.stepDown documentation> 
 stepDown :: (MonadIO m) => HTMLInputElement -> Int -> m ()
-stepDown self n = liftIO (js_stepDown (unHTMLInputElement self) n)
+stepDown self n = liftIO (js_stepDown (self) n)
  
 foreign import javascript unsafe
         "($1[\"checkValidity\"]() ? 1 : 0)" js_checkValidity ::
-        JSRef HTMLInputElement -> IO Bool
+        HTMLInputElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.checkValidity Mozilla HTMLInputElement.checkValidity documentation> 
 checkValidity :: (MonadIO m) => HTMLInputElement -> m Bool
-checkValidity self
-  = liftIO (js_checkValidity (unHTMLInputElement self))
+checkValidity self = liftIO (js_checkValidity (self))
  
 foreign import javascript unsafe "$1[\"setCustomValidity\"]($2)"
         js_setCustomValidity ::
-        JSRef HTMLInputElement -> JSRef (Maybe JSString) -> IO ()
+        HTMLInputElement -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.setCustomValidity Mozilla HTMLInputElement.setCustomValidity documentation> 
 setCustomValidity ::
                   (MonadIO m, ToJSString error) =>
                     HTMLInputElement -> Maybe error -> m ()
 setCustomValidity self error
-  = liftIO
-      (js_setCustomValidity (unHTMLInputElement self)
-         (toMaybeJSString error))
+  = liftIO (js_setCustomValidity (self) (toMaybeJSString error))
  
 foreign import javascript unsafe "$1[\"select\"]()" js_select ::
-        JSRef HTMLInputElement -> IO ()
+        HTMLInputElement -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.select Mozilla HTMLInputElement.select documentation> 
 select :: (MonadIO m) => HTMLInputElement -> m ()
-select self = liftIO (js_select (unHTMLInputElement self))
+select self = liftIO (js_select (self))
  
 foreign import javascript unsafe "$1[\"setRangeText\"]($2)"
-        js_setRangeText :: JSRef HTMLInputElement -> JSString -> IO ()
+        js_setRangeText :: HTMLInputElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.setRangeText Mozilla HTMLInputElement.setRangeText documentation> 
 setRangeText ::
              (MonadIO m, ToJSString replacement) =>
                HTMLInputElement -> replacement -> m ()
 setRangeText self replacement
-  = liftIO
-      (js_setRangeText (unHTMLInputElement self)
-         (toJSString replacement))
+  = liftIO (js_setRangeText (self) (toJSString replacement))
  
 foreign import javascript unsafe
         "$1[\"setRangeText\"]($2, $3, $4,\n$5)" js_setRangeText4 ::
-        JSRef HTMLInputElement ->
-          JSString -> Word -> Word -> JSString -> IO ()
+        HTMLInputElement -> JSString -> Word -> Word -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.setRangeText Mozilla HTMLInputElement.setRangeText documentation> 
 setRangeText4 ::
@@ -135,15 +129,12 @@
                   replacement -> Word -> Word -> selectionMode -> m ()
 setRangeText4 self replacement start end selectionMode
   = liftIO
-      (js_setRangeText4 (unHTMLInputElement self)
-         (toJSString replacement)
-         start
-         end
+      (js_setRangeText4 (self) (toJSString replacement) start end
          (toJSString selectionMode))
  
 foreign import javascript unsafe
         "$1[\"setSelectionRange\"]($2, $3,\n$4)" js_setSelectionRange ::
-        JSRef HTMLInputElement -> Int -> Int -> JSString -> IO ()
+        HTMLInputElement -> Int -> Int -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.setSelectionRange Mozilla HTMLInputElement.setSelectionRange documentation> 
 setSelectionRange ::
@@ -151,845 +142,742 @@
                     HTMLInputElement -> Int -> Int -> direction -> m ()
 setSelectionRange self start end direction
   = liftIO
-      (js_setSelectionRange (unHTMLInputElement self) start end
-         (toJSString direction))
+      (js_setSelectionRange (self) start end (toJSString direction))
  
 foreign import javascript unsafe "$1[\"accept\"] = $2;"
-        js_setAccept :: JSRef HTMLInputElement -> JSString -> IO ()
+        js_setAccept :: HTMLInputElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.accept Mozilla HTMLInputElement.accept documentation> 
 setAccept ::
           (MonadIO m, ToJSString val) => HTMLInputElement -> val -> m ()
-setAccept self val
-  = liftIO (js_setAccept (unHTMLInputElement self) (toJSString val))
+setAccept self val = liftIO (js_setAccept (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"accept\"]" js_getAccept ::
-        JSRef HTMLInputElement -> IO JSString
+        HTMLInputElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.accept Mozilla HTMLInputElement.accept documentation> 
 getAccept ::
           (MonadIO m, FromJSString result) => HTMLInputElement -> m result
-getAccept self
-  = liftIO
-      (fromJSString <$> (js_getAccept (unHTMLInputElement self)))
+getAccept self = liftIO (fromJSString <$> (js_getAccept (self)))
  
 foreign import javascript unsafe "$1[\"alt\"] = $2;" js_setAlt ::
-        JSRef HTMLInputElement -> JSString -> IO ()
+        HTMLInputElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.alt Mozilla HTMLInputElement.alt documentation> 
 setAlt ::
        (MonadIO m, ToJSString val) => HTMLInputElement -> val -> m ()
-setAlt self val
-  = liftIO (js_setAlt (unHTMLInputElement self) (toJSString val))
+setAlt self val = liftIO (js_setAlt (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"alt\"]" js_getAlt ::
-        JSRef HTMLInputElement -> IO JSString
+        HTMLInputElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.alt Mozilla HTMLInputElement.alt documentation> 
 getAlt ::
        (MonadIO m, FromJSString result) => HTMLInputElement -> m result
-getAlt self
-  = liftIO (fromJSString <$> (js_getAlt (unHTMLInputElement self)))
+getAlt self = liftIO (fromJSString <$> (js_getAlt (self)))
  
 foreign import javascript unsafe "$1[\"autocomplete\"] = $2;"
-        js_setAutocomplete :: JSRef HTMLInputElement -> JSString -> IO ()
+        js_setAutocomplete :: HTMLInputElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.autocomplete Mozilla HTMLInputElement.autocomplete documentation> 
 setAutocomplete ::
                 (MonadIO m, ToJSString val) => HTMLInputElement -> val -> m ()
 setAutocomplete self val
-  = liftIO
-      (js_setAutocomplete (unHTMLInputElement self) (toJSString val))
+  = liftIO (js_setAutocomplete (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"autocomplete\"]"
-        js_getAutocomplete :: JSRef HTMLInputElement -> IO JSString
+        js_getAutocomplete :: HTMLInputElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.autocomplete Mozilla HTMLInputElement.autocomplete documentation> 
 getAutocomplete ::
                 (MonadIO m, FromJSString result) => HTMLInputElement -> m result
 getAutocomplete self
-  = liftIO
-      (fromJSString <$> (js_getAutocomplete (unHTMLInputElement self)))
+  = liftIO (fromJSString <$> (js_getAutocomplete (self)))
  
 foreign import javascript unsafe "$1[\"autofocus\"] = $2;"
-        js_setAutofocus :: JSRef HTMLInputElement -> Bool -> IO ()
+        js_setAutofocus :: HTMLInputElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.autofocus Mozilla HTMLInputElement.autofocus documentation> 
 setAutofocus :: (MonadIO m) => HTMLInputElement -> Bool -> m ()
-setAutofocus self val
-  = liftIO (js_setAutofocus (unHTMLInputElement self) val)
+setAutofocus self val = liftIO (js_setAutofocus (self) val)
  
 foreign import javascript unsafe "($1[\"autofocus\"] ? 1 : 0)"
-        js_getAutofocus :: JSRef HTMLInputElement -> IO Bool
+        js_getAutofocus :: HTMLInputElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.autofocus Mozilla HTMLInputElement.autofocus documentation> 
 getAutofocus :: (MonadIO m) => HTMLInputElement -> m Bool
-getAutofocus self
-  = liftIO (js_getAutofocus (unHTMLInputElement self))
+getAutofocus self = liftIO (js_getAutofocus (self))
  
 foreign import javascript unsafe "$1[\"defaultChecked\"] = $2;"
-        js_setDefaultChecked :: JSRef HTMLInputElement -> Bool -> IO ()
+        js_setDefaultChecked :: HTMLInputElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.defaultChecked Mozilla HTMLInputElement.defaultChecked documentation> 
 setDefaultChecked ::
                   (MonadIO m) => HTMLInputElement -> Bool -> m ()
 setDefaultChecked self val
-  = liftIO (js_setDefaultChecked (unHTMLInputElement self) val)
+  = liftIO (js_setDefaultChecked (self) val)
  
 foreign import javascript unsafe "($1[\"defaultChecked\"] ? 1 : 0)"
-        js_getDefaultChecked :: JSRef HTMLInputElement -> IO Bool
+        js_getDefaultChecked :: HTMLInputElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.defaultChecked Mozilla HTMLInputElement.defaultChecked documentation> 
 getDefaultChecked :: (MonadIO m) => HTMLInputElement -> m Bool
-getDefaultChecked self
-  = liftIO (js_getDefaultChecked (unHTMLInputElement self))
+getDefaultChecked self = liftIO (js_getDefaultChecked (self))
  
 foreign import javascript unsafe "$1[\"checked\"] = $2;"
-        js_setChecked :: JSRef HTMLInputElement -> Bool -> IO ()
+        js_setChecked :: HTMLInputElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.checked Mozilla HTMLInputElement.checked documentation> 
 setChecked :: (MonadIO m) => HTMLInputElement -> Bool -> m ()
-setChecked self val
-  = liftIO (js_setChecked (unHTMLInputElement self) val)
+setChecked self val = liftIO (js_setChecked (self) val)
  
 foreign import javascript unsafe "($1[\"checked\"] ? 1 : 0)"
-        js_getChecked :: JSRef HTMLInputElement -> IO Bool
+        js_getChecked :: HTMLInputElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.checked Mozilla HTMLInputElement.checked documentation> 
 getChecked :: (MonadIO m) => HTMLInputElement -> m Bool
-getChecked self = liftIO (js_getChecked (unHTMLInputElement self))
+getChecked self = liftIO (js_getChecked (self))
  
 foreign import javascript unsafe "$1[\"dirName\"] = $2;"
-        js_setDirName :: JSRef HTMLInputElement -> JSString -> IO ()
+        js_setDirName :: HTMLInputElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.dirName Mozilla HTMLInputElement.dirName documentation> 
 setDirName ::
            (MonadIO m, ToJSString val) => HTMLInputElement -> val -> m ()
 setDirName self val
-  = liftIO (js_setDirName (unHTMLInputElement self) (toJSString val))
+  = liftIO (js_setDirName (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"dirName\"]" js_getDirName ::
-        JSRef HTMLInputElement -> IO JSString
+        HTMLInputElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.dirName Mozilla HTMLInputElement.dirName documentation> 
 getDirName ::
            (MonadIO m, FromJSString result) => HTMLInputElement -> m result
-getDirName self
-  = liftIO
-      (fromJSString <$> (js_getDirName (unHTMLInputElement self)))
+getDirName self = liftIO (fromJSString <$> (js_getDirName (self)))
  
 foreign import javascript unsafe "$1[\"disabled\"] = $2;"
-        js_setDisabled :: JSRef HTMLInputElement -> Bool -> IO ()
+        js_setDisabled :: HTMLInputElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.disabled Mozilla HTMLInputElement.disabled documentation> 
 setDisabled :: (MonadIO m) => HTMLInputElement -> Bool -> m ()
-setDisabled self val
-  = liftIO (js_setDisabled (unHTMLInputElement self) val)
+setDisabled self val = liftIO (js_setDisabled (self) val)
  
 foreign import javascript unsafe "($1[\"disabled\"] ? 1 : 0)"
-        js_getDisabled :: JSRef HTMLInputElement -> IO Bool
+        js_getDisabled :: HTMLInputElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.disabled Mozilla HTMLInputElement.disabled documentation> 
 getDisabled :: (MonadIO m) => HTMLInputElement -> m Bool
-getDisabled self
-  = liftIO (js_getDisabled (unHTMLInputElement self))
+getDisabled self = liftIO (js_getDisabled (self))
  
 foreign import javascript unsafe "$1[\"form\"]" js_getForm ::
-        JSRef HTMLInputElement -> IO (JSRef HTMLFormElement)
+        HTMLInputElement -> IO (Nullable HTMLFormElement)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.form Mozilla HTMLInputElement.form documentation> 
 getForm ::
         (MonadIO m) => HTMLInputElement -> m (Maybe HTMLFormElement)
-getForm self
-  = liftIO ((js_getForm (unHTMLInputElement self)) >>= fromJSRef)
+getForm self = liftIO (nullableToMaybe <$> (js_getForm (self)))
  
 foreign import javascript unsafe "$1[\"files\"] = $2;" js_setFiles
-        :: JSRef HTMLInputElement -> JSRef FileList -> IO ()
+        :: HTMLInputElement -> Nullable FileList -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.files Mozilla HTMLInputElement.files documentation> 
 setFiles ::
          (MonadIO m) => HTMLInputElement -> Maybe FileList -> m ()
 setFiles self val
-  = liftIO
-      (js_setFiles (unHTMLInputElement self) (maybe jsNull pToJSRef val))
+  = liftIO (js_setFiles (self) (maybeToNullable val))
  
 foreign import javascript unsafe "$1[\"files\"]" js_getFiles ::
-        JSRef HTMLInputElement -> IO (JSRef FileList)
+        HTMLInputElement -> IO (Nullable FileList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.files Mozilla HTMLInputElement.files documentation> 
 getFiles :: (MonadIO m) => HTMLInputElement -> m (Maybe FileList)
-getFiles self
-  = liftIO ((js_getFiles (unHTMLInputElement self)) >>= fromJSRef)
+getFiles self = liftIO (nullableToMaybe <$> (js_getFiles (self)))
  
 foreign import javascript unsafe "$1[\"formAction\"] = $2;"
-        js_setFormAction :: JSRef HTMLInputElement -> JSString -> IO ()
+        js_setFormAction :: HTMLInputElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.formAction Mozilla HTMLInputElement.formAction documentation> 
 setFormAction ::
               (MonadIO m, ToJSString val) => HTMLInputElement -> val -> m ()
 setFormAction self val
-  = liftIO
-      (js_setFormAction (unHTMLInputElement self) (toJSString val))
+  = liftIO (js_setFormAction (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"formAction\"]"
-        js_getFormAction :: JSRef HTMLInputElement -> IO JSString
+        js_getFormAction :: HTMLInputElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.formAction Mozilla HTMLInputElement.formAction documentation> 
 getFormAction ::
               (MonadIO m, FromJSString result) => HTMLInputElement -> m result
 getFormAction self
-  = liftIO
-      (fromJSString <$> (js_getFormAction (unHTMLInputElement self)))
+  = liftIO (fromJSString <$> (js_getFormAction (self)))
  
 foreign import javascript unsafe "$1[\"formEnctype\"] = $2;"
-        js_setFormEnctype ::
-        JSRef HTMLInputElement -> JSRef (Maybe JSString) -> IO ()
+        js_setFormEnctype :: HTMLInputElement -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.formEnctype Mozilla HTMLInputElement.formEnctype documentation> 
 setFormEnctype ::
                (MonadIO m, ToJSString val) =>
                  HTMLInputElement -> Maybe val -> m ()
 setFormEnctype self val
-  = liftIO
-      (js_setFormEnctype (unHTMLInputElement self) (toMaybeJSString val))
+  = liftIO (js_setFormEnctype (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"formEnctype\"]"
-        js_getFormEnctype ::
-        JSRef HTMLInputElement -> IO (JSRef (Maybe JSString))
+        js_getFormEnctype :: HTMLInputElement -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.formEnctype Mozilla HTMLInputElement.formEnctype documentation> 
 getFormEnctype ::
                (MonadIO m, FromJSString result) =>
                  HTMLInputElement -> m (Maybe result)
 getFormEnctype self
-  = liftIO
-      (fromMaybeJSString <$>
-         (js_getFormEnctype (unHTMLInputElement self)))
+  = liftIO (fromMaybeJSString <$> (js_getFormEnctype (self)))
  
 foreign import javascript unsafe "$1[\"formMethod\"] = $2;"
-        js_setFormMethod ::
-        JSRef HTMLInputElement -> JSRef (Maybe JSString) -> IO ()
+        js_setFormMethod :: HTMLInputElement -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.formMethod Mozilla HTMLInputElement.formMethod documentation> 
 setFormMethod ::
               (MonadIO m, ToJSString val) =>
                 HTMLInputElement -> Maybe val -> m ()
 setFormMethod self val
-  = liftIO
-      (js_setFormMethod (unHTMLInputElement self) (toMaybeJSString val))
+  = liftIO (js_setFormMethod (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"formMethod\"]"
-        js_getFormMethod ::
-        JSRef HTMLInputElement -> IO (JSRef (Maybe JSString))
+        js_getFormMethod :: HTMLInputElement -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.formMethod Mozilla HTMLInputElement.formMethod documentation> 
 getFormMethod ::
               (MonadIO m, FromJSString result) =>
                 HTMLInputElement -> m (Maybe result)
 getFormMethod self
-  = liftIO
-      (fromMaybeJSString <$>
-         (js_getFormMethod (unHTMLInputElement self)))
+  = liftIO (fromMaybeJSString <$> (js_getFormMethod (self)))
  
 foreign import javascript unsafe "$1[\"formNoValidate\"] = $2;"
-        js_setFormNoValidate :: JSRef HTMLInputElement -> Bool -> IO ()
+        js_setFormNoValidate :: HTMLInputElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.formNoValidate Mozilla HTMLInputElement.formNoValidate documentation> 
 setFormNoValidate ::
                   (MonadIO m) => HTMLInputElement -> Bool -> m ()
 setFormNoValidate self val
-  = liftIO (js_setFormNoValidate (unHTMLInputElement self) val)
+  = liftIO (js_setFormNoValidate (self) val)
  
 foreign import javascript unsafe "($1[\"formNoValidate\"] ? 1 : 0)"
-        js_getFormNoValidate :: JSRef HTMLInputElement -> IO Bool
+        js_getFormNoValidate :: HTMLInputElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.formNoValidate Mozilla HTMLInputElement.formNoValidate documentation> 
 getFormNoValidate :: (MonadIO m) => HTMLInputElement -> m Bool
-getFormNoValidate self
-  = liftIO (js_getFormNoValidate (unHTMLInputElement self))
+getFormNoValidate self = liftIO (js_getFormNoValidate (self))
  
 foreign import javascript unsafe "$1[\"formTarget\"] = $2;"
-        js_setFormTarget :: JSRef HTMLInputElement -> JSString -> IO ()
+        js_setFormTarget :: HTMLInputElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.formTarget Mozilla HTMLInputElement.formTarget documentation> 
 setFormTarget ::
               (MonadIO m, ToJSString val) => HTMLInputElement -> val -> m ()
 setFormTarget self val
-  = liftIO
-      (js_setFormTarget (unHTMLInputElement self) (toJSString val))
+  = liftIO (js_setFormTarget (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"formTarget\"]"
-        js_getFormTarget :: JSRef HTMLInputElement -> IO JSString
+        js_getFormTarget :: HTMLInputElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.formTarget Mozilla HTMLInputElement.formTarget documentation> 
 getFormTarget ::
               (MonadIO m, FromJSString result) => HTMLInputElement -> m result
 getFormTarget self
-  = liftIO
-      (fromJSString <$> (js_getFormTarget (unHTMLInputElement self)))
+  = liftIO (fromJSString <$> (js_getFormTarget (self)))
  
 foreign import javascript unsafe "$1[\"height\"] = $2;"
-        js_setHeight :: JSRef HTMLInputElement -> Word -> IO ()
+        js_setHeight :: HTMLInputElement -> Word -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.height Mozilla HTMLInputElement.height documentation> 
 setHeight :: (MonadIO m) => HTMLInputElement -> Word -> m ()
-setHeight self val
-  = liftIO (js_setHeight (unHTMLInputElement self) val)
+setHeight self val = liftIO (js_setHeight (self) val)
  
 foreign import javascript unsafe "$1[\"height\"]" js_getHeight ::
-        JSRef HTMLInputElement -> IO Word
+        HTMLInputElement -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.height Mozilla HTMLInputElement.height documentation> 
 getHeight :: (MonadIO m) => HTMLInputElement -> m Word
-getHeight self = liftIO (js_getHeight (unHTMLInputElement self))
+getHeight self = liftIO (js_getHeight (self))
  
 foreign import javascript unsafe "$1[\"indeterminate\"] = $2;"
-        js_setIndeterminate :: JSRef HTMLInputElement -> Bool -> IO ()
+        js_setIndeterminate :: HTMLInputElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.indeterminate Mozilla HTMLInputElement.indeterminate documentation> 
 setIndeterminate :: (MonadIO m) => HTMLInputElement -> Bool -> m ()
-setIndeterminate self val
-  = liftIO (js_setIndeterminate (unHTMLInputElement self) val)
+setIndeterminate self val = liftIO (js_setIndeterminate (self) val)
  
 foreign import javascript unsafe "($1[\"indeterminate\"] ? 1 : 0)"
-        js_getIndeterminate :: JSRef HTMLInputElement -> IO Bool
+        js_getIndeterminate :: HTMLInputElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.indeterminate Mozilla HTMLInputElement.indeterminate documentation> 
 getIndeterminate :: (MonadIO m) => HTMLInputElement -> m Bool
-getIndeterminate self
-  = liftIO (js_getIndeterminate (unHTMLInputElement self))
+getIndeterminate self = liftIO (js_getIndeterminate (self))
  
 foreign import javascript unsafe "$1[\"list\"]" js_getList ::
-        JSRef HTMLInputElement -> IO (JSRef HTMLElement)
+        HTMLInputElement -> IO (Nullable HTMLElement)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.list Mozilla HTMLInputElement.list documentation> 
 getList :: (MonadIO m) => HTMLInputElement -> m (Maybe HTMLElement)
-getList self
-  = liftIO ((js_getList (unHTMLInputElement self)) >>= fromJSRef)
+getList self = liftIO (nullableToMaybe <$> (js_getList (self)))
  
 foreign import javascript unsafe "$1[\"max\"] = $2;" js_setMax ::
-        JSRef HTMLInputElement -> JSString -> IO ()
+        HTMLInputElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.max Mozilla HTMLInputElement.max documentation> 
 setMax ::
        (MonadIO m, ToJSString val) => HTMLInputElement -> val -> m ()
-setMax self val
-  = liftIO (js_setMax (unHTMLInputElement self) (toJSString val))
+setMax self val = liftIO (js_setMax (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"max\"]" js_getMax ::
-        JSRef HTMLInputElement -> IO JSString
+        HTMLInputElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.max Mozilla HTMLInputElement.max documentation> 
 getMax ::
        (MonadIO m, FromJSString result) => HTMLInputElement -> m result
-getMax self
-  = liftIO (fromJSString <$> (js_getMax (unHTMLInputElement self)))
+getMax self = liftIO (fromJSString <$> (js_getMax (self)))
  
 foreign import javascript unsafe "$1[\"maxLength\"] = $2;"
-        js_setMaxLength :: JSRef HTMLInputElement -> Int -> IO ()
+        js_setMaxLength :: HTMLInputElement -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.maxLength Mozilla HTMLInputElement.maxLength documentation> 
 setMaxLength :: (MonadIO m) => HTMLInputElement -> Int -> m ()
-setMaxLength self val
-  = liftIO (js_setMaxLength (unHTMLInputElement self) val)
+setMaxLength self val = liftIO (js_setMaxLength (self) val)
  
 foreign import javascript unsafe "$1[\"maxLength\"]"
-        js_getMaxLength :: JSRef HTMLInputElement -> IO Int
+        js_getMaxLength :: HTMLInputElement -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.maxLength Mozilla HTMLInputElement.maxLength documentation> 
 getMaxLength :: (MonadIO m) => HTMLInputElement -> m Int
-getMaxLength self
-  = liftIO (js_getMaxLength (unHTMLInputElement self))
+getMaxLength self = liftIO (js_getMaxLength (self))
  
 foreign import javascript unsafe "$1[\"min\"] = $2;" js_setMin ::
-        JSRef HTMLInputElement -> JSString -> IO ()
+        HTMLInputElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.min Mozilla HTMLInputElement.min documentation> 
 setMin ::
        (MonadIO m, ToJSString val) => HTMLInputElement -> val -> m ()
-setMin self val
-  = liftIO (js_setMin (unHTMLInputElement self) (toJSString val))
+setMin self val = liftIO (js_setMin (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"min\"]" js_getMin ::
-        JSRef HTMLInputElement -> IO JSString
+        HTMLInputElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.min Mozilla HTMLInputElement.min documentation> 
 getMin ::
        (MonadIO m, FromJSString result) => HTMLInputElement -> m result
-getMin self
-  = liftIO (fromJSString <$> (js_getMin (unHTMLInputElement self)))
+getMin self = liftIO (fromJSString <$> (js_getMin (self)))
  
 foreign import javascript unsafe "$1[\"multiple\"] = $2;"
-        js_setMultiple :: JSRef HTMLInputElement -> Bool -> IO ()
+        js_setMultiple :: HTMLInputElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.multiple Mozilla HTMLInputElement.multiple documentation> 
 setMultiple :: (MonadIO m) => HTMLInputElement -> Bool -> m ()
-setMultiple self val
-  = liftIO (js_setMultiple (unHTMLInputElement self) val)
+setMultiple self val = liftIO (js_setMultiple (self) val)
  
 foreign import javascript unsafe "($1[\"multiple\"] ? 1 : 0)"
-        js_getMultiple :: JSRef HTMLInputElement -> IO Bool
+        js_getMultiple :: HTMLInputElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.multiple Mozilla HTMLInputElement.multiple documentation> 
 getMultiple :: (MonadIO m) => HTMLInputElement -> m Bool
-getMultiple self
-  = liftIO (js_getMultiple (unHTMLInputElement self))
+getMultiple self = liftIO (js_getMultiple (self))
  
 foreign import javascript unsafe "$1[\"name\"] = $2;" js_setName ::
-        JSRef HTMLInputElement -> JSString -> IO ()
+        HTMLInputElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.name Mozilla HTMLInputElement.name documentation> 
 setName ::
         (MonadIO m, ToJSString val) => HTMLInputElement -> val -> m ()
-setName self val
-  = liftIO (js_setName (unHTMLInputElement self) (toJSString val))
+setName self val = liftIO (js_setName (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"name\"]" js_getName ::
-        JSRef HTMLInputElement -> IO JSString
+        HTMLInputElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.name Mozilla HTMLInputElement.name documentation> 
 getName ::
         (MonadIO m, FromJSString result) => HTMLInputElement -> m result
-getName self
-  = liftIO (fromJSString <$> (js_getName (unHTMLInputElement self)))
+getName self = liftIO (fromJSString <$> (js_getName (self)))
  
 foreign import javascript unsafe "$1[\"pattern\"] = $2;"
-        js_setPattern :: JSRef HTMLInputElement -> JSString -> IO ()
+        js_setPattern :: HTMLInputElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.pattern Mozilla HTMLInputElement.pattern documentation> 
 setPattern ::
            (MonadIO m, ToJSString val) => HTMLInputElement -> val -> m ()
 setPattern self val
-  = liftIO (js_setPattern (unHTMLInputElement self) (toJSString val))
+  = liftIO (js_setPattern (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"pattern\"]" js_getPattern ::
-        JSRef HTMLInputElement -> IO JSString
+        HTMLInputElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.pattern Mozilla HTMLInputElement.pattern documentation> 
 getPattern ::
            (MonadIO m, FromJSString result) => HTMLInputElement -> m result
-getPattern self
-  = liftIO
-      (fromJSString <$> (js_getPattern (unHTMLInputElement self)))
+getPattern self = liftIO (fromJSString <$> (js_getPattern (self)))
  
 foreign import javascript unsafe "$1[\"placeholder\"] = $2;"
-        js_setPlaceholder :: JSRef HTMLInputElement -> JSString -> IO ()
+        js_setPlaceholder :: HTMLInputElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.placeholder Mozilla HTMLInputElement.placeholder documentation> 
 setPlaceholder ::
                (MonadIO m, ToJSString val) => HTMLInputElement -> val -> m ()
 setPlaceholder self val
-  = liftIO
-      (js_setPlaceholder (unHTMLInputElement self) (toJSString val))
+  = liftIO (js_setPlaceholder (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"placeholder\"]"
-        js_getPlaceholder :: JSRef HTMLInputElement -> IO JSString
+        js_getPlaceholder :: HTMLInputElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.placeholder Mozilla HTMLInputElement.placeholder documentation> 
 getPlaceholder ::
                (MonadIO m, FromJSString result) => HTMLInputElement -> m result
 getPlaceholder self
-  = liftIO
-      (fromJSString <$> (js_getPlaceholder (unHTMLInputElement self)))
+  = liftIO (fromJSString <$> (js_getPlaceholder (self)))
  
 foreign import javascript unsafe "$1[\"readOnly\"] = $2;"
-        js_setReadOnly :: JSRef HTMLInputElement -> Bool -> IO ()
+        js_setReadOnly :: HTMLInputElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.readOnly Mozilla HTMLInputElement.readOnly documentation> 
 setReadOnly :: (MonadIO m) => HTMLInputElement -> Bool -> m ()
-setReadOnly self val
-  = liftIO (js_setReadOnly (unHTMLInputElement self) val)
+setReadOnly self val = liftIO (js_setReadOnly (self) val)
  
 foreign import javascript unsafe "($1[\"readOnly\"] ? 1 : 0)"
-        js_getReadOnly :: JSRef HTMLInputElement -> IO Bool
+        js_getReadOnly :: HTMLInputElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.readOnly Mozilla HTMLInputElement.readOnly documentation> 
 getReadOnly :: (MonadIO m) => HTMLInputElement -> m Bool
-getReadOnly self
-  = liftIO (js_getReadOnly (unHTMLInputElement self))
+getReadOnly self = liftIO (js_getReadOnly (self))
  
 foreign import javascript unsafe "$1[\"required\"] = $2;"
-        js_setRequired :: JSRef HTMLInputElement -> Bool -> IO ()
+        js_setRequired :: HTMLInputElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.required Mozilla HTMLInputElement.required documentation> 
 setRequired :: (MonadIO m) => HTMLInputElement -> Bool -> m ()
-setRequired self val
-  = liftIO (js_setRequired (unHTMLInputElement self) val)
+setRequired self val = liftIO (js_setRequired (self) val)
  
 foreign import javascript unsafe "($1[\"required\"] ? 1 : 0)"
-        js_getRequired :: JSRef HTMLInputElement -> IO Bool
+        js_getRequired :: HTMLInputElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.required Mozilla HTMLInputElement.required documentation> 
 getRequired :: (MonadIO m) => HTMLInputElement -> m Bool
-getRequired self
-  = liftIO (js_getRequired (unHTMLInputElement self))
+getRequired self = liftIO (js_getRequired (self))
  
 foreign import javascript unsafe "$1[\"size\"] = $2;" js_setSize ::
-        JSRef HTMLInputElement -> Word -> IO ()
+        HTMLInputElement -> Word -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.size Mozilla HTMLInputElement.size documentation> 
 setSize :: (MonadIO m) => HTMLInputElement -> Word -> m ()
-setSize self val
-  = liftIO (js_setSize (unHTMLInputElement self) val)
+setSize self val = liftIO (js_setSize (self) val)
  
 foreign import javascript unsafe "$1[\"size\"]" js_getSize ::
-        JSRef HTMLInputElement -> IO Word
+        HTMLInputElement -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.size Mozilla HTMLInputElement.size documentation> 
 getSize :: (MonadIO m) => HTMLInputElement -> m Word
-getSize self = liftIO (js_getSize (unHTMLInputElement self))
+getSize self = liftIO (js_getSize (self))
  
 foreign import javascript unsafe "$1[\"src\"] = $2;" js_setSrc ::
-        JSRef HTMLInputElement -> JSString -> IO ()
+        HTMLInputElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.src Mozilla HTMLInputElement.src documentation> 
 setSrc ::
        (MonadIO m, ToJSString val) => HTMLInputElement -> val -> m ()
-setSrc self val
-  = liftIO (js_setSrc (unHTMLInputElement self) (toJSString val))
+setSrc self val = liftIO (js_setSrc (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"src\"]" js_getSrc ::
-        JSRef HTMLInputElement -> IO JSString
+        HTMLInputElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.src Mozilla HTMLInputElement.src documentation> 
 getSrc ::
        (MonadIO m, FromJSString result) => HTMLInputElement -> m result
-getSrc self
-  = liftIO (fromJSString <$> (js_getSrc (unHTMLInputElement self)))
+getSrc self = liftIO (fromJSString <$> (js_getSrc (self)))
  
 foreign import javascript unsafe "$1[\"step\"] = $2;" js_setStep ::
-        JSRef HTMLInputElement -> JSString -> IO ()
+        HTMLInputElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.step Mozilla HTMLInputElement.step documentation> 
 setStep ::
         (MonadIO m, ToJSString val) => HTMLInputElement -> val -> m ()
-setStep self val
-  = liftIO (js_setStep (unHTMLInputElement self) (toJSString val))
+setStep self val = liftIO (js_setStep (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"step\"]" js_getStep ::
-        JSRef HTMLInputElement -> IO JSString
+        HTMLInputElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.step Mozilla HTMLInputElement.step documentation> 
 getStep ::
         (MonadIO m, FromJSString result) => HTMLInputElement -> m result
-getStep self
-  = liftIO (fromJSString <$> (js_getStep (unHTMLInputElement self)))
+getStep self = liftIO (fromJSString <$> (js_getStep (self)))
  
 foreign import javascript unsafe "$1[\"type\"] = $2;" js_setType ::
-        JSRef HTMLInputElement -> JSString -> IO ()
+        HTMLInputElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.type Mozilla HTMLInputElement.type documentation> 
 setType ::
         (MonadIO m, ToJSString val) => HTMLInputElement -> val -> m ()
-setType self val
-  = liftIO (js_setType (unHTMLInputElement self) (toJSString val))
+setType self val = liftIO (js_setType (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"type\"]" js_getType ::
-        JSRef HTMLInputElement -> IO JSString
+        HTMLInputElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.type Mozilla HTMLInputElement.type documentation> 
 getType ::
         (MonadIO m, FromJSString result) => HTMLInputElement -> m result
-getType self
-  = liftIO (fromJSString <$> (js_getType (unHTMLInputElement self)))
+getType self = liftIO (fromJSString <$> (js_getType (self)))
  
 foreign import javascript unsafe "$1[\"defaultValue\"] = $2;"
         js_setDefaultValue ::
-        JSRef HTMLInputElement -> JSRef (Maybe JSString) -> IO ()
+        HTMLInputElement -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.defaultValue Mozilla HTMLInputElement.defaultValue documentation> 
 setDefaultValue ::
                 (MonadIO m, ToJSString val) =>
                   HTMLInputElement -> Maybe val -> m ()
 setDefaultValue self val
-  = liftIO
-      (js_setDefaultValue (unHTMLInputElement self)
-         (toMaybeJSString val))
+  = liftIO (js_setDefaultValue (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"defaultValue\"]"
-        js_getDefaultValue ::
-        JSRef HTMLInputElement -> IO (JSRef (Maybe JSString))
+        js_getDefaultValue :: HTMLInputElement -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.defaultValue Mozilla HTMLInputElement.defaultValue documentation> 
 getDefaultValue ::
                 (MonadIO m, FromJSString result) =>
                   HTMLInputElement -> m (Maybe result)
 getDefaultValue self
-  = liftIO
-      (fromMaybeJSString <$>
-         (js_getDefaultValue (unHTMLInputElement self)))
+  = liftIO (fromMaybeJSString <$> (js_getDefaultValue (self)))
  
 foreign import javascript unsafe "$1[\"value\"] = $2;" js_setValue
-        :: JSRef HTMLInputElement -> JSRef (Maybe JSString) -> IO ()
+        :: HTMLInputElement -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.value Mozilla HTMLInputElement.value documentation> 
 setValue ::
          (MonadIO m, ToJSString val) =>
            HTMLInputElement -> Maybe val -> m ()
 setValue self val
-  = liftIO
-      (js_setValue (unHTMLInputElement self) (toMaybeJSString val))
+  = liftIO (js_setValue (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"value\"]" js_getValue ::
-        JSRef HTMLInputElement -> IO (JSRef (Maybe JSString))
+        HTMLInputElement -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.value Mozilla HTMLInputElement.value documentation> 
 getValue ::
          (MonadIO m, FromJSString result) =>
            HTMLInputElement -> m (Maybe result)
-getValue self
-  = liftIO
-      (fromMaybeJSString <$> (js_getValue (unHTMLInputElement self)))
+getValue self = liftIO (fromMaybeJSString <$> (js_getValue (self)))
  
 foreign import javascript unsafe "$1[\"valueAsDate\"] = $2;"
-        js_setValueAsDate :: JSRef HTMLInputElement -> JSRef Date -> IO ()
+        js_setValueAsDate :: HTMLInputElement -> Nullable Date -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.valueAsDate Mozilla HTMLInputElement.valueAsDate documentation> 
 setValueAsDate ::
                (MonadIO m, IsDate val) => HTMLInputElement -> Maybe val -> m ()
 setValueAsDate self val
   = liftIO
-      (js_setValueAsDate (unHTMLInputElement self)
-         (maybe jsNull (unDate . toDate) val))
+      (js_setValueAsDate (self) (maybeToNullable (fmap toDate val)))
  
 foreign import javascript unsafe "$1[\"valueAsDate\"]"
-        js_getValueAsDate :: JSRef HTMLInputElement -> IO (JSRef Date)
+        js_getValueAsDate :: HTMLInputElement -> IO (Nullable Date)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.valueAsDate Mozilla HTMLInputElement.valueAsDate documentation> 
 getValueAsDate :: (MonadIO m) => HTMLInputElement -> m (Maybe Date)
 getValueAsDate self
-  = liftIO
-      ((js_getValueAsDate (unHTMLInputElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getValueAsDate (self)))
  
 foreign import javascript unsafe "$1[\"valueAsNumber\"] = $2;"
-        js_setValueAsNumber :: JSRef HTMLInputElement -> Double -> IO ()
+        js_setValueAsNumber :: HTMLInputElement -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.valueAsNumber Mozilla HTMLInputElement.valueAsNumber documentation> 
 setValueAsNumber ::
                  (MonadIO m) => HTMLInputElement -> Double -> m ()
-setValueAsNumber self val
-  = liftIO (js_setValueAsNumber (unHTMLInputElement self) val)
+setValueAsNumber self val = liftIO (js_setValueAsNumber (self) val)
  
 foreign import javascript unsafe "$1[\"valueAsNumber\"]"
-        js_getValueAsNumber :: JSRef HTMLInputElement -> IO Double
+        js_getValueAsNumber :: HTMLInputElement -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.valueAsNumber Mozilla HTMLInputElement.valueAsNumber documentation> 
 getValueAsNumber :: (MonadIO m) => HTMLInputElement -> m Double
-getValueAsNumber self
-  = liftIO (js_getValueAsNumber (unHTMLInputElement self))
+getValueAsNumber self = liftIO (js_getValueAsNumber (self))
  
 foreign import javascript unsafe "$1[\"width\"] = $2;" js_setWidth
-        :: JSRef HTMLInputElement -> Word -> IO ()
+        :: HTMLInputElement -> Word -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.width Mozilla HTMLInputElement.width documentation> 
 setWidth :: (MonadIO m) => HTMLInputElement -> Word -> m ()
-setWidth self val
-  = liftIO (js_setWidth (unHTMLInputElement self) val)
+setWidth self val = liftIO (js_setWidth (self) val)
  
 foreign import javascript unsafe "$1[\"width\"]" js_getWidth ::
-        JSRef HTMLInputElement -> IO Word
+        HTMLInputElement -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.width Mozilla HTMLInputElement.width documentation> 
 getWidth :: (MonadIO m) => HTMLInputElement -> m Word
-getWidth self = liftIO (js_getWidth (unHTMLInputElement self))
+getWidth self = liftIO (js_getWidth (self))
  
 foreign import javascript unsafe "($1[\"willValidate\"] ? 1 : 0)"
-        js_getWillValidate :: JSRef HTMLInputElement -> IO Bool
+        js_getWillValidate :: HTMLInputElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.willValidate Mozilla HTMLInputElement.willValidate documentation> 
 getWillValidate :: (MonadIO m) => HTMLInputElement -> m Bool
-getWillValidate self
-  = liftIO (js_getWillValidate (unHTMLInputElement self))
+getWillValidate self = liftIO (js_getWillValidate (self))
  
 foreign import javascript unsafe "$1[\"validity\"]" js_getValidity
-        :: JSRef HTMLInputElement -> IO (JSRef ValidityState)
+        :: HTMLInputElement -> IO (Nullable ValidityState)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.validity Mozilla HTMLInputElement.validity documentation> 
 getValidity ::
             (MonadIO m) => HTMLInputElement -> m (Maybe ValidityState)
 getValidity self
-  = liftIO ((js_getValidity (unHTMLInputElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getValidity (self)))
  
 foreign import javascript unsafe "$1[\"validationMessage\"]"
-        js_getValidationMessage :: JSRef HTMLInputElement -> IO JSString
+        js_getValidationMessage :: HTMLInputElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.validationMessage Mozilla HTMLInputElement.validationMessage documentation> 
 getValidationMessage ::
                      (MonadIO m, FromJSString result) => HTMLInputElement -> m result
 getValidationMessage self
-  = liftIO
-      (fromJSString <$>
-         (js_getValidationMessage (unHTMLInputElement self)))
+  = liftIO (fromJSString <$> (js_getValidationMessage (self)))
  
 foreign import javascript unsafe "$1[\"labels\"]" js_getLabels ::
-        JSRef HTMLInputElement -> IO (JSRef NodeList)
+        HTMLInputElement -> IO (Nullable NodeList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.labels Mozilla HTMLInputElement.labels documentation> 
 getLabels :: (MonadIO m) => HTMLInputElement -> m (Maybe NodeList)
-getLabels self
-  = liftIO ((js_getLabels (unHTMLInputElement self)) >>= fromJSRef)
+getLabels self = liftIO (nullableToMaybe <$> (js_getLabels (self)))
  
 foreign import javascript unsafe "$1[\"selectionStart\"] = $2;"
-        js_setSelectionStart :: JSRef HTMLInputElement -> Int -> IO ()
+        js_setSelectionStart :: HTMLInputElement -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.selectionStart Mozilla HTMLInputElement.selectionStart documentation> 
 setSelectionStart :: (MonadIO m) => HTMLInputElement -> Int -> m ()
 setSelectionStart self val
-  = liftIO (js_setSelectionStart (unHTMLInputElement self) val)
+  = liftIO (js_setSelectionStart (self) val)
  
 foreign import javascript unsafe "$1[\"selectionStart\"]"
-        js_getSelectionStart :: JSRef HTMLInputElement -> IO Int
+        js_getSelectionStart :: HTMLInputElement -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.selectionStart Mozilla HTMLInputElement.selectionStart documentation> 
 getSelectionStart :: (MonadIO m) => HTMLInputElement -> m Int
-getSelectionStart self
-  = liftIO (js_getSelectionStart (unHTMLInputElement self))
+getSelectionStart self = liftIO (js_getSelectionStart (self))
  
 foreign import javascript unsafe "$1[\"selectionEnd\"] = $2;"
-        js_setSelectionEnd :: JSRef HTMLInputElement -> Int -> IO ()
+        js_setSelectionEnd :: HTMLInputElement -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.selectionEnd Mozilla HTMLInputElement.selectionEnd documentation> 
 setSelectionEnd :: (MonadIO m) => HTMLInputElement -> Int -> m ()
-setSelectionEnd self val
-  = liftIO (js_setSelectionEnd (unHTMLInputElement self) val)
+setSelectionEnd self val = liftIO (js_setSelectionEnd (self) val)
  
 foreign import javascript unsafe "$1[\"selectionEnd\"]"
-        js_getSelectionEnd :: JSRef HTMLInputElement -> IO Int
+        js_getSelectionEnd :: HTMLInputElement -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.selectionEnd Mozilla HTMLInputElement.selectionEnd documentation> 
 getSelectionEnd :: (MonadIO m) => HTMLInputElement -> m Int
-getSelectionEnd self
-  = liftIO (js_getSelectionEnd (unHTMLInputElement self))
+getSelectionEnd self = liftIO (js_getSelectionEnd (self))
  
 foreign import javascript unsafe "$1[\"selectionDirection\"] = $2;"
-        js_setSelectionDirection ::
-        JSRef HTMLInputElement -> JSString -> IO ()
+        js_setSelectionDirection :: HTMLInputElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.selectionDirection Mozilla HTMLInputElement.selectionDirection documentation> 
 setSelectionDirection ::
                       (MonadIO m, ToJSString val) => HTMLInputElement -> val -> m ()
 setSelectionDirection self val
-  = liftIO
-      (js_setSelectionDirection (unHTMLInputElement self)
-         (toJSString val))
+  = liftIO (js_setSelectionDirection (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"selectionDirection\"]"
-        js_getSelectionDirection :: JSRef HTMLInputElement -> IO JSString
+        js_getSelectionDirection :: HTMLInputElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.selectionDirection Mozilla HTMLInputElement.selectionDirection documentation> 
 getSelectionDirection ::
                       (MonadIO m, FromJSString result) => HTMLInputElement -> m result
 getSelectionDirection self
-  = liftIO
-      (fromJSString <$>
-         (js_getSelectionDirection (unHTMLInputElement self)))
+  = liftIO (fromJSString <$> (js_getSelectionDirection (self)))
  
 foreign import javascript unsafe "$1[\"align\"] = $2;" js_setAlign
-        :: JSRef HTMLInputElement -> JSString -> IO ()
+        :: HTMLInputElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.align Mozilla HTMLInputElement.align documentation> 
 setAlign ::
          (MonadIO m, ToJSString val) => HTMLInputElement -> val -> m ()
-setAlign self val
-  = liftIO (js_setAlign (unHTMLInputElement self) (toJSString val))
+setAlign self val = liftIO (js_setAlign (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"align\"]" js_getAlign ::
-        JSRef HTMLInputElement -> IO JSString
+        HTMLInputElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.align Mozilla HTMLInputElement.align documentation> 
 getAlign ::
          (MonadIO m, FromJSString result) => HTMLInputElement -> m result
-getAlign self
-  = liftIO (fromJSString <$> (js_getAlign (unHTMLInputElement self)))
+getAlign self = liftIO (fromJSString <$> (js_getAlign (self)))
  
 foreign import javascript unsafe "$1[\"useMap\"] = $2;"
-        js_setUseMap :: JSRef HTMLInputElement -> JSString -> IO ()
+        js_setUseMap :: HTMLInputElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.useMap Mozilla HTMLInputElement.useMap documentation> 
 setUseMap ::
           (MonadIO m, ToJSString val) => HTMLInputElement -> val -> m ()
-setUseMap self val
-  = liftIO (js_setUseMap (unHTMLInputElement self) (toJSString val))
+setUseMap self val = liftIO (js_setUseMap (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"useMap\"]" js_getUseMap ::
-        JSRef HTMLInputElement -> IO JSString
+        HTMLInputElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.useMap Mozilla HTMLInputElement.useMap documentation> 
 getUseMap ::
           (MonadIO m, FromJSString result) => HTMLInputElement -> m result
-getUseMap self
-  = liftIO
-      (fromJSString <$> (js_getUseMap (unHTMLInputElement self)))
+getUseMap self = liftIO (fromJSString <$> (js_getUseMap (self)))
  
 foreign import javascript unsafe "$1[\"incremental\"] = $2;"
-        js_setIncremental :: JSRef HTMLInputElement -> Bool -> IO ()
+        js_setIncremental :: HTMLInputElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.incremental Mozilla HTMLInputElement.incremental documentation> 
 setIncremental :: (MonadIO m) => HTMLInputElement -> Bool -> m ()
-setIncremental self val
-  = liftIO (js_setIncremental (unHTMLInputElement self) val)
+setIncremental self val = liftIO (js_setIncremental (self) val)
  
 foreign import javascript unsafe "($1[\"incremental\"] ? 1 : 0)"
-        js_getIncremental :: JSRef HTMLInputElement -> IO Bool
+        js_getIncremental :: HTMLInputElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.incremental Mozilla HTMLInputElement.incremental documentation> 
 getIncremental :: (MonadIO m) => HTMLInputElement -> m Bool
-getIncremental self
-  = liftIO (js_getIncremental (unHTMLInputElement self))
+getIncremental self = liftIO (js_getIncremental (self))
  
 foreign import javascript unsafe "$1[\"autocorrect\"] = $2;"
-        js_setAutocorrect :: JSRef HTMLInputElement -> Bool -> IO ()
+        js_setAutocorrect :: HTMLInputElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.autocorrect Mozilla HTMLInputElement.autocorrect documentation> 
 setAutocorrect :: (MonadIO m) => HTMLInputElement -> Bool -> m ()
-setAutocorrect self val
-  = liftIO (js_setAutocorrect (unHTMLInputElement self) val)
+setAutocorrect self val = liftIO (js_setAutocorrect (self) val)
  
 foreign import javascript unsafe "($1[\"autocorrect\"] ? 1 : 0)"
-        js_getAutocorrect :: JSRef HTMLInputElement -> IO Bool
+        js_getAutocorrect :: HTMLInputElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.autocorrect Mozilla HTMLInputElement.autocorrect documentation> 
 getAutocorrect :: (MonadIO m) => HTMLInputElement -> m Bool
-getAutocorrect self
-  = liftIO (js_getAutocorrect (unHTMLInputElement self))
+getAutocorrect self = liftIO (js_getAutocorrect (self))
  
 foreign import javascript unsafe "$1[\"autocapitalize\"] = $2;"
         js_setAutocapitalize ::
-        JSRef HTMLInputElement -> JSRef (Maybe JSString) -> IO ()
+        HTMLInputElement -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.autocapitalize Mozilla HTMLInputElement.autocapitalize documentation> 
 setAutocapitalize ::
                   (MonadIO m, ToJSString val) =>
                     HTMLInputElement -> Maybe val -> m ()
 setAutocapitalize self val
-  = liftIO
-      (js_setAutocapitalize (unHTMLInputElement self)
-         (toMaybeJSString val))
+  = liftIO (js_setAutocapitalize (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"autocapitalize\"]"
-        js_getAutocapitalize ::
-        JSRef HTMLInputElement -> IO (JSRef (Maybe JSString))
+        js_getAutocapitalize :: HTMLInputElement -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.autocapitalize Mozilla HTMLInputElement.autocapitalize documentation> 
 getAutocapitalize ::
                   (MonadIO m, FromJSString result) =>
                     HTMLInputElement -> m (Maybe result)
 getAutocapitalize self
-  = liftIO
-      (fromMaybeJSString <$>
-         (js_getAutocapitalize (unHTMLInputElement self)))
+  = liftIO (fromMaybeJSString <$> (js_getAutocapitalize (self)))
  
 foreign import javascript unsafe "$1[\"capture\"] = $2;"
-        js_setCapture :: JSRef HTMLInputElement -> Bool -> IO ()
+        js_setCapture :: HTMLInputElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.capture Mozilla HTMLInputElement.capture documentation> 
 setCapture :: (MonadIO m) => HTMLInputElement -> Bool -> m ()
-setCapture self val
-  = liftIO (js_setCapture (unHTMLInputElement self) val)
+setCapture self val = liftIO (js_setCapture (self) val)
  
 foreign import javascript unsafe "($1[\"capture\"] ? 1 : 0)"
-        js_getCapture :: JSRef HTMLInputElement -> IO Bool
+        js_getCapture :: HTMLInputElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement.capture Mozilla HTMLInputElement.capture documentation> 
 getCapture :: (MonadIO m) => HTMLInputElement -> m Bool
-getCapture self = liftIO (js_getCapture (unHTMLInputElement self))
+getCapture self = liftIO (js_getCapture (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLKeygenElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLKeygenElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLKeygenElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLKeygenElement.hs
@@ -13,7 +13,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -28,167 +28,146 @@
  
 foreign import javascript unsafe
         "($1[\"checkValidity\"]() ? 1 : 0)" js_checkValidity ::
-        JSRef HTMLKeygenElement -> IO Bool
+        HTMLKeygenElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLKeygenElement.checkValidity Mozilla HTMLKeygenElement.checkValidity documentation> 
 checkValidity :: (MonadIO m) => HTMLKeygenElement -> m Bool
-checkValidity self
-  = liftIO (js_checkValidity (unHTMLKeygenElement self))
+checkValidity self = liftIO (js_checkValidity (self))
  
 foreign import javascript unsafe "$1[\"setCustomValidity\"]($2)"
         js_setCustomValidity ::
-        JSRef HTMLKeygenElement -> JSRef (Maybe JSString) -> IO ()
+        HTMLKeygenElement -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLKeygenElement.setCustomValidity Mozilla HTMLKeygenElement.setCustomValidity documentation> 
 setCustomValidity ::
                   (MonadIO m, ToJSString error) =>
                     HTMLKeygenElement -> Maybe error -> m ()
 setCustomValidity self error
-  = liftIO
-      (js_setCustomValidity (unHTMLKeygenElement self)
-         (toMaybeJSString error))
+  = liftIO (js_setCustomValidity (self) (toMaybeJSString error))
  
 foreign import javascript unsafe "$1[\"autofocus\"] = $2;"
-        js_setAutofocus :: JSRef HTMLKeygenElement -> Bool -> IO ()
+        js_setAutofocus :: HTMLKeygenElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLKeygenElement.autofocus Mozilla HTMLKeygenElement.autofocus documentation> 
 setAutofocus :: (MonadIO m) => HTMLKeygenElement -> Bool -> m ()
-setAutofocus self val
-  = liftIO (js_setAutofocus (unHTMLKeygenElement self) val)
+setAutofocus self val = liftIO (js_setAutofocus (self) val)
  
 foreign import javascript unsafe "($1[\"autofocus\"] ? 1 : 0)"
-        js_getAutofocus :: JSRef HTMLKeygenElement -> IO Bool
+        js_getAutofocus :: HTMLKeygenElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLKeygenElement.autofocus Mozilla HTMLKeygenElement.autofocus documentation> 
 getAutofocus :: (MonadIO m) => HTMLKeygenElement -> m Bool
-getAutofocus self
-  = liftIO (js_getAutofocus (unHTMLKeygenElement self))
+getAutofocus self = liftIO (js_getAutofocus (self))
  
 foreign import javascript unsafe "$1[\"challenge\"] = $2;"
-        js_setChallenge :: JSRef HTMLKeygenElement -> JSString -> IO ()
+        js_setChallenge :: HTMLKeygenElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLKeygenElement.challenge Mozilla HTMLKeygenElement.challenge documentation> 
 setChallenge ::
              (MonadIO m, ToJSString val) => HTMLKeygenElement -> val -> m ()
 setChallenge self val
-  = liftIO
-      (js_setChallenge (unHTMLKeygenElement self) (toJSString val))
+  = liftIO (js_setChallenge (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"challenge\"]"
-        js_getChallenge :: JSRef HTMLKeygenElement -> IO JSString
+        js_getChallenge :: HTMLKeygenElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLKeygenElement.challenge Mozilla HTMLKeygenElement.challenge documentation> 
 getChallenge ::
              (MonadIO m, FromJSString result) => HTMLKeygenElement -> m result
 getChallenge self
-  = liftIO
-      (fromJSString <$> (js_getChallenge (unHTMLKeygenElement self)))
+  = liftIO (fromJSString <$> (js_getChallenge (self)))
  
 foreign import javascript unsafe "$1[\"disabled\"] = $2;"
-        js_setDisabled :: JSRef HTMLKeygenElement -> Bool -> IO ()
+        js_setDisabled :: HTMLKeygenElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLKeygenElement.disabled Mozilla HTMLKeygenElement.disabled documentation> 
 setDisabled :: (MonadIO m) => HTMLKeygenElement -> Bool -> m ()
-setDisabled self val
-  = liftIO (js_setDisabled (unHTMLKeygenElement self) val)
+setDisabled self val = liftIO (js_setDisabled (self) val)
  
 foreign import javascript unsafe "($1[\"disabled\"] ? 1 : 0)"
-        js_getDisabled :: JSRef HTMLKeygenElement -> IO Bool
+        js_getDisabled :: HTMLKeygenElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLKeygenElement.disabled Mozilla HTMLKeygenElement.disabled documentation> 
 getDisabled :: (MonadIO m) => HTMLKeygenElement -> m Bool
-getDisabled self
-  = liftIO (js_getDisabled (unHTMLKeygenElement self))
+getDisabled self = liftIO (js_getDisabled (self))
  
 foreign import javascript unsafe "$1[\"form\"]" js_getForm ::
-        JSRef HTMLKeygenElement -> IO (JSRef HTMLFormElement)
+        HTMLKeygenElement -> IO (Nullable HTMLFormElement)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLKeygenElement.form Mozilla HTMLKeygenElement.form documentation> 
 getForm ::
         (MonadIO m) => HTMLKeygenElement -> m (Maybe HTMLFormElement)
-getForm self
-  = liftIO ((js_getForm (unHTMLKeygenElement self)) >>= fromJSRef)
+getForm self = liftIO (nullableToMaybe <$> (js_getForm (self)))
  
 foreign import javascript unsafe "$1[\"keytype\"] = $2;"
-        js_setKeytype :: JSRef HTMLKeygenElement -> JSString -> IO ()
+        js_setKeytype :: HTMLKeygenElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLKeygenElement.keytype Mozilla HTMLKeygenElement.keytype documentation> 
 setKeytype ::
            (MonadIO m, ToJSString val) => HTMLKeygenElement -> val -> m ()
 setKeytype self val
-  = liftIO
-      (js_setKeytype (unHTMLKeygenElement self) (toJSString val))
+  = liftIO (js_setKeytype (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"keytype\"]" js_getKeytype ::
-        JSRef HTMLKeygenElement -> IO JSString
+        HTMLKeygenElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLKeygenElement.keytype Mozilla HTMLKeygenElement.keytype documentation> 
 getKeytype ::
            (MonadIO m, FromJSString result) => HTMLKeygenElement -> m result
-getKeytype self
-  = liftIO
-      (fromJSString <$> (js_getKeytype (unHTMLKeygenElement self)))
+getKeytype self = liftIO (fromJSString <$> (js_getKeytype (self)))
  
 foreign import javascript unsafe "$1[\"name\"] = $2;" js_setName ::
-        JSRef HTMLKeygenElement -> JSString -> IO ()
+        HTMLKeygenElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLKeygenElement.name Mozilla HTMLKeygenElement.name documentation> 
 setName ::
         (MonadIO m, ToJSString val) => HTMLKeygenElement -> val -> m ()
-setName self val
-  = liftIO (js_setName (unHTMLKeygenElement self) (toJSString val))
+setName self val = liftIO (js_setName (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"name\"]" js_getName ::
-        JSRef HTMLKeygenElement -> IO JSString
+        HTMLKeygenElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLKeygenElement.name Mozilla HTMLKeygenElement.name documentation> 
 getName ::
         (MonadIO m, FromJSString result) => HTMLKeygenElement -> m result
-getName self
-  = liftIO (fromJSString <$> (js_getName (unHTMLKeygenElement self)))
+getName self = liftIO (fromJSString <$> (js_getName (self)))
  
 foreign import javascript unsafe "$1[\"type\"]" js_getType ::
-        JSRef HTMLKeygenElement -> IO JSString
+        HTMLKeygenElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLKeygenElement.type Mozilla HTMLKeygenElement.type documentation> 
 getType ::
         (MonadIO m, FromJSString result) => HTMLKeygenElement -> m result
-getType self
-  = liftIO (fromJSString <$> (js_getType (unHTMLKeygenElement self)))
+getType self = liftIO (fromJSString <$> (js_getType (self)))
  
 foreign import javascript unsafe "($1[\"willValidate\"] ? 1 : 0)"
-        js_getWillValidate :: JSRef HTMLKeygenElement -> IO Bool
+        js_getWillValidate :: HTMLKeygenElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLKeygenElement.willValidate Mozilla HTMLKeygenElement.willValidate documentation> 
 getWillValidate :: (MonadIO m) => HTMLKeygenElement -> m Bool
-getWillValidate self
-  = liftIO (js_getWillValidate (unHTMLKeygenElement self))
+getWillValidate self = liftIO (js_getWillValidate (self))
  
 foreign import javascript unsafe "$1[\"validity\"]" js_getValidity
-        :: JSRef HTMLKeygenElement -> IO (JSRef ValidityState)
+        :: HTMLKeygenElement -> IO (Nullable ValidityState)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLKeygenElement.validity Mozilla HTMLKeygenElement.validity documentation> 
 getValidity ::
             (MonadIO m) => HTMLKeygenElement -> m (Maybe ValidityState)
 getValidity self
-  = liftIO
-      ((js_getValidity (unHTMLKeygenElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getValidity (self)))
  
 foreign import javascript unsafe "$1[\"validationMessage\"]"
-        js_getValidationMessage :: JSRef HTMLKeygenElement -> IO JSString
+        js_getValidationMessage :: HTMLKeygenElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLKeygenElement.validationMessage Mozilla HTMLKeygenElement.validationMessage documentation> 
 getValidationMessage ::
                      (MonadIO m, FromJSString result) => HTMLKeygenElement -> m result
 getValidationMessage self
-  = liftIO
-      (fromJSString <$>
-         (js_getValidationMessage (unHTMLKeygenElement self)))
+  = liftIO (fromJSString <$> (js_getValidationMessage (self)))
  
 foreign import javascript unsafe "$1[\"labels\"]" js_getLabels ::
-        JSRef HTMLKeygenElement -> IO (JSRef NodeList)
+        HTMLKeygenElement -> IO (Nullable NodeList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLKeygenElement.labels Mozilla HTMLKeygenElement.labels documentation> 
 getLabels :: (MonadIO m) => HTMLKeygenElement -> m (Maybe NodeList)
-getLabels self
-  = liftIO ((js_getLabels (unHTMLKeygenElement self)) >>= fromJSRef)
+getLabels self = liftIO (nullableToMaybe <$> (js_getLabels (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLLIElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLLIElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLLIElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLLIElement.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,33 +20,31 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"type\"] = $2;" js_setType ::
-        JSRef HTMLLIElement -> JSString -> IO ()
+        HTMLLIElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLLIElement.type Mozilla HTMLLIElement.type documentation> 
 setType ::
         (MonadIO m, ToJSString val) => HTMLLIElement -> val -> m ()
-setType self val
-  = liftIO (js_setType (unHTMLLIElement self) (toJSString val))
+setType self val = liftIO (js_setType (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"type\"]" js_getType ::
-        JSRef HTMLLIElement -> IO JSString
+        HTMLLIElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLLIElement.type Mozilla HTMLLIElement.type documentation> 
 getType ::
         (MonadIO m, FromJSString result) => HTMLLIElement -> m result
-getType self
-  = liftIO (fromJSString <$> (js_getType (unHTMLLIElement self)))
+getType self = liftIO (fromJSString <$> (js_getType (self)))
  
 foreign import javascript unsafe "$1[\"value\"] = $2;" js_setValue
-        :: JSRef HTMLLIElement -> Int -> IO ()
+        :: HTMLLIElement -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLLIElement.value Mozilla HTMLLIElement.value documentation> 
 setValue :: (MonadIO m) => HTMLLIElement -> Int -> m ()
-setValue self val = liftIO (js_setValue (unHTMLLIElement self) val)
+setValue self val = liftIO (js_setValue (self) val)
  
 foreign import javascript unsafe "$1[\"value\"]" js_getValue ::
-        JSRef HTMLLIElement -> IO Int
+        HTMLLIElement -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLLIElement.value Mozilla HTMLLIElement.value documentation> 
 getValue :: (MonadIO m) => HTMLLIElement -> m Int
-getValue self = liftIO (js_getValue (unHTMLLIElement self))
+getValue self = liftIO (js_getValue (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLLabelElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLLabelElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLLabelElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLLabelElement.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,38 +20,35 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"form\"]" js_getForm ::
-        JSRef HTMLLabelElement -> IO (JSRef HTMLFormElement)
+        HTMLLabelElement -> IO (Nullable HTMLFormElement)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLLabelElement.form Mozilla HTMLLabelElement.form documentation> 
 getForm ::
         (MonadIO m) => HTMLLabelElement -> m (Maybe HTMLFormElement)
-getForm self
-  = liftIO ((js_getForm (unHTMLLabelElement self)) >>= fromJSRef)
+getForm self = liftIO (nullableToMaybe <$> (js_getForm (self)))
  
 foreign import javascript unsafe "$1[\"htmlFor\"] = $2;"
-        js_setHtmlFor :: JSRef HTMLLabelElement -> JSString -> IO ()
+        js_setHtmlFor :: HTMLLabelElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLLabelElement.htmlFor Mozilla HTMLLabelElement.htmlFor documentation> 
 setHtmlFor ::
            (MonadIO m, ToJSString val) => HTMLLabelElement -> val -> m ()
 setHtmlFor self val
-  = liftIO (js_setHtmlFor (unHTMLLabelElement self) (toJSString val))
+  = liftIO (js_setHtmlFor (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"htmlFor\"]" js_getHtmlFor ::
-        JSRef HTMLLabelElement -> IO JSString
+        HTMLLabelElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLLabelElement.htmlFor Mozilla HTMLLabelElement.htmlFor documentation> 
 getHtmlFor ::
            (MonadIO m, FromJSString result) => HTMLLabelElement -> m result
-getHtmlFor self
-  = liftIO
-      (fromJSString <$> (js_getHtmlFor (unHTMLLabelElement self)))
+getHtmlFor self = liftIO (fromJSString <$> (js_getHtmlFor (self)))
  
 foreign import javascript unsafe "$1[\"control\"]" js_getControl ::
-        JSRef HTMLLabelElement -> IO (JSRef HTMLElement)
+        HTMLLabelElement -> IO (Nullable HTMLElement)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLLabelElement.control Mozilla HTMLLabelElement.control documentation> 
 getControl ::
            (MonadIO m) => HTMLLabelElement -> m (Maybe HTMLElement)
 getControl self
-  = liftIO ((js_getControl (unHTMLLabelElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getControl (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLLegendElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLLegendElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLLegendElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLLegendElement.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,29 +19,25 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"form\"]" js_getForm ::
-        JSRef HTMLLegendElement -> IO (JSRef HTMLFormElement)
+        HTMLLegendElement -> IO (Nullable HTMLFormElement)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLLegendElement.form Mozilla HTMLLegendElement.form documentation> 
 getForm ::
         (MonadIO m) => HTMLLegendElement -> m (Maybe HTMLFormElement)
-getForm self
-  = liftIO ((js_getForm (unHTMLLegendElement self)) >>= fromJSRef)
+getForm self = liftIO (nullableToMaybe <$> (js_getForm (self)))
  
 foreign import javascript unsafe "$1[\"align\"] = $2;" js_setAlign
-        :: JSRef HTMLLegendElement -> JSString -> IO ()
+        :: HTMLLegendElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLLegendElement.align Mozilla HTMLLegendElement.align documentation> 
 setAlign ::
          (MonadIO m, ToJSString val) => HTMLLegendElement -> val -> m ()
-setAlign self val
-  = liftIO (js_setAlign (unHTMLLegendElement self) (toJSString val))
+setAlign self val = liftIO (js_setAlign (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"align\"]" js_getAlign ::
-        JSRef HTMLLegendElement -> IO JSString
+        HTMLLegendElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLLegendElement.align Mozilla HTMLLegendElement.align documentation> 
 getAlign ::
          (MonadIO m, FromJSString result) => HTMLLegendElement -> m result
-getAlign self
-  = liftIO
-      (fromJSString <$> (js_getAlign (unHTMLLegendElement self)))
+getAlign self = liftIO (fromJSString <$> (js_getAlign (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLLinkElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLLinkElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLLinkElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLLinkElement.hs
@@ -13,7 +13,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -27,199 +27,180 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"disabled\"] = $2;"
-        js_setDisabled :: JSRef HTMLLinkElement -> Bool -> IO ()
+        js_setDisabled :: HTMLLinkElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLLinkElement.disabled Mozilla HTMLLinkElement.disabled documentation> 
 setDisabled :: (MonadIO m) => HTMLLinkElement -> Bool -> m ()
-setDisabled self val
-  = liftIO (js_setDisabled (unHTMLLinkElement self) val)
+setDisabled self val = liftIO (js_setDisabled (self) val)
  
 foreign import javascript unsafe "($1[\"disabled\"] ? 1 : 0)"
-        js_getDisabled :: JSRef HTMLLinkElement -> IO Bool
+        js_getDisabled :: HTMLLinkElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLLinkElement.disabled Mozilla HTMLLinkElement.disabled documentation> 
 getDisabled :: (MonadIO m) => HTMLLinkElement -> m Bool
-getDisabled self = liftIO (js_getDisabled (unHTMLLinkElement self))
+getDisabled self = liftIO (js_getDisabled (self))
  
 foreign import javascript unsafe "$1[\"charset\"] = $2;"
-        js_setCharset :: JSRef HTMLLinkElement -> JSString -> IO ()
+        js_setCharset :: HTMLLinkElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLLinkElement.charset Mozilla HTMLLinkElement.charset documentation> 
 setCharset ::
            (MonadIO m, ToJSString val) => HTMLLinkElement -> val -> m ()
 setCharset self val
-  = liftIO (js_setCharset (unHTMLLinkElement self) (toJSString val))
+  = liftIO (js_setCharset (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"charset\"]" js_getCharset ::
-        JSRef HTMLLinkElement -> IO JSString
+        HTMLLinkElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLLinkElement.charset Mozilla HTMLLinkElement.charset documentation> 
 getCharset ::
            (MonadIO m, FromJSString result) => HTMLLinkElement -> m result
-getCharset self
-  = liftIO
-      (fromJSString <$> (js_getCharset (unHTMLLinkElement self)))
+getCharset self = liftIO (fromJSString <$> (js_getCharset (self)))
  
 foreign import javascript unsafe "$1[\"href\"] = $2;" js_setHref ::
-        JSRef HTMLLinkElement -> JSString -> IO ()
+        HTMLLinkElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLLinkElement.href Mozilla HTMLLinkElement.href documentation> 
 setHref ::
         (MonadIO m, ToJSString val) => HTMLLinkElement -> val -> m ()
-setHref self val
-  = liftIO (js_setHref (unHTMLLinkElement self) (toJSString val))
+setHref self val = liftIO (js_setHref (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"href\"]" js_getHref ::
-        JSRef HTMLLinkElement -> IO JSString
+        HTMLLinkElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLLinkElement.href Mozilla HTMLLinkElement.href documentation> 
 getHref ::
         (MonadIO m, FromJSString result) => HTMLLinkElement -> m result
-getHref self
-  = liftIO (fromJSString <$> (js_getHref (unHTMLLinkElement self)))
+getHref self = liftIO (fromJSString <$> (js_getHref (self)))
  
 foreign import javascript unsafe "$1[\"hreflang\"] = $2;"
-        js_setHreflang :: JSRef HTMLLinkElement -> JSString -> IO ()
+        js_setHreflang :: HTMLLinkElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLLinkElement.hreflang Mozilla HTMLLinkElement.hreflang documentation> 
 setHreflang ::
             (MonadIO m, ToJSString val) => HTMLLinkElement -> val -> m ()
 setHreflang self val
-  = liftIO (js_setHreflang (unHTMLLinkElement self) (toJSString val))
+  = liftIO (js_setHreflang (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"hreflang\"]" js_getHreflang
-        :: JSRef HTMLLinkElement -> IO JSString
+        :: HTMLLinkElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLLinkElement.hreflang Mozilla HTMLLinkElement.hreflang documentation> 
 getHreflang ::
             (MonadIO m, FromJSString result) => HTMLLinkElement -> m result
 getHreflang self
-  = liftIO
-      (fromJSString <$> (js_getHreflang (unHTMLLinkElement self)))
+  = liftIO (fromJSString <$> (js_getHreflang (self)))
  
 foreign import javascript unsafe "$1[\"media\"] = $2;" js_setMedia
-        :: JSRef HTMLLinkElement -> JSString -> IO ()
+        :: HTMLLinkElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLLinkElement.media Mozilla HTMLLinkElement.media documentation> 
 setMedia ::
          (MonadIO m, ToJSString val) => HTMLLinkElement -> val -> m ()
-setMedia self val
-  = liftIO (js_setMedia (unHTMLLinkElement self) (toJSString val))
+setMedia self val = liftIO (js_setMedia (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"media\"]" js_getMedia ::
-        JSRef HTMLLinkElement -> IO JSString
+        HTMLLinkElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLLinkElement.media Mozilla HTMLLinkElement.media documentation> 
 getMedia ::
          (MonadIO m, FromJSString result) => HTMLLinkElement -> m result
-getMedia self
-  = liftIO (fromJSString <$> (js_getMedia (unHTMLLinkElement self)))
+getMedia self = liftIO (fromJSString <$> (js_getMedia (self)))
  
 foreign import javascript unsafe "$1[\"rel\"] = $2;" js_setRel ::
-        JSRef HTMLLinkElement -> JSString -> IO ()
+        HTMLLinkElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLLinkElement.rel Mozilla HTMLLinkElement.rel documentation> 
 setRel ::
        (MonadIO m, ToJSString val) => HTMLLinkElement -> val -> m ()
-setRel self val
-  = liftIO (js_setRel (unHTMLLinkElement self) (toJSString val))
+setRel self val = liftIO (js_setRel (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"rel\"]" js_getRel ::
-        JSRef HTMLLinkElement -> IO JSString
+        HTMLLinkElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLLinkElement.rel Mozilla HTMLLinkElement.rel documentation> 
 getRel ::
        (MonadIO m, FromJSString result) => HTMLLinkElement -> m result
-getRel self
-  = liftIO (fromJSString <$> (js_getRel (unHTMLLinkElement self)))
+getRel self = liftIO (fromJSString <$> (js_getRel (self)))
  
 foreign import javascript unsafe "$1[\"rev\"] = $2;" js_setRev ::
-        JSRef HTMLLinkElement -> JSString -> IO ()
+        HTMLLinkElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLLinkElement.rev Mozilla HTMLLinkElement.rev documentation> 
 setRev ::
        (MonadIO m, ToJSString val) => HTMLLinkElement -> val -> m ()
-setRev self val
-  = liftIO (js_setRev (unHTMLLinkElement self) (toJSString val))
+setRev self val = liftIO (js_setRev (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"rev\"]" js_getRev ::
-        JSRef HTMLLinkElement -> IO JSString
+        HTMLLinkElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLLinkElement.rev Mozilla HTMLLinkElement.rev documentation> 
 getRev ::
        (MonadIO m, FromJSString result) => HTMLLinkElement -> m result
-getRev self
-  = liftIO (fromJSString <$> (js_getRev (unHTMLLinkElement self)))
+getRev self = liftIO (fromJSString <$> (js_getRev (self)))
  
 foreign import javascript unsafe "$1[\"sizes\"] = $2;" js_setSizes
-        :: JSRef HTMLLinkElement -> JSRef DOMSettableTokenList -> IO ()
+        :: HTMLLinkElement -> Nullable DOMSettableTokenList -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLLinkElement.sizes Mozilla HTMLLinkElement.sizes documentation> 
 setSizes ::
          (MonadIO m) =>
            HTMLLinkElement -> Maybe DOMSettableTokenList -> m ()
 setSizes self val
-  = liftIO
-      (js_setSizes (unHTMLLinkElement self) (maybe jsNull pToJSRef val))
+  = liftIO (js_setSizes (self) (maybeToNullable val))
  
 foreign import javascript unsafe "$1[\"sizes\"]" js_getSizes ::
-        JSRef HTMLLinkElement -> IO (JSRef DOMSettableTokenList)
+        HTMLLinkElement -> IO (Nullable DOMSettableTokenList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLLinkElement.sizes Mozilla HTMLLinkElement.sizes documentation> 
 getSizes ::
          (MonadIO m) => HTMLLinkElement -> m (Maybe DOMSettableTokenList)
-getSizes self
-  = liftIO ((js_getSizes (unHTMLLinkElement self)) >>= fromJSRef)
+getSizes self = liftIO (nullableToMaybe <$> (js_getSizes (self)))
  
 foreign import javascript unsafe "$1[\"target\"] = $2;"
-        js_setTarget :: JSRef HTMLLinkElement -> JSString -> IO ()
+        js_setTarget :: HTMLLinkElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLLinkElement.target Mozilla HTMLLinkElement.target documentation> 
 setTarget ::
           (MonadIO m, ToJSString val) => HTMLLinkElement -> val -> m ()
-setTarget self val
-  = liftIO (js_setTarget (unHTMLLinkElement self) (toJSString val))
+setTarget self val = liftIO (js_setTarget (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"target\"]" js_getTarget ::
-        JSRef HTMLLinkElement -> IO JSString
+        HTMLLinkElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLLinkElement.target Mozilla HTMLLinkElement.target documentation> 
 getTarget ::
           (MonadIO m, FromJSString result) => HTMLLinkElement -> m result
-getTarget self
-  = liftIO (fromJSString <$> (js_getTarget (unHTMLLinkElement self)))
+getTarget self = liftIO (fromJSString <$> (js_getTarget (self)))
  
 foreign import javascript unsafe "$1[\"type\"] = $2;" js_setType ::
-        JSRef HTMLLinkElement -> JSString -> IO ()
+        HTMLLinkElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLLinkElement.type Mozilla HTMLLinkElement.type documentation> 
 setType ::
         (MonadIO m, ToJSString val) => HTMLLinkElement -> val -> m ()
-setType self val
-  = liftIO (js_setType (unHTMLLinkElement self) (toJSString val))
+setType self val = liftIO (js_setType (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"type\"]" js_getType ::
-        JSRef HTMLLinkElement -> IO JSString
+        HTMLLinkElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLLinkElement.type Mozilla HTMLLinkElement.type documentation> 
 getType ::
         (MonadIO m, FromJSString result) => HTMLLinkElement -> m result
-getType self
-  = liftIO (fromJSString <$> (js_getType (unHTMLLinkElement self)))
+getType self = liftIO (fromJSString <$> (js_getType (self)))
  
 foreign import javascript unsafe "$1[\"sheet\"]" js_getSheet ::
-        JSRef HTMLLinkElement -> IO (JSRef StyleSheet)
+        HTMLLinkElement -> IO (Nullable StyleSheet)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLLinkElement.sheet Mozilla HTMLLinkElement.sheet documentation> 
 getSheet :: (MonadIO m) => HTMLLinkElement -> m (Maybe StyleSheet)
-getSheet self
-  = liftIO ((js_getSheet (unHTMLLinkElement self)) >>= fromJSRef)
+getSheet self = liftIO (nullableToMaybe <$> (js_getSheet (self)))
  
 foreign import javascript unsafe "$1[\"relList\"]" js_getRelList ::
-        JSRef HTMLLinkElement -> IO (JSRef DOMTokenList)
+        HTMLLinkElement -> IO (Nullable DOMTokenList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLLinkElement.relList Mozilla HTMLLinkElement.relList documentation> 
 getRelList ::
            (MonadIO m) => HTMLLinkElement -> m (Maybe DOMTokenList)
 getRelList self
-  = liftIO ((js_getRelList (unHTMLLinkElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getRelList (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLMapElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLMapElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLMapElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLMapElement.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,28 +19,25 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"areas\"]" js_getAreas ::
-        JSRef HTMLMapElement -> IO (JSRef HTMLCollection)
+        HTMLMapElement -> IO (Nullable HTMLCollection)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMapElement.areas Mozilla HTMLMapElement.areas documentation> 
 getAreas ::
          (MonadIO m) => HTMLMapElement -> m (Maybe HTMLCollection)
-getAreas self
-  = liftIO ((js_getAreas (unHTMLMapElement self)) >>= fromJSRef)
+getAreas self = liftIO (nullableToMaybe <$> (js_getAreas (self)))
  
 foreign import javascript unsafe "$1[\"name\"] = $2;" js_setName ::
-        JSRef HTMLMapElement -> JSString -> IO ()
+        HTMLMapElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMapElement.name Mozilla HTMLMapElement.name documentation> 
 setName ::
         (MonadIO m, ToJSString val) => HTMLMapElement -> val -> m ()
-setName self val
-  = liftIO (js_setName (unHTMLMapElement self) (toJSString val))
+setName self val = liftIO (js_setName (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"name\"]" js_getName ::
-        JSRef HTMLMapElement -> IO JSString
+        HTMLMapElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMapElement.name Mozilla HTMLMapElement.name documentation> 
 getName ::
         (MonadIO m, FromJSString result) => HTMLMapElement -> m result
-getName self
-  = liftIO (fromJSString <$> (js_getName (unHTMLMapElement self)))
+getName self = liftIO (fromJSString <$> (js_getName (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLMarqueeElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLMarqueeElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLMarqueeElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLMarqueeElement.hs
@@ -16,7 +16,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -30,207 +30,184 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"start\"]()" js_start ::
-        JSRef HTMLMarqueeElement -> IO ()
+        HTMLMarqueeElement -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMarqueeElement.start Mozilla HTMLMarqueeElement.start documentation> 
 start :: (MonadIO m) => HTMLMarqueeElement -> m ()
-start self = liftIO (js_start (unHTMLMarqueeElement self))
+start self = liftIO (js_start (self))
  
 foreign import javascript unsafe "$1[\"stop\"]()" js_stop ::
-        JSRef HTMLMarqueeElement -> IO ()
+        HTMLMarqueeElement -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMarqueeElement.stop Mozilla HTMLMarqueeElement.stop documentation> 
 stop :: (MonadIO m) => HTMLMarqueeElement -> m ()
-stop self = liftIO (js_stop (unHTMLMarqueeElement self))
+stop self = liftIO (js_stop (self))
  
 foreign import javascript unsafe "$1[\"behavior\"] = $2;"
-        js_setBehavior :: JSRef HTMLMarqueeElement -> JSString -> IO ()
+        js_setBehavior :: HTMLMarqueeElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMarqueeElement.behavior Mozilla HTMLMarqueeElement.behavior documentation> 
 setBehavior ::
             (MonadIO m, ToJSString val) => HTMLMarqueeElement -> val -> m ()
 setBehavior self val
-  = liftIO
-      (js_setBehavior (unHTMLMarqueeElement self) (toJSString val))
+  = liftIO (js_setBehavior (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"behavior\"]" js_getBehavior
-        :: JSRef HTMLMarqueeElement -> IO JSString
+        :: HTMLMarqueeElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMarqueeElement.behavior Mozilla HTMLMarqueeElement.behavior documentation> 
 getBehavior ::
             (MonadIO m, FromJSString result) => HTMLMarqueeElement -> m result
 getBehavior self
-  = liftIO
-      (fromJSString <$> (js_getBehavior (unHTMLMarqueeElement self)))
+  = liftIO (fromJSString <$> (js_getBehavior (self)))
  
 foreign import javascript unsafe "$1[\"bgColor\"] = $2;"
-        js_setBgColor :: JSRef HTMLMarqueeElement -> JSString -> IO ()
+        js_setBgColor :: HTMLMarqueeElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMarqueeElement.bgColor Mozilla HTMLMarqueeElement.bgColor documentation> 
 setBgColor ::
            (MonadIO m, ToJSString val) => HTMLMarqueeElement -> val -> m ()
 setBgColor self val
-  = liftIO
-      (js_setBgColor (unHTMLMarqueeElement self) (toJSString val))
+  = liftIO (js_setBgColor (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"bgColor\"]" js_getBgColor ::
-        JSRef HTMLMarqueeElement -> IO JSString
+        HTMLMarqueeElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMarqueeElement.bgColor Mozilla HTMLMarqueeElement.bgColor documentation> 
 getBgColor ::
            (MonadIO m, FromJSString result) => HTMLMarqueeElement -> m result
-getBgColor self
-  = liftIO
-      (fromJSString <$> (js_getBgColor (unHTMLMarqueeElement self)))
+getBgColor self = liftIO (fromJSString <$> (js_getBgColor (self)))
  
 foreign import javascript unsafe "$1[\"direction\"] = $2;"
-        js_setDirection :: JSRef HTMLMarqueeElement -> JSString -> IO ()
+        js_setDirection :: HTMLMarqueeElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMarqueeElement.direction Mozilla HTMLMarqueeElement.direction documentation> 
 setDirection ::
              (MonadIO m, ToJSString val) => HTMLMarqueeElement -> val -> m ()
 setDirection self val
-  = liftIO
-      (js_setDirection (unHTMLMarqueeElement self) (toJSString val))
+  = liftIO (js_setDirection (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"direction\"]"
-        js_getDirection :: JSRef HTMLMarqueeElement -> IO JSString
+        js_getDirection :: HTMLMarqueeElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMarqueeElement.direction Mozilla HTMLMarqueeElement.direction documentation> 
 getDirection ::
              (MonadIO m, FromJSString result) => HTMLMarqueeElement -> m result
 getDirection self
-  = liftIO
-      (fromJSString <$> (js_getDirection (unHTMLMarqueeElement self)))
+  = liftIO (fromJSString <$> (js_getDirection (self)))
  
 foreign import javascript unsafe "$1[\"height\"] = $2;"
-        js_setHeight :: JSRef HTMLMarqueeElement -> JSString -> IO ()
+        js_setHeight :: HTMLMarqueeElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMarqueeElement.height Mozilla HTMLMarqueeElement.height documentation> 
 setHeight ::
           (MonadIO m, ToJSString val) => HTMLMarqueeElement -> val -> m ()
-setHeight self val
-  = liftIO
-      (js_setHeight (unHTMLMarqueeElement self) (toJSString val))
+setHeight self val = liftIO (js_setHeight (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"height\"]" js_getHeight ::
-        JSRef HTMLMarqueeElement -> IO JSString
+        HTMLMarqueeElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMarqueeElement.height Mozilla HTMLMarqueeElement.height documentation> 
 getHeight ::
           (MonadIO m, FromJSString result) => HTMLMarqueeElement -> m result
-getHeight self
-  = liftIO
-      (fromJSString <$> (js_getHeight (unHTMLMarqueeElement self)))
+getHeight self = liftIO (fromJSString <$> (js_getHeight (self)))
  
 foreign import javascript unsafe "$1[\"hspace\"] = $2;"
-        js_setHspace :: JSRef HTMLMarqueeElement -> Word -> IO ()
+        js_setHspace :: HTMLMarqueeElement -> Word -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMarqueeElement.hspace Mozilla HTMLMarqueeElement.hspace documentation> 
 setHspace :: (MonadIO m) => HTMLMarqueeElement -> Word -> m ()
-setHspace self val
-  = liftIO (js_setHspace (unHTMLMarqueeElement self) val)
+setHspace self val = liftIO (js_setHspace (self) val)
  
 foreign import javascript unsafe "$1[\"hspace\"]" js_getHspace ::
-        JSRef HTMLMarqueeElement -> IO Word
+        HTMLMarqueeElement -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMarqueeElement.hspace Mozilla HTMLMarqueeElement.hspace documentation> 
 getHspace :: (MonadIO m) => HTMLMarqueeElement -> m Word
-getHspace self = liftIO (js_getHspace (unHTMLMarqueeElement self))
+getHspace self = liftIO (js_getHspace (self))
  
 foreign import javascript unsafe "$1[\"loop\"] = $2;" js_setLoop ::
-        JSRef HTMLMarqueeElement -> Int -> IO ()
+        HTMLMarqueeElement -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMarqueeElement.loop Mozilla HTMLMarqueeElement.loop documentation> 
 setLoop :: (MonadIO m) => HTMLMarqueeElement -> Int -> m ()
-setLoop self val
-  = liftIO (js_setLoop (unHTMLMarqueeElement self) val)
+setLoop self val = liftIO (js_setLoop (self) val)
  
 foreign import javascript unsafe "$1[\"loop\"]" js_getLoop ::
-        JSRef HTMLMarqueeElement -> IO Int
+        HTMLMarqueeElement -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMarqueeElement.loop Mozilla HTMLMarqueeElement.loop documentation> 
 getLoop :: (MonadIO m) => HTMLMarqueeElement -> m Int
-getLoop self = liftIO (js_getLoop (unHTMLMarqueeElement self))
+getLoop self = liftIO (js_getLoop (self))
  
 foreign import javascript unsafe "$1[\"scrollAmount\"] = $2;"
-        js_setScrollAmount :: JSRef HTMLMarqueeElement -> Int -> IO ()
+        js_setScrollAmount :: HTMLMarqueeElement -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMarqueeElement.scrollAmount Mozilla HTMLMarqueeElement.scrollAmount documentation> 
 setScrollAmount :: (MonadIO m) => HTMLMarqueeElement -> Int -> m ()
-setScrollAmount self val
-  = liftIO (js_setScrollAmount (unHTMLMarqueeElement self) val)
+setScrollAmount self val = liftIO (js_setScrollAmount (self) val)
  
 foreign import javascript unsafe "$1[\"scrollAmount\"]"
-        js_getScrollAmount :: JSRef HTMLMarqueeElement -> IO Int
+        js_getScrollAmount :: HTMLMarqueeElement -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMarqueeElement.scrollAmount Mozilla HTMLMarqueeElement.scrollAmount documentation> 
 getScrollAmount :: (MonadIO m) => HTMLMarqueeElement -> m Int
-getScrollAmount self
-  = liftIO (js_getScrollAmount (unHTMLMarqueeElement self))
+getScrollAmount self = liftIO (js_getScrollAmount (self))
  
 foreign import javascript unsafe "$1[\"scrollDelay\"] = $2;"
-        js_setScrollDelay :: JSRef HTMLMarqueeElement -> Int -> IO ()
+        js_setScrollDelay :: HTMLMarqueeElement -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMarqueeElement.scrollDelay Mozilla HTMLMarqueeElement.scrollDelay documentation> 
 setScrollDelay :: (MonadIO m) => HTMLMarqueeElement -> Int -> m ()
-setScrollDelay self val
-  = liftIO (js_setScrollDelay (unHTMLMarqueeElement self) val)
+setScrollDelay self val = liftIO (js_setScrollDelay (self) val)
  
 foreign import javascript unsafe "$1[\"scrollDelay\"]"
-        js_getScrollDelay :: JSRef HTMLMarqueeElement -> IO Int
+        js_getScrollDelay :: HTMLMarqueeElement -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMarqueeElement.scrollDelay Mozilla HTMLMarqueeElement.scrollDelay documentation> 
 getScrollDelay :: (MonadIO m) => HTMLMarqueeElement -> m Int
-getScrollDelay self
-  = liftIO (js_getScrollDelay (unHTMLMarqueeElement self))
+getScrollDelay self = liftIO (js_getScrollDelay (self))
  
 foreign import javascript unsafe "$1[\"trueSpeed\"] = $2;"
-        js_setTrueSpeed :: JSRef HTMLMarqueeElement -> Bool -> IO ()
+        js_setTrueSpeed :: HTMLMarqueeElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMarqueeElement.trueSpeed Mozilla HTMLMarqueeElement.trueSpeed documentation> 
 setTrueSpeed :: (MonadIO m) => HTMLMarqueeElement -> Bool -> m ()
-setTrueSpeed self val
-  = liftIO (js_setTrueSpeed (unHTMLMarqueeElement self) val)
+setTrueSpeed self val = liftIO (js_setTrueSpeed (self) val)
  
 foreign import javascript unsafe "($1[\"trueSpeed\"] ? 1 : 0)"
-        js_getTrueSpeed :: JSRef HTMLMarqueeElement -> IO Bool
+        js_getTrueSpeed :: HTMLMarqueeElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMarqueeElement.trueSpeed Mozilla HTMLMarqueeElement.trueSpeed documentation> 
 getTrueSpeed :: (MonadIO m) => HTMLMarqueeElement -> m Bool
-getTrueSpeed self
-  = liftIO (js_getTrueSpeed (unHTMLMarqueeElement self))
+getTrueSpeed self = liftIO (js_getTrueSpeed (self))
  
 foreign import javascript unsafe "$1[\"vspace\"] = $2;"
-        js_setVspace :: JSRef HTMLMarqueeElement -> Word -> IO ()
+        js_setVspace :: HTMLMarqueeElement -> Word -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMarqueeElement.vspace Mozilla HTMLMarqueeElement.vspace documentation> 
 setVspace :: (MonadIO m) => HTMLMarqueeElement -> Word -> m ()
-setVspace self val
-  = liftIO (js_setVspace (unHTMLMarqueeElement self) val)
+setVspace self val = liftIO (js_setVspace (self) val)
  
 foreign import javascript unsafe "$1[\"vspace\"]" js_getVspace ::
-        JSRef HTMLMarqueeElement -> IO Word
+        HTMLMarqueeElement -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMarqueeElement.vspace Mozilla HTMLMarqueeElement.vspace documentation> 
 getVspace :: (MonadIO m) => HTMLMarqueeElement -> m Word
-getVspace self = liftIO (js_getVspace (unHTMLMarqueeElement self))
+getVspace self = liftIO (js_getVspace (self))
  
 foreign import javascript unsafe "$1[\"width\"] = $2;" js_setWidth
-        :: JSRef HTMLMarqueeElement -> JSString -> IO ()
+        :: HTMLMarqueeElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMarqueeElement.width Mozilla HTMLMarqueeElement.width documentation> 
 setWidth ::
          (MonadIO m, ToJSString val) => HTMLMarqueeElement -> val -> m ()
-setWidth self val
-  = liftIO (js_setWidth (unHTMLMarqueeElement self) (toJSString val))
+setWidth self val = liftIO (js_setWidth (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"width\"]" js_getWidth ::
-        JSRef HTMLMarqueeElement -> IO JSString
+        HTMLMarqueeElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMarqueeElement.width Mozilla HTMLMarqueeElement.width documentation> 
 getWidth ::
          (MonadIO m, FromJSString result) => HTMLMarqueeElement -> m result
-getWidth self
-  = liftIO
-      (fromJSString <$> (js_getWidth (unHTMLMarqueeElement self)))
+getWidth self = liftIO (fromJSString <$> (js_getWidth (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLMediaElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLMediaElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLMediaElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLMediaElement.hs
@@ -53,7 +53,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -67,17 +67,15 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"load\"]()" js_load ::
-        JSRef HTMLMediaElement -> IO ()
+        HTMLMediaElement -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.load Mozilla HTMLMediaElement.load documentation> 
 load :: (MonadIO m, IsHTMLMediaElement self) => self -> m ()
-load self
-  = liftIO (js_load (unHTMLMediaElement (toHTMLMediaElement self)))
+load self = liftIO (js_load (toHTMLMediaElement self))
  
 foreign import javascript unsafe "$1[\"canPlayType\"]($2, $3)"
         js_canPlayType ::
-        JSRef HTMLMediaElement ->
-          JSString -> JSRef (Maybe JSString) -> IO JSString
+        HTMLMediaElement -> JSString -> Nullable JSString -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.canPlayType Mozilla HTMLMediaElement.canPlayType documentation> 
 canPlayType ::
@@ -87,41 +85,37 @@
 canPlayType self type' keySystem
   = liftIO
       (fromJSString <$>
-         (js_canPlayType (unHTMLMediaElement (toHTMLMediaElement self))
-            (toJSString type')
+         (js_canPlayType (toHTMLMediaElement self) (toJSString type')
             (toMaybeJSString keySystem)))
  
 foreign import javascript unsafe "$1[\"play\"]()" js_play ::
-        JSRef HTMLMediaElement -> IO ()
+        HTMLMediaElement -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.play Mozilla HTMLMediaElement.play documentation> 
 play :: (MonadIO m, IsHTMLMediaElement self) => self -> m ()
-play self
-  = liftIO (js_play (unHTMLMediaElement (toHTMLMediaElement self)))
+play self = liftIO (js_play (toHTMLMediaElement self))
  
 foreign import javascript unsafe "$1[\"pause\"]()" js_pause ::
-        JSRef HTMLMediaElement -> IO ()
+        HTMLMediaElement -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.pause Mozilla HTMLMediaElement.pause documentation> 
 pause :: (MonadIO m, IsHTMLMediaElement self) => self -> m ()
-pause self
-  = liftIO (js_pause (unHTMLMediaElement (toHTMLMediaElement self)))
+pause self = liftIO (js_pause (toHTMLMediaElement self))
  
 foreign import javascript unsafe "$1[\"fastSeek\"]($2)" js_fastSeek
-        :: JSRef HTMLMediaElement -> Double -> IO ()
+        :: HTMLMediaElement -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.fastSeek Mozilla HTMLMediaElement.fastSeek documentation> 
 fastSeek ::
          (MonadIO m, IsHTMLMediaElement self) => self -> Double -> m ()
 fastSeek self time
-  = liftIO
-      (js_fastSeek (unHTMLMediaElement (toHTMLMediaElement self)) time)
+  = liftIO (js_fastSeek (toHTMLMediaElement self) time)
  
 foreign import javascript unsafe
         "$1[\"webkitGenerateKeyRequest\"]($2,\n$3)"
         js_webkitGenerateKeyRequest ::
-        JSRef HTMLMediaElement ->
-          JSRef (Maybe JSString) -> JSRef Uint8Array -> IO ()
+        HTMLMediaElement ->
+          Nullable JSString -> Nullable Uint8Array -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.webkitGenerateKeyRequest Mozilla HTMLMediaElement.webkitGenerateKeyRequest documentation> 
 webkitGenerateKeyRequest ::
@@ -130,16 +124,15 @@
                            self -> Maybe keySystem -> Maybe initData -> m ()
 webkitGenerateKeyRequest self keySystem initData
   = liftIO
-      (js_webkitGenerateKeyRequest
-         (unHTMLMediaElement (toHTMLMediaElement self))
+      (js_webkitGenerateKeyRequest (toHTMLMediaElement self)
          (toMaybeJSString keySystem)
-         (maybe jsNull (unUint8Array . toUint8Array) initData))
+         (maybeToNullable (fmap toUint8Array initData)))
  
 foreign import javascript unsafe
         "$1[\"webkitAddKey\"]($2, $3, $4,\n$5)" js_webkitAddKey ::
-        JSRef HTMLMediaElement ->
-          JSRef (Maybe JSString) ->
-            JSRef Uint8Array -> JSRef Uint8Array -> JSString -> IO ()
+        HTMLMediaElement ->
+          Nullable JSString ->
+            Nullable Uint8Array -> Nullable Uint8Array -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.webkitAddKey Mozilla HTMLMediaElement.webkitAddKey documentation> 
 webkitAddKey ::
@@ -149,17 +142,15 @@
                  Maybe keySystem -> Maybe key -> Maybe initData -> sessionId -> m ()
 webkitAddKey self keySystem key initData sessionId
   = liftIO
-      (js_webkitAddKey (unHTMLMediaElement (toHTMLMediaElement self))
+      (js_webkitAddKey (toHTMLMediaElement self)
          (toMaybeJSString keySystem)
-         (maybe jsNull (unUint8Array . toUint8Array) key)
-         (maybe jsNull (unUint8Array . toUint8Array) initData)
+         (maybeToNullable (fmap toUint8Array key))
+         (maybeToNullable (fmap toUint8Array initData))
          (toJSString sessionId))
  
 foreign import javascript unsafe
         "$1[\"webkitCancelKeyRequest\"]($2,\n$3)" js_webkitCancelKeyRequest
-        ::
-        JSRef HTMLMediaElement ->
-          JSRef (Maybe JSString) -> JSString -> IO ()
+        :: HTMLMediaElement -> Nullable JSString -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.webkitCancelKeyRequest Mozilla HTMLMediaElement.webkitCancelKeyRequest documentation> 
 webkitCancelKeyRequest ::
@@ -168,14 +159,13 @@
                          self -> Maybe keySystem -> sessionId -> m ()
 webkitCancelKeyRequest self keySystem sessionId
   = liftIO
-      (js_webkitCancelKeyRequest
-         (unHTMLMediaElement (toHTMLMediaElement self))
+      (js_webkitCancelKeyRequest (toHTMLMediaElement self)
          (toMaybeJSString keySystem)
          (toJSString sessionId))
  
 foreign import javascript unsafe "$1[\"webkitSetMediaKeys\"]($2)"
         js_webkitSetMediaKeys ::
-        JSRef HTMLMediaElement -> JSRef MediaKeys -> IO ()
+        HTMLMediaElement -> Nullable MediaKeys -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.webkitSetMediaKeys Mozilla HTMLMediaElement.webkitSetMediaKeys documentation> 
 webkitSetMediaKeys ::
@@ -183,14 +173,13 @@
                      self -> Maybe MediaKeys -> m ()
 webkitSetMediaKeys self mediaKeys
   = liftIO
-      (js_webkitSetMediaKeys
-         (unHTMLMediaElement (toHTMLMediaElement self))
-         (maybe jsNull pToJSRef mediaKeys))
+      (js_webkitSetMediaKeys (toHTMLMediaElement self)
+         (maybeToNullable mediaKeys))
  
 foreign import javascript unsafe "$1[\"addTextTrack\"]($2, $3, $4)"
         js_addTextTrack ::
-        JSRef HTMLMediaElement ->
-          JSString -> JSString -> JSString -> IO (JSRef TextTrack)
+        HTMLMediaElement ->
+          JSString -> JSString -> JSString -> IO (Nullable TextTrack)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.addTextTrack Mozilla HTMLMediaElement.addTextTrack documentation> 
 addTextTrack ::
@@ -199,15 +188,14 @@
                self -> kind -> label -> language -> m (Maybe TextTrack)
 addTextTrack self kind label language
   = liftIO
-      ((js_addTextTrack (unHTMLMediaElement (toHTMLMediaElement self))
-          (toJSString kind)
-          (toJSString label)
-          (toJSString language))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_addTextTrack (toHTMLMediaElement self) (toJSString kind)
+            (toJSString label)
+            (toJSString language)))
  
 foreign import javascript unsafe
         "$1[\"getVideoPlaybackQuality\"]()" js_getVideoPlaybackQuality ::
-        JSRef HTMLMediaElement -> IO (JSRef VideoPlaybackQuality)
+        HTMLMediaElement -> IO (Nullable VideoPlaybackQuality)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.getVideoPlaybackQuality Mozilla HTMLMediaElement.getVideoPlaybackQuality documentation> 
 getVideoPlaybackQuality ::
@@ -215,22 +203,19 @@
                           self -> m (Maybe VideoPlaybackQuality)
 getVideoPlaybackQuality self
   = liftIO
-      ((js_getVideoPlaybackQuality
-          (unHTMLMediaElement (toHTMLMediaElement self)))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_getVideoPlaybackQuality (toHTMLMediaElement self)))
  
 foreign import javascript unsafe
         "$1[\"webkitShowPlaybackTargetPicker\"]()"
-        js_webkitShowPlaybackTargetPicker ::
-        JSRef HTMLMediaElement -> IO ()
+        js_webkitShowPlaybackTargetPicker :: HTMLMediaElement -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.webkitShowPlaybackTargetPicker Mozilla HTMLMediaElement.webkitShowPlaybackTargetPicker documentation> 
 webkitShowPlaybackTargetPicker ::
                                (MonadIO m, IsHTMLMediaElement self) => self -> m ()
 webkitShowPlaybackTargetPicker self
   = liftIO
-      (js_webkitShowPlaybackTargetPicker
-         (unHTMLMediaElement (toHTMLMediaElement self)))
+      (js_webkitShowPlaybackTargetPicker (toHTMLMediaElement self))
 pattern NETWORK_EMPTY = 0
 pattern NETWORK_IDLE = 1
 pattern NETWORK_LOADING = 2
@@ -242,7 +227,7 @@
 pattern HAVE_ENOUGH_DATA = 4
  
 foreign import javascript unsafe "$1[\"error\"]" js_getError ::
-        JSRef HTMLMediaElement -> IO (JSRef MediaError)
+        HTMLMediaElement -> IO (Nullable MediaError)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.error Mozilla HTMLMediaElement.error documentation> 
 getError ::
@@ -250,35 +235,30 @@
            self -> m (Maybe MediaError)
 getError self
   = liftIO
-      ((js_getError (unHTMLMediaElement (toHTMLMediaElement self))) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_getError (toHTMLMediaElement self)))
  
 foreign import javascript unsafe "$1[\"src\"] = $2;" js_setSrc ::
-        JSRef HTMLMediaElement -> JSString -> IO ()
+        HTMLMediaElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.src Mozilla HTMLMediaElement.src documentation> 
 setSrc ::
        (MonadIO m, IsHTMLMediaElement self, ToJSString val) =>
          self -> val -> m ()
 setSrc self val
-  = liftIO
-      (js_setSrc (unHTMLMediaElement (toHTMLMediaElement self))
-         (toJSString val))
+  = liftIO (js_setSrc (toHTMLMediaElement self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"src\"]" js_getSrc ::
-        JSRef HTMLMediaElement -> IO JSString
+        HTMLMediaElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.src Mozilla HTMLMediaElement.src documentation> 
 getSrc ::
        (MonadIO m, IsHTMLMediaElement self, FromJSString result) =>
          self -> m result
 getSrc self
-  = liftIO
-      (fromJSString <$>
-         (js_getSrc (unHTMLMediaElement (toHTMLMediaElement self))))
+  = liftIO (fromJSString <$> (js_getSrc (toHTMLMediaElement self)))
  
 foreign import javascript unsafe "$1[\"currentSrc\"]"
-        js_getCurrentSrc :: JSRef HTMLMediaElement -> IO JSString
+        js_getCurrentSrc :: HTMLMediaElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.currentSrc Mozilla HTMLMediaElement.currentSrc documentation> 
 getCurrentSrc ::
@@ -286,33 +266,29 @@
                 self -> m result
 getCurrentSrc self
   = liftIO
-      (fromJSString <$>
-         (js_getCurrentSrc (unHTMLMediaElement (toHTMLMediaElement self))))
+      (fromJSString <$> (js_getCurrentSrc (toHTMLMediaElement self)))
  
 foreign import javascript unsafe "$1[\"networkState\"]"
-        js_getNetworkState :: JSRef HTMLMediaElement -> IO Word
+        js_getNetworkState :: HTMLMediaElement -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.networkState Mozilla HTMLMediaElement.networkState documentation> 
 getNetworkState ::
                 (MonadIO m, IsHTMLMediaElement self) => self -> m Word
 getNetworkState self
-  = liftIO
-      (js_getNetworkState (unHTMLMediaElement (toHTMLMediaElement self)))
+  = liftIO (js_getNetworkState (toHTMLMediaElement self))
  
 foreign import javascript unsafe "$1[\"preload\"] = $2;"
-        js_setPreload :: JSRef HTMLMediaElement -> JSString -> IO ()
+        js_setPreload :: HTMLMediaElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.preload Mozilla HTMLMediaElement.preload documentation> 
 setPreload ::
            (MonadIO m, IsHTMLMediaElement self, ToJSString val) =>
              self -> val -> m ()
 setPreload self val
-  = liftIO
-      (js_setPreload (unHTMLMediaElement (toHTMLMediaElement self))
-         (toJSString val))
+  = liftIO (js_setPreload (toHTMLMediaElement self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"preload\"]" js_getPreload ::
-        JSRef HTMLMediaElement -> IO JSString
+        HTMLMediaElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.preload Mozilla HTMLMediaElement.preload documentation> 
 getPreload ::
@@ -320,11 +296,10 @@
              self -> m result
 getPreload self
   = liftIO
-      (fromJSString <$>
-         (js_getPreload (unHTMLMediaElement (toHTMLMediaElement self))))
+      (fromJSString <$> (js_getPreload (toHTMLMediaElement self)))
  
 foreign import javascript unsafe "$1[\"buffered\"]" js_getBuffered
-        :: JSRef HTMLMediaElement -> IO (JSRef TimeRanges)
+        :: HTMLMediaElement -> IO (Nullable TimeRanges)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.buffered Mozilla HTMLMediaElement.buffered documentation> 
 getBuffered ::
@@ -332,116 +307,98 @@
               self -> m (Maybe TimeRanges)
 getBuffered self
   = liftIO
-      ((js_getBuffered (unHTMLMediaElement (toHTMLMediaElement self)))
-         >>= fromJSRef)
+      (nullableToMaybe <$> (js_getBuffered (toHTMLMediaElement self)))
  
 foreign import javascript unsafe "$1[\"readyState\"]"
-        js_getReadyState :: JSRef HTMLMediaElement -> IO Word
+        js_getReadyState :: HTMLMediaElement -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.readyState Mozilla HTMLMediaElement.readyState documentation> 
 getReadyState ::
               (MonadIO m, IsHTMLMediaElement self) => self -> m Word
 getReadyState self
-  = liftIO
-      (js_getReadyState (unHTMLMediaElement (toHTMLMediaElement self)))
+  = liftIO (js_getReadyState (toHTMLMediaElement self))
  
 foreign import javascript unsafe "($1[\"seeking\"] ? 1 : 0)"
-        js_getSeeking :: JSRef HTMLMediaElement -> IO Bool
+        js_getSeeking :: HTMLMediaElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.seeking Mozilla HTMLMediaElement.seeking documentation> 
 getSeeking ::
            (MonadIO m, IsHTMLMediaElement self) => self -> m Bool
-getSeeking self
-  = liftIO
-      (js_getSeeking (unHTMLMediaElement (toHTMLMediaElement self)))
+getSeeking self = liftIO (js_getSeeking (toHTMLMediaElement self))
  
 foreign import javascript unsafe "$1[\"currentTime\"] = $2;"
-        js_setCurrentTime :: JSRef HTMLMediaElement -> Double -> IO ()
+        js_setCurrentTime :: HTMLMediaElement -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.currentTime Mozilla HTMLMediaElement.currentTime documentation> 
 setCurrentTime ::
                (MonadIO m, IsHTMLMediaElement self) => self -> Double -> m ()
 setCurrentTime self val
-  = liftIO
-      (js_setCurrentTime (unHTMLMediaElement (toHTMLMediaElement self))
-         val)
+  = liftIO (js_setCurrentTime (toHTMLMediaElement self) val)
  
 foreign import javascript unsafe "$1[\"currentTime\"]"
-        js_getCurrentTime :: JSRef HTMLMediaElement -> IO Double
+        js_getCurrentTime :: HTMLMediaElement -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.currentTime Mozilla HTMLMediaElement.currentTime documentation> 
 getCurrentTime ::
                (MonadIO m, IsHTMLMediaElement self) => self -> m Double
 getCurrentTime self
-  = liftIO
-      (js_getCurrentTime (unHTMLMediaElement (toHTMLMediaElement self)))
+  = liftIO (js_getCurrentTime (toHTMLMediaElement self))
  
 foreign import javascript unsafe "$1[\"duration\"]" js_getDuration
-        :: JSRef HTMLMediaElement -> IO Double
+        :: HTMLMediaElement -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.duration Mozilla HTMLMediaElement.duration documentation> 
 getDuration ::
             (MonadIO m, IsHTMLMediaElement self) => self -> m Double
 getDuration self
-  = liftIO
-      (js_getDuration (unHTMLMediaElement (toHTMLMediaElement self)))
+  = liftIO (js_getDuration (toHTMLMediaElement self))
  
 foreign import javascript unsafe "($1[\"paused\"] ? 1 : 0)"
-        js_getPaused :: JSRef HTMLMediaElement -> IO Bool
+        js_getPaused :: HTMLMediaElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.paused Mozilla HTMLMediaElement.paused documentation> 
 getPaused :: (MonadIO m, IsHTMLMediaElement self) => self -> m Bool
-getPaused self
-  = liftIO
-      (js_getPaused (unHTMLMediaElement (toHTMLMediaElement self)))
+getPaused self = liftIO (js_getPaused (toHTMLMediaElement self))
  
 foreign import javascript unsafe
         "$1[\"defaultPlaybackRate\"] = $2;" js_setDefaultPlaybackRate ::
-        JSRef HTMLMediaElement -> Double -> IO ()
+        HTMLMediaElement -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.defaultPlaybackRate Mozilla HTMLMediaElement.defaultPlaybackRate documentation> 
 setDefaultPlaybackRate ::
                        (MonadIO m, IsHTMLMediaElement self) => self -> Double -> m ()
 setDefaultPlaybackRate self val
-  = liftIO
-      (js_setDefaultPlaybackRate
-         (unHTMLMediaElement (toHTMLMediaElement self))
-         val)
+  = liftIO (js_setDefaultPlaybackRate (toHTMLMediaElement self) val)
  
 foreign import javascript unsafe "$1[\"defaultPlaybackRate\"]"
-        js_getDefaultPlaybackRate :: JSRef HTMLMediaElement -> IO Double
+        js_getDefaultPlaybackRate :: HTMLMediaElement -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.defaultPlaybackRate Mozilla HTMLMediaElement.defaultPlaybackRate documentation> 
 getDefaultPlaybackRate ::
                        (MonadIO m, IsHTMLMediaElement self) => self -> m Double
 getDefaultPlaybackRate self
-  = liftIO
-      (js_getDefaultPlaybackRate
-         (unHTMLMediaElement (toHTMLMediaElement self)))
+  = liftIO (js_getDefaultPlaybackRate (toHTMLMediaElement self))
  
 foreign import javascript unsafe "$1[\"playbackRate\"] = $2;"
-        js_setPlaybackRate :: JSRef HTMLMediaElement -> Double -> IO ()
+        js_setPlaybackRate :: HTMLMediaElement -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.playbackRate Mozilla HTMLMediaElement.playbackRate documentation> 
 setPlaybackRate ::
                 (MonadIO m, IsHTMLMediaElement self) => self -> Double -> m ()
 setPlaybackRate self val
-  = liftIO
-      (js_setPlaybackRate (unHTMLMediaElement (toHTMLMediaElement self))
-         val)
+  = liftIO (js_setPlaybackRate (toHTMLMediaElement self) val)
  
 foreign import javascript unsafe "$1[\"playbackRate\"]"
-        js_getPlaybackRate :: JSRef HTMLMediaElement -> IO Double
+        js_getPlaybackRate :: HTMLMediaElement -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.playbackRate Mozilla HTMLMediaElement.playbackRate documentation> 
 getPlaybackRate ::
                 (MonadIO m, IsHTMLMediaElement self) => self -> m Double
 getPlaybackRate self
-  = liftIO
-      (js_getPlaybackRate (unHTMLMediaElement (toHTMLMediaElement self)))
+  = liftIO (js_getPlaybackRate (toHTMLMediaElement self))
  
 foreign import javascript unsafe "$1[\"played\"]" js_getPlayed ::
-        JSRef HTMLMediaElement -> IO (JSRef TimeRanges)
+        HTMLMediaElement -> IO (Nullable TimeRanges)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.played Mozilla HTMLMediaElement.played documentation> 
 getPlayed ::
@@ -449,11 +406,10 @@
             self -> m (Maybe TimeRanges)
 getPlayed self
   = liftIO
-      ((js_getPlayed (unHTMLMediaElement (toHTMLMediaElement self))) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_getPlayed (toHTMLMediaElement self)))
  
 foreign import javascript unsafe "$1[\"seekable\"]" js_getSeekable
-        :: JSRef HTMLMediaElement -> IO (JSRef TimeRanges)
+        :: HTMLMediaElement -> IO (Nullable TimeRanges)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.seekable Mozilla HTMLMediaElement.seekable documentation> 
 getSeekable ::
@@ -461,136 +417,117 @@
               self -> m (Maybe TimeRanges)
 getSeekable self
   = liftIO
-      ((js_getSeekable (unHTMLMediaElement (toHTMLMediaElement self)))
-         >>= fromJSRef)
+      (nullableToMaybe <$> (js_getSeekable (toHTMLMediaElement self)))
  
 foreign import javascript unsafe "($1[\"ended\"] ? 1 : 0)"
-        js_getEnded :: JSRef HTMLMediaElement -> IO Bool
+        js_getEnded :: HTMLMediaElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.ended Mozilla HTMLMediaElement.ended documentation> 
 getEnded :: (MonadIO m, IsHTMLMediaElement self) => self -> m Bool
-getEnded self
-  = liftIO
-      (js_getEnded (unHTMLMediaElement (toHTMLMediaElement self)))
+getEnded self = liftIO (js_getEnded (toHTMLMediaElement self))
  
 foreign import javascript unsafe "$1[\"autoplay\"] = $2;"
-        js_setAutoplay :: JSRef HTMLMediaElement -> Bool -> IO ()
+        js_setAutoplay :: HTMLMediaElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.autoplay Mozilla HTMLMediaElement.autoplay documentation> 
 setAutoplay ::
             (MonadIO m, IsHTMLMediaElement self) => self -> Bool -> m ()
 setAutoplay self val
-  = liftIO
-      (js_setAutoplay (unHTMLMediaElement (toHTMLMediaElement self)) val)
+  = liftIO (js_setAutoplay (toHTMLMediaElement self) val)
  
 foreign import javascript unsafe "($1[\"autoplay\"] ? 1 : 0)"
-        js_getAutoplay :: JSRef HTMLMediaElement -> IO Bool
+        js_getAutoplay :: HTMLMediaElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.autoplay Mozilla HTMLMediaElement.autoplay documentation> 
 getAutoplay ::
             (MonadIO m, IsHTMLMediaElement self) => self -> m Bool
 getAutoplay self
-  = liftIO
-      (js_getAutoplay (unHTMLMediaElement (toHTMLMediaElement self)))
+  = liftIO (js_getAutoplay (toHTMLMediaElement self))
  
 foreign import javascript unsafe "$1[\"loop\"] = $2;" js_setLoop ::
-        JSRef HTMLMediaElement -> Bool -> IO ()
+        HTMLMediaElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.loop Mozilla HTMLMediaElement.loop documentation> 
 setLoop ::
         (MonadIO m, IsHTMLMediaElement self) => self -> Bool -> m ()
 setLoop self val
-  = liftIO
-      (js_setLoop (unHTMLMediaElement (toHTMLMediaElement self)) val)
+  = liftIO (js_setLoop (toHTMLMediaElement self) val)
  
 foreign import javascript unsafe "($1[\"loop\"] ? 1 : 0)"
-        js_getLoop :: JSRef HTMLMediaElement -> IO Bool
+        js_getLoop :: HTMLMediaElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.loop Mozilla HTMLMediaElement.loop documentation> 
 getLoop :: (MonadIO m, IsHTMLMediaElement self) => self -> m Bool
-getLoop self
-  = liftIO
-      (js_getLoop (unHTMLMediaElement (toHTMLMediaElement self)))
+getLoop self = liftIO (js_getLoop (toHTMLMediaElement self))
  
 foreign import javascript unsafe "$1[\"controls\"] = $2;"
-        js_setControls :: JSRef HTMLMediaElement -> Bool -> IO ()
+        js_setControls :: HTMLMediaElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.controls Mozilla HTMLMediaElement.controls documentation> 
 setControls ::
             (MonadIO m, IsHTMLMediaElement self) => self -> Bool -> m ()
 setControls self val
-  = liftIO
-      (js_setControls (unHTMLMediaElement (toHTMLMediaElement self)) val)
+  = liftIO (js_setControls (toHTMLMediaElement self) val)
  
 foreign import javascript unsafe "($1[\"controls\"] ? 1 : 0)"
-        js_getControls :: JSRef HTMLMediaElement -> IO Bool
+        js_getControls :: HTMLMediaElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.controls Mozilla HTMLMediaElement.controls documentation> 
 getControls ::
             (MonadIO m, IsHTMLMediaElement self) => self -> m Bool
 getControls self
-  = liftIO
-      (js_getControls (unHTMLMediaElement (toHTMLMediaElement self)))
+  = liftIO (js_getControls (toHTMLMediaElement self))
  
 foreign import javascript unsafe "$1[\"volume\"] = $2;"
-        js_setVolume :: JSRef HTMLMediaElement -> Double -> IO ()
+        js_setVolume :: HTMLMediaElement -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.volume Mozilla HTMLMediaElement.volume documentation> 
 setVolume ::
           (MonadIO m, IsHTMLMediaElement self) => self -> Double -> m ()
 setVolume self val
-  = liftIO
-      (js_setVolume (unHTMLMediaElement (toHTMLMediaElement self)) val)
+  = liftIO (js_setVolume (toHTMLMediaElement self) val)
  
 foreign import javascript unsafe "$1[\"volume\"]" js_getVolume ::
-        JSRef HTMLMediaElement -> IO Double
+        HTMLMediaElement -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.volume Mozilla HTMLMediaElement.volume documentation> 
 getVolume ::
           (MonadIO m, IsHTMLMediaElement self) => self -> m Double
-getVolume self
-  = liftIO
-      (js_getVolume (unHTMLMediaElement (toHTMLMediaElement self)))
+getVolume self = liftIO (js_getVolume (toHTMLMediaElement self))
  
 foreign import javascript unsafe "$1[\"muted\"] = $2;" js_setMuted
-        :: JSRef HTMLMediaElement -> Bool -> IO ()
+        :: HTMLMediaElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.muted Mozilla HTMLMediaElement.muted documentation> 
 setMuted ::
          (MonadIO m, IsHTMLMediaElement self) => self -> Bool -> m ()
 setMuted self val
-  = liftIO
-      (js_setMuted (unHTMLMediaElement (toHTMLMediaElement self)) val)
+  = liftIO (js_setMuted (toHTMLMediaElement self) val)
  
 foreign import javascript unsafe "($1[\"muted\"] ? 1 : 0)"
-        js_getMuted :: JSRef HTMLMediaElement -> IO Bool
+        js_getMuted :: HTMLMediaElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.muted Mozilla HTMLMediaElement.muted documentation> 
 getMuted :: (MonadIO m, IsHTMLMediaElement self) => self -> m Bool
-getMuted self
-  = liftIO
-      (js_getMuted (unHTMLMediaElement (toHTMLMediaElement self)))
+getMuted self = liftIO (js_getMuted (toHTMLMediaElement self))
  
 foreign import javascript unsafe "$1[\"defaultMuted\"] = $2;"
-        js_setDefaultMuted :: JSRef HTMLMediaElement -> Bool -> IO ()
+        js_setDefaultMuted :: HTMLMediaElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.defaultMuted Mozilla HTMLMediaElement.defaultMuted documentation> 
 setDefaultMuted ::
                 (MonadIO m, IsHTMLMediaElement self) => self -> Bool -> m ()
 setDefaultMuted self val
-  = liftIO
-      (js_setDefaultMuted (unHTMLMediaElement (toHTMLMediaElement self))
-         val)
+  = liftIO (js_setDefaultMuted (toHTMLMediaElement self) val)
  
 foreign import javascript unsafe "($1[\"defaultMuted\"] ? 1 : 0)"
-        js_getDefaultMuted :: JSRef HTMLMediaElement -> IO Bool
+        js_getDefaultMuted :: HTMLMediaElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.defaultMuted Mozilla HTMLMediaElement.defaultMuted documentation> 
 getDefaultMuted ::
                 (MonadIO m, IsHTMLMediaElement self) => self -> m Bool
 getDefaultMuted self
-  = liftIO
-      (js_getDefaultMuted (unHTMLMediaElement (toHTMLMediaElement self)))
+  = liftIO (js_getDefaultMuted (toHTMLMediaElement self))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.onemptied Mozilla HTMLMediaElement.onemptied documentation> 
 emptied ::
@@ -678,93 +615,78 @@
  
 foreign import javascript unsafe
         "$1[\"webkitPreservesPitch\"] = $2;" js_setWebkitPreservesPitch ::
-        JSRef HTMLMediaElement -> Bool -> IO ()
+        HTMLMediaElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.webkitPreservesPitch Mozilla HTMLMediaElement.webkitPreservesPitch documentation> 
 setWebkitPreservesPitch ::
                         (MonadIO m, IsHTMLMediaElement self) => self -> Bool -> m ()
 setWebkitPreservesPitch self val
-  = liftIO
-      (js_setWebkitPreservesPitch
-         (unHTMLMediaElement (toHTMLMediaElement self))
-         val)
+  = liftIO (js_setWebkitPreservesPitch (toHTMLMediaElement self) val)
  
 foreign import javascript unsafe
         "($1[\"webkitPreservesPitch\"] ? 1 : 0)" js_getWebkitPreservesPitch
-        :: JSRef HTMLMediaElement -> IO Bool
+        :: HTMLMediaElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.webkitPreservesPitch Mozilla HTMLMediaElement.webkitPreservesPitch documentation> 
 getWebkitPreservesPitch ::
                         (MonadIO m, IsHTMLMediaElement self) => self -> m Bool
 getWebkitPreservesPitch self
-  = liftIO
-      (js_getWebkitPreservesPitch
-         (unHTMLMediaElement (toHTMLMediaElement self)))
+  = liftIO (js_getWebkitPreservesPitch (toHTMLMediaElement self))
  
 foreign import javascript unsafe
         "($1[\"webkitHasClosedCaptions\"] ? 1 : 0)"
-        js_getWebkitHasClosedCaptions :: JSRef HTMLMediaElement -> IO Bool
+        js_getWebkitHasClosedCaptions :: HTMLMediaElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.webkitHasClosedCaptions Mozilla HTMLMediaElement.webkitHasClosedCaptions documentation> 
 getWebkitHasClosedCaptions ::
                            (MonadIO m, IsHTMLMediaElement self) => self -> m Bool
 getWebkitHasClosedCaptions self
-  = liftIO
-      (js_getWebkitHasClosedCaptions
-         (unHTMLMediaElement (toHTMLMediaElement self)))
+  = liftIO (js_getWebkitHasClosedCaptions (toHTMLMediaElement self))
  
 foreign import javascript unsafe
         "$1[\"webkitClosedCaptionsVisible\"] = $2;"
         js_setWebkitClosedCaptionsVisible ::
-        JSRef HTMLMediaElement -> Bool -> IO ()
+        HTMLMediaElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.webkitClosedCaptionsVisible Mozilla HTMLMediaElement.webkitClosedCaptionsVisible documentation> 
 setWebkitClosedCaptionsVisible ::
                                (MonadIO m, IsHTMLMediaElement self) => self -> Bool -> m ()
 setWebkitClosedCaptionsVisible self val
   = liftIO
-      (js_setWebkitClosedCaptionsVisible
-         (unHTMLMediaElement (toHTMLMediaElement self))
-         val)
+      (js_setWebkitClosedCaptionsVisible (toHTMLMediaElement self) val)
  
 foreign import javascript unsafe
         "($1[\"webkitClosedCaptionsVisible\"] ? 1 : 0)"
-        js_getWebkitClosedCaptionsVisible ::
-        JSRef HTMLMediaElement -> IO Bool
+        js_getWebkitClosedCaptionsVisible :: HTMLMediaElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.webkitClosedCaptionsVisible Mozilla HTMLMediaElement.webkitClosedCaptionsVisible documentation> 
 getWebkitClosedCaptionsVisible ::
                                (MonadIO m, IsHTMLMediaElement self) => self -> m Bool
 getWebkitClosedCaptionsVisible self
   = liftIO
-      (js_getWebkitClosedCaptionsVisible
-         (unHTMLMediaElement (toHTMLMediaElement self)))
+      (js_getWebkitClosedCaptionsVisible (toHTMLMediaElement self))
  
 foreign import javascript unsafe
         "$1[\"webkitAudioDecodedByteCount\"]"
-        js_getWebkitAudioDecodedByteCount ::
-        JSRef HTMLMediaElement -> IO Word
+        js_getWebkitAudioDecodedByteCount :: HTMLMediaElement -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.webkitAudioDecodedByteCount Mozilla HTMLMediaElement.webkitAudioDecodedByteCount documentation> 
 getWebkitAudioDecodedByteCount ::
                                (MonadIO m, IsHTMLMediaElement self) => self -> m Word
 getWebkitAudioDecodedByteCount self
   = liftIO
-      (js_getWebkitAudioDecodedByteCount
-         (unHTMLMediaElement (toHTMLMediaElement self)))
+      (js_getWebkitAudioDecodedByteCount (toHTMLMediaElement self))
  
 foreign import javascript unsafe
         "$1[\"webkitVideoDecodedByteCount\"]"
-        js_getWebkitVideoDecodedByteCount ::
-        JSRef HTMLMediaElement -> IO Word
+        js_getWebkitVideoDecodedByteCount :: HTMLMediaElement -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.webkitVideoDecodedByteCount Mozilla HTMLMediaElement.webkitVideoDecodedByteCount documentation> 
 getWebkitVideoDecodedByteCount ::
                                (MonadIO m, IsHTMLMediaElement self) => self -> m Word
 getWebkitVideoDecodedByteCount self
   = liftIO
-      (js_getWebkitVideoDecodedByteCount
-         (unHTMLMediaElement (toHTMLMediaElement self)))
+      (js_getWebkitVideoDecodedByteCount (toHTMLMediaElement self))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.onwebkitkeyadded Mozilla HTMLMediaElement.onwebkitkeyadded documentation> 
 webKitKeyAdded ::
@@ -791,19 +713,18 @@
 webKitNeedKey = unsafeEventName (toJSString "webkitneedkey")
  
 foreign import javascript unsafe "$1[\"webkitKeys\"]"
-        js_getWebkitKeys :: JSRef HTMLMediaElement -> IO (JSRef MediaKeys)
+        js_getWebkitKeys :: HTMLMediaElement -> IO (Nullable MediaKeys)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.webkitKeys Mozilla HTMLMediaElement.webkitKeys documentation> 
 getWebkitKeys ::
               (MonadIO m, IsHTMLMediaElement self) => self -> m (Maybe MediaKeys)
 getWebkitKeys self
   = liftIO
-      ((js_getWebkitKeys (unHTMLMediaElement (toHTMLMediaElement self)))
-         >>= fromJSRef)
+      (nullableToMaybe <$> (js_getWebkitKeys (toHTMLMediaElement self)))
  
 foreign import javascript unsafe "$1[\"audioTracks\"]"
         js_getAudioTracks ::
-        JSRef HTMLMediaElement -> IO (JSRef AudioTrackList)
+        HTMLMediaElement -> IO (Nullable AudioTrackList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.audioTracks Mozilla HTMLMediaElement.audioTracks documentation> 
 getAudioTracks ::
@@ -811,12 +732,10 @@
                  self -> m (Maybe AudioTrackList)
 getAudioTracks self
   = liftIO
-      ((js_getAudioTracks (unHTMLMediaElement (toHTMLMediaElement self)))
-         >>= fromJSRef)
+      (nullableToMaybe <$> (js_getAudioTracks (toHTMLMediaElement self)))
  
 foreign import javascript unsafe "$1[\"textTracks\"]"
-        js_getTextTracks ::
-        JSRef HTMLMediaElement -> IO (JSRef TextTrackList)
+        js_getTextTracks :: HTMLMediaElement -> IO (Nullable TextTrackList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.textTracks Mozilla HTMLMediaElement.textTracks documentation> 
 getTextTracks ::
@@ -824,12 +743,11 @@
                 self -> m (Maybe TextTrackList)
 getTextTracks self
   = liftIO
-      ((js_getTextTracks (unHTMLMediaElement (toHTMLMediaElement self)))
-         >>= fromJSRef)
+      (nullableToMaybe <$> (js_getTextTracks (toHTMLMediaElement self)))
  
 foreign import javascript unsafe "$1[\"videoTracks\"]"
         js_getVideoTracks ::
-        JSRef HTMLMediaElement -> IO (JSRef VideoTrackList)
+        HTMLMediaElement -> IO (Nullable VideoTrackList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.videoTracks Mozilla HTMLMediaElement.videoTracks documentation> 
 getVideoTracks ::
@@ -837,12 +755,10 @@
                  self -> m (Maybe VideoTrackList)
 getVideoTracks self
   = liftIO
-      ((js_getVideoTracks (unHTMLMediaElement (toHTMLMediaElement self)))
-         >>= fromJSRef)
+      (nullableToMaybe <$> (js_getVideoTracks (toHTMLMediaElement self)))
  
 foreign import javascript unsafe "$1[\"mediaGroup\"] = $2;"
-        js_setMediaGroup ::
-        JSRef HTMLMediaElement -> JSRef (Maybe JSString) -> IO ()
+        js_setMediaGroup :: HTMLMediaElement -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.mediaGroup Mozilla HTMLMediaElement.mediaGroup documentation> 
 setMediaGroup ::
@@ -850,12 +766,10 @@
                 self -> Maybe val -> m ()
 setMediaGroup self val
   = liftIO
-      (js_setMediaGroup (unHTMLMediaElement (toHTMLMediaElement self))
-         (toMaybeJSString val))
+      (js_setMediaGroup (toHTMLMediaElement self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"mediaGroup\"]"
-        js_getMediaGroup ::
-        JSRef HTMLMediaElement -> IO (JSRef (Maybe JSString))
+        js_getMediaGroup :: HTMLMediaElement -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.mediaGroup Mozilla HTMLMediaElement.mediaGroup documentation> 
 getMediaGroup ::
@@ -864,11 +778,11 @@
 getMediaGroup self
   = liftIO
       (fromMaybeJSString <$>
-         (js_getMediaGroup (unHTMLMediaElement (toHTMLMediaElement self))))
+         (js_getMediaGroup (toHTMLMediaElement self)))
  
 foreign import javascript unsafe "$1[\"controller\"] = $2;"
         js_setController ::
-        JSRef HTMLMediaElement -> JSRef MediaController -> IO ()
+        HTMLMediaElement -> Nullable MediaController -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.controller Mozilla HTMLMediaElement.controller documentation> 
 setController ::
@@ -876,12 +790,11 @@
                 self -> Maybe MediaController -> m ()
 setController self val
   = liftIO
-      (js_setController (unHTMLMediaElement (toHTMLMediaElement self))
-         (maybe jsNull pToJSRef val))
+      (js_setController (toHTMLMediaElement self) (maybeToNullable val))
  
 foreign import javascript unsafe "$1[\"controller\"]"
         js_getController ::
-        JSRef HTMLMediaElement -> IO (JSRef MediaController)
+        HTMLMediaElement -> IO (Nullable MediaController)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.controller Mozilla HTMLMediaElement.controller documentation> 
 getController ::
@@ -889,13 +802,12 @@
                 self -> m (Maybe MediaController)
 getController self
   = liftIO
-      ((js_getController (unHTMLMediaElement (toHTMLMediaElement self)))
-         >>= fromJSRef)
+      (nullableToMaybe <$> (js_getController (toHTMLMediaElement self)))
  
 foreign import javascript unsafe
         "($1[\"webkitCurrentPlaybackTargetIsWireless\"] ? 1 : 0)"
         js_getWebkitCurrentPlaybackTargetIsWireless ::
-        JSRef HTMLMediaElement -> IO Bool
+        HTMLMediaElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.webkitCurrentPlaybackTargetIsWireless Mozilla HTMLMediaElement.webkitCurrentPlaybackTargetIsWireless documentation> 
 getWebkitCurrentPlaybackTargetIsWireless ::
@@ -903,7 +815,7 @@
 getWebkitCurrentPlaybackTargetIsWireless self
   = liftIO
       (js_getWebkitCurrentPlaybackTargetIsWireless
-         (unHTMLMediaElement (toHTMLMediaElement self)))
+         (toHTMLMediaElement self))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.onwebkitcurrentplaybacktargetiswirelesschanged Mozilla HTMLMediaElement.onwebkitcurrentplaybacktargetiswirelesschanged documentation> 
 webKitCurrentPlaybackTargetIsWirelessChanged ::
@@ -923,7 +835,7 @@
  
 foreign import javascript unsafe "$1[\"srcObject\"] = $2;"
         js_setSrcObject ::
-        JSRef HTMLMediaElement -> JSRef MediaStream -> IO ()
+        HTMLMediaElement -> Nullable MediaStream -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.srcObject Mozilla HTMLMediaElement.srcObject documentation> 
 setSrcObject ::
@@ -931,12 +843,10 @@
                self -> Maybe MediaStream -> m ()
 setSrcObject self val
   = liftIO
-      (js_setSrcObject (unHTMLMediaElement (toHTMLMediaElement self))
-         (maybe jsNull pToJSRef val))
+      (js_setSrcObject (toHTMLMediaElement self) (maybeToNullable val))
  
 foreign import javascript unsafe "$1[\"srcObject\"]"
-        js_getSrcObject ::
-        JSRef HTMLMediaElement -> IO (JSRef (Maybe MediaStream))
+        js_getSrcObject :: HTMLMediaElement -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement.srcObject Mozilla HTMLMediaElement.srcObject documentation> 
 getSrcObject ::
@@ -944,5 +854,5 @@
                self -> m (Maybe MediaStream)
 getSrcObject self
   = liftIO
-      ((js_getSrcObject (unHTMLMediaElement (toHTMLMediaElement self)))
-         >>= fromJSRefUnchecked)
+      ((js_getSrcObject (toHTMLMediaElement self)) >>=
+         fromJSRefUnchecked)
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLMenuElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLMenuElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLMenuElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLMenuElement.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,16 +19,15 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"compact\"] = $2;"
-        js_setCompact :: JSRef HTMLMenuElement -> Bool -> IO ()
+        js_setCompact :: HTMLMenuElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMenuElement.compact Mozilla HTMLMenuElement.compact documentation> 
 setCompact :: (MonadIO m) => HTMLMenuElement -> Bool -> m ()
-setCompact self val
-  = liftIO (js_setCompact (unHTMLMenuElement self) val)
+setCompact self val = liftIO (js_setCompact (self) val)
  
 foreign import javascript unsafe "($1[\"compact\"] ? 1 : 0)"
-        js_getCompact :: JSRef HTMLMenuElement -> IO Bool
+        js_getCompact :: HTMLMenuElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMenuElement.compact Mozilla HTMLMenuElement.compact documentation> 
 getCompact :: (MonadIO m) => HTMLMenuElement -> m Bool
-getCompact self = liftIO (js_getCompact (unHTMLMenuElement self))
+getCompact self = liftIO (js_getCompact (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLMetaElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLMetaElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLMetaElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLMetaElement.hs
@@ -8,7 +8,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -22,76 +22,68 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"content\"] = $2;"
-        js_setContent :: JSRef HTMLMetaElement -> JSString -> IO ()
+        js_setContent :: HTMLMetaElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMetaElement.content Mozilla HTMLMetaElement.content documentation> 
 setContent ::
            (MonadIO m, ToJSString val) => HTMLMetaElement -> val -> m ()
 setContent self val
-  = liftIO (js_setContent (unHTMLMetaElement self) (toJSString val))
+  = liftIO (js_setContent (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"content\"]" js_getContent ::
-        JSRef HTMLMetaElement -> IO JSString
+        HTMLMetaElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMetaElement.content Mozilla HTMLMetaElement.content documentation> 
 getContent ::
            (MonadIO m, FromJSString result) => HTMLMetaElement -> m result
-getContent self
-  = liftIO
-      (fromJSString <$> (js_getContent (unHTMLMetaElement self)))
+getContent self = liftIO (fromJSString <$> (js_getContent (self)))
  
 foreign import javascript unsafe "$1[\"httpEquiv\"] = $2;"
-        js_setHttpEquiv :: JSRef HTMLMetaElement -> JSString -> IO ()
+        js_setHttpEquiv :: HTMLMetaElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMetaElement.httpEquiv Mozilla HTMLMetaElement.httpEquiv documentation> 
 setHttpEquiv ::
              (MonadIO m, ToJSString val) => HTMLMetaElement -> val -> m ()
 setHttpEquiv self val
-  = liftIO
-      (js_setHttpEquiv (unHTMLMetaElement self) (toJSString val))
+  = liftIO (js_setHttpEquiv (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"httpEquiv\"]"
-        js_getHttpEquiv :: JSRef HTMLMetaElement -> IO JSString
+        js_getHttpEquiv :: HTMLMetaElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMetaElement.httpEquiv Mozilla HTMLMetaElement.httpEquiv documentation> 
 getHttpEquiv ::
              (MonadIO m, FromJSString result) => HTMLMetaElement -> m result
 getHttpEquiv self
-  = liftIO
-      (fromJSString <$> (js_getHttpEquiv (unHTMLMetaElement self)))
+  = liftIO (fromJSString <$> (js_getHttpEquiv (self)))
  
 foreign import javascript unsafe "$1[\"name\"] = $2;" js_setName ::
-        JSRef HTMLMetaElement -> JSString -> IO ()
+        HTMLMetaElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMetaElement.name Mozilla HTMLMetaElement.name documentation> 
 setName ::
         (MonadIO m, ToJSString val) => HTMLMetaElement -> val -> m ()
-setName self val
-  = liftIO (js_setName (unHTMLMetaElement self) (toJSString val))
+setName self val = liftIO (js_setName (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"name\"]" js_getName ::
-        JSRef HTMLMetaElement -> IO JSString
+        HTMLMetaElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMetaElement.name Mozilla HTMLMetaElement.name documentation> 
 getName ::
         (MonadIO m, FromJSString result) => HTMLMetaElement -> m result
-getName self
-  = liftIO (fromJSString <$> (js_getName (unHTMLMetaElement self)))
+getName self = liftIO (fromJSString <$> (js_getName (self)))
  
 foreign import javascript unsafe "$1[\"scheme\"] = $2;"
-        js_setScheme :: JSRef HTMLMetaElement -> JSString -> IO ()
+        js_setScheme :: HTMLMetaElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMetaElement.scheme Mozilla HTMLMetaElement.scheme documentation> 
 setScheme ::
           (MonadIO m, ToJSString val) => HTMLMetaElement -> val -> m ()
-setScheme self val
-  = liftIO (js_setScheme (unHTMLMetaElement self) (toJSString val))
+setScheme self val = liftIO (js_setScheme (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"scheme\"]" js_getScheme ::
-        JSRef HTMLMetaElement -> IO JSString
+        HTMLMetaElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMetaElement.scheme Mozilla HTMLMetaElement.scheme documentation> 
 getScheme ::
           (MonadIO m, FromJSString result) => HTMLMetaElement -> m result
-getScheme self
-  = liftIO (fromJSString <$> (js_getScheme (unHTMLMetaElement self)))
+getScheme self = liftIO (fromJSString <$> (js_getScheme (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLMeterElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLMeterElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLMeterElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLMeterElement.hs
@@ -9,7 +9,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -23,96 +23,92 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"value\"] = $2;" js_setValue
-        :: JSRef HTMLMeterElement -> Double -> IO ()
+        :: HTMLMeterElement -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMeterElement.value Mozilla HTMLMeterElement.value documentation> 
 setValue :: (MonadIO m) => HTMLMeterElement -> Double -> m ()
-setValue self val
-  = liftIO (js_setValue (unHTMLMeterElement self) val)
+setValue self val = liftIO (js_setValue (self) val)
  
 foreign import javascript unsafe "$1[\"value\"]" js_getValue ::
-        JSRef HTMLMeterElement -> IO Double
+        HTMLMeterElement -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMeterElement.value Mozilla HTMLMeterElement.value documentation> 
 getValue :: (MonadIO m) => HTMLMeterElement -> m Double
-getValue self = liftIO (js_getValue (unHTMLMeterElement self))
+getValue self = liftIO (js_getValue (self))
  
 foreign import javascript unsafe "$1[\"min\"] = $2;" js_setMin ::
-        JSRef HTMLMeterElement -> Double -> IO ()
+        HTMLMeterElement -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMeterElement.min Mozilla HTMLMeterElement.min documentation> 
 setMin :: (MonadIO m) => HTMLMeterElement -> Double -> m ()
-setMin self val = liftIO (js_setMin (unHTMLMeterElement self) val)
+setMin self val = liftIO (js_setMin (self) val)
  
 foreign import javascript unsafe "$1[\"min\"]" js_getMin ::
-        JSRef HTMLMeterElement -> IO Double
+        HTMLMeterElement -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMeterElement.min Mozilla HTMLMeterElement.min documentation> 
 getMin :: (MonadIO m) => HTMLMeterElement -> m Double
-getMin self = liftIO (js_getMin (unHTMLMeterElement self))
+getMin self = liftIO (js_getMin (self))
  
 foreign import javascript unsafe "$1[\"max\"] = $2;" js_setMax ::
-        JSRef HTMLMeterElement -> Double -> IO ()
+        HTMLMeterElement -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMeterElement.max Mozilla HTMLMeterElement.max documentation> 
 setMax :: (MonadIO m) => HTMLMeterElement -> Double -> m ()
-setMax self val = liftIO (js_setMax (unHTMLMeterElement self) val)
+setMax self val = liftIO (js_setMax (self) val)
  
 foreign import javascript unsafe "$1[\"max\"]" js_getMax ::
-        JSRef HTMLMeterElement -> IO Double
+        HTMLMeterElement -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMeterElement.max Mozilla HTMLMeterElement.max documentation> 
 getMax :: (MonadIO m) => HTMLMeterElement -> m Double
-getMax self = liftIO (js_getMax (unHTMLMeterElement self))
+getMax self = liftIO (js_getMax (self))
  
 foreign import javascript unsafe "$1[\"low\"] = $2;" js_setLow ::
-        JSRef HTMLMeterElement -> Double -> IO ()
+        HTMLMeterElement -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMeterElement.low Mozilla HTMLMeterElement.low documentation> 
 setLow :: (MonadIO m) => HTMLMeterElement -> Double -> m ()
-setLow self val = liftIO (js_setLow (unHTMLMeterElement self) val)
+setLow self val = liftIO (js_setLow (self) val)
  
 foreign import javascript unsafe "$1[\"low\"]" js_getLow ::
-        JSRef HTMLMeterElement -> IO Double
+        HTMLMeterElement -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMeterElement.low Mozilla HTMLMeterElement.low documentation> 
 getLow :: (MonadIO m) => HTMLMeterElement -> m Double
-getLow self = liftIO (js_getLow (unHTMLMeterElement self))
+getLow self = liftIO (js_getLow (self))
  
 foreign import javascript unsafe "$1[\"high\"] = $2;" js_setHigh ::
-        JSRef HTMLMeterElement -> Double -> IO ()
+        HTMLMeterElement -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMeterElement.high Mozilla HTMLMeterElement.high documentation> 
 setHigh :: (MonadIO m) => HTMLMeterElement -> Double -> m ()
-setHigh self val
-  = liftIO (js_setHigh (unHTMLMeterElement self) val)
+setHigh self val = liftIO (js_setHigh (self) val)
  
 foreign import javascript unsafe "$1[\"high\"]" js_getHigh ::
-        JSRef HTMLMeterElement -> IO Double
+        HTMLMeterElement -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMeterElement.high Mozilla HTMLMeterElement.high documentation> 
 getHigh :: (MonadIO m) => HTMLMeterElement -> m Double
-getHigh self = liftIO (js_getHigh (unHTMLMeterElement self))
+getHigh self = liftIO (js_getHigh (self))
  
 foreign import javascript unsafe "$1[\"optimum\"] = $2;"
-        js_setOptimum :: JSRef HTMLMeterElement -> Double -> IO ()
+        js_setOptimum :: HTMLMeterElement -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMeterElement.optimum Mozilla HTMLMeterElement.optimum documentation> 
 setOptimum :: (MonadIO m) => HTMLMeterElement -> Double -> m ()
-setOptimum self val
-  = liftIO (js_setOptimum (unHTMLMeterElement self) val)
+setOptimum self val = liftIO (js_setOptimum (self) val)
  
 foreign import javascript unsafe "$1[\"optimum\"]" js_getOptimum ::
-        JSRef HTMLMeterElement -> IO Double
+        HTMLMeterElement -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMeterElement.optimum Mozilla HTMLMeterElement.optimum documentation> 
 getOptimum :: (MonadIO m) => HTMLMeterElement -> m Double
-getOptimum self = liftIO (js_getOptimum (unHTMLMeterElement self))
+getOptimum self = liftIO (js_getOptimum (self))
  
 foreign import javascript unsafe "$1[\"labels\"]" js_getLabels ::
-        JSRef HTMLMeterElement -> IO (JSRef NodeList)
+        HTMLMeterElement -> IO (Nullable NodeList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMeterElement.labels Mozilla HTMLMeterElement.labels documentation> 
 getLabels :: (MonadIO m) => HTMLMeterElement -> m (Maybe NodeList)
-getLabels self
-  = liftIO ((js_getLabels (unHTMLMeterElement self)) >>= fromJSRef)
+getLabels self = liftIO (nullableToMaybe <$> (js_getLabels (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLModElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLModElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLModElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLModElement.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,38 +20,35 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"cite\"] = $2;" js_setCite ::
-        JSRef HTMLModElement -> JSString -> IO ()
+        HTMLModElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLModElement.cite Mozilla HTMLModElement.cite documentation> 
 setCite ::
         (MonadIO m, ToJSString val) => HTMLModElement -> val -> m ()
-setCite self val
-  = liftIO (js_setCite (unHTMLModElement self) (toJSString val))
+setCite self val = liftIO (js_setCite (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"cite\"]" js_getCite ::
-        JSRef HTMLModElement -> IO JSString
+        HTMLModElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLModElement.cite Mozilla HTMLModElement.cite documentation> 
 getCite ::
         (MonadIO m, FromJSString result) => HTMLModElement -> m result
-getCite self
-  = liftIO (fromJSString <$> (js_getCite (unHTMLModElement self)))
+getCite self = liftIO (fromJSString <$> (js_getCite (self)))
  
 foreign import javascript unsafe "$1[\"dateTime\"] = $2;"
-        js_setDateTime :: JSRef HTMLModElement -> JSString -> IO ()
+        js_setDateTime :: HTMLModElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLModElement.dateTime Mozilla HTMLModElement.dateTime documentation> 
 setDateTime ::
             (MonadIO m, ToJSString val) => HTMLModElement -> val -> m ()
 setDateTime self val
-  = liftIO (js_setDateTime (unHTMLModElement self) (toJSString val))
+  = liftIO (js_setDateTime (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"dateTime\"]" js_getDateTime
-        :: JSRef HTMLModElement -> IO JSString
+        :: HTMLModElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLModElement.dateTime Mozilla HTMLModElement.dateTime documentation> 
 getDateTime ::
             (MonadIO m, FromJSString result) => HTMLModElement -> m result
 getDateTime self
-  = liftIO
-      (fromJSString <$> (js_getDateTime (unHTMLModElement self)))
+  = liftIO (fromJSString <$> (js_getDateTime (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLOListElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLOListElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLOListElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLOListElement.hs
@@ -8,7 +8,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -22,65 +22,59 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"compact\"] = $2;"
-        js_setCompact :: JSRef HTMLOListElement -> Bool -> IO ()
+        js_setCompact :: HTMLOListElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOListElement.compact Mozilla HTMLOListElement.compact documentation> 
 setCompact :: (MonadIO m) => HTMLOListElement -> Bool -> m ()
-setCompact self val
-  = liftIO (js_setCompact (unHTMLOListElement self) val)
+setCompact self val = liftIO (js_setCompact (self) val)
  
 foreign import javascript unsafe "($1[\"compact\"] ? 1 : 0)"
-        js_getCompact :: JSRef HTMLOListElement -> IO Bool
+        js_getCompact :: HTMLOListElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOListElement.compact Mozilla HTMLOListElement.compact documentation> 
 getCompact :: (MonadIO m) => HTMLOListElement -> m Bool
-getCompact self = liftIO (js_getCompact (unHTMLOListElement self))
+getCompact self = liftIO (js_getCompact (self))
  
 foreign import javascript unsafe "$1[\"start\"] = $2;" js_setStart
-        :: JSRef HTMLOListElement -> Int -> IO ()
+        :: HTMLOListElement -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOListElement.start Mozilla HTMLOListElement.start documentation> 
 setStart :: (MonadIO m) => HTMLOListElement -> Int -> m ()
-setStart self val
-  = liftIO (js_setStart (unHTMLOListElement self) val)
+setStart self val = liftIO (js_setStart (self) val)
  
 foreign import javascript unsafe "$1[\"start\"]" js_getStart ::
-        JSRef HTMLOListElement -> IO Int
+        HTMLOListElement -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOListElement.start Mozilla HTMLOListElement.start documentation> 
 getStart :: (MonadIO m) => HTMLOListElement -> m Int
-getStart self = liftIO (js_getStart (unHTMLOListElement self))
+getStart self = liftIO (js_getStart (self))
  
 foreign import javascript unsafe "$1[\"reversed\"] = $2;"
-        js_setReversed :: JSRef HTMLOListElement -> Bool -> IO ()
+        js_setReversed :: HTMLOListElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOListElement.reversed Mozilla HTMLOListElement.reversed documentation> 
 setReversed :: (MonadIO m) => HTMLOListElement -> Bool -> m ()
-setReversed self val
-  = liftIO (js_setReversed (unHTMLOListElement self) val)
+setReversed self val = liftIO (js_setReversed (self) val)
  
 foreign import javascript unsafe "($1[\"reversed\"] ? 1 : 0)"
-        js_getReversed :: JSRef HTMLOListElement -> IO Bool
+        js_getReversed :: HTMLOListElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOListElement.reversed Mozilla HTMLOListElement.reversed documentation> 
 getReversed :: (MonadIO m) => HTMLOListElement -> m Bool
-getReversed self
-  = liftIO (js_getReversed (unHTMLOListElement self))
+getReversed self = liftIO (js_getReversed (self))
  
 foreign import javascript unsafe "$1[\"type\"] = $2;" js_setType ::
-        JSRef HTMLOListElement -> JSString -> IO ()
+        HTMLOListElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOListElement.type Mozilla HTMLOListElement.type documentation> 
 setType ::
         (MonadIO m, ToJSString val) => HTMLOListElement -> val -> m ()
-setType self val
-  = liftIO (js_setType (unHTMLOListElement self) (toJSString val))
+setType self val = liftIO (js_setType (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"type\"]" js_getType ::
-        JSRef HTMLOListElement -> IO JSString
+        HTMLOListElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOListElement.type Mozilla HTMLOListElement.type documentation> 
 getType ::
         (MonadIO m, FromJSString result) => HTMLOListElement -> m result
-getType self
-  = liftIO (fromJSString <$> (js_getType (unHTMLOListElement self)))
+getType self = liftIO (fromJSString <$> (js_getType (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLObjectElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLObjectElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLObjectElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLObjectElement.hs
@@ -22,7 +22,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -37,374 +37,327 @@
  
 foreign import javascript unsafe
         "($1[\"checkValidity\"]() ? 1 : 0)" js_checkValidity ::
-        JSRef HTMLObjectElement -> IO Bool
+        HTMLObjectElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLObjectElement.checkValidity Mozilla HTMLObjectElement.checkValidity documentation> 
 checkValidity :: (MonadIO m) => HTMLObjectElement -> m Bool
-checkValidity self
-  = liftIO (js_checkValidity (unHTMLObjectElement self))
+checkValidity self = liftIO (js_checkValidity (self))
  
 foreign import javascript unsafe "$1[\"setCustomValidity\"]($2)"
         js_setCustomValidity ::
-        JSRef HTMLObjectElement -> JSRef (Maybe JSString) -> IO ()
+        HTMLObjectElement -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLObjectElement.setCustomValidity Mozilla HTMLObjectElement.setCustomValidity documentation> 
 setCustomValidity ::
                   (MonadIO m, ToJSString error) =>
                     HTMLObjectElement -> Maybe error -> m ()
 setCustomValidity self error
-  = liftIO
-      (js_setCustomValidity (unHTMLObjectElement self)
-         (toMaybeJSString error))
+  = liftIO (js_setCustomValidity (self) (toMaybeJSString error))
  
 foreign import javascript unsafe "$1[\"getSVGDocument\"]()"
-        js_getSVGDocument ::
-        JSRef HTMLObjectElement -> IO (JSRef SVGDocument)
+        js_getSVGDocument :: HTMLObjectElement -> IO (Nullable SVGDocument)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLObjectElement.getSVGDocument Mozilla HTMLObjectElement.getSVGDocument documentation> 
 getSVGDocument ::
                (MonadIO m) => HTMLObjectElement -> m (Maybe SVGDocument)
 getSVGDocument self
-  = liftIO
-      ((js_getSVGDocument (unHTMLObjectElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getSVGDocument (self)))
  
 foreign import javascript unsafe "$1[\"form\"]" js_getForm ::
-        JSRef HTMLObjectElement -> IO (JSRef HTMLFormElement)
+        HTMLObjectElement -> IO (Nullable HTMLFormElement)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLObjectElement.form Mozilla HTMLObjectElement.form documentation> 
 getForm ::
         (MonadIO m) => HTMLObjectElement -> m (Maybe HTMLFormElement)
-getForm self
-  = liftIO ((js_getForm (unHTMLObjectElement self)) >>= fromJSRef)
+getForm self = liftIO (nullableToMaybe <$> (js_getForm (self)))
  
 foreign import javascript unsafe "$1[\"code\"] = $2;" js_setCode ::
-        JSRef HTMLObjectElement -> JSString -> IO ()
+        HTMLObjectElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLObjectElement.code Mozilla HTMLObjectElement.code documentation> 
 setCode ::
         (MonadIO m, ToJSString val) => HTMLObjectElement -> val -> m ()
-setCode self val
-  = liftIO (js_setCode (unHTMLObjectElement self) (toJSString val))
+setCode self val = liftIO (js_setCode (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"code\"]" js_getCode ::
-        JSRef HTMLObjectElement -> IO JSString
+        HTMLObjectElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLObjectElement.code Mozilla HTMLObjectElement.code documentation> 
 getCode ::
         (MonadIO m, FromJSString result) => HTMLObjectElement -> m result
-getCode self
-  = liftIO (fromJSString <$> (js_getCode (unHTMLObjectElement self)))
+getCode self = liftIO (fromJSString <$> (js_getCode (self)))
  
 foreign import javascript unsafe "$1[\"align\"] = $2;" js_setAlign
-        :: JSRef HTMLObjectElement -> JSString -> IO ()
+        :: HTMLObjectElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLObjectElement.align Mozilla HTMLObjectElement.align documentation> 
 setAlign ::
          (MonadIO m, ToJSString val) => HTMLObjectElement -> val -> m ()
-setAlign self val
-  = liftIO (js_setAlign (unHTMLObjectElement self) (toJSString val))
+setAlign self val = liftIO (js_setAlign (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"align\"]" js_getAlign ::
-        JSRef HTMLObjectElement -> IO JSString
+        HTMLObjectElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLObjectElement.align Mozilla HTMLObjectElement.align documentation> 
 getAlign ::
          (MonadIO m, FromJSString result) => HTMLObjectElement -> m result
-getAlign self
-  = liftIO
-      (fromJSString <$> (js_getAlign (unHTMLObjectElement self)))
+getAlign self = liftIO (fromJSString <$> (js_getAlign (self)))
  
 foreign import javascript unsafe "$1[\"archive\"] = $2;"
-        js_setArchive :: JSRef HTMLObjectElement -> JSString -> IO ()
+        js_setArchive :: HTMLObjectElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLObjectElement.archive Mozilla HTMLObjectElement.archive documentation> 
 setArchive ::
            (MonadIO m, ToJSString val) => HTMLObjectElement -> val -> m ()
 setArchive self val
-  = liftIO
-      (js_setArchive (unHTMLObjectElement self) (toJSString val))
+  = liftIO (js_setArchive (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"archive\"]" js_getArchive ::
-        JSRef HTMLObjectElement -> IO JSString
+        HTMLObjectElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLObjectElement.archive Mozilla HTMLObjectElement.archive documentation> 
 getArchive ::
            (MonadIO m, FromJSString result) => HTMLObjectElement -> m result
-getArchive self
-  = liftIO
-      (fromJSString <$> (js_getArchive (unHTMLObjectElement self)))
+getArchive self = liftIO (fromJSString <$> (js_getArchive (self)))
  
 foreign import javascript unsafe "$1[\"border\"] = $2;"
-        js_setBorder :: JSRef HTMLObjectElement -> JSString -> IO ()
+        js_setBorder :: HTMLObjectElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLObjectElement.border Mozilla HTMLObjectElement.border documentation> 
 setBorder ::
           (MonadIO m, ToJSString val) => HTMLObjectElement -> val -> m ()
-setBorder self val
-  = liftIO (js_setBorder (unHTMLObjectElement self) (toJSString val))
+setBorder self val = liftIO (js_setBorder (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"border\"]" js_getBorder ::
-        JSRef HTMLObjectElement -> IO JSString
+        HTMLObjectElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLObjectElement.border Mozilla HTMLObjectElement.border documentation> 
 getBorder ::
           (MonadIO m, FromJSString result) => HTMLObjectElement -> m result
-getBorder self
-  = liftIO
-      (fromJSString <$> (js_getBorder (unHTMLObjectElement self)))
+getBorder self = liftIO (fromJSString <$> (js_getBorder (self)))
  
 foreign import javascript unsafe "$1[\"codeBase\"] = $2;"
-        js_setCodeBase :: JSRef HTMLObjectElement -> JSString -> IO ()
+        js_setCodeBase :: HTMLObjectElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLObjectElement.codeBase Mozilla HTMLObjectElement.codeBase documentation> 
 setCodeBase ::
             (MonadIO m, ToJSString val) => HTMLObjectElement -> val -> m ()
 setCodeBase self val
-  = liftIO
-      (js_setCodeBase (unHTMLObjectElement self) (toJSString val))
+  = liftIO (js_setCodeBase (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"codeBase\"]" js_getCodeBase
-        :: JSRef HTMLObjectElement -> IO JSString
+        :: HTMLObjectElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLObjectElement.codeBase Mozilla HTMLObjectElement.codeBase documentation> 
 getCodeBase ::
             (MonadIO m, FromJSString result) => HTMLObjectElement -> m result
 getCodeBase self
-  = liftIO
-      (fromJSString <$> (js_getCodeBase (unHTMLObjectElement self)))
+  = liftIO (fromJSString <$> (js_getCodeBase (self)))
  
 foreign import javascript unsafe "$1[\"codeType\"] = $2;"
-        js_setCodeType :: JSRef HTMLObjectElement -> JSString -> IO ()
+        js_setCodeType :: HTMLObjectElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLObjectElement.codeType Mozilla HTMLObjectElement.codeType documentation> 
 setCodeType ::
             (MonadIO m, ToJSString val) => HTMLObjectElement -> val -> m ()
 setCodeType self val
-  = liftIO
-      (js_setCodeType (unHTMLObjectElement self) (toJSString val))
+  = liftIO (js_setCodeType (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"codeType\"]" js_getCodeType
-        :: JSRef HTMLObjectElement -> IO JSString
+        :: HTMLObjectElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLObjectElement.codeType Mozilla HTMLObjectElement.codeType documentation> 
 getCodeType ::
             (MonadIO m, FromJSString result) => HTMLObjectElement -> m result
 getCodeType self
-  = liftIO
-      (fromJSString <$> (js_getCodeType (unHTMLObjectElement self)))
+  = liftIO (fromJSString <$> (js_getCodeType (self)))
  
 foreign import javascript unsafe "$1[\"data\"] = $2;" js_setData ::
-        JSRef HTMLObjectElement -> JSString -> IO ()
+        HTMLObjectElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLObjectElement.data Mozilla HTMLObjectElement.data documentation> 
 setData ::
         (MonadIO m, ToJSString val) => HTMLObjectElement -> val -> m ()
-setData self val
-  = liftIO (js_setData (unHTMLObjectElement self) (toJSString val))
+setData self val = liftIO (js_setData (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"data\"]" js_getData ::
-        JSRef HTMLObjectElement -> IO JSString
+        HTMLObjectElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLObjectElement.data Mozilla HTMLObjectElement.data documentation> 
 getData ::
         (MonadIO m, FromJSString result) => HTMLObjectElement -> m result
-getData self
-  = liftIO (fromJSString <$> (js_getData (unHTMLObjectElement self)))
+getData self = liftIO (fromJSString <$> (js_getData (self)))
  
 foreign import javascript unsafe "$1[\"declare\"] = $2;"
-        js_setDeclare :: JSRef HTMLObjectElement -> Bool -> IO ()
+        js_setDeclare :: HTMLObjectElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLObjectElement.declare Mozilla HTMLObjectElement.declare documentation> 
 setDeclare :: (MonadIO m) => HTMLObjectElement -> Bool -> m ()
-setDeclare self val
-  = liftIO (js_setDeclare (unHTMLObjectElement self) val)
+setDeclare self val = liftIO (js_setDeclare (self) val)
  
 foreign import javascript unsafe "($1[\"declare\"] ? 1 : 0)"
-        js_getDeclare :: JSRef HTMLObjectElement -> IO Bool
+        js_getDeclare :: HTMLObjectElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLObjectElement.declare Mozilla HTMLObjectElement.declare documentation> 
 getDeclare :: (MonadIO m) => HTMLObjectElement -> m Bool
-getDeclare self = liftIO (js_getDeclare (unHTMLObjectElement self))
+getDeclare self = liftIO (js_getDeclare (self))
  
 foreign import javascript unsafe "$1[\"height\"] = $2;"
-        js_setHeight :: JSRef HTMLObjectElement -> JSString -> IO ()
+        js_setHeight :: HTMLObjectElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLObjectElement.height Mozilla HTMLObjectElement.height documentation> 
 setHeight ::
           (MonadIO m, ToJSString val) => HTMLObjectElement -> val -> m ()
-setHeight self val
-  = liftIO (js_setHeight (unHTMLObjectElement self) (toJSString val))
+setHeight self val = liftIO (js_setHeight (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"height\"]" js_getHeight ::
-        JSRef HTMLObjectElement -> IO JSString
+        HTMLObjectElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLObjectElement.height Mozilla HTMLObjectElement.height documentation> 
 getHeight ::
           (MonadIO m, FromJSString result) => HTMLObjectElement -> m result
-getHeight self
-  = liftIO
-      (fromJSString <$> (js_getHeight (unHTMLObjectElement self)))
+getHeight self = liftIO (fromJSString <$> (js_getHeight (self)))
  
 foreign import javascript unsafe "$1[\"hspace\"] = $2;"
-        js_setHspace :: JSRef HTMLObjectElement -> Int -> IO ()
+        js_setHspace :: HTMLObjectElement -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLObjectElement.hspace Mozilla HTMLObjectElement.hspace documentation> 
 setHspace :: (MonadIO m) => HTMLObjectElement -> Int -> m ()
-setHspace self val
-  = liftIO (js_setHspace (unHTMLObjectElement self) val)
+setHspace self val = liftIO (js_setHspace (self) val)
  
 foreign import javascript unsafe "$1[\"hspace\"]" js_getHspace ::
-        JSRef HTMLObjectElement -> IO Int
+        HTMLObjectElement -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLObjectElement.hspace Mozilla HTMLObjectElement.hspace documentation> 
 getHspace :: (MonadIO m) => HTMLObjectElement -> m Int
-getHspace self = liftIO (js_getHspace (unHTMLObjectElement self))
+getHspace self = liftIO (js_getHspace (self))
  
 foreign import javascript unsafe "$1[\"name\"] = $2;" js_setName ::
-        JSRef HTMLObjectElement -> JSString -> IO ()
+        HTMLObjectElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLObjectElement.name Mozilla HTMLObjectElement.name documentation> 
 setName ::
         (MonadIO m, ToJSString val) => HTMLObjectElement -> val -> m ()
-setName self val
-  = liftIO (js_setName (unHTMLObjectElement self) (toJSString val))
+setName self val = liftIO (js_setName (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"name\"]" js_getName ::
-        JSRef HTMLObjectElement -> IO JSString
+        HTMLObjectElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLObjectElement.name Mozilla HTMLObjectElement.name documentation> 
 getName ::
         (MonadIO m, FromJSString result) => HTMLObjectElement -> m result
-getName self
-  = liftIO (fromJSString <$> (js_getName (unHTMLObjectElement self)))
+getName self = liftIO (fromJSString <$> (js_getName (self)))
  
 foreign import javascript unsafe "$1[\"standby\"] = $2;"
-        js_setStandby :: JSRef HTMLObjectElement -> JSString -> IO ()
+        js_setStandby :: HTMLObjectElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLObjectElement.standby Mozilla HTMLObjectElement.standby documentation> 
 setStandby ::
            (MonadIO m, ToJSString val) => HTMLObjectElement -> val -> m ()
 setStandby self val
-  = liftIO
-      (js_setStandby (unHTMLObjectElement self) (toJSString val))
+  = liftIO (js_setStandby (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"standby\"]" js_getStandby ::
-        JSRef HTMLObjectElement -> IO JSString
+        HTMLObjectElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLObjectElement.standby Mozilla HTMLObjectElement.standby documentation> 
 getStandby ::
            (MonadIO m, FromJSString result) => HTMLObjectElement -> m result
-getStandby self
-  = liftIO
-      (fromJSString <$> (js_getStandby (unHTMLObjectElement self)))
+getStandby self = liftIO (fromJSString <$> (js_getStandby (self)))
  
 foreign import javascript unsafe "$1[\"type\"] = $2;" js_setType ::
-        JSRef HTMLObjectElement -> JSString -> IO ()
+        HTMLObjectElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLObjectElement.type Mozilla HTMLObjectElement.type documentation> 
 setType ::
         (MonadIO m, ToJSString val) => HTMLObjectElement -> val -> m ()
-setType self val
-  = liftIO (js_setType (unHTMLObjectElement self) (toJSString val))
+setType self val = liftIO (js_setType (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"type\"]" js_getType ::
-        JSRef HTMLObjectElement -> IO JSString
+        HTMLObjectElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLObjectElement.type Mozilla HTMLObjectElement.type documentation> 
 getType ::
         (MonadIO m, FromJSString result) => HTMLObjectElement -> m result
-getType self
-  = liftIO (fromJSString <$> (js_getType (unHTMLObjectElement self)))
+getType self = liftIO (fromJSString <$> (js_getType (self)))
  
 foreign import javascript unsafe "$1[\"useMap\"] = $2;"
-        js_setUseMap :: JSRef HTMLObjectElement -> JSString -> IO ()
+        js_setUseMap :: HTMLObjectElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLObjectElement.useMap Mozilla HTMLObjectElement.useMap documentation> 
 setUseMap ::
           (MonadIO m, ToJSString val) => HTMLObjectElement -> val -> m ()
-setUseMap self val
-  = liftIO (js_setUseMap (unHTMLObjectElement self) (toJSString val))
+setUseMap self val = liftIO (js_setUseMap (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"useMap\"]" js_getUseMap ::
-        JSRef HTMLObjectElement -> IO JSString
+        HTMLObjectElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLObjectElement.useMap Mozilla HTMLObjectElement.useMap documentation> 
 getUseMap ::
           (MonadIO m, FromJSString result) => HTMLObjectElement -> m result
-getUseMap self
-  = liftIO
-      (fromJSString <$> (js_getUseMap (unHTMLObjectElement self)))
+getUseMap self = liftIO (fromJSString <$> (js_getUseMap (self)))
  
 foreign import javascript unsafe "$1[\"vspace\"] = $2;"
-        js_setVspace :: JSRef HTMLObjectElement -> Int -> IO ()
+        js_setVspace :: HTMLObjectElement -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLObjectElement.vspace Mozilla HTMLObjectElement.vspace documentation> 
 setVspace :: (MonadIO m) => HTMLObjectElement -> Int -> m ()
-setVspace self val
-  = liftIO (js_setVspace (unHTMLObjectElement self) val)
+setVspace self val = liftIO (js_setVspace (self) val)
  
 foreign import javascript unsafe "$1[\"vspace\"]" js_getVspace ::
-        JSRef HTMLObjectElement -> IO Int
+        HTMLObjectElement -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLObjectElement.vspace Mozilla HTMLObjectElement.vspace documentation> 
 getVspace :: (MonadIO m) => HTMLObjectElement -> m Int
-getVspace self = liftIO (js_getVspace (unHTMLObjectElement self))
+getVspace self = liftIO (js_getVspace (self))
  
 foreign import javascript unsafe "$1[\"width\"] = $2;" js_setWidth
-        :: JSRef HTMLObjectElement -> JSString -> IO ()
+        :: HTMLObjectElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLObjectElement.width Mozilla HTMLObjectElement.width documentation> 
 setWidth ::
          (MonadIO m, ToJSString val) => HTMLObjectElement -> val -> m ()
-setWidth self val
-  = liftIO (js_setWidth (unHTMLObjectElement self) (toJSString val))
+setWidth self val = liftIO (js_setWidth (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"width\"]" js_getWidth ::
-        JSRef HTMLObjectElement -> IO JSString
+        HTMLObjectElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLObjectElement.width Mozilla HTMLObjectElement.width documentation> 
 getWidth ::
          (MonadIO m, FromJSString result) => HTMLObjectElement -> m result
-getWidth self
-  = liftIO
-      (fromJSString <$> (js_getWidth (unHTMLObjectElement self)))
+getWidth self = liftIO (fromJSString <$> (js_getWidth (self)))
  
 foreign import javascript unsafe "($1[\"willValidate\"] ? 1 : 0)"
-        js_getWillValidate :: JSRef HTMLObjectElement -> IO Bool
+        js_getWillValidate :: HTMLObjectElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLObjectElement.willValidate Mozilla HTMLObjectElement.willValidate documentation> 
 getWillValidate :: (MonadIO m) => HTMLObjectElement -> m Bool
-getWillValidate self
-  = liftIO (js_getWillValidate (unHTMLObjectElement self))
+getWillValidate self = liftIO (js_getWillValidate (self))
  
 foreign import javascript unsafe "$1[\"validity\"]" js_getValidity
-        :: JSRef HTMLObjectElement -> IO (JSRef ValidityState)
+        :: HTMLObjectElement -> IO (Nullable ValidityState)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLObjectElement.validity Mozilla HTMLObjectElement.validity documentation> 
 getValidity ::
             (MonadIO m) => HTMLObjectElement -> m (Maybe ValidityState)
 getValidity self
-  = liftIO
-      ((js_getValidity (unHTMLObjectElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getValidity (self)))
  
 foreign import javascript unsafe "$1[\"validationMessage\"]"
-        js_getValidationMessage :: JSRef HTMLObjectElement -> IO JSString
+        js_getValidationMessage :: HTMLObjectElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLObjectElement.validationMessage Mozilla HTMLObjectElement.validationMessage documentation> 
 getValidationMessage ::
                      (MonadIO m, FromJSString result) => HTMLObjectElement -> m result
 getValidationMessage self
-  = liftIO
-      (fromJSString <$>
-         (js_getValidationMessage (unHTMLObjectElement self)))
+  = liftIO (fromJSString <$> (js_getValidationMessage (self)))
  
 foreign import javascript unsafe "$1[\"contentDocument\"]"
         js_getContentDocument ::
-        JSRef HTMLObjectElement -> IO (JSRef Document)
+        HTMLObjectElement -> IO (Nullable Document)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLObjectElement.contentDocument Mozilla HTMLObjectElement.contentDocument documentation> 
 getContentDocument ::
                    (MonadIO m) => HTMLObjectElement -> m (Maybe Document)
 getContentDocument self
-  = liftIO
-      ((js_getContentDocument (unHTMLObjectElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getContentDocument (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLOptGroupElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLOptGroupElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLOptGroupElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLOptGroupElement.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,37 +20,31 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"disabled\"] = $2;"
-        js_setDisabled :: JSRef HTMLOptGroupElement -> Bool -> IO ()
+        js_setDisabled :: HTMLOptGroupElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOptGroupElement.disabled Mozilla HTMLOptGroupElement.disabled documentation> 
 setDisabled :: (MonadIO m) => HTMLOptGroupElement -> Bool -> m ()
-setDisabled self val
-  = liftIO (js_setDisabled (unHTMLOptGroupElement self) val)
+setDisabled self val = liftIO (js_setDisabled (self) val)
  
 foreign import javascript unsafe "($1[\"disabled\"] ? 1 : 0)"
-        js_getDisabled :: JSRef HTMLOptGroupElement -> IO Bool
+        js_getDisabled :: HTMLOptGroupElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOptGroupElement.disabled Mozilla HTMLOptGroupElement.disabled documentation> 
 getDisabled :: (MonadIO m) => HTMLOptGroupElement -> m Bool
-getDisabled self
-  = liftIO (js_getDisabled (unHTMLOptGroupElement self))
+getDisabled self = liftIO (js_getDisabled (self))
  
 foreign import javascript unsafe "$1[\"label\"] = $2;" js_setLabel
-        :: JSRef HTMLOptGroupElement -> JSString -> IO ()
+        :: HTMLOptGroupElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOptGroupElement.label Mozilla HTMLOptGroupElement.label documentation> 
 setLabel ::
          (MonadIO m, ToJSString val) => HTMLOptGroupElement -> val -> m ()
-setLabel self val
-  = liftIO
-      (js_setLabel (unHTMLOptGroupElement self) (toJSString val))
+setLabel self val = liftIO (js_setLabel (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"label\"]" js_getLabel ::
-        JSRef HTMLOptGroupElement -> IO JSString
+        HTMLOptGroupElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOptGroupElement.label Mozilla HTMLOptGroupElement.label documentation> 
 getLabel ::
          (MonadIO m, FromJSString result) => HTMLOptGroupElement -> m result
-getLabel self
-  = liftIO
-      (fromJSString <$> (js_getLabel (unHTMLOptGroupElement self)))
+getLabel self = liftIO (fromJSString <$> (js_getLabel (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLOptionElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLOptionElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLOptionElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLOptionElement.hs
@@ -10,7 +10,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -24,123 +24,109 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"disabled\"] = $2;"
-        js_setDisabled :: JSRef HTMLOptionElement -> Bool -> IO ()
+        js_setDisabled :: HTMLOptionElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOptionElement.disabled Mozilla HTMLOptionElement.disabled documentation> 
 setDisabled :: (MonadIO m) => HTMLOptionElement -> Bool -> m ()
-setDisabled self val
-  = liftIO (js_setDisabled (unHTMLOptionElement self) val)
+setDisabled self val = liftIO (js_setDisabled (self) val)
  
 foreign import javascript unsafe "($1[\"disabled\"] ? 1 : 0)"
-        js_getDisabled :: JSRef HTMLOptionElement -> IO Bool
+        js_getDisabled :: HTMLOptionElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOptionElement.disabled Mozilla HTMLOptionElement.disabled documentation> 
 getDisabled :: (MonadIO m) => HTMLOptionElement -> m Bool
-getDisabled self
-  = liftIO (js_getDisabled (unHTMLOptionElement self))
+getDisabled self = liftIO (js_getDisabled (self))
  
 foreign import javascript unsafe "$1[\"form\"]" js_getForm ::
-        JSRef HTMLOptionElement -> IO (JSRef HTMLFormElement)
+        HTMLOptionElement -> IO (Nullable HTMLFormElement)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOptionElement.form Mozilla HTMLOptionElement.form documentation> 
 getForm ::
         (MonadIO m) => HTMLOptionElement -> m (Maybe HTMLFormElement)
-getForm self
-  = liftIO ((js_getForm (unHTMLOptionElement self)) >>= fromJSRef)
+getForm self = liftIO (nullableToMaybe <$> (js_getForm (self)))
  
 foreign import javascript unsafe "$1[\"label\"] = $2;" js_setLabel
-        :: JSRef HTMLOptionElement -> JSString -> IO ()
+        :: HTMLOptionElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOptionElement.label Mozilla HTMLOptionElement.label documentation> 
 setLabel ::
          (MonadIO m, ToJSString val) => HTMLOptionElement -> val -> m ()
-setLabel self val
-  = liftIO (js_setLabel (unHTMLOptionElement self) (toJSString val))
+setLabel self val = liftIO (js_setLabel (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"label\"]" js_getLabel ::
-        JSRef HTMLOptionElement -> IO JSString
+        HTMLOptionElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOptionElement.label Mozilla HTMLOptionElement.label documentation> 
 getLabel ::
          (MonadIO m, FromJSString result) => HTMLOptionElement -> m result
-getLabel self
-  = liftIO
-      (fromJSString <$> (js_getLabel (unHTMLOptionElement self)))
+getLabel self = liftIO (fromJSString <$> (js_getLabel (self)))
  
 foreign import javascript unsafe "$1[\"defaultSelected\"] = $2;"
-        js_setDefaultSelected :: JSRef HTMLOptionElement -> Bool -> IO ()
+        js_setDefaultSelected :: HTMLOptionElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOptionElement.defaultSelected Mozilla HTMLOptionElement.defaultSelected documentation> 
 setDefaultSelected ::
                    (MonadIO m) => HTMLOptionElement -> Bool -> m ()
 setDefaultSelected self val
-  = liftIO (js_setDefaultSelected (unHTMLOptionElement self) val)
+  = liftIO (js_setDefaultSelected (self) val)
  
 foreign import javascript unsafe
         "($1[\"defaultSelected\"] ? 1 : 0)" js_getDefaultSelected ::
-        JSRef HTMLOptionElement -> IO Bool
+        HTMLOptionElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOptionElement.defaultSelected Mozilla HTMLOptionElement.defaultSelected documentation> 
 getDefaultSelected :: (MonadIO m) => HTMLOptionElement -> m Bool
-getDefaultSelected self
-  = liftIO (js_getDefaultSelected (unHTMLOptionElement self))
+getDefaultSelected self = liftIO (js_getDefaultSelected (self))
  
 foreign import javascript unsafe "$1[\"selected\"] = $2;"
-        js_setSelected :: JSRef HTMLOptionElement -> Bool -> IO ()
+        js_setSelected :: HTMLOptionElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOptionElement.selected Mozilla HTMLOptionElement.selected documentation> 
 setSelected :: (MonadIO m) => HTMLOptionElement -> Bool -> m ()
-setSelected self val
-  = liftIO (js_setSelected (unHTMLOptionElement self) val)
+setSelected self val = liftIO (js_setSelected (self) val)
  
 foreign import javascript unsafe "($1[\"selected\"] ? 1 : 0)"
-        js_getSelected :: JSRef HTMLOptionElement -> IO Bool
+        js_getSelected :: HTMLOptionElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOptionElement.selected Mozilla HTMLOptionElement.selected documentation> 
 getSelected :: (MonadIO m) => HTMLOptionElement -> m Bool
-getSelected self
-  = liftIO (js_getSelected (unHTMLOptionElement self))
+getSelected self = liftIO (js_getSelected (self))
  
 foreign import javascript unsafe "$1[\"value\"] = $2;" js_setValue
-        :: JSRef HTMLOptionElement -> JSString -> IO ()
+        :: HTMLOptionElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOptionElement.value Mozilla HTMLOptionElement.value documentation> 
 setValue ::
          (MonadIO m, ToJSString val) => HTMLOptionElement -> val -> m ()
-setValue self val
-  = liftIO (js_setValue (unHTMLOptionElement self) (toJSString val))
+setValue self val = liftIO (js_setValue (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"value\"]" js_getValue ::
-        JSRef HTMLOptionElement -> IO JSString
+        HTMLOptionElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOptionElement.value Mozilla HTMLOptionElement.value documentation> 
 getValue ::
          (MonadIO m, FromJSString result) => HTMLOptionElement -> m result
-getValue self
-  = liftIO
-      (fromJSString <$> (js_getValue (unHTMLOptionElement self)))
+getValue self = liftIO (fromJSString <$> (js_getValue (self)))
  
 foreign import javascript unsafe "$1[\"text\"] = $2;" js_setText ::
-        JSRef HTMLOptionElement -> JSString -> IO ()
+        HTMLOptionElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOptionElement.text Mozilla HTMLOptionElement.text documentation> 
 setText ::
         (MonadIO m, ToJSString val) => HTMLOptionElement -> val -> m ()
-setText self val
-  = liftIO (js_setText (unHTMLOptionElement self) (toJSString val))
+setText self val = liftIO (js_setText (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"text\"]" js_getText ::
-        JSRef HTMLOptionElement -> IO JSString
+        HTMLOptionElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOptionElement.text Mozilla HTMLOptionElement.text documentation> 
 getText ::
         (MonadIO m, FromJSString result) => HTMLOptionElement -> m result
-getText self
-  = liftIO (fromJSString <$> (js_getText (unHTMLOptionElement self)))
+getText self = liftIO (fromJSString <$> (js_getText (self)))
  
 foreign import javascript unsafe "$1[\"index\"]" js_getIndex ::
-        JSRef HTMLOptionElement -> IO Int
+        HTMLOptionElement -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOptionElement.index Mozilla HTMLOptionElement.index documentation> 
 getIndex :: (MonadIO m) => HTMLOptionElement -> m Int
-getIndex self = liftIO (js_getIndex (unHTMLOptionElement self))
+getIndex self = liftIO (js_getIndex (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLOptionsCollection.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLOptionsCollection.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLOptionsCollection.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLOptionsCollection.hs
@@ -8,7 +8,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -23,7 +23,7 @@
  
 foreign import javascript unsafe "$1[\"namedItem\"]($2)"
         js_namedItem ::
-        JSRef HTMLOptionsCollection -> JSString -> IO (JSRef Node)
+        HTMLOptionsCollection -> JSString -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOptionsCollection.namedItem Mozilla HTMLOptionsCollection.namedItem documentation> 
 namedItem ::
@@ -31,13 +31,12 @@
             HTMLOptionsCollection -> name -> m (Maybe Node)
 namedItem self name
   = liftIO
-      ((js_namedItem (unHTMLOptionsCollection self) (toJSString name))
-         >>= fromJSRef)
+      (nullableToMaybe <$> (js_namedItem (self) (toJSString name)))
  
 foreign import javascript unsafe "$1[\"add\"]($2, $3)" js_addBefore
         ::
-        JSRef HTMLOptionsCollection ->
-          JSRef HTMLElement -> JSRef HTMLElement -> IO ()
+        HTMLOptionsCollection ->
+          Nullable HTMLElement -> Nullable HTMLElement -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOptionsCollection.add Mozilla HTMLOptionsCollection.add documentation> 
 addBefore ::
@@ -45,12 +44,11 @@
             HTMLOptionsCollection -> Maybe element -> Maybe before -> m ()
 addBefore self element before
   = liftIO
-      (js_addBefore (unHTMLOptionsCollection self)
-         (maybe jsNull (unHTMLElement . toHTMLElement) element)
-         (maybe jsNull (unHTMLElement . toHTMLElement) before))
+      (js_addBefore (self) (maybeToNullable (fmap toHTMLElement element))
+         (maybeToNullable (fmap toHTMLElement before)))
  
 foreign import javascript unsafe "$1[\"add\"]($2, $3)" js_add ::
-        JSRef HTMLOptionsCollection -> JSRef HTMLElement -> Int -> IO ()
+        HTMLOptionsCollection -> Nullable HTMLElement -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOptionsCollection.add Mozilla HTMLOptionsCollection.add documentation> 
 add ::
@@ -58,47 +56,41 @@
       HTMLOptionsCollection -> Maybe element -> Int -> m ()
 add self element index
   = liftIO
-      (js_add (unHTMLOptionsCollection self)
-         (maybe jsNull (unHTMLElement . toHTMLElement) element)
+      (js_add (self) (maybeToNullable (fmap toHTMLElement element))
          index)
  
 foreign import javascript unsafe "$1[\"remove\"]($2)" js_remove ::
-        JSRef HTMLOptionsCollection -> Word -> IO ()
+        HTMLOptionsCollection -> Word -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOptionsCollection.remove Mozilla HTMLOptionsCollection.remove documentation> 
 remove :: (MonadIO m) => HTMLOptionsCollection -> Word -> m ()
-remove self index
-  = liftIO (js_remove (unHTMLOptionsCollection self) index)
+remove self index = liftIO (js_remove (self) index)
  
 foreign import javascript unsafe "$1[\"selectedIndex\"] = $2;"
-        js_setSelectedIndex :: JSRef HTMLOptionsCollection -> Int -> IO ()
+        js_setSelectedIndex :: HTMLOptionsCollection -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOptionsCollection.selectedIndex Mozilla HTMLOptionsCollection.selectedIndex documentation> 
 setSelectedIndex ::
                  (MonadIO m) => HTMLOptionsCollection -> Int -> m ()
-setSelectedIndex self val
-  = liftIO (js_setSelectedIndex (unHTMLOptionsCollection self) val)
+setSelectedIndex self val = liftIO (js_setSelectedIndex (self) val)
  
 foreign import javascript unsafe "$1[\"selectedIndex\"]"
-        js_getSelectedIndex :: JSRef HTMLOptionsCollection -> IO Int
+        js_getSelectedIndex :: HTMLOptionsCollection -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOptionsCollection.selectedIndex Mozilla HTMLOptionsCollection.selectedIndex documentation> 
 getSelectedIndex :: (MonadIO m) => HTMLOptionsCollection -> m Int
-getSelectedIndex self
-  = liftIO (js_getSelectedIndex (unHTMLOptionsCollection self))
+getSelectedIndex self = liftIO (js_getSelectedIndex (self))
  
 foreign import javascript unsafe "$1[\"length\"] = $2;"
-        js_setLength :: JSRef HTMLOptionsCollection -> Word -> IO ()
+        js_setLength :: HTMLOptionsCollection -> Word -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOptionsCollection.length Mozilla HTMLOptionsCollection.length documentation> 
 setLength :: (MonadIO m) => HTMLOptionsCollection -> Word -> m ()
-setLength self val
-  = liftIO (js_setLength (unHTMLOptionsCollection self) val)
+setLength self val = liftIO (js_setLength (self) val)
  
 foreign import javascript unsafe "$1[\"length\"]" js_getLength ::
-        JSRef HTMLOptionsCollection -> IO Word
+        HTMLOptionsCollection -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOptionsCollection.length Mozilla HTMLOptionsCollection.length documentation> 
 getLength :: (MonadIO m) => HTMLOptionsCollection -> m Word
-getLength self
-  = liftIO (js_getLength (unHTMLOptionsCollection self))
+getLength self = liftIO (js_getLength (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLOutputElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLOutputElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLOutputElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLOutputElement.hs
@@ -12,7 +12,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -27,152 +27,132 @@
  
 foreign import javascript unsafe
         "($1[\"checkValidity\"]() ? 1 : 0)" js_checkValidity ::
-        JSRef HTMLOutputElement -> IO Bool
+        HTMLOutputElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOutputElement.checkValidity Mozilla HTMLOutputElement.checkValidity documentation> 
 checkValidity :: (MonadIO m) => HTMLOutputElement -> m Bool
-checkValidity self
-  = liftIO (js_checkValidity (unHTMLOutputElement self))
+checkValidity self = liftIO (js_checkValidity (self))
  
 foreign import javascript unsafe "$1[\"setCustomValidity\"]($2)"
         js_setCustomValidity ::
-        JSRef HTMLOutputElement -> JSRef (Maybe JSString) -> IO ()
+        HTMLOutputElement -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOutputElement.setCustomValidity Mozilla HTMLOutputElement.setCustomValidity documentation> 
 setCustomValidity ::
                   (MonadIO m, ToJSString error) =>
                     HTMLOutputElement -> Maybe error -> m ()
 setCustomValidity self error
-  = liftIO
-      (js_setCustomValidity (unHTMLOutputElement self)
-         (toMaybeJSString error))
+  = liftIO (js_setCustomValidity (self) (toMaybeJSString error))
  
 foreign import javascript unsafe "$1[\"htmlFor\"]" js_getHtmlFor ::
-        JSRef HTMLOutputElement -> IO (JSRef DOMSettableTokenList)
+        HTMLOutputElement -> IO (Nullable DOMSettableTokenList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOutputElement.htmlFor Mozilla HTMLOutputElement.htmlFor documentation> 
 getHtmlFor ::
            (MonadIO m) => HTMLOutputElement -> m (Maybe DOMSettableTokenList)
 getHtmlFor self
-  = liftIO ((js_getHtmlFor (unHTMLOutputElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getHtmlFor (self)))
  
 foreign import javascript unsafe "$1[\"form\"]" js_getForm ::
-        JSRef HTMLOutputElement -> IO (JSRef HTMLFormElement)
+        HTMLOutputElement -> IO (Nullable HTMLFormElement)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOutputElement.form Mozilla HTMLOutputElement.form documentation> 
 getForm ::
         (MonadIO m) => HTMLOutputElement -> m (Maybe HTMLFormElement)
-getForm self
-  = liftIO ((js_getForm (unHTMLOutputElement self)) >>= fromJSRef)
+getForm self = liftIO (nullableToMaybe <$> (js_getForm (self)))
  
 foreign import javascript unsafe "$1[\"name\"] = $2;" js_setName ::
-        JSRef HTMLOutputElement -> JSString -> IO ()
+        HTMLOutputElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOutputElement.name Mozilla HTMLOutputElement.name documentation> 
 setName ::
         (MonadIO m, ToJSString val) => HTMLOutputElement -> val -> m ()
-setName self val
-  = liftIO (js_setName (unHTMLOutputElement self) (toJSString val))
+setName self val = liftIO (js_setName (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"name\"]" js_getName ::
-        JSRef HTMLOutputElement -> IO JSString
+        HTMLOutputElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOutputElement.name Mozilla HTMLOutputElement.name documentation> 
 getName ::
         (MonadIO m, FromJSString result) => HTMLOutputElement -> m result
-getName self
-  = liftIO (fromJSString <$> (js_getName (unHTMLOutputElement self)))
+getName self = liftIO (fromJSString <$> (js_getName (self)))
  
 foreign import javascript unsafe "$1[\"type\"]" js_getType ::
-        JSRef HTMLOutputElement -> IO JSString
+        HTMLOutputElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOutputElement.type Mozilla HTMLOutputElement.type documentation> 
 getType ::
         (MonadIO m, FromJSString result) => HTMLOutputElement -> m result
-getType self
-  = liftIO (fromJSString <$> (js_getType (unHTMLOutputElement self)))
+getType self = liftIO (fromJSString <$> (js_getType (self)))
  
 foreign import javascript unsafe "$1[\"defaultValue\"] = $2;"
         js_setDefaultValue ::
-        JSRef HTMLOutputElement -> JSRef (Maybe JSString) -> IO ()
+        HTMLOutputElement -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOutputElement.defaultValue Mozilla HTMLOutputElement.defaultValue documentation> 
 setDefaultValue ::
                 (MonadIO m, ToJSString val) =>
                   HTMLOutputElement -> Maybe val -> m ()
 setDefaultValue self val
-  = liftIO
-      (js_setDefaultValue (unHTMLOutputElement self)
-         (toMaybeJSString val))
+  = liftIO (js_setDefaultValue (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"defaultValue\"]"
-        js_getDefaultValue ::
-        JSRef HTMLOutputElement -> IO (JSRef (Maybe JSString))
+        js_getDefaultValue :: HTMLOutputElement -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOutputElement.defaultValue Mozilla HTMLOutputElement.defaultValue documentation> 
 getDefaultValue ::
                 (MonadIO m, FromJSString result) =>
                   HTMLOutputElement -> m (Maybe result)
 getDefaultValue self
-  = liftIO
-      (fromMaybeJSString <$>
-         (js_getDefaultValue (unHTMLOutputElement self)))
+  = liftIO (fromMaybeJSString <$> (js_getDefaultValue (self)))
  
 foreign import javascript unsafe "$1[\"value\"] = $2;" js_setValue
-        :: JSRef HTMLOutputElement -> JSRef (Maybe JSString) -> IO ()
+        :: HTMLOutputElement -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOutputElement.value Mozilla HTMLOutputElement.value documentation> 
 setValue ::
          (MonadIO m, ToJSString val) =>
            HTMLOutputElement -> Maybe val -> m ()
 setValue self val
-  = liftIO
-      (js_setValue (unHTMLOutputElement self) (toMaybeJSString val))
+  = liftIO (js_setValue (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"value\"]" js_getValue ::
-        JSRef HTMLOutputElement -> IO (JSRef (Maybe JSString))
+        HTMLOutputElement -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOutputElement.value Mozilla HTMLOutputElement.value documentation> 
 getValue ::
          (MonadIO m, FromJSString result) =>
            HTMLOutputElement -> m (Maybe result)
-getValue self
-  = liftIO
-      (fromMaybeJSString <$> (js_getValue (unHTMLOutputElement self)))
+getValue self = liftIO (fromMaybeJSString <$> (js_getValue (self)))
  
 foreign import javascript unsafe "($1[\"willValidate\"] ? 1 : 0)"
-        js_getWillValidate :: JSRef HTMLOutputElement -> IO Bool
+        js_getWillValidate :: HTMLOutputElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOutputElement.willValidate Mozilla HTMLOutputElement.willValidate documentation> 
 getWillValidate :: (MonadIO m) => HTMLOutputElement -> m Bool
-getWillValidate self
-  = liftIO (js_getWillValidate (unHTMLOutputElement self))
+getWillValidate self = liftIO (js_getWillValidate (self))
  
 foreign import javascript unsafe "$1[\"validity\"]" js_getValidity
-        :: JSRef HTMLOutputElement -> IO (JSRef ValidityState)
+        :: HTMLOutputElement -> IO (Nullable ValidityState)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOutputElement.validity Mozilla HTMLOutputElement.validity documentation> 
 getValidity ::
             (MonadIO m) => HTMLOutputElement -> m (Maybe ValidityState)
 getValidity self
-  = liftIO
-      ((js_getValidity (unHTMLOutputElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getValidity (self)))
  
 foreign import javascript unsafe "$1[\"validationMessage\"]"
-        js_getValidationMessage :: JSRef HTMLOutputElement -> IO JSString
+        js_getValidationMessage :: HTMLOutputElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOutputElement.validationMessage Mozilla HTMLOutputElement.validationMessage documentation> 
 getValidationMessage ::
                      (MonadIO m, FromJSString result) => HTMLOutputElement -> m result
 getValidationMessage self
-  = liftIO
-      (fromJSString <$>
-         (js_getValidationMessage (unHTMLOutputElement self)))
+  = liftIO (fromJSString <$> (js_getValidationMessage (self)))
  
 foreign import javascript unsafe "$1[\"labels\"]" js_getLabels ::
-        JSRef HTMLOutputElement -> IO (JSRef NodeList)
+        HTMLOutputElement -> IO (Nullable NodeList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOutputElement.labels Mozilla HTMLOutputElement.labels documentation> 
 getLabels :: (MonadIO m) => HTMLOutputElement -> m (Maybe NodeList)
-getLabels self
-  = liftIO ((js_getLabels (unHTMLOutputElement self)) >>= fromJSRef)
+getLabels self = liftIO (nullableToMaybe <$> (js_getLabels (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLParagraphElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLParagraphElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLParagraphElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLParagraphElement.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,22 +20,18 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"align\"] = $2;" js_setAlign
-        :: JSRef HTMLParagraphElement -> JSString -> IO ()
+        :: HTMLParagraphElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLParagraphElement.align Mozilla HTMLParagraphElement.align documentation> 
 setAlign ::
          (MonadIO m, ToJSString val) => HTMLParagraphElement -> val -> m ()
-setAlign self val
-  = liftIO
-      (js_setAlign (unHTMLParagraphElement self) (toJSString val))
+setAlign self val = liftIO (js_setAlign (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"align\"]" js_getAlign ::
-        JSRef HTMLParagraphElement -> IO JSString
+        HTMLParagraphElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLParagraphElement.align Mozilla HTMLParagraphElement.align documentation> 
 getAlign ::
          (MonadIO m, FromJSString result) =>
            HTMLParagraphElement -> m result
-getAlign self
-  = liftIO
-      (fromJSString <$> (js_getAlign (unHTMLParagraphElement self)))
+getAlign self = liftIO (fromJSString <$> (js_getAlign (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLParamElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLParamElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLParamElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLParamElement.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -21,75 +21,67 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"name\"] = $2;" js_setName ::
-        JSRef HTMLParamElement -> JSString -> IO ()
+        HTMLParamElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLParamElement.name Mozilla HTMLParamElement.name documentation> 
 setName ::
         (MonadIO m, ToJSString val) => HTMLParamElement -> val -> m ()
-setName self val
-  = liftIO (js_setName (unHTMLParamElement self) (toJSString val))
+setName self val = liftIO (js_setName (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"name\"]" js_getName ::
-        JSRef HTMLParamElement -> IO JSString
+        HTMLParamElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLParamElement.name Mozilla HTMLParamElement.name documentation> 
 getName ::
         (MonadIO m, FromJSString result) => HTMLParamElement -> m result
-getName self
-  = liftIO (fromJSString <$> (js_getName (unHTMLParamElement self)))
+getName self = liftIO (fromJSString <$> (js_getName (self)))
  
 foreign import javascript unsafe "$1[\"type\"] = $2;" js_setType ::
-        JSRef HTMLParamElement -> JSString -> IO ()
+        HTMLParamElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLParamElement.type Mozilla HTMLParamElement.type documentation> 
 setType ::
         (MonadIO m, ToJSString val) => HTMLParamElement -> val -> m ()
-setType self val
-  = liftIO (js_setType (unHTMLParamElement self) (toJSString val))
+setType self val = liftIO (js_setType (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"type\"]" js_getType ::
-        JSRef HTMLParamElement -> IO JSString
+        HTMLParamElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLParamElement.type Mozilla HTMLParamElement.type documentation> 
 getType ::
         (MonadIO m, FromJSString result) => HTMLParamElement -> m result
-getType self
-  = liftIO (fromJSString <$> (js_getType (unHTMLParamElement self)))
+getType self = liftIO (fromJSString <$> (js_getType (self)))
  
 foreign import javascript unsafe "$1[\"value\"] = $2;" js_setValue
-        :: JSRef HTMLParamElement -> JSString -> IO ()
+        :: HTMLParamElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLParamElement.value Mozilla HTMLParamElement.value documentation> 
 setValue ::
          (MonadIO m, ToJSString val) => HTMLParamElement -> val -> m ()
-setValue self val
-  = liftIO (js_setValue (unHTMLParamElement self) (toJSString val))
+setValue self val = liftIO (js_setValue (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"value\"]" js_getValue ::
-        JSRef HTMLParamElement -> IO JSString
+        HTMLParamElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLParamElement.value Mozilla HTMLParamElement.value documentation> 
 getValue ::
          (MonadIO m, FromJSString result) => HTMLParamElement -> m result
-getValue self
-  = liftIO (fromJSString <$> (js_getValue (unHTMLParamElement self)))
+getValue self = liftIO (fromJSString <$> (js_getValue (self)))
  
 foreign import javascript unsafe "$1[\"valueType\"] = $2;"
-        js_setValueType :: JSRef HTMLParamElement -> JSString -> IO ()
+        js_setValueType :: HTMLParamElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLParamElement.valueType Mozilla HTMLParamElement.valueType documentation> 
 setValueType ::
              (MonadIO m, ToJSString val) => HTMLParamElement -> val -> m ()
 setValueType self val
-  = liftIO
-      (js_setValueType (unHTMLParamElement self) (toJSString val))
+  = liftIO (js_setValueType (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"valueType\"]"
-        js_getValueType :: JSRef HTMLParamElement -> IO JSString
+        js_getValueType :: HTMLParamElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLParamElement.valueType Mozilla HTMLParamElement.valueType documentation> 
 getValueType ::
              (MonadIO m, FromJSString result) => HTMLParamElement -> m result
 getValueType self
-  = liftIO
-      (fromJSString <$> (js_getValueType (unHTMLParamElement self)))
+  = liftIO (fromJSString <$> (js_getValueType (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLPreElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLPreElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLPreElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLPreElement.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,30 +20,29 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"width\"] = $2;" js_setWidth
-        :: JSRef HTMLPreElement -> Int -> IO ()
+        :: HTMLPreElement -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLPreElement.width Mozilla HTMLPreElement.width documentation> 
 setWidth :: (MonadIO m) => HTMLPreElement -> Int -> m ()
-setWidth self val
-  = liftIO (js_setWidth (unHTMLPreElement self) val)
+setWidth self val = liftIO (js_setWidth (self) val)
  
 foreign import javascript unsafe "$1[\"width\"]" js_getWidth ::
-        JSRef HTMLPreElement -> IO Int
+        HTMLPreElement -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLPreElement.width Mozilla HTMLPreElement.width documentation> 
 getWidth :: (MonadIO m) => HTMLPreElement -> m Int
-getWidth self = liftIO (js_getWidth (unHTMLPreElement self))
+getWidth self = liftIO (js_getWidth (self))
  
 foreign import javascript unsafe "$1[\"wrap\"] = $2;" js_setWrap ::
-        JSRef HTMLPreElement -> Bool -> IO ()
+        HTMLPreElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLPreElement.wrap Mozilla HTMLPreElement.wrap documentation> 
 setWrap :: (MonadIO m) => HTMLPreElement -> Bool -> m ()
-setWrap self val = liftIO (js_setWrap (unHTMLPreElement self) val)
+setWrap self val = liftIO (js_setWrap (self) val)
  
 foreign import javascript unsafe "($1[\"wrap\"] ? 1 : 0)"
-        js_getWrap :: JSRef HTMLPreElement -> IO Bool
+        js_getWrap :: HTMLPreElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLPreElement.wrap Mozilla HTMLPreElement.wrap documentation> 
 getWrap :: (MonadIO m) => HTMLPreElement -> m Bool
-getWrap self = liftIO (js_getWrap (unHTMLPreElement self))
+getWrap self = liftIO (js_getWrap (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLProgressElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLProgressElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLProgressElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLProgressElement.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -21,49 +21,44 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"value\"] = $2;" js_setValue
-        :: JSRef HTMLProgressElement -> Double -> IO ()
+        :: HTMLProgressElement -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLProgressElement.value Mozilla HTMLProgressElement.value documentation> 
 setValue :: (MonadIO m) => HTMLProgressElement -> Double -> m ()
-setValue self val
-  = liftIO (js_setValue (unHTMLProgressElement self) val)
+setValue self val = liftIO (js_setValue (self) val)
  
 foreign import javascript unsafe "$1[\"value\"]" js_getValue ::
-        JSRef HTMLProgressElement -> IO Double
+        HTMLProgressElement -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLProgressElement.value Mozilla HTMLProgressElement.value documentation> 
 getValue :: (MonadIO m) => HTMLProgressElement -> m Double
-getValue self = liftIO (js_getValue (unHTMLProgressElement self))
+getValue self = liftIO (js_getValue (self))
  
 foreign import javascript unsafe "$1[\"max\"] = $2;" js_setMax ::
-        JSRef HTMLProgressElement -> Double -> IO ()
+        HTMLProgressElement -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLProgressElement.max Mozilla HTMLProgressElement.max documentation> 
 setMax :: (MonadIO m) => HTMLProgressElement -> Double -> m ()
-setMax self val
-  = liftIO (js_setMax (unHTMLProgressElement self) val)
+setMax self val = liftIO (js_setMax (self) val)
  
 foreign import javascript unsafe "$1[\"max\"]" js_getMax ::
-        JSRef HTMLProgressElement -> IO Double
+        HTMLProgressElement -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLProgressElement.max Mozilla HTMLProgressElement.max documentation> 
 getMax :: (MonadIO m) => HTMLProgressElement -> m Double
-getMax self = liftIO (js_getMax (unHTMLProgressElement self))
+getMax self = liftIO (js_getMax (self))
  
 foreign import javascript unsafe "$1[\"position\"]" js_getPosition
-        :: JSRef HTMLProgressElement -> IO Double
+        :: HTMLProgressElement -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLProgressElement.position Mozilla HTMLProgressElement.position documentation> 
 getPosition :: (MonadIO m) => HTMLProgressElement -> m Double
-getPosition self
-  = liftIO (js_getPosition (unHTMLProgressElement self))
+getPosition self = liftIO (js_getPosition (self))
  
 foreign import javascript unsafe "$1[\"labels\"]" js_getLabels ::
-        JSRef HTMLProgressElement -> IO (JSRef NodeList)
+        HTMLProgressElement -> IO (Nullable NodeList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLProgressElement.labels Mozilla HTMLProgressElement.labels documentation> 
 getLabels ::
           (MonadIO m) => HTMLProgressElement -> m (Maybe NodeList)
-getLabels self
-  = liftIO
-      ((js_getLabels (unHTMLProgressElement self)) >>= fromJSRef)
+getLabels self = liftIO (nullableToMaybe <$> (js_getLabels (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLQuoteElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLQuoteElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLQuoteElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLQuoteElement.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,19 +19,17 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"cite\"] = $2;" js_setCite ::
-        JSRef HTMLQuoteElement -> JSString -> IO ()
+        HTMLQuoteElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLQuoteElement.cite Mozilla HTMLQuoteElement.cite documentation> 
 setCite ::
         (MonadIO m, ToJSString val) => HTMLQuoteElement -> val -> m ()
-setCite self val
-  = liftIO (js_setCite (unHTMLQuoteElement self) (toJSString val))
+setCite self val = liftIO (js_setCite (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"cite\"]" js_getCite ::
-        JSRef HTMLQuoteElement -> IO JSString
+        HTMLQuoteElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLQuoteElement.cite Mozilla HTMLQuoteElement.cite documentation> 
 getCite ::
         (MonadIO m, FromJSString result) => HTMLQuoteElement -> m result
-getCite self
-  = liftIO (fromJSString <$> (js_getCite (unHTMLQuoteElement self)))
+getCite self = liftIO (fromJSString <$> (js_getCite (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLScriptElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLScriptElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLScriptElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLScriptElement.hs
@@ -12,7 +12,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -26,187 +26,163 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"text\"] = $2;" js_setText ::
-        JSRef HTMLScriptElement -> JSRef (Maybe JSString) -> IO ()
+        HTMLScriptElement -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLScriptElement.text Mozilla HTMLScriptElement.text documentation> 
 setText ::
         (MonadIO m, ToJSString val) =>
           HTMLScriptElement -> Maybe val -> m ()
-setText self val
-  = liftIO
-      (js_setText (unHTMLScriptElement self) (toMaybeJSString val))
+setText self val = liftIO (js_setText (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"text\"]" js_getText ::
-        JSRef HTMLScriptElement -> IO (JSRef (Maybe JSString))
+        HTMLScriptElement -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLScriptElement.text Mozilla HTMLScriptElement.text documentation> 
 getText ::
         (MonadIO m, FromJSString result) =>
           HTMLScriptElement -> m (Maybe result)
-getText self
-  = liftIO
-      (fromMaybeJSString <$> (js_getText (unHTMLScriptElement self)))
+getText self = liftIO (fromMaybeJSString <$> (js_getText (self)))
  
 foreign import javascript unsafe "$1[\"htmlFor\"] = $2;"
-        js_setHtmlFor :: JSRef HTMLScriptElement -> JSString -> IO ()
+        js_setHtmlFor :: HTMLScriptElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLScriptElement.htmlFor Mozilla HTMLScriptElement.htmlFor documentation> 
 setHtmlFor ::
            (MonadIO m, ToJSString val) => HTMLScriptElement -> val -> m ()
 setHtmlFor self val
-  = liftIO
-      (js_setHtmlFor (unHTMLScriptElement self) (toJSString val))
+  = liftIO (js_setHtmlFor (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"htmlFor\"]" js_getHtmlFor ::
-        JSRef HTMLScriptElement -> IO JSString
+        HTMLScriptElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLScriptElement.htmlFor Mozilla HTMLScriptElement.htmlFor documentation> 
 getHtmlFor ::
            (MonadIO m, FromJSString result) => HTMLScriptElement -> m result
-getHtmlFor self
-  = liftIO
-      (fromJSString <$> (js_getHtmlFor (unHTMLScriptElement self)))
+getHtmlFor self = liftIO (fromJSString <$> (js_getHtmlFor (self)))
  
 foreign import javascript unsafe "$1[\"event\"] = $2;" js_setEvent
-        :: JSRef HTMLScriptElement -> JSString -> IO ()
+        :: HTMLScriptElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLScriptElement.event Mozilla HTMLScriptElement.event documentation> 
 setEvent ::
          (MonadIO m, ToJSString val) => HTMLScriptElement -> val -> m ()
-setEvent self val
-  = liftIO (js_setEvent (unHTMLScriptElement self) (toJSString val))
+setEvent self val = liftIO (js_setEvent (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"event\"]" js_getEvent ::
-        JSRef HTMLScriptElement -> IO JSString
+        HTMLScriptElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLScriptElement.event Mozilla HTMLScriptElement.event documentation> 
 getEvent ::
          (MonadIO m, FromJSString result) => HTMLScriptElement -> m result
-getEvent self
-  = liftIO
-      (fromJSString <$> (js_getEvent (unHTMLScriptElement self)))
+getEvent self = liftIO (fromJSString <$> (js_getEvent (self)))
  
 foreign import javascript unsafe "$1[\"charset\"] = $2;"
-        js_setCharset :: JSRef HTMLScriptElement -> JSString -> IO ()
+        js_setCharset :: HTMLScriptElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLScriptElement.charset Mozilla HTMLScriptElement.charset documentation> 
 setCharset ::
            (MonadIO m, ToJSString val) => HTMLScriptElement -> val -> m ()
 setCharset self val
-  = liftIO
-      (js_setCharset (unHTMLScriptElement self) (toJSString val))
+  = liftIO (js_setCharset (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"charset\"]" js_getCharset ::
-        JSRef HTMLScriptElement -> IO JSString
+        HTMLScriptElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLScriptElement.charset Mozilla HTMLScriptElement.charset documentation> 
 getCharset ::
            (MonadIO m, FromJSString result) => HTMLScriptElement -> m result
-getCharset self
-  = liftIO
-      (fromJSString <$> (js_getCharset (unHTMLScriptElement self)))
+getCharset self = liftIO (fromJSString <$> (js_getCharset (self)))
  
 foreign import javascript unsafe "$1[\"async\"] = $2;" js_setAsync
-        :: JSRef HTMLScriptElement -> Bool -> IO ()
+        :: HTMLScriptElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLScriptElement.async Mozilla HTMLScriptElement.async documentation> 
 setAsync :: (MonadIO m) => HTMLScriptElement -> Bool -> m ()
-setAsync self val
-  = liftIO (js_setAsync (unHTMLScriptElement self) val)
+setAsync self val = liftIO (js_setAsync (self) val)
  
 foreign import javascript unsafe "($1[\"async\"] ? 1 : 0)"
-        js_getAsync :: JSRef HTMLScriptElement -> IO Bool
+        js_getAsync :: HTMLScriptElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLScriptElement.async Mozilla HTMLScriptElement.async documentation> 
 getAsync :: (MonadIO m) => HTMLScriptElement -> m Bool
-getAsync self = liftIO (js_getAsync (unHTMLScriptElement self))
+getAsync self = liftIO (js_getAsync (self))
  
 foreign import javascript unsafe "$1[\"defer\"] = $2;" js_setDefer
-        :: JSRef HTMLScriptElement -> Bool -> IO ()
+        :: HTMLScriptElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLScriptElement.defer Mozilla HTMLScriptElement.defer documentation> 
 setDefer :: (MonadIO m) => HTMLScriptElement -> Bool -> m ()
-setDefer self val
-  = liftIO (js_setDefer (unHTMLScriptElement self) val)
+setDefer self val = liftIO (js_setDefer (self) val)
  
 foreign import javascript unsafe "($1[\"defer\"] ? 1 : 0)"
-        js_getDefer :: JSRef HTMLScriptElement -> IO Bool
+        js_getDefer :: HTMLScriptElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLScriptElement.defer Mozilla HTMLScriptElement.defer documentation> 
 getDefer :: (MonadIO m) => HTMLScriptElement -> m Bool
-getDefer self = liftIO (js_getDefer (unHTMLScriptElement self))
+getDefer self = liftIO (js_getDefer (self))
  
 foreign import javascript unsafe "$1[\"src\"] = $2;" js_setSrc ::
-        JSRef HTMLScriptElement -> JSString -> IO ()
+        HTMLScriptElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLScriptElement.src Mozilla HTMLScriptElement.src documentation> 
 setSrc ::
        (MonadIO m, ToJSString val) => HTMLScriptElement -> val -> m ()
-setSrc self val
-  = liftIO (js_setSrc (unHTMLScriptElement self) (toJSString val))
+setSrc self val = liftIO (js_setSrc (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"src\"]" js_getSrc ::
-        JSRef HTMLScriptElement -> IO JSString
+        HTMLScriptElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLScriptElement.src Mozilla HTMLScriptElement.src documentation> 
 getSrc ::
        (MonadIO m, FromJSString result) => HTMLScriptElement -> m result
-getSrc self
-  = liftIO (fromJSString <$> (js_getSrc (unHTMLScriptElement self)))
+getSrc self = liftIO (fromJSString <$> (js_getSrc (self)))
  
 foreign import javascript unsafe "$1[\"type\"] = $2;" js_setType ::
-        JSRef HTMLScriptElement -> JSString -> IO ()
+        HTMLScriptElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLScriptElement.type Mozilla HTMLScriptElement.type documentation> 
 setType ::
         (MonadIO m, ToJSString val) => HTMLScriptElement -> val -> m ()
-setType self val
-  = liftIO (js_setType (unHTMLScriptElement self) (toJSString val))
+setType self val = liftIO (js_setType (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"type\"]" js_getType ::
-        JSRef HTMLScriptElement -> IO JSString
+        HTMLScriptElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLScriptElement.type Mozilla HTMLScriptElement.type documentation> 
 getType ::
         (MonadIO m, FromJSString result) => HTMLScriptElement -> m result
-getType self
-  = liftIO (fromJSString <$> (js_getType (unHTMLScriptElement self)))
+getType self = liftIO (fromJSString <$> (js_getType (self)))
  
 foreign import javascript unsafe "$1[\"crossOrigin\"] = $2;"
-        js_setCrossOrigin :: JSRef HTMLScriptElement -> JSString -> IO ()
+        js_setCrossOrigin :: HTMLScriptElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLScriptElement.crossOrigin Mozilla HTMLScriptElement.crossOrigin documentation> 
 setCrossOrigin ::
                (MonadIO m, ToJSString val) => HTMLScriptElement -> val -> m ()
 setCrossOrigin self val
-  = liftIO
-      (js_setCrossOrigin (unHTMLScriptElement self) (toJSString val))
+  = liftIO (js_setCrossOrigin (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"crossOrigin\"]"
-        js_getCrossOrigin :: JSRef HTMLScriptElement -> IO JSString
+        js_getCrossOrigin :: HTMLScriptElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLScriptElement.crossOrigin Mozilla HTMLScriptElement.crossOrigin documentation> 
 getCrossOrigin ::
                (MonadIO m, FromJSString result) => HTMLScriptElement -> m result
 getCrossOrigin self
-  = liftIO
-      (fromJSString <$> (js_getCrossOrigin (unHTMLScriptElement self)))
+  = liftIO (fromJSString <$> (js_getCrossOrigin (self)))
  
 foreign import javascript unsafe "$1[\"nonce\"] = $2;" js_setNonce
-        :: JSRef HTMLScriptElement -> JSString -> IO ()
+        :: HTMLScriptElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLScriptElement.nonce Mozilla HTMLScriptElement.nonce documentation> 
 setNonce ::
          (MonadIO m, ToJSString val) => HTMLScriptElement -> val -> m ()
-setNonce self val
-  = liftIO (js_setNonce (unHTMLScriptElement self) (toJSString val))
+setNonce self val = liftIO (js_setNonce (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"nonce\"]" js_getNonce ::
-        JSRef HTMLScriptElement -> IO JSString
+        HTMLScriptElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLScriptElement.nonce Mozilla HTMLScriptElement.nonce documentation> 
 getNonce ::
          (MonadIO m, FromJSString result) => HTMLScriptElement -> m result
-getNonce self
-  = liftIO
-      (fromJSString <$> (js_getNonce (unHTMLScriptElement self)))
+getNonce self = liftIO (fromJSString <$> (js_getNonce (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLSelectElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLSelectElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLSelectElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLSelectElement.hs
@@ -20,7 +20,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -34,16 +34,15 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"item\"]($2)" js_item ::
-        JSRef HTMLSelectElement -> Word -> IO (JSRef Node)
+        HTMLSelectElement -> Word -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement.item Mozilla HTMLSelectElement.item documentation> 
 item :: (MonadIO m) => HTMLSelectElement -> Word -> m (Maybe Node)
 item self index
-  = liftIO ((js_item (unHTMLSelectElement self) index) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_item (self) index))
  
 foreign import javascript unsafe "$1[\"namedItem\"]($2)"
-        js_namedItem ::
-        JSRef HTMLSelectElement -> JSString -> IO (JSRef Node)
+        js_namedItem :: HTMLSelectElement -> JSString -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement.namedItem Mozilla HTMLSelectElement.namedItem documentation> 
 namedItem ::
@@ -51,13 +50,12 @@
             HTMLSelectElement -> name -> m (Maybe Node)
 namedItem self name
   = liftIO
-      ((js_namedItem (unHTMLSelectElement self) (toJSString name)) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_namedItem (self) (toJSString name)))
  
 foreign import javascript unsafe "$1[\"add\"]($2, $3)" js_addBefore
         ::
-        JSRef HTMLSelectElement ->
-          JSRef HTMLElement -> JSRef HTMLElement -> IO ()
+        HTMLSelectElement ->
+          Nullable HTMLElement -> Nullable HTMLElement -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement.add Mozilla HTMLSelectElement.add documentation> 
 addBefore ::
@@ -65,12 +63,11 @@
             HTMLSelectElement -> Maybe element -> Maybe before -> m ()
 addBefore self element before
   = liftIO
-      (js_addBefore (unHTMLSelectElement self)
-         (maybe jsNull (unHTMLElement . toHTMLElement) element)
-         (maybe jsNull (unHTMLElement . toHTMLElement) before))
+      (js_addBefore (self) (maybeToNullable (fmap toHTMLElement element))
+         (maybeToNullable (fmap toHTMLElement before)))
  
 foreign import javascript unsafe "$1[\"add\"]($2, $3)" js_add ::
-        JSRef HTMLSelectElement -> JSRef HTMLElement -> Int -> IO ()
+        HTMLSelectElement -> Nullable HTMLElement -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement.add Mozilla HTMLSelectElement.add documentation> 
 add ::
@@ -78,260 +75,231 @@
       HTMLSelectElement -> Maybe element -> Int -> m ()
 add self element index
   = liftIO
-      (js_add (unHTMLSelectElement self)
-         (maybe jsNull (unHTMLElement . toHTMLElement) element)
+      (js_add (self) (maybeToNullable (fmap toHTMLElement element))
          index)
  
 foreign import javascript unsafe "$1[\"remove\"]()" js_remove ::
-        JSRef HTMLSelectElement -> IO ()
+        HTMLSelectElement -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement.remove Mozilla HTMLSelectElement.remove documentation> 
 remove :: (MonadIO m) => HTMLSelectElement -> m ()
-remove self = liftIO (js_remove (unHTMLSelectElement self))
+remove self = liftIO (js_remove (self))
  
 foreign import javascript unsafe
         "($1[\"checkValidity\"]() ? 1 : 0)" js_checkValidity ::
-        JSRef HTMLSelectElement -> IO Bool
+        HTMLSelectElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement.checkValidity Mozilla HTMLSelectElement.checkValidity documentation> 
 checkValidity :: (MonadIO m) => HTMLSelectElement -> m Bool
-checkValidity self
-  = liftIO (js_checkValidity (unHTMLSelectElement self))
+checkValidity self = liftIO (js_checkValidity (self))
  
 foreign import javascript unsafe "$1[\"setCustomValidity\"]($2)"
         js_setCustomValidity ::
-        JSRef HTMLSelectElement -> JSRef (Maybe JSString) -> IO ()
+        HTMLSelectElement -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement.setCustomValidity Mozilla HTMLSelectElement.setCustomValidity documentation> 
 setCustomValidity ::
                   (MonadIO m, ToJSString error) =>
                     HTMLSelectElement -> Maybe error -> m ()
 setCustomValidity self error
-  = liftIO
-      (js_setCustomValidity (unHTMLSelectElement self)
-         (toMaybeJSString error))
+  = liftIO (js_setCustomValidity (self) (toMaybeJSString error))
  
 foreign import javascript unsafe "$1[\"autofocus\"] = $2;"
-        js_setAutofocus :: JSRef HTMLSelectElement -> Bool -> IO ()
+        js_setAutofocus :: HTMLSelectElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement.autofocus Mozilla HTMLSelectElement.autofocus documentation> 
 setAutofocus :: (MonadIO m) => HTMLSelectElement -> Bool -> m ()
-setAutofocus self val
-  = liftIO (js_setAutofocus (unHTMLSelectElement self) val)
+setAutofocus self val = liftIO (js_setAutofocus (self) val)
  
 foreign import javascript unsafe "($1[\"autofocus\"] ? 1 : 0)"
-        js_getAutofocus :: JSRef HTMLSelectElement -> IO Bool
+        js_getAutofocus :: HTMLSelectElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement.autofocus Mozilla HTMLSelectElement.autofocus documentation> 
 getAutofocus :: (MonadIO m) => HTMLSelectElement -> m Bool
-getAutofocus self
-  = liftIO (js_getAutofocus (unHTMLSelectElement self))
+getAutofocus self = liftIO (js_getAutofocus (self))
  
 foreign import javascript unsafe "$1[\"disabled\"] = $2;"
-        js_setDisabled :: JSRef HTMLSelectElement -> Bool -> IO ()
+        js_setDisabled :: HTMLSelectElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement.disabled Mozilla HTMLSelectElement.disabled documentation> 
 setDisabled :: (MonadIO m) => HTMLSelectElement -> Bool -> m ()
-setDisabled self val
-  = liftIO (js_setDisabled (unHTMLSelectElement self) val)
+setDisabled self val = liftIO (js_setDisabled (self) val)
  
 foreign import javascript unsafe "($1[\"disabled\"] ? 1 : 0)"
-        js_getDisabled :: JSRef HTMLSelectElement -> IO Bool
+        js_getDisabled :: HTMLSelectElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement.disabled Mozilla HTMLSelectElement.disabled documentation> 
 getDisabled :: (MonadIO m) => HTMLSelectElement -> m Bool
-getDisabled self
-  = liftIO (js_getDisabled (unHTMLSelectElement self))
+getDisabled self = liftIO (js_getDisabled (self))
  
 foreign import javascript unsafe "$1[\"form\"]" js_getForm ::
-        JSRef HTMLSelectElement -> IO (JSRef HTMLFormElement)
+        HTMLSelectElement -> IO (Nullable HTMLFormElement)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement.form Mozilla HTMLSelectElement.form documentation> 
 getForm ::
         (MonadIO m) => HTMLSelectElement -> m (Maybe HTMLFormElement)
-getForm self
-  = liftIO ((js_getForm (unHTMLSelectElement self)) >>= fromJSRef)
+getForm self = liftIO (nullableToMaybe <$> (js_getForm (self)))
  
 foreign import javascript unsafe "$1[\"multiple\"] = $2;"
-        js_setMultiple :: JSRef HTMLSelectElement -> Bool -> IO ()
+        js_setMultiple :: HTMLSelectElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement.multiple Mozilla HTMLSelectElement.multiple documentation> 
 setMultiple :: (MonadIO m) => HTMLSelectElement -> Bool -> m ()
-setMultiple self val
-  = liftIO (js_setMultiple (unHTMLSelectElement self) val)
+setMultiple self val = liftIO (js_setMultiple (self) val)
  
 foreign import javascript unsafe "($1[\"multiple\"] ? 1 : 0)"
-        js_getMultiple :: JSRef HTMLSelectElement -> IO Bool
+        js_getMultiple :: HTMLSelectElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement.multiple Mozilla HTMLSelectElement.multiple documentation> 
 getMultiple :: (MonadIO m) => HTMLSelectElement -> m Bool
-getMultiple self
-  = liftIO (js_getMultiple (unHTMLSelectElement self))
+getMultiple self = liftIO (js_getMultiple (self))
  
 foreign import javascript unsafe "$1[\"name\"] = $2;" js_setName ::
-        JSRef HTMLSelectElement -> JSString -> IO ()
+        HTMLSelectElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement.name Mozilla HTMLSelectElement.name documentation> 
 setName ::
         (MonadIO m, ToJSString val) => HTMLSelectElement -> val -> m ()
-setName self val
-  = liftIO (js_setName (unHTMLSelectElement self) (toJSString val))
+setName self val = liftIO (js_setName (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"name\"]" js_getName ::
-        JSRef HTMLSelectElement -> IO JSString
+        HTMLSelectElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement.name Mozilla HTMLSelectElement.name documentation> 
 getName ::
         (MonadIO m, FromJSString result) => HTMLSelectElement -> m result
-getName self
-  = liftIO (fromJSString <$> (js_getName (unHTMLSelectElement self)))
+getName self = liftIO (fromJSString <$> (js_getName (self)))
  
 foreign import javascript unsafe "$1[\"required\"] = $2;"
-        js_setRequired :: JSRef HTMLSelectElement -> Bool -> IO ()
+        js_setRequired :: HTMLSelectElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement.required Mozilla HTMLSelectElement.required documentation> 
 setRequired :: (MonadIO m) => HTMLSelectElement -> Bool -> m ()
-setRequired self val
-  = liftIO (js_setRequired (unHTMLSelectElement self) val)
+setRequired self val = liftIO (js_setRequired (self) val)
  
 foreign import javascript unsafe "($1[\"required\"] ? 1 : 0)"
-        js_getRequired :: JSRef HTMLSelectElement -> IO Bool
+        js_getRequired :: HTMLSelectElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement.required Mozilla HTMLSelectElement.required documentation> 
 getRequired :: (MonadIO m) => HTMLSelectElement -> m Bool
-getRequired self
-  = liftIO (js_getRequired (unHTMLSelectElement self))
+getRequired self = liftIO (js_getRequired (self))
  
 foreign import javascript unsafe "$1[\"size\"] = $2;" js_setSize ::
-        JSRef HTMLSelectElement -> Int -> IO ()
+        HTMLSelectElement -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement.size Mozilla HTMLSelectElement.size documentation> 
 setSize :: (MonadIO m) => HTMLSelectElement -> Int -> m ()
-setSize self val
-  = liftIO (js_setSize (unHTMLSelectElement self) val)
+setSize self val = liftIO (js_setSize (self) val)
  
 foreign import javascript unsafe "$1[\"size\"]" js_getSize ::
-        JSRef HTMLSelectElement -> IO Int
+        HTMLSelectElement -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement.size Mozilla HTMLSelectElement.size documentation> 
 getSize :: (MonadIO m) => HTMLSelectElement -> m Int
-getSize self = liftIO (js_getSize (unHTMLSelectElement self))
+getSize self = liftIO (js_getSize (self))
  
 foreign import javascript unsafe "$1[\"type\"]" js_getType ::
-        JSRef HTMLSelectElement -> IO JSString
+        HTMLSelectElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement.type Mozilla HTMLSelectElement.type documentation> 
 getType ::
         (MonadIO m, FromJSString result) => HTMLSelectElement -> m result
-getType self
-  = liftIO (fromJSString <$> (js_getType (unHTMLSelectElement self)))
+getType self = liftIO (fromJSString <$> (js_getType (self)))
  
 foreign import javascript unsafe "$1[\"options\"]" js_getOptions ::
-        JSRef HTMLSelectElement -> IO (JSRef HTMLOptionsCollection)
+        HTMLSelectElement -> IO (Nullable HTMLOptionsCollection)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement.options Mozilla HTMLSelectElement.options documentation> 
 getOptions ::
            (MonadIO m) => HTMLSelectElement -> m (Maybe HTMLOptionsCollection)
 getOptions self
-  = liftIO ((js_getOptions (unHTMLSelectElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getOptions (self)))
  
 foreign import javascript unsafe "$1[\"length\"] = $2;"
-        js_setLength :: JSRef HTMLSelectElement -> Word -> IO ()
+        js_setLength :: HTMLSelectElement -> Word -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement.length Mozilla HTMLSelectElement.length documentation> 
 setLength :: (MonadIO m) => HTMLSelectElement -> Word -> m ()
-setLength self val
-  = liftIO (js_setLength (unHTMLSelectElement self) val)
+setLength self val = liftIO (js_setLength (self) val)
  
 foreign import javascript unsafe "$1[\"length\"]" js_getLength ::
-        JSRef HTMLSelectElement -> IO Word
+        HTMLSelectElement -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement.length Mozilla HTMLSelectElement.length documentation> 
 getLength :: (MonadIO m) => HTMLSelectElement -> m Word
-getLength self = liftIO (js_getLength (unHTMLSelectElement self))
+getLength self = liftIO (js_getLength (self))
  
 foreign import javascript unsafe "$1[\"selectedOptions\"]"
         js_getSelectedOptions ::
-        JSRef HTMLSelectElement -> IO (JSRef HTMLCollection)
+        HTMLSelectElement -> IO (Nullable HTMLCollection)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement.selectedOptions Mozilla HTMLSelectElement.selectedOptions documentation> 
 getSelectedOptions ::
                    (MonadIO m) => HTMLSelectElement -> m (Maybe HTMLCollection)
 getSelectedOptions self
-  = liftIO
-      ((js_getSelectedOptions (unHTMLSelectElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getSelectedOptions (self)))
  
 foreign import javascript unsafe "$1[\"selectedIndex\"] = $2;"
-        js_setSelectedIndex :: JSRef HTMLSelectElement -> Int -> IO ()
+        js_setSelectedIndex :: HTMLSelectElement -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement.selectedIndex Mozilla HTMLSelectElement.selectedIndex documentation> 
 setSelectedIndex :: (MonadIO m) => HTMLSelectElement -> Int -> m ()
-setSelectedIndex self val
-  = liftIO (js_setSelectedIndex (unHTMLSelectElement self) val)
+setSelectedIndex self val = liftIO (js_setSelectedIndex (self) val)
  
 foreign import javascript unsafe "$1[\"selectedIndex\"]"
-        js_getSelectedIndex :: JSRef HTMLSelectElement -> IO Int
+        js_getSelectedIndex :: HTMLSelectElement -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement.selectedIndex Mozilla HTMLSelectElement.selectedIndex documentation> 
 getSelectedIndex :: (MonadIO m) => HTMLSelectElement -> m Int
-getSelectedIndex self
-  = liftIO (js_getSelectedIndex (unHTMLSelectElement self))
+getSelectedIndex self = liftIO (js_getSelectedIndex (self))
  
 foreign import javascript unsafe "$1[\"value\"] = $2;" js_setValue
-        :: JSRef HTMLSelectElement -> JSRef (Maybe JSString) -> IO ()
+        :: HTMLSelectElement -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement.value Mozilla HTMLSelectElement.value documentation> 
 setValue ::
          (MonadIO m, ToJSString val) =>
            HTMLSelectElement -> Maybe val -> m ()
 setValue self val
-  = liftIO
-      (js_setValue (unHTMLSelectElement self) (toMaybeJSString val))
+  = liftIO (js_setValue (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"value\"]" js_getValue ::
-        JSRef HTMLSelectElement -> IO (JSRef (Maybe JSString))
+        HTMLSelectElement -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement.value Mozilla HTMLSelectElement.value documentation> 
 getValue ::
          (MonadIO m, FromJSString result) =>
            HTMLSelectElement -> m (Maybe result)
-getValue self
-  = liftIO
-      (fromMaybeJSString <$> (js_getValue (unHTMLSelectElement self)))
+getValue self = liftIO (fromMaybeJSString <$> (js_getValue (self)))
  
 foreign import javascript unsafe "($1[\"willValidate\"] ? 1 : 0)"
-        js_getWillValidate :: JSRef HTMLSelectElement -> IO Bool
+        js_getWillValidate :: HTMLSelectElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement.willValidate Mozilla HTMLSelectElement.willValidate documentation> 
 getWillValidate :: (MonadIO m) => HTMLSelectElement -> m Bool
-getWillValidate self
-  = liftIO (js_getWillValidate (unHTMLSelectElement self))
+getWillValidate self = liftIO (js_getWillValidate (self))
  
 foreign import javascript unsafe "$1[\"validity\"]" js_getValidity
-        :: JSRef HTMLSelectElement -> IO (JSRef ValidityState)
+        :: HTMLSelectElement -> IO (Nullable ValidityState)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement.validity Mozilla HTMLSelectElement.validity documentation> 
 getValidity ::
             (MonadIO m) => HTMLSelectElement -> m (Maybe ValidityState)
 getValidity self
-  = liftIO
-      ((js_getValidity (unHTMLSelectElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getValidity (self)))
  
 foreign import javascript unsafe "$1[\"validationMessage\"]"
-        js_getValidationMessage :: JSRef HTMLSelectElement -> IO JSString
+        js_getValidationMessage :: HTMLSelectElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement.validationMessage Mozilla HTMLSelectElement.validationMessage documentation> 
 getValidationMessage ::
                      (MonadIO m, FromJSString result) => HTMLSelectElement -> m result
 getValidationMessage self
-  = liftIO
-      (fromJSString <$>
-         (js_getValidationMessage (unHTMLSelectElement self)))
+  = liftIO (fromJSString <$> (js_getValidationMessage (self)))
  
 foreign import javascript unsafe "$1[\"labels\"]" js_getLabels ::
-        JSRef HTMLSelectElement -> IO (JSRef NodeList)
+        HTMLSelectElement -> IO (Nullable NodeList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement.labels Mozilla HTMLSelectElement.labels documentation> 
 getLabels :: (MonadIO m) => HTMLSelectElement -> m (Maybe NodeList)
-getLabels self
-  = liftIO ((js_getLabels (unHTMLSelectElement self)) >>= fromJSRef)
+getLabels self = liftIO (nullableToMaybe <$> (js_getLabels (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLSourceElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLSourceElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLSourceElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLSourceElement.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,56 +20,49 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"src\"] = $2;" js_setSrc ::
-        JSRef HTMLSourceElement -> JSString -> IO ()
+        HTMLSourceElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLSourceElement.src Mozilla HTMLSourceElement.src documentation> 
 setSrc ::
        (MonadIO m, ToJSString val) => HTMLSourceElement -> val -> m ()
-setSrc self val
-  = liftIO (js_setSrc (unHTMLSourceElement self) (toJSString val))
+setSrc self val = liftIO (js_setSrc (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"src\"]" js_getSrc ::
-        JSRef HTMLSourceElement -> IO JSString
+        HTMLSourceElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLSourceElement.src Mozilla HTMLSourceElement.src documentation> 
 getSrc ::
        (MonadIO m, FromJSString result) => HTMLSourceElement -> m result
-getSrc self
-  = liftIO (fromJSString <$> (js_getSrc (unHTMLSourceElement self)))
+getSrc self = liftIO (fromJSString <$> (js_getSrc (self)))
  
 foreign import javascript unsafe "$1[\"type\"] = $2;" js_setType ::
-        JSRef HTMLSourceElement -> JSString -> IO ()
+        HTMLSourceElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLSourceElement.type Mozilla HTMLSourceElement.type documentation> 
 setType ::
         (MonadIO m, ToJSString val) => HTMLSourceElement -> val -> m ()
-setType self val
-  = liftIO (js_setType (unHTMLSourceElement self) (toJSString val))
+setType self val = liftIO (js_setType (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"type\"]" js_getType ::
-        JSRef HTMLSourceElement -> IO JSString
+        HTMLSourceElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLSourceElement.type Mozilla HTMLSourceElement.type documentation> 
 getType ::
         (MonadIO m, FromJSString result) => HTMLSourceElement -> m result
-getType self
-  = liftIO (fromJSString <$> (js_getType (unHTMLSourceElement self)))
+getType self = liftIO (fromJSString <$> (js_getType (self)))
  
 foreign import javascript unsafe "$1[\"media\"] = $2;" js_setMedia
-        :: JSRef HTMLSourceElement -> JSString -> IO ()
+        :: HTMLSourceElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLSourceElement.media Mozilla HTMLSourceElement.media documentation> 
 setMedia ::
          (MonadIO m, ToJSString val) => HTMLSourceElement -> val -> m ()
-setMedia self val
-  = liftIO (js_setMedia (unHTMLSourceElement self) (toJSString val))
+setMedia self val = liftIO (js_setMedia (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"media\"]" js_getMedia ::
-        JSRef HTMLSourceElement -> IO JSString
+        HTMLSourceElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLSourceElement.media Mozilla HTMLSourceElement.media documentation> 
 getMedia ::
          (MonadIO m, FromJSString result) => HTMLSourceElement -> m result
-getMedia self
-  = liftIO
-      (fromJSString <$> (js_getMedia (unHTMLSourceElement self)))
+getMedia self = liftIO (fromJSString <$> (js_getMedia (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLStyleElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLStyleElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLStyleElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLStyleElement.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -21,61 +21,54 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"disabled\"] = $2;"
-        js_setDisabled :: JSRef HTMLStyleElement -> Bool -> IO ()
+        js_setDisabled :: HTMLStyleElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLStyleElement.disabled Mozilla HTMLStyleElement.disabled documentation> 
 setDisabled :: (MonadIO m) => HTMLStyleElement -> Bool -> m ()
-setDisabled self val
-  = liftIO (js_setDisabled (unHTMLStyleElement self) val)
+setDisabled self val = liftIO (js_setDisabled (self) val)
  
 foreign import javascript unsafe "($1[\"disabled\"] ? 1 : 0)"
-        js_getDisabled :: JSRef HTMLStyleElement -> IO Bool
+        js_getDisabled :: HTMLStyleElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLStyleElement.disabled Mozilla HTMLStyleElement.disabled documentation> 
 getDisabled :: (MonadIO m) => HTMLStyleElement -> m Bool
-getDisabled self
-  = liftIO (js_getDisabled (unHTMLStyleElement self))
+getDisabled self = liftIO (js_getDisabled (self))
  
 foreign import javascript unsafe "$1[\"media\"] = $2;" js_setMedia
-        :: JSRef HTMLStyleElement -> JSString -> IO ()
+        :: HTMLStyleElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLStyleElement.media Mozilla HTMLStyleElement.media documentation> 
 setMedia ::
          (MonadIO m, ToJSString val) => HTMLStyleElement -> val -> m ()
-setMedia self val
-  = liftIO (js_setMedia (unHTMLStyleElement self) (toJSString val))
+setMedia self val = liftIO (js_setMedia (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"media\"]" js_getMedia ::
-        JSRef HTMLStyleElement -> IO JSString
+        HTMLStyleElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLStyleElement.media Mozilla HTMLStyleElement.media documentation> 
 getMedia ::
          (MonadIO m, FromJSString result) => HTMLStyleElement -> m result
-getMedia self
-  = liftIO (fromJSString <$> (js_getMedia (unHTMLStyleElement self)))
+getMedia self = liftIO (fromJSString <$> (js_getMedia (self)))
  
 foreign import javascript unsafe "$1[\"type\"] = $2;" js_setType ::
-        JSRef HTMLStyleElement -> JSString -> IO ()
+        HTMLStyleElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLStyleElement.type Mozilla HTMLStyleElement.type documentation> 
 setType ::
         (MonadIO m, ToJSString val) => HTMLStyleElement -> val -> m ()
-setType self val
-  = liftIO (js_setType (unHTMLStyleElement self) (toJSString val))
+setType self val = liftIO (js_setType (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"type\"]" js_getType ::
-        JSRef HTMLStyleElement -> IO JSString
+        HTMLStyleElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLStyleElement.type Mozilla HTMLStyleElement.type documentation> 
 getType ::
         (MonadIO m, FromJSString result) => HTMLStyleElement -> m result
-getType self
-  = liftIO (fromJSString <$> (js_getType (unHTMLStyleElement self)))
+getType self = liftIO (fromJSString <$> (js_getType (self)))
  
 foreign import javascript unsafe "$1[\"sheet\"]" js_getSheet ::
-        JSRef HTMLStyleElement -> IO (JSRef StyleSheet)
+        HTMLStyleElement -> IO (Nullable StyleSheet)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLStyleElement.sheet Mozilla HTMLStyleElement.sheet documentation> 
 getSheet :: (MonadIO m) => HTMLStyleElement -> m (Maybe StyleSheet)
-getSheet self
-  = liftIO ((js_getSheet (unHTMLStyleElement self)) >>= fromJSRef)
+getSheet self = liftIO (nullableToMaybe <$> (js_getSheet (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLTableCaptionElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLTableCaptionElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLTableCaptionElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLTableCaptionElement.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,23 +20,19 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"align\"] = $2;" js_setAlign
-        :: JSRef HTMLTableCaptionElement -> JSString -> IO ()
+        :: HTMLTableCaptionElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableCaptionElement.align Mozilla HTMLTableCaptionElement.align documentation> 
 setAlign ::
          (MonadIO m, ToJSString val) =>
            HTMLTableCaptionElement -> val -> m ()
-setAlign self val
-  = liftIO
-      (js_setAlign (unHTMLTableCaptionElement self) (toJSString val))
+setAlign self val = liftIO (js_setAlign (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"align\"]" js_getAlign ::
-        JSRef HTMLTableCaptionElement -> IO JSString
+        HTMLTableCaptionElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableCaptionElement.align Mozilla HTMLTableCaptionElement.align documentation> 
 getAlign ::
          (MonadIO m, FromJSString result) =>
            HTMLTableCaptionElement -> m result
-getAlign self
-  = liftIO
-      (fromJSString <$> (js_getAlign (unHTMLTableCaptionElement self)))
+getAlign self = liftIO (fromJSString <$> (js_getAlign (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLTableCellElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLTableCellElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLTableCellElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLTableCellElement.hs
@@ -16,7 +16,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -30,287 +30,239 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"cellIndex\"]"
-        js_getCellIndex :: JSRef HTMLTableCellElement -> IO Int
+        js_getCellIndex :: HTMLTableCellElement -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableCellElement.cellIndex Mozilla HTMLTableCellElement.cellIndex documentation> 
 getCellIndex :: (MonadIO m) => HTMLTableCellElement -> m Int
-getCellIndex self
-  = liftIO (js_getCellIndex (unHTMLTableCellElement self))
+getCellIndex self = liftIO (js_getCellIndex (self))
  
 foreign import javascript unsafe "$1[\"abbr\"] = $2;" js_setAbbr ::
-        JSRef HTMLTableCellElement -> JSString -> IO ()
+        HTMLTableCellElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableCellElement.abbr Mozilla HTMLTableCellElement.abbr documentation> 
 setAbbr ::
         (MonadIO m, ToJSString val) => HTMLTableCellElement -> val -> m ()
-setAbbr self val
-  = liftIO
-      (js_setAbbr (unHTMLTableCellElement self) (toJSString val))
+setAbbr self val = liftIO (js_setAbbr (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"abbr\"]" js_getAbbr ::
-        JSRef HTMLTableCellElement -> IO JSString
+        HTMLTableCellElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableCellElement.abbr Mozilla HTMLTableCellElement.abbr documentation> 
 getAbbr ::
         (MonadIO m, FromJSString result) =>
           HTMLTableCellElement -> m result
-getAbbr self
-  = liftIO
-      (fromJSString <$> (js_getAbbr (unHTMLTableCellElement self)))
+getAbbr self = liftIO (fromJSString <$> (js_getAbbr (self)))
  
 foreign import javascript unsafe "$1[\"align\"] = $2;" js_setAlign
-        :: JSRef HTMLTableCellElement -> JSString -> IO ()
+        :: HTMLTableCellElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableCellElement.align Mozilla HTMLTableCellElement.align documentation> 
 setAlign ::
          (MonadIO m, ToJSString val) => HTMLTableCellElement -> val -> m ()
-setAlign self val
-  = liftIO
-      (js_setAlign (unHTMLTableCellElement self) (toJSString val))
+setAlign self val = liftIO (js_setAlign (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"align\"]" js_getAlign ::
-        JSRef HTMLTableCellElement -> IO JSString
+        HTMLTableCellElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableCellElement.align Mozilla HTMLTableCellElement.align documentation> 
 getAlign ::
          (MonadIO m, FromJSString result) =>
            HTMLTableCellElement -> m result
-getAlign self
-  = liftIO
-      (fromJSString <$> (js_getAlign (unHTMLTableCellElement self)))
+getAlign self = liftIO (fromJSString <$> (js_getAlign (self)))
  
 foreign import javascript unsafe "$1[\"axis\"] = $2;" js_setAxis ::
-        JSRef HTMLTableCellElement -> JSString -> IO ()
+        HTMLTableCellElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableCellElement.axis Mozilla HTMLTableCellElement.axis documentation> 
 setAxis ::
         (MonadIO m, ToJSString val) => HTMLTableCellElement -> val -> m ()
-setAxis self val
-  = liftIO
-      (js_setAxis (unHTMLTableCellElement self) (toJSString val))
+setAxis self val = liftIO (js_setAxis (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"axis\"]" js_getAxis ::
-        JSRef HTMLTableCellElement -> IO JSString
+        HTMLTableCellElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableCellElement.axis Mozilla HTMLTableCellElement.axis documentation> 
 getAxis ::
         (MonadIO m, FromJSString result) =>
           HTMLTableCellElement -> m result
-getAxis self
-  = liftIO
-      (fromJSString <$> (js_getAxis (unHTMLTableCellElement self)))
+getAxis self = liftIO (fromJSString <$> (js_getAxis (self)))
  
 foreign import javascript unsafe "$1[\"bgColor\"] = $2;"
-        js_setBgColor :: JSRef HTMLTableCellElement -> JSString -> IO ()
+        js_setBgColor :: HTMLTableCellElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableCellElement.bgColor Mozilla HTMLTableCellElement.bgColor documentation> 
 setBgColor ::
            (MonadIO m, ToJSString val) => HTMLTableCellElement -> val -> m ()
 setBgColor self val
-  = liftIO
-      (js_setBgColor (unHTMLTableCellElement self) (toJSString val))
+  = liftIO (js_setBgColor (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"bgColor\"]" js_getBgColor ::
-        JSRef HTMLTableCellElement -> IO JSString
+        HTMLTableCellElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableCellElement.bgColor Mozilla HTMLTableCellElement.bgColor documentation> 
 getBgColor ::
            (MonadIO m, FromJSString result) =>
              HTMLTableCellElement -> m result
-getBgColor self
-  = liftIO
-      (fromJSString <$> (js_getBgColor (unHTMLTableCellElement self)))
+getBgColor self = liftIO (fromJSString <$> (js_getBgColor (self)))
  
 foreign import javascript unsafe "$1[\"ch\"] = $2;" js_setCh ::
-        JSRef HTMLTableCellElement -> JSString -> IO ()
+        HTMLTableCellElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableCellElement.ch Mozilla HTMLTableCellElement.ch documentation> 
 setCh ::
       (MonadIO m, ToJSString val) => HTMLTableCellElement -> val -> m ()
-setCh self val
-  = liftIO (js_setCh (unHTMLTableCellElement self) (toJSString val))
+setCh self val = liftIO (js_setCh (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"ch\"]" js_getCh ::
-        JSRef HTMLTableCellElement -> IO JSString
+        HTMLTableCellElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableCellElement.ch Mozilla HTMLTableCellElement.ch documentation> 
 getCh ::
       (MonadIO m, FromJSString result) =>
         HTMLTableCellElement -> m result
-getCh self
-  = liftIO
-      (fromJSString <$> (js_getCh (unHTMLTableCellElement self)))
+getCh self = liftIO (fromJSString <$> (js_getCh (self)))
  
 foreign import javascript unsafe "$1[\"chOff\"] = $2;" js_setChOff
-        :: JSRef HTMLTableCellElement -> JSString -> IO ()
+        :: HTMLTableCellElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableCellElement.chOff Mozilla HTMLTableCellElement.chOff documentation> 
 setChOff ::
          (MonadIO m, ToJSString val) => HTMLTableCellElement -> val -> m ()
-setChOff self val
-  = liftIO
-      (js_setChOff (unHTMLTableCellElement self) (toJSString val))
+setChOff self val = liftIO (js_setChOff (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"chOff\"]" js_getChOff ::
-        JSRef HTMLTableCellElement -> IO JSString
+        HTMLTableCellElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableCellElement.chOff Mozilla HTMLTableCellElement.chOff documentation> 
 getChOff ::
          (MonadIO m, FromJSString result) =>
            HTMLTableCellElement -> m result
-getChOff self
-  = liftIO
-      (fromJSString <$> (js_getChOff (unHTMLTableCellElement self)))
+getChOff self = liftIO (fromJSString <$> (js_getChOff (self)))
  
 foreign import javascript unsafe "$1[\"colSpan\"] = $2;"
-        js_setColSpan :: JSRef HTMLTableCellElement -> Int -> IO ()
+        js_setColSpan :: HTMLTableCellElement -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableCellElement.colSpan Mozilla HTMLTableCellElement.colSpan documentation> 
 setColSpan :: (MonadIO m) => HTMLTableCellElement -> Int -> m ()
-setColSpan self val
-  = liftIO (js_setColSpan (unHTMLTableCellElement self) val)
+setColSpan self val = liftIO (js_setColSpan (self) val)
  
 foreign import javascript unsafe "$1[\"colSpan\"]" js_getColSpan ::
-        JSRef HTMLTableCellElement -> IO Int
+        HTMLTableCellElement -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableCellElement.colSpan Mozilla HTMLTableCellElement.colSpan documentation> 
 getColSpan :: (MonadIO m) => HTMLTableCellElement -> m Int
-getColSpan self
-  = liftIO (js_getColSpan (unHTMLTableCellElement self))
+getColSpan self = liftIO (js_getColSpan (self))
  
 foreign import javascript unsafe "$1[\"headers\"] = $2;"
-        js_setHeaders :: JSRef HTMLTableCellElement -> JSString -> IO ()
+        js_setHeaders :: HTMLTableCellElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableCellElement.headers Mozilla HTMLTableCellElement.headers documentation> 
 setHeaders ::
            (MonadIO m, ToJSString val) => HTMLTableCellElement -> val -> m ()
 setHeaders self val
-  = liftIO
-      (js_setHeaders (unHTMLTableCellElement self) (toJSString val))
+  = liftIO (js_setHeaders (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"headers\"]" js_getHeaders ::
-        JSRef HTMLTableCellElement -> IO JSString
+        HTMLTableCellElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableCellElement.headers Mozilla HTMLTableCellElement.headers documentation> 
 getHeaders ::
            (MonadIO m, FromJSString result) =>
              HTMLTableCellElement -> m result
-getHeaders self
-  = liftIO
-      (fromJSString <$> (js_getHeaders (unHTMLTableCellElement self)))
+getHeaders self = liftIO (fromJSString <$> (js_getHeaders (self)))
  
 foreign import javascript unsafe "$1[\"height\"] = $2;"
-        js_setHeight :: JSRef HTMLTableCellElement -> JSString -> IO ()
+        js_setHeight :: HTMLTableCellElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableCellElement.height Mozilla HTMLTableCellElement.height documentation> 
 setHeight ::
           (MonadIO m, ToJSString val) => HTMLTableCellElement -> val -> m ()
-setHeight self val
-  = liftIO
-      (js_setHeight (unHTMLTableCellElement self) (toJSString val))
+setHeight self val = liftIO (js_setHeight (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"height\"]" js_getHeight ::
-        JSRef HTMLTableCellElement -> IO JSString
+        HTMLTableCellElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableCellElement.height Mozilla HTMLTableCellElement.height documentation> 
 getHeight ::
           (MonadIO m, FromJSString result) =>
             HTMLTableCellElement -> m result
-getHeight self
-  = liftIO
-      (fromJSString <$> (js_getHeight (unHTMLTableCellElement self)))
+getHeight self = liftIO (fromJSString <$> (js_getHeight (self)))
  
 foreign import javascript unsafe "$1[\"noWrap\"] = $2;"
-        js_setNoWrap :: JSRef HTMLTableCellElement -> Bool -> IO ()
+        js_setNoWrap :: HTMLTableCellElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableCellElement.noWrap Mozilla HTMLTableCellElement.noWrap documentation> 
 setNoWrap :: (MonadIO m) => HTMLTableCellElement -> Bool -> m ()
-setNoWrap self val
-  = liftIO (js_setNoWrap (unHTMLTableCellElement self) val)
+setNoWrap self val = liftIO (js_setNoWrap (self) val)
  
 foreign import javascript unsafe "($1[\"noWrap\"] ? 1 : 0)"
-        js_getNoWrap :: JSRef HTMLTableCellElement -> IO Bool
+        js_getNoWrap :: HTMLTableCellElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableCellElement.noWrap Mozilla HTMLTableCellElement.noWrap documentation> 
 getNoWrap :: (MonadIO m) => HTMLTableCellElement -> m Bool
-getNoWrap self
-  = liftIO (js_getNoWrap (unHTMLTableCellElement self))
+getNoWrap self = liftIO (js_getNoWrap (self))
  
 foreign import javascript unsafe "$1[\"rowSpan\"] = $2;"
-        js_setRowSpan :: JSRef HTMLTableCellElement -> Int -> IO ()
+        js_setRowSpan :: HTMLTableCellElement -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableCellElement.rowSpan Mozilla HTMLTableCellElement.rowSpan documentation> 
 setRowSpan :: (MonadIO m) => HTMLTableCellElement -> Int -> m ()
-setRowSpan self val
-  = liftIO (js_setRowSpan (unHTMLTableCellElement self) val)
+setRowSpan self val = liftIO (js_setRowSpan (self) val)
  
 foreign import javascript unsafe "$1[\"rowSpan\"]" js_getRowSpan ::
-        JSRef HTMLTableCellElement -> IO Int
+        HTMLTableCellElement -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableCellElement.rowSpan Mozilla HTMLTableCellElement.rowSpan documentation> 
 getRowSpan :: (MonadIO m) => HTMLTableCellElement -> m Int
-getRowSpan self
-  = liftIO (js_getRowSpan (unHTMLTableCellElement self))
+getRowSpan self = liftIO (js_getRowSpan (self))
  
 foreign import javascript unsafe "$1[\"scope\"] = $2;" js_setScope
-        :: JSRef HTMLTableCellElement -> JSString -> IO ()
+        :: HTMLTableCellElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableCellElement.scope Mozilla HTMLTableCellElement.scope documentation> 
 setScope ::
          (MonadIO m, ToJSString val) => HTMLTableCellElement -> val -> m ()
-setScope self val
-  = liftIO
-      (js_setScope (unHTMLTableCellElement self) (toJSString val))
+setScope self val = liftIO (js_setScope (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"scope\"]" js_getScope ::
-        JSRef HTMLTableCellElement -> IO JSString
+        HTMLTableCellElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableCellElement.scope Mozilla HTMLTableCellElement.scope documentation> 
 getScope ::
          (MonadIO m, FromJSString result) =>
            HTMLTableCellElement -> m result
-getScope self
-  = liftIO
-      (fromJSString <$> (js_getScope (unHTMLTableCellElement self)))
+getScope self = liftIO (fromJSString <$> (js_getScope (self)))
  
 foreign import javascript unsafe "$1[\"vAlign\"] = $2;"
-        js_setVAlign :: JSRef HTMLTableCellElement -> JSString -> IO ()
+        js_setVAlign :: HTMLTableCellElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableCellElement.vAlign Mozilla HTMLTableCellElement.vAlign documentation> 
 setVAlign ::
           (MonadIO m, ToJSString val) => HTMLTableCellElement -> val -> m ()
-setVAlign self val
-  = liftIO
-      (js_setVAlign (unHTMLTableCellElement self) (toJSString val))
+setVAlign self val = liftIO (js_setVAlign (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"vAlign\"]" js_getVAlign ::
-        JSRef HTMLTableCellElement -> IO JSString
+        HTMLTableCellElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableCellElement.vAlign Mozilla HTMLTableCellElement.vAlign documentation> 
 getVAlign ::
           (MonadIO m, FromJSString result) =>
             HTMLTableCellElement -> m result
-getVAlign self
-  = liftIO
-      (fromJSString <$> (js_getVAlign (unHTMLTableCellElement self)))
+getVAlign self = liftIO (fromJSString <$> (js_getVAlign (self)))
  
 foreign import javascript unsafe "$1[\"width\"] = $2;" js_setWidth
-        :: JSRef HTMLTableCellElement -> JSString -> IO ()
+        :: HTMLTableCellElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableCellElement.width Mozilla HTMLTableCellElement.width documentation> 
 setWidth ::
          (MonadIO m, ToJSString val) => HTMLTableCellElement -> val -> m ()
-setWidth self val
-  = liftIO
-      (js_setWidth (unHTMLTableCellElement self) (toJSString val))
+setWidth self val = liftIO (js_setWidth (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"width\"]" js_getWidth ::
-        JSRef HTMLTableCellElement -> IO JSString
+        HTMLTableCellElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableCellElement.width Mozilla HTMLTableCellElement.width documentation> 
 getWidth ::
          (MonadIO m, FromJSString result) =>
            HTMLTableCellElement -> m result
-getWidth self
-  = liftIO
-      (fromJSString <$> (js_getWidth (unHTMLTableCellElement self)))
+getWidth self = liftIO (fromJSString <$> (js_getWidth (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLTableColElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLTableColElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLTableColElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLTableColElement.hs
@@ -9,7 +9,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -23,114 +23,95 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"align\"] = $2;" js_setAlign
-        :: JSRef HTMLTableColElement -> JSString -> IO ()
+        :: HTMLTableColElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableColElement.align Mozilla HTMLTableColElement.align documentation> 
 setAlign ::
          (MonadIO m, ToJSString val) => HTMLTableColElement -> val -> m ()
-setAlign self val
-  = liftIO
-      (js_setAlign (unHTMLTableColElement self) (toJSString val))
+setAlign self val = liftIO (js_setAlign (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"align\"]" js_getAlign ::
-        JSRef HTMLTableColElement -> IO JSString
+        HTMLTableColElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableColElement.align Mozilla HTMLTableColElement.align documentation> 
 getAlign ::
          (MonadIO m, FromJSString result) => HTMLTableColElement -> m result
-getAlign self
-  = liftIO
-      (fromJSString <$> (js_getAlign (unHTMLTableColElement self)))
+getAlign self = liftIO (fromJSString <$> (js_getAlign (self)))
  
 foreign import javascript unsafe "$1[\"ch\"] = $2;" js_setCh ::
-        JSRef HTMLTableColElement -> JSString -> IO ()
+        HTMLTableColElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableColElement.ch Mozilla HTMLTableColElement.ch documentation> 
 setCh ::
       (MonadIO m, ToJSString val) => HTMLTableColElement -> val -> m ()
-setCh self val
-  = liftIO (js_setCh (unHTMLTableColElement self) (toJSString val))
+setCh self val = liftIO (js_setCh (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"ch\"]" js_getCh ::
-        JSRef HTMLTableColElement -> IO JSString
+        HTMLTableColElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableColElement.ch Mozilla HTMLTableColElement.ch documentation> 
 getCh ::
       (MonadIO m, FromJSString result) => HTMLTableColElement -> m result
-getCh self
-  = liftIO (fromJSString <$> (js_getCh (unHTMLTableColElement self)))
+getCh self = liftIO (fromJSString <$> (js_getCh (self)))
  
 foreign import javascript unsafe "$1[\"chOff\"] = $2;" js_setChOff
-        :: JSRef HTMLTableColElement -> JSString -> IO ()
+        :: HTMLTableColElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableColElement.chOff Mozilla HTMLTableColElement.chOff documentation> 
 setChOff ::
          (MonadIO m, ToJSString val) => HTMLTableColElement -> val -> m ()
-setChOff self val
-  = liftIO
-      (js_setChOff (unHTMLTableColElement self) (toJSString val))
+setChOff self val = liftIO (js_setChOff (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"chOff\"]" js_getChOff ::
-        JSRef HTMLTableColElement -> IO JSString
+        HTMLTableColElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableColElement.chOff Mozilla HTMLTableColElement.chOff documentation> 
 getChOff ::
          (MonadIO m, FromJSString result) => HTMLTableColElement -> m result
-getChOff self
-  = liftIO
-      (fromJSString <$> (js_getChOff (unHTMLTableColElement self)))
+getChOff self = liftIO (fromJSString <$> (js_getChOff (self)))
  
 foreign import javascript unsafe "$1[\"span\"] = $2;" js_setSpan ::
-        JSRef HTMLTableColElement -> Int -> IO ()
+        HTMLTableColElement -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableColElement.span Mozilla HTMLTableColElement.span documentation> 
 setSpan :: (MonadIO m) => HTMLTableColElement -> Int -> m ()
-setSpan self val
-  = liftIO (js_setSpan (unHTMLTableColElement self) val)
+setSpan self val = liftIO (js_setSpan (self) val)
  
 foreign import javascript unsafe "$1[\"span\"]" js_getSpan ::
-        JSRef HTMLTableColElement -> IO Int
+        HTMLTableColElement -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableColElement.span Mozilla HTMLTableColElement.span documentation> 
 getSpan :: (MonadIO m) => HTMLTableColElement -> m Int
-getSpan self = liftIO (js_getSpan (unHTMLTableColElement self))
+getSpan self = liftIO (js_getSpan (self))
  
 foreign import javascript unsafe "$1[\"vAlign\"] = $2;"
-        js_setVAlign :: JSRef HTMLTableColElement -> JSString -> IO ()
+        js_setVAlign :: HTMLTableColElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableColElement.vAlign Mozilla HTMLTableColElement.vAlign documentation> 
 setVAlign ::
           (MonadIO m, ToJSString val) => HTMLTableColElement -> val -> m ()
-setVAlign self val
-  = liftIO
-      (js_setVAlign (unHTMLTableColElement self) (toJSString val))
+setVAlign self val = liftIO (js_setVAlign (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"vAlign\"]" js_getVAlign ::
-        JSRef HTMLTableColElement -> IO JSString
+        HTMLTableColElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableColElement.vAlign Mozilla HTMLTableColElement.vAlign documentation> 
 getVAlign ::
           (MonadIO m, FromJSString result) => HTMLTableColElement -> m result
-getVAlign self
-  = liftIO
-      (fromJSString <$> (js_getVAlign (unHTMLTableColElement self)))
+getVAlign self = liftIO (fromJSString <$> (js_getVAlign (self)))
  
 foreign import javascript unsafe "$1[\"width\"] = $2;" js_setWidth
-        :: JSRef HTMLTableColElement -> JSString -> IO ()
+        :: HTMLTableColElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableColElement.width Mozilla HTMLTableColElement.width documentation> 
 setWidth ::
          (MonadIO m, ToJSString val) => HTMLTableColElement -> val -> m ()
-setWidth self val
-  = liftIO
-      (js_setWidth (unHTMLTableColElement self) (toJSString val))
+setWidth self val = liftIO (js_setWidth (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"width\"]" js_getWidth ::
-        JSRef HTMLTableColElement -> IO JSString
+        HTMLTableColElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableColElement.width Mozilla HTMLTableColElement.width documentation> 
 getWidth ::
          (MonadIO m, FromJSString result) => HTMLTableColElement -> m result
-getWidth self
-  = liftIO
-      (fromJSString <$> (js_getWidth (unHTMLTableColElement self)))
+getWidth self = liftIO (fromJSString <$> (js_getWidth (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLTableElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLTableElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLTableElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLTableElement.hs
@@ -20,7 +20,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -34,334 +34,301 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"createTHead\"]()"
-        js_createTHead :: JSRef HTMLTableElement -> IO (JSRef HTMLElement)
+        js_createTHead :: HTMLTableElement -> IO (Nullable HTMLElement)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableElement.createTHead Mozilla HTMLTableElement.createTHead documentation> 
 createTHead ::
             (MonadIO m) => HTMLTableElement -> m (Maybe HTMLElement)
 createTHead self
-  = liftIO ((js_createTHead (unHTMLTableElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_createTHead (self)))
  
 foreign import javascript unsafe "$1[\"deleteTHead\"]()"
-        js_deleteTHead :: JSRef HTMLTableElement -> IO ()
+        js_deleteTHead :: HTMLTableElement -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableElement.deleteTHead Mozilla HTMLTableElement.deleteTHead documentation> 
 deleteTHead :: (MonadIO m) => HTMLTableElement -> m ()
-deleteTHead self
-  = liftIO (js_deleteTHead (unHTMLTableElement self))
+deleteTHead self = liftIO (js_deleteTHead (self))
  
 foreign import javascript unsafe "$1[\"createTFoot\"]()"
-        js_createTFoot :: JSRef HTMLTableElement -> IO (JSRef HTMLElement)
+        js_createTFoot :: HTMLTableElement -> IO (Nullable HTMLElement)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableElement.createTFoot Mozilla HTMLTableElement.createTFoot documentation> 
 createTFoot ::
             (MonadIO m) => HTMLTableElement -> m (Maybe HTMLElement)
 createTFoot self
-  = liftIO ((js_createTFoot (unHTMLTableElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_createTFoot (self)))
  
 foreign import javascript unsafe "$1[\"deleteTFoot\"]()"
-        js_deleteTFoot :: JSRef HTMLTableElement -> IO ()
+        js_deleteTFoot :: HTMLTableElement -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableElement.deleteTFoot Mozilla HTMLTableElement.deleteTFoot documentation> 
 deleteTFoot :: (MonadIO m) => HTMLTableElement -> m ()
-deleteTFoot self
-  = liftIO (js_deleteTFoot (unHTMLTableElement self))
+deleteTFoot self = liftIO (js_deleteTFoot (self))
  
 foreign import javascript unsafe "$1[\"createTBody\"]()"
-        js_createTBody :: JSRef HTMLTableElement -> IO (JSRef HTMLElement)
+        js_createTBody :: HTMLTableElement -> IO (Nullable HTMLElement)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableElement.createTBody Mozilla HTMLTableElement.createTBody documentation> 
 createTBody ::
             (MonadIO m) => HTMLTableElement -> m (Maybe HTMLElement)
 createTBody self
-  = liftIO ((js_createTBody (unHTMLTableElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_createTBody (self)))
  
 foreign import javascript unsafe "$1[\"createCaption\"]()"
-        js_createCaption ::
-        JSRef HTMLTableElement -> IO (JSRef HTMLElement)
+        js_createCaption :: HTMLTableElement -> IO (Nullable HTMLElement)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableElement.createCaption Mozilla HTMLTableElement.createCaption documentation> 
 createCaption ::
               (MonadIO m) => HTMLTableElement -> m (Maybe HTMLElement)
 createCaption self
-  = liftIO
-      ((js_createCaption (unHTMLTableElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_createCaption (self)))
  
 foreign import javascript unsafe "$1[\"deleteCaption\"]()"
-        js_deleteCaption :: JSRef HTMLTableElement -> IO ()
+        js_deleteCaption :: HTMLTableElement -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableElement.deleteCaption Mozilla HTMLTableElement.deleteCaption documentation> 
 deleteCaption :: (MonadIO m) => HTMLTableElement -> m ()
-deleteCaption self
-  = liftIO (js_deleteCaption (unHTMLTableElement self))
+deleteCaption self = liftIO (js_deleteCaption (self))
  
 foreign import javascript unsafe "$1[\"insertRow\"]($2)"
         js_insertRow ::
-        JSRef HTMLTableElement -> Int -> IO (JSRef HTMLElement)
+        HTMLTableElement -> Int -> IO (Nullable HTMLElement)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableElement.insertRow Mozilla HTMLTableElement.insertRow documentation> 
 insertRow ::
           (MonadIO m) => HTMLTableElement -> Int -> m (Maybe HTMLElement)
 insertRow self index
-  = liftIO
-      ((js_insertRow (unHTMLTableElement self) index) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_insertRow (self) index))
  
 foreign import javascript unsafe "$1[\"deleteRow\"]($2)"
-        js_deleteRow :: JSRef HTMLTableElement -> Int -> IO ()
+        js_deleteRow :: HTMLTableElement -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableElement.deleteRow Mozilla HTMLTableElement.deleteRow documentation> 
 deleteRow :: (MonadIO m) => HTMLTableElement -> Int -> m ()
-deleteRow self index
-  = liftIO (js_deleteRow (unHTMLTableElement self) index)
+deleteRow self index = liftIO (js_deleteRow (self) index)
  
 foreign import javascript unsafe "$1[\"caption\"] = $2;"
         js_setCaption ::
-        JSRef HTMLTableElement -> JSRef HTMLTableCaptionElement -> IO ()
+        HTMLTableElement -> Nullable HTMLTableCaptionElement -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableElement.caption Mozilla HTMLTableElement.caption documentation> 
 setCaption ::
            (MonadIO m) =>
              HTMLTableElement -> Maybe HTMLTableCaptionElement -> m ()
 setCaption self val
-  = liftIO
-      (js_setCaption (unHTMLTableElement self)
-         (maybe jsNull pToJSRef val))
+  = liftIO (js_setCaption (self) (maybeToNullable val))
  
 foreign import javascript unsafe "$1[\"caption\"]" js_getCaption ::
-        JSRef HTMLTableElement -> IO (JSRef HTMLTableCaptionElement)
+        HTMLTableElement -> IO (Nullable HTMLTableCaptionElement)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableElement.caption Mozilla HTMLTableElement.caption documentation> 
 getCaption ::
            (MonadIO m) =>
              HTMLTableElement -> m (Maybe HTMLTableCaptionElement)
 getCaption self
-  = liftIO ((js_getCaption (unHTMLTableElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getCaption (self)))
  
 foreign import javascript unsafe "$1[\"tHead\"] = $2;" js_setTHead
-        :: JSRef HTMLTableElement -> JSRef HTMLTableSectionElement -> IO ()
+        :: HTMLTableElement -> Nullable HTMLTableSectionElement -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableElement.tHead Mozilla HTMLTableElement.tHead documentation> 
 setTHead ::
          (MonadIO m) =>
            HTMLTableElement -> Maybe HTMLTableSectionElement -> m ()
 setTHead self val
-  = liftIO
-      (js_setTHead (unHTMLTableElement self) (maybe jsNull pToJSRef val))
+  = liftIO (js_setTHead (self) (maybeToNullable val))
  
 foreign import javascript unsafe "$1[\"tHead\"]" js_getTHead ::
-        JSRef HTMLTableElement -> IO (JSRef HTMLTableSectionElement)
+        HTMLTableElement -> IO (Nullable HTMLTableSectionElement)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableElement.tHead Mozilla HTMLTableElement.tHead documentation> 
 getTHead ::
          (MonadIO m) =>
            HTMLTableElement -> m (Maybe HTMLTableSectionElement)
-getTHead self
-  = liftIO ((js_getTHead (unHTMLTableElement self)) >>= fromJSRef)
+getTHead self = liftIO (nullableToMaybe <$> (js_getTHead (self)))
  
 foreign import javascript unsafe "$1[\"tFoot\"] = $2;" js_setTFoot
-        :: JSRef HTMLTableElement -> JSRef HTMLTableSectionElement -> IO ()
+        :: HTMLTableElement -> Nullable HTMLTableSectionElement -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableElement.tFoot Mozilla HTMLTableElement.tFoot documentation> 
 setTFoot ::
          (MonadIO m) =>
            HTMLTableElement -> Maybe HTMLTableSectionElement -> m ()
 setTFoot self val
-  = liftIO
-      (js_setTFoot (unHTMLTableElement self) (maybe jsNull pToJSRef val))
+  = liftIO (js_setTFoot (self) (maybeToNullable val))
  
 foreign import javascript unsafe "$1[\"tFoot\"]" js_getTFoot ::
-        JSRef HTMLTableElement -> IO (JSRef HTMLTableSectionElement)
+        HTMLTableElement -> IO (Nullable HTMLTableSectionElement)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableElement.tFoot Mozilla HTMLTableElement.tFoot documentation> 
 getTFoot ::
          (MonadIO m) =>
            HTMLTableElement -> m (Maybe HTMLTableSectionElement)
-getTFoot self
-  = liftIO ((js_getTFoot (unHTMLTableElement self)) >>= fromJSRef)
+getTFoot self = liftIO (nullableToMaybe <$> (js_getTFoot (self)))
  
 foreign import javascript unsafe "$1[\"rows\"]" js_getRows ::
-        JSRef HTMLTableElement -> IO (JSRef HTMLCollection)
+        HTMLTableElement -> IO (Nullable HTMLCollection)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableElement.rows Mozilla HTMLTableElement.rows documentation> 
 getRows ::
         (MonadIO m) => HTMLTableElement -> m (Maybe HTMLCollection)
-getRows self
-  = liftIO ((js_getRows (unHTMLTableElement self)) >>= fromJSRef)
+getRows self = liftIO (nullableToMaybe <$> (js_getRows (self)))
  
 foreign import javascript unsafe "$1[\"tBodies\"]" js_getTBodies ::
-        JSRef HTMLTableElement -> IO (JSRef HTMLCollection)
+        HTMLTableElement -> IO (Nullable HTMLCollection)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableElement.tBodies Mozilla HTMLTableElement.tBodies documentation> 
 getTBodies ::
            (MonadIO m) => HTMLTableElement -> m (Maybe HTMLCollection)
 getTBodies self
-  = liftIO ((js_getTBodies (unHTMLTableElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getTBodies (self)))
  
 foreign import javascript unsafe "$1[\"align\"] = $2;" js_setAlign
-        :: JSRef HTMLTableElement -> JSString -> IO ()
+        :: HTMLTableElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableElement.align Mozilla HTMLTableElement.align documentation> 
 setAlign ::
          (MonadIO m, ToJSString val) => HTMLTableElement -> val -> m ()
-setAlign self val
-  = liftIO (js_setAlign (unHTMLTableElement self) (toJSString val))
+setAlign self val = liftIO (js_setAlign (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"align\"]" js_getAlign ::
-        JSRef HTMLTableElement -> IO JSString
+        HTMLTableElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableElement.align Mozilla HTMLTableElement.align documentation> 
 getAlign ::
          (MonadIO m, FromJSString result) => HTMLTableElement -> m result
-getAlign self
-  = liftIO (fromJSString <$> (js_getAlign (unHTMLTableElement self)))
+getAlign self = liftIO (fromJSString <$> (js_getAlign (self)))
  
 foreign import javascript unsafe "$1[\"bgColor\"] = $2;"
-        js_setBgColor :: JSRef HTMLTableElement -> JSString -> IO ()
+        js_setBgColor :: HTMLTableElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableElement.bgColor Mozilla HTMLTableElement.bgColor documentation> 
 setBgColor ::
            (MonadIO m, ToJSString val) => HTMLTableElement -> val -> m ()
 setBgColor self val
-  = liftIO (js_setBgColor (unHTMLTableElement self) (toJSString val))
+  = liftIO (js_setBgColor (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"bgColor\"]" js_getBgColor ::
-        JSRef HTMLTableElement -> IO JSString
+        HTMLTableElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableElement.bgColor Mozilla HTMLTableElement.bgColor documentation> 
 getBgColor ::
            (MonadIO m, FromJSString result) => HTMLTableElement -> m result
-getBgColor self
-  = liftIO
-      (fromJSString <$> (js_getBgColor (unHTMLTableElement self)))
+getBgColor self = liftIO (fromJSString <$> (js_getBgColor (self)))
  
 foreign import javascript unsafe "$1[\"border\"] = $2;"
-        js_setBorder :: JSRef HTMLTableElement -> JSString -> IO ()
+        js_setBorder :: HTMLTableElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableElement.border Mozilla HTMLTableElement.border documentation> 
 setBorder ::
           (MonadIO m, ToJSString val) => HTMLTableElement -> val -> m ()
-setBorder self val
-  = liftIO (js_setBorder (unHTMLTableElement self) (toJSString val))
+setBorder self val = liftIO (js_setBorder (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"border\"]" js_getBorder ::
-        JSRef HTMLTableElement -> IO JSString
+        HTMLTableElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableElement.border Mozilla HTMLTableElement.border documentation> 
 getBorder ::
           (MonadIO m, FromJSString result) => HTMLTableElement -> m result
-getBorder self
-  = liftIO
-      (fromJSString <$> (js_getBorder (unHTMLTableElement self)))
+getBorder self = liftIO (fromJSString <$> (js_getBorder (self)))
  
 foreign import javascript unsafe "$1[\"cellPadding\"] = $2;"
-        js_setCellPadding :: JSRef HTMLTableElement -> JSString -> IO ()
+        js_setCellPadding :: HTMLTableElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableElement.cellPadding Mozilla HTMLTableElement.cellPadding documentation> 
 setCellPadding ::
                (MonadIO m, ToJSString val) => HTMLTableElement -> val -> m ()
 setCellPadding self val
-  = liftIO
-      (js_setCellPadding (unHTMLTableElement self) (toJSString val))
+  = liftIO (js_setCellPadding (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"cellPadding\"]"
-        js_getCellPadding :: JSRef HTMLTableElement -> IO JSString
+        js_getCellPadding :: HTMLTableElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableElement.cellPadding Mozilla HTMLTableElement.cellPadding documentation> 
 getCellPadding ::
                (MonadIO m, FromJSString result) => HTMLTableElement -> m result
 getCellPadding self
-  = liftIO
-      (fromJSString <$> (js_getCellPadding (unHTMLTableElement self)))
+  = liftIO (fromJSString <$> (js_getCellPadding (self)))
  
 foreign import javascript unsafe "$1[\"cellSpacing\"] = $2;"
-        js_setCellSpacing :: JSRef HTMLTableElement -> JSString -> IO ()
+        js_setCellSpacing :: HTMLTableElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableElement.cellSpacing Mozilla HTMLTableElement.cellSpacing documentation> 
 setCellSpacing ::
                (MonadIO m, ToJSString val) => HTMLTableElement -> val -> m ()
 setCellSpacing self val
-  = liftIO
-      (js_setCellSpacing (unHTMLTableElement self) (toJSString val))
+  = liftIO (js_setCellSpacing (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"cellSpacing\"]"
-        js_getCellSpacing :: JSRef HTMLTableElement -> IO JSString
+        js_getCellSpacing :: HTMLTableElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableElement.cellSpacing Mozilla HTMLTableElement.cellSpacing documentation> 
 getCellSpacing ::
                (MonadIO m, FromJSString result) => HTMLTableElement -> m result
 getCellSpacing self
-  = liftIO
-      (fromJSString <$> (js_getCellSpacing (unHTMLTableElement self)))
+  = liftIO (fromJSString <$> (js_getCellSpacing (self)))
  
 foreign import javascript unsafe "$1[\"frame\"] = $2;" js_setFrame
-        :: JSRef HTMLTableElement -> JSString -> IO ()
+        :: HTMLTableElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableElement.frame Mozilla HTMLTableElement.frame documentation> 
 setFrame ::
          (MonadIO m, ToJSString val) => HTMLTableElement -> val -> m ()
-setFrame self val
-  = liftIO (js_setFrame (unHTMLTableElement self) (toJSString val))
+setFrame self val = liftIO (js_setFrame (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"frame\"]" js_getFrame ::
-        JSRef HTMLTableElement -> IO JSString
+        HTMLTableElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableElement.frame Mozilla HTMLTableElement.frame documentation> 
 getFrame ::
          (MonadIO m, FromJSString result) => HTMLTableElement -> m result
-getFrame self
-  = liftIO (fromJSString <$> (js_getFrame (unHTMLTableElement self)))
+getFrame self = liftIO (fromJSString <$> (js_getFrame (self)))
  
 foreign import javascript unsafe "$1[\"rules\"] = $2;" js_setRules
-        :: JSRef HTMLTableElement -> JSString -> IO ()
+        :: HTMLTableElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableElement.rules Mozilla HTMLTableElement.rules documentation> 
 setRules ::
          (MonadIO m, ToJSString val) => HTMLTableElement -> val -> m ()
-setRules self val
-  = liftIO (js_setRules (unHTMLTableElement self) (toJSString val))
+setRules self val = liftIO (js_setRules (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"rules\"]" js_getRules ::
-        JSRef HTMLTableElement -> IO JSString
+        HTMLTableElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableElement.rules Mozilla HTMLTableElement.rules documentation> 
 getRules ::
          (MonadIO m, FromJSString result) => HTMLTableElement -> m result
-getRules self
-  = liftIO (fromJSString <$> (js_getRules (unHTMLTableElement self)))
+getRules self = liftIO (fromJSString <$> (js_getRules (self)))
  
 foreign import javascript unsafe "$1[\"summary\"] = $2;"
-        js_setSummary :: JSRef HTMLTableElement -> JSString -> IO ()
+        js_setSummary :: HTMLTableElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableElement.summary Mozilla HTMLTableElement.summary documentation> 
 setSummary ::
            (MonadIO m, ToJSString val) => HTMLTableElement -> val -> m ()
 setSummary self val
-  = liftIO (js_setSummary (unHTMLTableElement self) (toJSString val))
+  = liftIO (js_setSummary (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"summary\"]" js_getSummary ::
-        JSRef HTMLTableElement -> IO JSString
+        HTMLTableElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableElement.summary Mozilla HTMLTableElement.summary documentation> 
 getSummary ::
            (MonadIO m, FromJSString result) => HTMLTableElement -> m result
-getSummary self
-  = liftIO
-      (fromJSString <$> (js_getSummary (unHTMLTableElement self)))
+getSummary self = liftIO (fromJSString <$> (js_getSummary (self)))
  
 foreign import javascript unsafe "$1[\"width\"] = $2;" js_setWidth
-        :: JSRef HTMLTableElement -> JSString -> IO ()
+        :: HTMLTableElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableElement.width Mozilla HTMLTableElement.width documentation> 
 setWidth ::
          (MonadIO m, ToJSString val) => HTMLTableElement -> val -> m ()
-setWidth self val
-  = liftIO (js_setWidth (unHTMLTableElement self) (toJSString val))
+setWidth self val = liftIO (js_setWidth (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"width\"]" js_getWidth ::
-        JSRef HTMLTableElement -> IO JSString
+        HTMLTableElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableElement.width Mozilla HTMLTableElement.width documentation> 
 getWidth ::
          (MonadIO m, FromJSString result) => HTMLTableElement -> m result
-getWidth self
-  = liftIO (fromJSString <$> (js_getWidth (unHTMLTableElement self)))
+getWidth self = liftIO (fromJSString <$> (js_getWidth (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLTableRowElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLTableRowElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLTableRowElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLTableRowElement.hs
@@ -11,7 +11,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -26,142 +26,120 @@
  
 foreign import javascript unsafe "$1[\"insertCell\"]($2)"
         js_insertCell ::
-        JSRef HTMLTableRowElement -> Int -> IO (JSRef HTMLElement)
+        HTMLTableRowElement -> Int -> IO (Nullable HTMLElement)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableRowElement.insertCell Mozilla HTMLTableRowElement.insertCell documentation> 
 insertCell ::
            (MonadIO m) => HTMLTableRowElement -> Int -> m (Maybe HTMLElement)
 insertCell self index
-  = liftIO
-      ((js_insertCell (unHTMLTableRowElement self) index) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_insertCell (self) index))
  
 foreign import javascript unsafe "$1[\"deleteCell\"]($2)"
-        js_deleteCell :: JSRef HTMLTableRowElement -> Int -> IO ()
+        js_deleteCell :: HTMLTableRowElement -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableRowElement.deleteCell Mozilla HTMLTableRowElement.deleteCell documentation> 
 deleteCell :: (MonadIO m) => HTMLTableRowElement -> Int -> m ()
-deleteCell self index
-  = liftIO (js_deleteCell (unHTMLTableRowElement self) index)
+deleteCell self index = liftIO (js_deleteCell (self) index)
  
 foreign import javascript unsafe "$1[\"rowIndex\"]" js_getRowIndex
-        :: JSRef HTMLTableRowElement -> IO Int
+        :: HTMLTableRowElement -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableRowElement.rowIndex Mozilla HTMLTableRowElement.rowIndex documentation> 
 getRowIndex :: (MonadIO m) => HTMLTableRowElement -> m Int
-getRowIndex self
-  = liftIO (js_getRowIndex (unHTMLTableRowElement self))
+getRowIndex self = liftIO (js_getRowIndex (self))
  
 foreign import javascript unsafe "$1[\"sectionRowIndex\"]"
-        js_getSectionRowIndex :: JSRef HTMLTableRowElement -> IO Int
+        js_getSectionRowIndex :: HTMLTableRowElement -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableRowElement.sectionRowIndex Mozilla HTMLTableRowElement.sectionRowIndex documentation> 
 getSectionRowIndex :: (MonadIO m) => HTMLTableRowElement -> m Int
-getSectionRowIndex self
-  = liftIO (js_getSectionRowIndex (unHTMLTableRowElement self))
+getSectionRowIndex self = liftIO (js_getSectionRowIndex (self))
  
 foreign import javascript unsafe "$1[\"cells\"]" js_getCells ::
-        JSRef HTMLTableRowElement -> IO (JSRef HTMLCollection)
+        HTMLTableRowElement -> IO (Nullable HTMLCollection)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableRowElement.cells Mozilla HTMLTableRowElement.cells documentation> 
 getCells ::
          (MonadIO m) => HTMLTableRowElement -> m (Maybe HTMLCollection)
-getCells self
-  = liftIO ((js_getCells (unHTMLTableRowElement self)) >>= fromJSRef)
+getCells self = liftIO (nullableToMaybe <$> (js_getCells (self)))
  
 foreign import javascript unsafe "$1[\"align\"] = $2;" js_setAlign
-        :: JSRef HTMLTableRowElement -> JSString -> IO ()
+        :: HTMLTableRowElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableRowElement.align Mozilla HTMLTableRowElement.align documentation> 
 setAlign ::
          (MonadIO m, ToJSString val) => HTMLTableRowElement -> val -> m ()
-setAlign self val
-  = liftIO
-      (js_setAlign (unHTMLTableRowElement self) (toJSString val))
+setAlign self val = liftIO (js_setAlign (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"align\"]" js_getAlign ::
-        JSRef HTMLTableRowElement -> IO JSString
+        HTMLTableRowElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableRowElement.align Mozilla HTMLTableRowElement.align documentation> 
 getAlign ::
          (MonadIO m, FromJSString result) => HTMLTableRowElement -> m result
-getAlign self
-  = liftIO
-      (fromJSString <$> (js_getAlign (unHTMLTableRowElement self)))
+getAlign self = liftIO (fromJSString <$> (js_getAlign (self)))
  
 foreign import javascript unsafe "$1[\"bgColor\"] = $2;"
-        js_setBgColor :: JSRef HTMLTableRowElement -> JSString -> IO ()
+        js_setBgColor :: HTMLTableRowElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableRowElement.bgColor Mozilla HTMLTableRowElement.bgColor documentation> 
 setBgColor ::
            (MonadIO m, ToJSString val) => HTMLTableRowElement -> val -> m ()
 setBgColor self val
-  = liftIO
-      (js_setBgColor (unHTMLTableRowElement self) (toJSString val))
+  = liftIO (js_setBgColor (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"bgColor\"]" js_getBgColor ::
-        JSRef HTMLTableRowElement -> IO JSString
+        HTMLTableRowElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableRowElement.bgColor Mozilla HTMLTableRowElement.bgColor documentation> 
 getBgColor ::
            (MonadIO m, FromJSString result) => HTMLTableRowElement -> m result
-getBgColor self
-  = liftIO
-      (fromJSString <$> (js_getBgColor (unHTMLTableRowElement self)))
+getBgColor self = liftIO (fromJSString <$> (js_getBgColor (self)))
  
 foreign import javascript unsafe "$1[\"ch\"] = $2;" js_setCh ::
-        JSRef HTMLTableRowElement -> JSString -> IO ()
+        HTMLTableRowElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableRowElement.ch Mozilla HTMLTableRowElement.ch documentation> 
 setCh ::
       (MonadIO m, ToJSString val) => HTMLTableRowElement -> val -> m ()
-setCh self val
-  = liftIO (js_setCh (unHTMLTableRowElement self) (toJSString val))
+setCh self val = liftIO (js_setCh (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"ch\"]" js_getCh ::
-        JSRef HTMLTableRowElement -> IO JSString
+        HTMLTableRowElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableRowElement.ch Mozilla HTMLTableRowElement.ch documentation> 
 getCh ::
       (MonadIO m, FromJSString result) => HTMLTableRowElement -> m result
-getCh self
-  = liftIO (fromJSString <$> (js_getCh (unHTMLTableRowElement self)))
+getCh self = liftIO (fromJSString <$> (js_getCh (self)))
  
 foreign import javascript unsafe "$1[\"chOff\"] = $2;" js_setChOff
-        :: JSRef HTMLTableRowElement -> JSString -> IO ()
+        :: HTMLTableRowElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableRowElement.chOff Mozilla HTMLTableRowElement.chOff documentation> 
 setChOff ::
          (MonadIO m, ToJSString val) => HTMLTableRowElement -> val -> m ()
-setChOff self val
-  = liftIO
-      (js_setChOff (unHTMLTableRowElement self) (toJSString val))
+setChOff self val = liftIO (js_setChOff (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"chOff\"]" js_getChOff ::
-        JSRef HTMLTableRowElement -> IO JSString
+        HTMLTableRowElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableRowElement.chOff Mozilla HTMLTableRowElement.chOff documentation> 
 getChOff ::
          (MonadIO m, FromJSString result) => HTMLTableRowElement -> m result
-getChOff self
-  = liftIO
-      (fromJSString <$> (js_getChOff (unHTMLTableRowElement self)))
+getChOff self = liftIO (fromJSString <$> (js_getChOff (self)))
  
 foreign import javascript unsafe "$1[\"vAlign\"] = $2;"
-        js_setVAlign :: JSRef HTMLTableRowElement -> JSString -> IO ()
+        js_setVAlign :: HTMLTableRowElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableRowElement.vAlign Mozilla HTMLTableRowElement.vAlign documentation> 
 setVAlign ::
           (MonadIO m, ToJSString val) => HTMLTableRowElement -> val -> m ()
-setVAlign self val
-  = liftIO
-      (js_setVAlign (unHTMLTableRowElement self) (toJSString val))
+setVAlign self val = liftIO (js_setVAlign (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"vAlign\"]" js_getVAlign ::
-        JSRef HTMLTableRowElement -> IO JSString
+        HTMLTableRowElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableRowElement.vAlign Mozilla HTMLTableRowElement.vAlign documentation> 
 getVAlign ::
           (MonadIO m, FromJSString result) => HTMLTableRowElement -> m result
-getVAlign self
-  = liftIO
-      (fromJSString <$> (js_getVAlign (unHTMLTableRowElement self)))
+getVAlign self = liftIO (fromJSString <$> (js_getVAlign (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLTableSectionElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLTableSectionElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLTableSectionElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLTableSectionElement.hs
@@ -9,7 +9,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -24,119 +24,98 @@
  
 foreign import javascript unsafe "$1[\"insertRow\"]($2)"
         js_insertRow ::
-        JSRef HTMLTableSectionElement -> Int -> IO (JSRef HTMLElement)
+        HTMLTableSectionElement -> Int -> IO (Nullable HTMLElement)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableSectionElement.insertRow Mozilla HTMLTableSectionElement.insertRow documentation> 
 insertRow ::
           (MonadIO m) =>
             HTMLTableSectionElement -> Int -> m (Maybe HTMLElement)
 insertRow self index
-  = liftIO
-      ((js_insertRow (unHTMLTableSectionElement self) index) >>=
-         fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_insertRow (self) index))
  
 foreign import javascript unsafe "$1[\"deleteRow\"]($2)"
-        js_deleteRow :: JSRef HTMLTableSectionElement -> Int -> IO ()
+        js_deleteRow :: HTMLTableSectionElement -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableSectionElement.deleteRow Mozilla HTMLTableSectionElement.deleteRow documentation> 
 deleteRow :: (MonadIO m) => HTMLTableSectionElement -> Int -> m ()
-deleteRow self index
-  = liftIO (js_deleteRow (unHTMLTableSectionElement self) index)
+deleteRow self index = liftIO (js_deleteRow (self) index)
  
 foreign import javascript unsafe "$1[\"align\"] = $2;" js_setAlign
-        :: JSRef HTMLTableSectionElement -> JSString -> IO ()
+        :: HTMLTableSectionElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableSectionElement.align Mozilla HTMLTableSectionElement.align documentation> 
 setAlign ::
          (MonadIO m, ToJSString val) =>
            HTMLTableSectionElement -> val -> m ()
-setAlign self val
-  = liftIO
-      (js_setAlign (unHTMLTableSectionElement self) (toJSString val))
+setAlign self val = liftIO (js_setAlign (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"align\"]" js_getAlign ::
-        JSRef HTMLTableSectionElement -> IO JSString
+        HTMLTableSectionElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableSectionElement.align Mozilla HTMLTableSectionElement.align documentation> 
 getAlign ::
          (MonadIO m, FromJSString result) =>
            HTMLTableSectionElement -> m result
-getAlign self
-  = liftIO
-      (fromJSString <$> (js_getAlign (unHTMLTableSectionElement self)))
+getAlign self = liftIO (fromJSString <$> (js_getAlign (self)))
  
 foreign import javascript unsafe "$1[\"ch\"] = $2;" js_setCh ::
-        JSRef HTMLTableSectionElement -> JSString -> IO ()
+        HTMLTableSectionElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableSectionElement.ch Mozilla HTMLTableSectionElement.ch documentation> 
 setCh ::
       (MonadIO m, ToJSString val) =>
         HTMLTableSectionElement -> val -> m ()
-setCh self val
-  = liftIO
-      (js_setCh (unHTMLTableSectionElement self) (toJSString val))
+setCh self val = liftIO (js_setCh (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"ch\"]" js_getCh ::
-        JSRef HTMLTableSectionElement -> IO JSString
+        HTMLTableSectionElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableSectionElement.ch Mozilla HTMLTableSectionElement.ch documentation> 
 getCh ::
       (MonadIO m, FromJSString result) =>
         HTMLTableSectionElement -> m result
-getCh self
-  = liftIO
-      (fromJSString <$> (js_getCh (unHTMLTableSectionElement self)))
+getCh self = liftIO (fromJSString <$> (js_getCh (self)))
  
 foreign import javascript unsafe "$1[\"chOff\"] = $2;" js_setChOff
-        :: JSRef HTMLTableSectionElement -> JSString -> IO ()
+        :: HTMLTableSectionElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableSectionElement.chOff Mozilla HTMLTableSectionElement.chOff documentation> 
 setChOff ::
          (MonadIO m, ToJSString val) =>
            HTMLTableSectionElement -> val -> m ()
-setChOff self val
-  = liftIO
-      (js_setChOff (unHTMLTableSectionElement self) (toJSString val))
+setChOff self val = liftIO (js_setChOff (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"chOff\"]" js_getChOff ::
-        JSRef HTMLTableSectionElement -> IO JSString
+        HTMLTableSectionElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableSectionElement.chOff Mozilla HTMLTableSectionElement.chOff documentation> 
 getChOff ::
          (MonadIO m, FromJSString result) =>
            HTMLTableSectionElement -> m result
-getChOff self
-  = liftIO
-      (fromJSString <$> (js_getChOff (unHTMLTableSectionElement self)))
+getChOff self = liftIO (fromJSString <$> (js_getChOff (self)))
  
 foreign import javascript unsafe "$1[\"vAlign\"] = $2;"
-        js_setVAlign :: JSRef HTMLTableSectionElement -> JSString -> IO ()
+        js_setVAlign :: HTMLTableSectionElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableSectionElement.vAlign Mozilla HTMLTableSectionElement.vAlign documentation> 
 setVAlign ::
           (MonadIO m, ToJSString val) =>
             HTMLTableSectionElement -> val -> m ()
-setVAlign self val
-  = liftIO
-      (js_setVAlign (unHTMLTableSectionElement self) (toJSString val))
+setVAlign self val = liftIO (js_setVAlign (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"vAlign\"]" js_getVAlign ::
-        JSRef HTMLTableSectionElement -> IO JSString
+        HTMLTableSectionElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableSectionElement.vAlign Mozilla HTMLTableSectionElement.vAlign documentation> 
 getVAlign ::
           (MonadIO m, FromJSString result) =>
             HTMLTableSectionElement -> m result
-getVAlign self
-  = liftIO
-      (fromJSString <$> (js_getVAlign (unHTMLTableSectionElement self)))
+getVAlign self = liftIO (fromJSString <$> (js_getVAlign (self)))
  
 foreign import javascript unsafe "$1[\"rows\"]" js_getRows ::
-        JSRef HTMLTableSectionElement -> IO (JSRef HTMLCollection)
+        HTMLTableSectionElement -> IO (Nullable HTMLCollection)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableSectionElement.rows Mozilla HTMLTableSectionElement.rows documentation> 
 getRows ::
         (MonadIO m) => HTMLTableSectionElement -> m (Maybe HTMLCollection)
-getRows self
-  = liftIO
-      ((js_getRows (unHTMLTableSectionElement self)) >>= fromJSRef)
+getRows self = liftIO (nullableToMaybe <$> (js_getRows (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLTemplateElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLTemplateElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLTemplateElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLTemplateElement.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,11 +19,10 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"content\"]" js_getContent ::
-        JSRef HTMLTemplateElement -> IO (JSRef DocumentFragment)
+        HTMLTemplateElement -> IO (Nullable DocumentFragment)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTemplateElement.content Mozilla HTMLTemplateElement.content documentation> 
 getContent ::
            (MonadIO m) => HTMLTemplateElement -> m (Maybe DocumentFragment)
 getContent self
-  = liftIO
-      ((js_getContent (unHTMLTemplateElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getContent (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLTextAreaElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLTextAreaElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLTextAreaElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLTextAreaElement.hs
@@ -31,7 +31,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -46,48 +46,43 @@
  
 foreign import javascript unsafe
         "($1[\"checkValidity\"]() ? 1 : 0)" js_checkValidity ::
-        JSRef HTMLTextAreaElement -> IO Bool
+        HTMLTextAreaElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElement.checkValidity Mozilla HTMLTextAreaElement.checkValidity documentation> 
 checkValidity :: (MonadIO m) => HTMLTextAreaElement -> m Bool
-checkValidity self
-  = liftIO (js_checkValidity (unHTMLTextAreaElement self))
+checkValidity self = liftIO (js_checkValidity (self))
  
 foreign import javascript unsafe "$1[\"setCustomValidity\"]($2)"
         js_setCustomValidity ::
-        JSRef HTMLTextAreaElement -> JSRef (Maybe JSString) -> IO ()
+        HTMLTextAreaElement -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElement.setCustomValidity Mozilla HTMLTextAreaElement.setCustomValidity documentation> 
 setCustomValidity ::
                   (MonadIO m, ToJSString error) =>
                     HTMLTextAreaElement -> Maybe error -> m ()
 setCustomValidity self error
-  = liftIO
-      (js_setCustomValidity (unHTMLTextAreaElement self)
-         (toMaybeJSString error))
+  = liftIO (js_setCustomValidity (self) (toMaybeJSString error))
  
 foreign import javascript unsafe "$1[\"select\"]()" js_select ::
-        JSRef HTMLTextAreaElement -> IO ()
+        HTMLTextAreaElement -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElement.select Mozilla HTMLTextAreaElement.select documentation> 
 select :: (MonadIO m) => HTMLTextAreaElement -> m ()
-select self = liftIO (js_select (unHTMLTextAreaElement self))
+select self = liftIO (js_select (self))
  
 foreign import javascript unsafe "$1[\"setRangeText\"]($2)"
-        js_setRangeText :: JSRef HTMLTextAreaElement -> JSString -> IO ()
+        js_setRangeText :: HTMLTextAreaElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElement.setRangeText Mozilla HTMLTextAreaElement.setRangeText documentation> 
 setRangeText ::
              (MonadIO m, ToJSString replacement) =>
                HTMLTextAreaElement -> replacement -> m ()
 setRangeText self replacement
-  = liftIO
-      (js_setRangeText (unHTMLTextAreaElement self)
-         (toJSString replacement))
+  = liftIO (js_setRangeText (self) (toJSString replacement))
  
 foreign import javascript unsafe
         "$1[\"setRangeText\"]($2, $3, $4,\n$5)" js_setRangeText4 ::
-        JSRef HTMLTextAreaElement ->
+        HTMLTextAreaElement ->
           JSString -> Word -> Word -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElement.setRangeText Mozilla HTMLTextAreaElement.setRangeText documentation> 
@@ -97,15 +92,12 @@
                   replacement -> Word -> Word -> selectionMode -> m ()
 setRangeText4 self replacement start end selectionMode
   = liftIO
-      (js_setRangeText4 (unHTMLTextAreaElement self)
-         (toJSString replacement)
-         start
-         end
+      (js_setRangeText4 (self) (toJSString replacement) start end
          (toJSString selectionMode))
  
 foreign import javascript unsafe
         "$1[\"setSelectionRange\"]($2, $3,\n$4)" js_setSelectionRange ::
-        JSRef HTMLTextAreaElement -> Int -> Int -> JSString -> IO ()
+        HTMLTextAreaElement -> Int -> Int -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElement.setSelectionRange Mozilla HTMLTextAreaElement.setSelectionRange documentation> 
 setSelectionRange ::
@@ -113,408 +105,352 @@
                     HTMLTextAreaElement -> Int -> Int -> direction -> m ()
 setSelectionRange self start end direction
   = liftIO
-      (js_setSelectionRange (unHTMLTextAreaElement self) start end
-         (toJSString direction))
+      (js_setSelectionRange (self) start end (toJSString direction))
  
 foreign import javascript unsafe "$1[\"autofocus\"] = $2;"
-        js_setAutofocus :: JSRef HTMLTextAreaElement -> Bool -> IO ()
+        js_setAutofocus :: HTMLTextAreaElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElement.autofocus Mozilla HTMLTextAreaElement.autofocus documentation> 
 setAutofocus :: (MonadIO m) => HTMLTextAreaElement -> Bool -> m ()
-setAutofocus self val
-  = liftIO (js_setAutofocus (unHTMLTextAreaElement self) val)
+setAutofocus self val = liftIO (js_setAutofocus (self) val)
  
 foreign import javascript unsafe "($1[\"autofocus\"] ? 1 : 0)"
-        js_getAutofocus :: JSRef HTMLTextAreaElement -> IO Bool
+        js_getAutofocus :: HTMLTextAreaElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElement.autofocus Mozilla HTMLTextAreaElement.autofocus documentation> 
 getAutofocus :: (MonadIO m) => HTMLTextAreaElement -> m Bool
-getAutofocus self
-  = liftIO (js_getAutofocus (unHTMLTextAreaElement self))
+getAutofocus self = liftIO (js_getAutofocus (self))
  
 foreign import javascript unsafe "$1[\"cols\"] = $2;" js_setCols ::
-        JSRef HTMLTextAreaElement -> Int -> IO ()
+        HTMLTextAreaElement -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElement.cols Mozilla HTMLTextAreaElement.cols documentation> 
 setCols :: (MonadIO m) => HTMLTextAreaElement -> Int -> m ()
-setCols self val
-  = liftIO (js_setCols (unHTMLTextAreaElement self) val)
+setCols self val = liftIO (js_setCols (self) val)
  
 foreign import javascript unsafe "$1[\"cols\"]" js_getCols ::
-        JSRef HTMLTextAreaElement -> IO Int
+        HTMLTextAreaElement -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElement.cols Mozilla HTMLTextAreaElement.cols documentation> 
 getCols :: (MonadIO m) => HTMLTextAreaElement -> m Int
-getCols self = liftIO (js_getCols (unHTMLTextAreaElement self))
+getCols self = liftIO (js_getCols (self))
  
 foreign import javascript unsafe "$1[\"dirName\"] = $2;"
-        js_setDirName :: JSRef HTMLTextAreaElement -> JSString -> IO ()
+        js_setDirName :: HTMLTextAreaElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElement.dirName Mozilla HTMLTextAreaElement.dirName documentation> 
 setDirName ::
            (MonadIO m, ToJSString val) => HTMLTextAreaElement -> val -> m ()
 setDirName self val
-  = liftIO
-      (js_setDirName (unHTMLTextAreaElement self) (toJSString val))
+  = liftIO (js_setDirName (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"dirName\"]" js_getDirName ::
-        JSRef HTMLTextAreaElement -> IO JSString
+        HTMLTextAreaElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElement.dirName Mozilla HTMLTextAreaElement.dirName documentation> 
 getDirName ::
            (MonadIO m, FromJSString result) => HTMLTextAreaElement -> m result
-getDirName self
-  = liftIO
-      (fromJSString <$> (js_getDirName (unHTMLTextAreaElement self)))
+getDirName self = liftIO (fromJSString <$> (js_getDirName (self)))
  
 foreign import javascript unsafe "$1[\"disabled\"] = $2;"
-        js_setDisabled :: JSRef HTMLTextAreaElement -> Bool -> IO ()
+        js_setDisabled :: HTMLTextAreaElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElement.disabled Mozilla HTMLTextAreaElement.disabled documentation> 
 setDisabled :: (MonadIO m) => HTMLTextAreaElement -> Bool -> m ()
-setDisabled self val
-  = liftIO (js_setDisabled (unHTMLTextAreaElement self) val)
+setDisabled self val = liftIO (js_setDisabled (self) val)
  
 foreign import javascript unsafe "($1[\"disabled\"] ? 1 : 0)"
-        js_getDisabled :: JSRef HTMLTextAreaElement -> IO Bool
+        js_getDisabled :: HTMLTextAreaElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElement.disabled Mozilla HTMLTextAreaElement.disabled documentation> 
 getDisabled :: (MonadIO m) => HTMLTextAreaElement -> m Bool
-getDisabled self
-  = liftIO (js_getDisabled (unHTMLTextAreaElement self))
+getDisabled self = liftIO (js_getDisabled (self))
  
 foreign import javascript unsafe "$1[\"form\"]" js_getForm ::
-        JSRef HTMLTextAreaElement -> IO (JSRef HTMLFormElement)
+        HTMLTextAreaElement -> IO (Nullable HTMLFormElement)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElement.form Mozilla HTMLTextAreaElement.form documentation> 
 getForm ::
         (MonadIO m) => HTMLTextAreaElement -> m (Maybe HTMLFormElement)
-getForm self
-  = liftIO ((js_getForm (unHTMLTextAreaElement self)) >>= fromJSRef)
+getForm self = liftIO (nullableToMaybe <$> (js_getForm (self)))
  
 foreign import javascript unsafe "$1[\"maxLength\"] = $2;"
-        js_setMaxLength :: JSRef HTMLTextAreaElement -> Int -> IO ()
+        js_setMaxLength :: HTMLTextAreaElement -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElement.maxLength Mozilla HTMLTextAreaElement.maxLength documentation> 
 setMaxLength :: (MonadIO m) => HTMLTextAreaElement -> Int -> m ()
-setMaxLength self val
-  = liftIO (js_setMaxLength (unHTMLTextAreaElement self) val)
+setMaxLength self val = liftIO (js_setMaxLength (self) val)
  
 foreign import javascript unsafe "$1[\"maxLength\"]"
-        js_getMaxLength :: JSRef HTMLTextAreaElement -> IO Int
+        js_getMaxLength :: HTMLTextAreaElement -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElement.maxLength Mozilla HTMLTextAreaElement.maxLength documentation> 
 getMaxLength :: (MonadIO m) => HTMLTextAreaElement -> m Int
-getMaxLength self
-  = liftIO (js_getMaxLength (unHTMLTextAreaElement self))
+getMaxLength self = liftIO (js_getMaxLength (self))
  
 foreign import javascript unsafe "$1[\"name\"] = $2;" js_setName ::
-        JSRef HTMLTextAreaElement -> JSString -> IO ()
+        HTMLTextAreaElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElement.name Mozilla HTMLTextAreaElement.name documentation> 
 setName ::
         (MonadIO m, ToJSString val) => HTMLTextAreaElement -> val -> m ()
-setName self val
-  = liftIO (js_setName (unHTMLTextAreaElement self) (toJSString val))
+setName self val = liftIO (js_setName (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"name\"]" js_getName ::
-        JSRef HTMLTextAreaElement -> IO JSString
+        HTMLTextAreaElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElement.name Mozilla HTMLTextAreaElement.name documentation> 
 getName ::
         (MonadIO m, FromJSString result) => HTMLTextAreaElement -> m result
-getName self
-  = liftIO
-      (fromJSString <$> (js_getName (unHTMLTextAreaElement self)))
+getName self = liftIO (fromJSString <$> (js_getName (self)))
  
 foreign import javascript unsafe "$1[\"placeholder\"] = $2;"
-        js_setPlaceholder :: JSRef HTMLTextAreaElement -> JSString -> IO ()
+        js_setPlaceholder :: HTMLTextAreaElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElement.placeholder Mozilla HTMLTextAreaElement.placeholder documentation> 
 setPlaceholder ::
                (MonadIO m, ToJSString val) => HTMLTextAreaElement -> val -> m ()
 setPlaceholder self val
-  = liftIO
-      (js_setPlaceholder (unHTMLTextAreaElement self) (toJSString val))
+  = liftIO (js_setPlaceholder (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"placeholder\"]"
-        js_getPlaceholder :: JSRef HTMLTextAreaElement -> IO JSString
+        js_getPlaceholder :: HTMLTextAreaElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElement.placeholder Mozilla HTMLTextAreaElement.placeholder documentation> 
 getPlaceholder ::
                (MonadIO m, FromJSString result) => HTMLTextAreaElement -> m result
 getPlaceholder self
-  = liftIO
-      (fromJSString <$> (js_getPlaceholder (unHTMLTextAreaElement self)))
+  = liftIO (fromJSString <$> (js_getPlaceholder (self)))
  
 foreign import javascript unsafe "$1[\"readOnly\"] = $2;"
-        js_setReadOnly :: JSRef HTMLTextAreaElement -> Bool -> IO ()
+        js_setReadOnly :: HTMLTextAreaElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElement.readOnly Mozilla HTMLTextAreaElement.readOnly documentation> 
 setReadOnly :: (MonadIO m) => HTMLTextAreaElement -> Bool -> m ()
-setReadOnly self val
-  = liftIO (js_setReadOnly (unHTMLTextAreaElement self) val)
+setReadOnly self val = liftIO (js_setReadOnly (self) val)
  
 foreign import javascript unsafe "($1[\"readOnly\"] ? 1 : 0)"
-        js_getReadOnly :: JSRef HTMLTextAreaElement -> IO Bool
+        js_getReadOnly :: HTMLTextAreaElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElement.readOnly Mozilla HTMLTextAreaElement.readOnly documentation> 
 getReadOnly :: (MonadIO m) => HTMLTextAreaElement -> m Bool
-getReadOnly self
-  = liftIO (js_getReadOnly (unHTMLTextAreaElement self))
+getReadOnly self = liftIO (js_getReadOnly (self))
  
 foreign import javascript unsafe "$1[\"required\"] = $2;"
-        js_setRequired :: JSRef HTMLTextAreaElement -> Bool -> IO ()
+        js_setRequired :: HTMLTextAreaElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElement.required Mozilla HTMLTextAreaElement.required documentation> 
 setRequired :: (MonadIO m) => HTMLTextAreaElement -> Bool -> m ()
-setRequired self val
-  = liftIO (js_setRequired (unHTMLTextAreaElement self) val)
+setRequired self val = liftIO (js_setRequired (self) val)
  
 foreign import javascript unsafe "($1[\"required\"] ? 1 : 0)"
-        js_getRequired :: JSRef HTMLTextAreaElement -> IO Bool
+        js_getRequired :: HTMLTextAreaElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElement.required Mozilla HTMLTextAreaElement.required documentation> 
 getRequired :: (MonadIO m) => HTMLTextAreaElement -> m Bool
-getRequired self
-  = liftIO (js_getRequired (unHTMLTextAreaElement self))
+getRequired self = liftIO (js_getRequired (self))
  
 foreign import javascript unsafe "$1[\"rows\"] = $2;" js_setRows ::
-        JSRef HTMLTextAreaElement -> Int -> IO ()
+        HTMLTextAreaElement -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElement.rows Mozilla HTMLTextAreaElement.rows documentation> 
 setRows :: (MonadIO m) => HTMLTextAreaElement -> Int -> m ()
-setRows self val
-  = liftIO (js_setRows (unHTMLTextAreaElement self) val)
+setRows self val = liftIO (js_setRows (self) val)
  
 foreign import javascript unsafe "$1[\"rows\"]" js_getRows ::
-        JSRef HTMLTextAreaElement -> IO Int
+        HTMLTextAreaElement -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElement.rows Mozilla HTMLTextAreaElement.rows documentation> 
 getRows :: (MonadIO m) => HTMLTextAreaElement -> m Int
-getRows self = liftIO (js_getRows (unHTMLTextAreaElement self))
+getRows self = liftIO (js_getRows (self))
  
 foreign import javascript unsafe "$1[\"wrap\"] = $2;" js_setWrap ::
-        JSRef HTMLTextAreaElement -> JSString -> IO ()
+        HTMLTextAreaElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElement.wrap Mozilla HTMLTextAreaElement.wrap documentation> 
 setWrap ::
         (MonadIO m, ToJSString val) => HTMLTextAreaElement -> val -> m ()
-setWrap self val
-  = liftIO (js_setWrap (unHTMLTextAreaElement self) (toJSString val))
+setWrap self val = liftIO (js_setWrap (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"wrap\"]" js_getWrap ::
-        JSRef HTMLTextAreaElement -> IO JSString
+        HTMLTextAreaElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElement.wrap Mozilla HTMLTextAreaElement.wrap documentation> 
 getWrap ::
         (MonadIO m, FromJSString result) => HTMLTextAreaElement -> m result
-getWrap self
-  = liftIO
-      (fromJSString <$> (js_getWrap (unHTMLTextAreaElement self)))
+getWrap self = liftIO (fromJSString <$> (js_getWrap (self)))
  
 foreign import javascript unsafe "$1[\"type\"]" js_getType ::
-        JSRef HTMLTextAreaElement -> IO JSString
+        HTMLTextAreaElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElement.type Mozilla HTMLTextAreaElement.type documentation> 
 getType ::
         (MonadIO m, FromJSString result) => HTMLTextAreaElement -> m result
-getType self
-  = liftIO
-      (fromJSString <$> (js_getType (unHTMLTextAreaElement self)))
+getType self = liftIO (fromJSString <$> (js_getType (self)))
  
 foreign import javascript unsafe "$1[\"defaultValue\"] = $2;"
         js_setDefaultValue ::
-        JSRef HTMLTextAreaElement -> JSRef (Maybe JSString) -> IO ()
+        HTMLTextAreaElement -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElement.defaultValue Mozilla HTMLTextAreaElement.defaultValue documentation> 
 setDefaultValue ::
                 (MonadIO m, ToJSString val) =>
                   HTMLTextAreaElement -> Maybe val -> m ()
 setDefaultValue self val
-  = liftIO
-      (js_setDefaultValue (unHTMLTextAreaElement self)
-         (toMaybeJSString val))
+  = liftIO (js_setDefaultValue (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"defaultValue\"]"
-        js_getDefaultValue ::
-        JSRef HTMLTextAreaElement -> IO (JSRef (Maybe JSString))
+        js_getDefaultValue :: HTMLTextAreaElement -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElement.defaultValue Mozilla HTMLTextAreaElement.defaultValue documentation> 
 getDefaultValue ::
                 (MonadIO m, FromJSString result) =>
                   HTMLTextAreaElement -> m (Maybe result)
 getDefaultValue self
-  = liftIO
-      (fromMaybeJSString <$>
-         (js_getDefaultValue (unHTMLTextAreaElement self)))
+  = liftIO (fromMaybeJSString <$> (js_getDefaultValue (self)))
  
 foreign import javascript unsafe "$1[\"value\"] = $2;" js_setValue
-        :: JSRef HTMLTextAreaElement -> JSRef (Maybe JSString) -> IO ()
+        :: HTMLTextAreaElement -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElement.value Mozilla HTMLTextAreaElement.value documentation> 
 setValue ::
          (MonadIO m, ToJSString val) =>
            HTMLTextAreaElement -> Maybe val -> m ()
 setValue self val
-  = liftIO
-      (js_setValue (unHTMLTextAreaElement self) (toMaybeJSString val))
+  = liftIO (js_setValue (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"value\"]" js_getValue ::
-        JSRef HTMLTextAreaElement -> IO (JSRef (Maybe JSString))
+        HTMLTextAreaElement -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElement.value Mozilla HTMLTextAreaElement.value documentation> 
 getValue ::
          (MonadIO m, FromJSString result) =>
            HTMLTextAreaElement -> m (Maybe result)
-getValue self
-  = liftIO
-      (fromMaybeJSString <$> (js_getValue (unHTMLTextAreaElement self)))
+getValue self = liftIO (fromMaybeJSString <$> (js_getValue (self)))
  
 foreign import javascript unsafe "$1[\"textLength\"]"
-        js_getTextLength :: JSRef HTMLTextAreaElement -> IO Word
+        js_getTextLength :: HTMLTextAreaElement -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElement.textLength Mozilla HTMLTextAreaElement.textLength documentation> 
 getTextLength :: (MonadIO m) => HTMLTextAreaElement -> m Word
-getTextLength self
-  = liftIO (js_getTextLength (unHTMLTextAreaElement self))
+getTextLength self = liftIO (js_getTextLength (self))
  
 foreign import javascript unsafe "($1[\"willValidate\"] ? 1 : 0)"
-        js_getWillValidate :: JSRef HTMLTextAreaElement -> IO Bool
+        js_getWillValidate :: HTMLTextAreaElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElement.willValidate Mozilla HTMLTextAreaElement.willValidate documentation> 
 getWillValidate :: (MonadIO m) => HTMLTextAreaElement -> m Bool
-getWillValidate self
-  = liftIO (js_getWillValidate (unHTMLTextAreaElement self))
+getWillValidate self = liftIO (js_getWillValidate (self))
  
 foreign import javascript unsafe "$1[\"validity\"]" js_getValidity
-        :: JSRef HTMLTextAreaElement -> IO (JSRef ValidityState)
+        :: HTMLTextAreaElement -> IO (Nullable ValidityState)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElement.validity Mozilla HTMLTextAreaElement.validity documentation> 
 getValidity ::
             (MonadIO m) => HTMLTextAreaElement -> m (Maybe ValidityState)
 getValidity self
-  = liftIO
-      ((js_getValidity (unHTMLTextAreaElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getValidity (self)))
  
 foreign import javascript unsafe "$1[\"validationMessage\"]"
-        js_getValidationMessage :: JSRef HTMLTextAreaElement -> IO JSString
+        js_getValidationMessage :: HTMLTextAreaElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElement.validationMessage Mozilla HTMLTextAreaElement.validationMessage documentation> 
 getValidationMessage ::
                      (MonadIO m, FromJSString result) => HTMLTextAreaElement -> m result
 getValidationMessage self
-  = liftIO
-      (fromJSString <$>
-         (js_getValidationMessage (unHTMLTextAreaElement self)))
+  = liftIO (fromJSString <$> (js_getValidationMessage (self)))
  
 foreign import javascript unsafe "$1[\"labels\"]" js_getLabels ::
-        JSRef HTMLTextAreaElement -> IO (JSRef NodeList)
+        HTMLTextAreaElement -> IO (Nullable NodeList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElement.labels Mozilla HTMLTextAreaElement.labels documentation> 
 getLabels ::
           (MonadIO m) => HTMLTextAreaElement -> m (Maybe NodeList)
-getLabels self
-  = liftIO
-      ((js_getLabels (unHTMLTextAreaElement self)) >>= fromJSRef)
+getLabels self = liftIO (nullableToMaybe <$> (js_getLabels (self)))
  
 foreign import javascript unsafe "$1[\"selectionStart\"] = $2;"
-        js_setSelectionStart :: JSRef HTMLTextAreaElement -> Int -> IO ()
+        js_setSelectionStart :: HTMLTextAreaElement -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElement.selectionStart Mozilla HTMLTextAreaElement.selectionStart documentation> 
 setSelectionStart ::
                   (MonadIO m) => HTMLTextAreaElement -> Int -> m ()
 setSelectionStart self val
-  = liftIO (js_setSelectionStart (unHTMLTextAreaElement self) val)
+  = liftIO (js_setSelectionStart (self) val)
  
 foreign import javascript unsafe "$1[\"selectionStart\"]"
-        js_getSelectionStart :: JSRef HTMLTextAreaElement -> IO Int
+        js_getSelectionStart :: HTMLTextAreaElement -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElement.selectionStart Mozilla HTMLTextAreaElement.selectionStart documentation> 
 getSelectionStart :: (MonadIO m) => HTMLTextAreaElement -> m Int
-getSelectionStart self
-  = liftIO (js_getSelectionStart (unHTMLTextAreaElement self))
+getSelectionStart self = liftIO (js_getSelectionStart (self))
  
 foreign import javascript unsafe "$1[\"selectionEnd\"] = $2;"
-        js_setSelectionEnd :: JSRef HTMLTextAreaElement -> Int -> IO ()
+        js_setSelectionEnd :: HTMLTextAreaElement -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElement.selectionEnd Mozilla HTMLTextAreaElement.selectionEnd documentation> 
 setSelectionEnd ::
                 (MonadIO m) => HTMLTextAreaElement -> Int -> m ()
-setSelectionEnd self val
-  = liftIO (js_setSelectionEnd (unHTMLTextAreaElement self) val)
+setSelectionEnd self val = liftIO (js_setSelectionEnd (self) val)
  
 foreign import javascript unsafe "$1[\"selectionEnd\"]"
-        js_getSelectionEnd :: JSRef HTMLTextAreaElement -> IO Int
+        js_getSelectionEnd :: HTMLTextAreaElement -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElement.selectionEnd Mozilla HTMLTextAreaElement.selectionEnd documentation> 
 getSelectionEnd :: (MonadIO m) => HTMLTextAreaElement -> m Int
-getSelectionEnd self
-  = liftIO (js_getSelectionEnd (unHTMLTextAreaElement self))
+getSelectionEnd self = liftIO (js_getSelectionEnd (self))
  
 foreign import javascript unsafe "$1[\"selectionDirection\"] = $2;"
         js_setSelectionDirection ::
-        JSRef HTMLTextAreaElement -> JSString -> IO ()
+        HTMLTextAreaElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElement.selectionDirection Mozilla HTMLTextAreaElement.selectionDirection documentation> 
 setSelectionDirection ::
                       (MonadIO m, ToJSString val) => HTMLTextAreaElement -> val -> m ()
 setSelectionDirection self val
-  = liftIO
-      (js_setSelectionDirection (unHTMLTextAreaElement self)
-         (toJSString val))
+  = liftIO (js_setSelectionDirection (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"selectionDirection\"]"
-        js_getSelectionDirection ::
-        JSRef HTMLTextAreaElement -> IO JSString
+        js_getSelectionDirection :: HTMLTextAreaElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElement.selectionDirection Mozilla HTMLTextAreaElement.selectionDirection documentation> 
 getSelectionDirection ::
                       (MonadIO m, FromJSString result) => HTMLTextAreaElement -> m result
 getSelectionDirection self
-  = liftIO
-      (fromJSString <$>
-         (js_getSelectionDirection (unHTMLTextAreaElement self)))
+  = liftIO (fromJSString <$> (js_getSelectionDirection (self)))
  
 foreign import javascript unsafe "$1[\"autocorrect\"] = $2;"
-        js_setAutocorrect :: JSRef HTMLTextAreaElement -> Bool -> IO ()
+        js_setAutocorrect :: HTMLTextAreaElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElement.autocorrect Mozilla HTMLTextAreaElement.autocorrect documentation> 
 setAutocorrect ::
                (MonadIO m) => HTMLTextAreaElement -> Bool -> m ()
-setAutocorrect self val
-  = liftIO (js_setAutocorrect (unHTMLTextAreaElement self) val)
+setAutocorrect self val = liftIO (js_setAutocorrect (self) val)
  
 foreign import javascript unsafe "($1[\"autocorrect\"] ? 1 : 0)"
-        js_getAutocorrect :: JSRef HTMLTextAreaElement -> IO Bool
+        js_getAutocorrect :: HTMLTextAreaElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElement.autocorrect Mozilla HTMLTextAreaElement.autocorrect documentation> 
 getAutocorrect :: (MonadIO m) => HTMLTextAreaElement -> m Bool
-getAutocorrect self
-  = liftIO (js_getAutocorrect (unHTMLTextAreaElement self))
+getAutocorrect self = liftIO (js_getAutocorrect (self))
  
 foreign import javascript unsafe "$1[\"autocapitalize\"] = $2;"
         js_setAutocapitalize ::
-        JSRef HTMLTextAreaElement -> JSRef (Maybe JSString) -> IO ()
+        HTMLTextAreaElement -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElement.autocapitalize Mozilla HTMLTextAreaElement.autocapitalize documentation> 
 setAutocapitalize ::
                   (MonadIO m, ToJSString val) =>
                     HTMLTextAreaElement -> Maybe val -> m ()
 setAutocapitalize self val
-  = liftIO
-      (js_setAutocapitalize (unHTMLTextAreaElement self)
-         (toMaybeJSString val))
+  = liftIO (js_setAutocapitalize (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"autocapitalize\"]"
         js_getAutocapitalize ::
-        JSRef HTMLTextAreaElement -> IO (JSRef (Maybe JSString))
+        HTMLTextAreaElement -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElement.autocapitalize Mozilla HTMLTextAreaElement.autocapitalize documentation> 
 getAutocapitalize ::
                   (MonadIO m, FromJSString result) =>
                     HTMLTextAreaElement -> m (Maybe result)
 getAutocapitalize self
-  = liftIO
-      (fromMaybeJSString <$>
-         (js_getAutocapitalize (unHTMLTextAreaElement self)))
+  = liftIO (fromMaybeJSString <$> (js_getAutocapitalize (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLTitleElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLTitleElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLTitleElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLTitleElement.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,23 +19,19 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"text\"] = $2;" js_setText ::
-        JSRef HTMLTitleElement -> JSRef (Maybe JSString) -> IO ()
+        HTMLTitleElement -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTitleElement.text Mozilla HTMLTitleElement.text documentation> 
 setText ::
         (MonadIO m, ToJSString val) =>
           HTMLTitleElement -> Maybe val -> m ()
-setText self val
-  = liftIO
-      (js_setText (unHTMLTitleElement self) (toMaybeJSString val))
+setText self val = liftIO (js_setText (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"text\"]" js_getText ::
-        JSRef HTMLTitleElement -> IO (JSRef (Maybe JSString))
+        HTMLTitleElement -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTitleElement.text Mozilla HTMLTitleElement.text documentation> 
 getText ::
         (MonadIO m, FromJSString result) =>
           HTMLTitleElement -> m (Maybe result)
-getText self
-  = liftIO
-      (fromMaybeJSString <$> (js_getText (unHTMLTitleElement self)))
+getText self = liftIO (fromMaybeJSString <$> (js_getText (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLTrackElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLTrackElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLTrackElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLTrackElement.hs
@@ -10,7 +10,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -28,105 +28,94 @@
 pattern ERROR = 3
  
 foreign import javascript unsafe "$1[\"kind\"] = $2;" js_setKind ::
-        JSRef HTMLTrackElement -> JSString -> IO ()
+        HTMLTrackElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTrackElement.kind Mozilla HTMLTrackElement.kind documentation> 
 setKind ::
         (MonadIO m, ToJSString val) => HTMLTrackElement -> val -> m ()
-setKind self val
-  = liftIO (js_setKind (unHTMLTrackElement self) (toJSString val))
+setKind self val = liftIO (js_setKind (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"kind\"]" js_getKind ::
-        JSRef HTMLTrackElement -> IO JSString
+        HTMLTrackElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTrackElement.kind Mozilla HTMLTrackElement.kind documentation> 
 getKind ::
         (MonadIO m, FromJSString result) => HTMLTrackElement -> m result
-getKind self
-  = liftIO (fromJSString <$> (js_getKind (unHTMLTrackElement self)))
+getKind self = liftIO (fromJSString <$> (js_getKind (self)))
  
 foreign import javascript unsafe "$1[\"src\"] = $2;" js_setSrc ::
-        JSRef HTMLTrackElement -> JSString -> IO ()
+        HTMLTrackElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTrackElement.src Mozilla HTMLTrackElement.src documentation> 
 setSrc ::
        (MonadIO m, ToJSString val) => HTMLTrackElement -> val -> m ()
-setSrc self val
-  = liftIO (js_setSrc (unHTMLTrackElement self) (toJSString val))
+setSrc self val = liftIO (js_setSrc (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"src\"]" js_getSrc ::
-        JSRef HTMLTrackElement -> IO JSString
+        HTMLTrackElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTrackElement.src Mozilla HTMLTrackElement.src documentation> 
 getSrc ::
        (MonadIO m, FromJSString result) => HTMLTrackElement -> m result
-getSrc self
-  = liftIO (fromJSString <$> (js_getSrc (unHTMLTrackElement self)))
+getSrc self = liftIO (fromJSString <$> (js_getSrc (self)))
  
 foreign import javascript unsafe "$1[\"srclang\"] = $2;"
-        js_setSrclang :: JSRef HTMLTrackElement -> JSString -> IO ()
+        js_setSrclang :: HTMLTrackElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTrackElement.srclang Mozilla HTMLTrackElement.srclang documentation> 
 setSrclang ::
            (MonadIO m, ToJSString val) => HTMLTrackElement -> val -> m ()
 setSrclang self val
-  = liftIO (js_setSrclang (unHTMLTrackElement self) (toJSString val))
+  = liftIO (js_setSrclang (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"srclang\"]" js_getSrclang ::
-        JSRef HTMLTrackElement -> IO JSString
+        HTMLTrackElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTrackElement.srclang Mozilla HTMLTrackElement.srclang documentation> 
 getSrclang ::
            (MonadIO m, FromJSString result) => HTMLTrackElement -> m result
-getSrclang self
-  = liftIO
-      (fromJSString <$> (js_getSrclang (unHTMLTrackElement self)))
+getSrclang self = liftIO (fromJSString <$> (js_getSrclang (self)))
  
 foreign import javascript unsafe "$1[\"label\"] = $2;" js_setLabel
-        :: JSRef HTMLTrackElement -> JSString -> IO ()
+        :: HTMLTrackElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTrackElement.label Mozilla HTMLTrackElement.label documentation> 
 setLabel ::
          (MonadIO m, ToJSString val) => HTMLTrackElement -> val -> m ()
-setLabel self val
-  = liftIO (js_setLabel (unHTMLTrackElement self) (toJSString val))
+setLabel self val = liftIO (js_setLabel (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"label\"]" js_getLabel ::
-        JSRef HTMLTrackElement -> IO JSString
+        HTMLTrackElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTrackElement.label Mozilla HTMLTrackElement.label documentation> 
 getLabel ::
          (MonadIO m, FromJSString result) => HTMLTrackElement -> m result
-getLabel self
-  = liftIO (fromJSString <$> (js_getLabel (unHTMLTrackElement self)))
+getLabel self = liftIO (fromJSString <$> (js_getLabel (self)))
  
 foreign import javascript unsafe "$1[\"default\"] = $2;"
-        js_setDefault :: JSRef HTMLTrackElement -> Bool -> IO ()
+        js_setDefault :: HTMLTrackElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTrackElement.default Mozilla HTMLTrackElement.default documentation> 
 setDefault :: (MonadIO m) => HTMLTrackElement -> Bool -> m ()
-setDefault self val
-  = liftIO (js_setDefault (unHTMLTrackElement self) val)
+setDefault self val = liftIO (js_setDefault (self) val)
  
 foreign import javascript unsafe "($1[\"default\"] ? 1 : 0)"
-        js_getDefault :: JSRef HTMLTrackElement -> IO Bool
+        js_getDefault :: HTMLTrackElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTrackElement.default Mozilla HTMLTrackElement.default documentation> 
 getDefault :: (MonadIO m) => HTMLTrackElement -> m Bool
-getDefault self = liftIO (js_getDefault (unHTMLTrackElement self))
+getDefault self = liftIO (js_getDefault (self))
  
 foreign import javascript unsafe "$1[\"readyState\"]"
-        js_getReadyState :: JSRef HTMLTrackElement -> IO Word
+        js_getReadyState :: HTMLTrackElement -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTrackElement.readyState Mozilla HTMLTrackElement.readyState documentation> 
 getReadyState :: (MonadIO m) => HTMLTrackElement -> m Word
-getReadyState self
-  = liftIO (js_getReadyState (unHTMLTrackElement self))
+getReadyState self = liftIO (js_getReadyState (self))
  
 foreign import javascript unsafe "$1[\"track\"]" js_getTrack ::
-        JSRef HTMLTrackElement -> IO (JSRef TextTrack)
+        HTMLTrackElement -> IO (Nullable TextTrack)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTrackElement.track Mozilla HTMLTrackElement.track documentation> 
 getTrack :: (MonadIO m) => HTMLTrackElement -> m (Maybe TextTrack)
-getTrack self
-  = liftIO ((js_getTrack (unHTMLTrackElement self)) >>= fromJSRef)
+getTrack self = liftIO (nullableToMaybe <$> (js_getTrack (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLUListElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLUListElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLUListElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLUListElement.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,34 +20,31 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"compact\"] = $2;"
-        js_setCompact :: JSRef HTMLUListElement -> Bool -> IO ()
+        js_setCompact :: HTMLUListElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLUListElement.compact Mozilla HTMLUListElement.compact documentation> 
 setCompact :: (MonadIO m) => HTMLUListElement -> Bool -> m ()
-setCompact self val
-  = liftIO (js_setCompact (unHTMLUListElement self) val)
+setCompact self val = liftIO (js_setCompact (self) val)
  
 foreign import javascript unsafe "($1[\"compact\"] ? 1 : 0)"
-        js_getCompact :: JSRef HTMLUListElement -> IO Bool
+        js_getCompact :: HTMLUListElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLUListElement.compact Mozilla HTMLUListElement.compact documentation> 
 getCompact :: (MonadIO m) => HTMLUListElement -> m Bool
-getCompact self = liftIO (js_getCompact (unHTMLUListElement self))
+getCompact self = liftIO (js_getCompact (self))
  
 foreign import javascript unsafe "$1[\"type\"] = $2;" js_setType ::
-        JSRef HTMLUListElement -> JSString -> IO ()
+        HTMLUListElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLUListElement.type Mozilla HTMLUListElement.type documentation> 
 setType ::
         (MonadIO m, ToJSString val) => HTMLUListElement -> val -> m ()
-setType self val
-  = liftIO (js_setType (unHTMLUListElement self) (toJSString val))
+setType self val = liftIO (js_setType (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"type\"]" js_getType ::
-        JSRef HTMLUListElement -> IO JSString
+        HTMLUListElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLUListElement.type Mozilla HTMLUListElement.type documentation> 
 getType ::
         (MonadIO m, FromJSString result) => HTMLUListElement -> m result
-getType self
-  = liftIO (fromJSString <$> (js_getType (unHTMLUListElement self)))
+getType self = liftIO (fromJSString <$> (js_getType (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HTMLVideoElement.hs b/src/GHCJS/DOM/JSFFI/Generated/HTMLVideoElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HTMLVideoElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HTMLVideoElement.hs
@@ -24,7 +24,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -38,206 +38,183 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"webkitEnterFullscreen\"]()"
-        js_webkitEnterFullscreen :: JSRef HTMLVideoElement -> IO ()
+        js_webkitEnterFullscreen :: HTMLVideoElement -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement.webkitEnterFullscreen Mozilla HTMLVideoElement.webkitEnterFullscreen documentation> 
 webkitEnterFullscreen :: (MonadIO m) => HTMLVideoElement -> m ()
 webkitEnterFullscreen self
-  = liftIO (js_webkitEnterFullscreen (unHTMLVideoElement self))
+  = liftIO (js_webkitEnterFullscreen (self))
  
 foreign import javascript unsafe "$1[\"webkitExitFullscreen\"]()"
-        js_webkitExitFullscreen :: JSRef HTMLVideoElement -> IO ()
+        js_webkitExitFullscreen :: HTMLVideoElement -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement.webkitExitFullscreen Mozilla HTMLVideoElement.webkitExitFullscreen documentation> 
 webkitExitFullscreen :: (MonadIO m) => HTMLVideoElement -> m ()
-webkitExitFullscreen self
-  = liftIO (js_webkitExitFullscreen (unHTMLVideoElement self))
+webkitExitFullscreen self = liftIO (js_webkitExitFullscreen (self))
  
 foreign import javascript unsafe "$1[\"webkitEnterFullScreen\"]()"
-        js_webkitEnterFullScreen :: JSRef HTMLVideoElement -> IO ()
+        js_webkitEnterFullScreen :: HTMLVideoElement -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement.webkitEnterFullScreen Mozilla HTMLVideoElement.webkitEnterFullScreen documentation> 
 webkitEnterFullScreen :: (MonadIO m) => HTMLVideoElement -> m ()
 webkitEnterFullScreen self
-  = liftIO (js_webkitEnterFullScreen (unHTMLVideoElement self))
+  = liftIO (js_webkitEnterFullScreen (self))
  
 foreign import javascript unsafe "$1[\"webkitExitFullScreen\"]()"
-        js_webkitExitFullScreen :: JSRef HTMLVideoElement -> IO ()
+        js_webkitExitFullScreen :: HTMLVideoElement -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement.webkitExitFullScreen Mozilla HTMLVideoElement.webkitExitFullScreen documentation> 
 webkitExitFullScreen :: (MonadIO m) => HTMLVideoElement -> m ()
-webkitExitFullScreen self
-  = liftIO (js_webkitExitFullScreen (unHTMLVideoElement self))
+webkitExitFullScreen self = liftIO (js_webkitExitFullScreen (self))
  
 foreign import javascript unsafe
         "($1[\"webkitSupportsPresentationMode\"]($2) ? 1 : 0)"
         js_webkitSupportsPresentationMode ::
-        JSRef HTMLVideoElement -> JSRef VideoPresentationMode -> IO Bool
+        HTMLVideoElement -> JSRef -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement.webkitSupportsPresentationMode Mozilla HTMLVideoElement.webkitSupportsPresentationMode documentation> 
 webkitSupportsPresentationMode ::
                                (MonadIO m) => HTMLVideoElement -> VideoPresentationMode -> m Bool
 webkitSupportsPresentationMode self mode
-  = liftIO
-      (js_webkitSupportsPresentationMode (unHTMLVideoElement self)
-         (pToJSRef mode))
+  = liftIO (js_webkitSupportsPresentationMode (self) (pToJSRef mode))
  
 foreign import javascript unsafe
         "$1[\"webkitSetPresentationMode\"]($2)"
-        js_webkitSetPresentationMode ::
-        JSRef HTMLVideoElement -> JSRef VideoPresentationMode -> IO ()
+        js_webkitSetPresentationMode :: HTMLVideoElement -> JSRef -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement.webkitSetPresentationMode Mozilla HTMLVideoElement.webkitSetPresentationMode documentation> 
 webkitSetPresentationMode ::
                           (MonadIO m) => HTMLVideoElement -> VideoPresentationMode -> m ()
 webkitSetPresentationMode self mode
-  = liftIO
-      (js_webkitSetPresentationMode (unHTMLVideoElement self)
-         (pToJSRef mode))
+  = liftIO (js_webkitSetPresentationMode (self) (pToJSRef mode))
  
 foreign import javascript unsafe "$1[\"width\"] = $2;" js_setWidth
-        :: JSRef HTMLVideoElement -> Word -> IO ()
+        :: HTMLVideoElement -> Word -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement.width Mozilla HTMLVideoElement.width documentation> 
 setWidth :: (MonadIO m) => HTMLVideoElement -> Word -> m ()
-setWidth self val
-  = liftIO (js_setWidth (unHTMLVideoElement self) val)
+setWidth self val = liftIO (js_setWidth (self) val)
  
 foreign import javascript unsafe "$1[\"width\"]" js_getWidth ::
-        JSRef HTMLVideoElement -> IO Word
+        HTMLVideoElement -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement.width Mozilla HTMLVideoElement.width documentation> 
 getWidth :: (MonadIO m) => HTMLVideoElement -> m Word
-getWidth self = liftIO (js_getWidth (unHTMLVideoElement self))
+getWidth self = liftIO (js_getWidth (self))
  
 foreign import javascript unsafe "$1[\"height\"] = $2;"
-        js_setHeight :: JSRef HTMLVideoElement -> Word -> IO ()
+        js_setHeight :: HTMLVideoElement -> Word -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement.height Mozilla HTMLVideoElement.height documentation> 
 setHeight :: (MonadIO m) => HTMLVideoElement -> Word -> m ()
-setHeight self val
-  = liftIO (js_setHeight (unHTMLVideoElement self) val)
+setHeight self val = liftIO (js_setHeight (self) val)
  
 foreign import javascript unsafe "$1[\"height\"]" js_getHeight ::
-        JSRef HTMLVideoElement -> IO Word
+        HTMLVideoElement -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement.height Mozilla HTMLVideoElement.height documentation> 
 getHeight :: (MonadIO m) => HTMLVideoElement -> m Word
-getHeight self = liftIO (js_getHeight (unHTMLVideoElement self))
+getHeight self = liftIO (js_getHeight (self))
  
 foreign import javascript unsafe "$1[\"videoWidth\"]"
-        js_getVideoWidth :: JSRef HTMLVideoElement -> IO Word
+        js_getVideoWidth :: HTMLVideoElement -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement.videoWidth Mozilla HTMLVideoElement.videoWidth documentation> 
 getVideoWidth :: (MonadIO m) => HTMLVideoElement -> m Word
-getVideoWidth self
-  = liftIO (js_getVideoWidth (unHTMLVideoElement self))
+getVideoWidth self = liftIO (js_getVideoWidth (self))
  
 foreign import javascript unsafe "$1[\"videoHeight\"]"
-        js_getVideoHeight :: JSRef HTMLVideoElement -> IO Word
+        js_getVideoHeight :: HTMLVideoElement -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement.videoHeight Mozilla HTMLVideoElement.videoHeight documentation> 
 getVideoHeight :: (MonadIO m) => HTMLVideoElement -> m Word
-getVideoHeight self
-  = liftIO (js_getVideoHeight (unHTMLVideoElement self))
+getVideoHeight self = liftIO (js_getVideoHeight (self))
  
 foreign import javascript unsafe "$1[\"poster\"] = $2;"
-        js_setPoster :: JSRef HTMLVideoElement -> JSString -> IO ()
+        js_setPoster :: HTMLVideoElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement.poster Mozilla HTMLVideoElement.poster documentation> 
 setPoster ::
           (MonadIO m, ToJSString val) => HTMLVideoElement -> val -> m ()
-setPoster self val
-  = liftIO (js_setPoster (unHTMLVideoElement self) (toJSString val))
+setPoster self val = liftIO (js_setPoster (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"poster\"]" js_getPoster ::
-        JSRef HTMLVideoElement -> IO JSString
+        HTMLVideoElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement.poster Mozilla HTMLVideoElement.poster documentation> 
 getPoster ::
           (MonadIO m, FromJSString result) => HTMLVideoElement -> m result
-getPoster self
-  = liftIO
-      (fromJSString <$> (js_getPoster (unHTMLVideoElement self)))
+getPoster self = liftIO (fromJSString <$> (js_getPoster (self)))
  
 foreign import javascript unsafe
         "($1[\"webkitSupportsFullscreen\"] ? 1 : 0)"
-        js_getWebkitSupportsFullscreen :: JSRef HTMLVideoElement -> IO Bool
+        js_getWebkitSupportsFullscreen :: HTMLVideoElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement.webkitSupportsFullscreen Mozilla HTMLVideoElement.webkitSupportsFullscreen documentation> 
 getWebkitSupportsFullscreen ::
                             (MonadIO m) => HTMLVideoElement -> m Bool
 getWebkitSupportsFullscreen self
-  = liftIO (js_getWebkitSupportsFullscreen (unHTMLVideoElement self))
+  = liftIO (js_getWebkitSupportsFullscreen (self))
  
 foreign import javascript unsafe
         "($1[\"webkitDisplayingFullscreen\"] ? 1 : 0)"
-        js_getWebkitDisplayingFullscreen ::
-        JSRef HTMLVideoElement -> IO Bool
+        js_getWebkitDisplayingFullscreen :: HTMLVideoElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement.webkitDisplayingFullscreen Mozilla HTMLVideoElement.webkitDisplayingFullscreen documentation> 
 getWebkitDisplayingFullscreen ::
                               (MonadIO m) => HTMLVideoElement -> m Bool
 getWebkitDisplayingFullscreen self
-  = liftIO
-      (js_getWebkitDisplayingFullscreen (unHTMLVideoElement self))
+  = liftIO (js_getWebkitDisplayingFullscreen (self))
  
 foreign import javascript unsafe
         "$1[\"webkitWirelessVideoPlaybackDisabled\"] = $2;"
         js_setWebkitWirelessVideoPlaybackDisabled ::
-        JSRef HTMLVideoElement -> Bool -> IO ()
+        HTMLVideoElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement.webkitWirelessVideoPlaybackDisabled Mozilla HTMLVideoElement.webkitWirelessVideoPlaybackDisabled documentation> 
 setWebkitWirelessVideoPlaybackDisabled ::
                                        (MonadIO m) => HTMLVideoElement -> Bool -> m ()
 setWebkitWirelessVideoPlaybackDisabled self val
-  = liftIO
-      (js_setWebkitWirelessVideoPlaybackDisabled
-         (unHTMLVideoElement self)
-         val)
+  = liftIO (js_setWebkitWirelessVideoPlaybackDisabled (self) val)
  
 foreign import javascript unsafe
         "($1[\"webkitWirelessVideoPlaybackDisabled\"] ? 1 : 0)"
         js_getWebkitWirelessVideoPlaybackDisabled ::
-        JSRef HTMLVideoElement -> IO Bool
+        HTMLVideoElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement.webkitWirelessVideoPlaybackDisabled Mozilla HTMLVideoElement.webkitWirelessVideoPlaybackDisabled documentation> 
 getWebkitWirelessVideoPlaybackDisabled ::
                                        (MonadIO m) => HTMLVideoElement -> m Bool
 getWebkitWirelessVideoPlaybackDisabled self
-  = liftIO
-      (js_getWebkitWirelessVideoPlaybackDisabled
-         (unHTMLVideoElement self))
+  = liftIO (js_getWebkitWirelessVideoPlaybackDisabled (self))
  
 foreign import javascript unsafe "$1[\"webkitDecodedFrameCount\"]"
-        js_getWebkitDecodedFrameCount :: JSRef HTMLVideoElement -> IO Word
+        js_getWebkitDecodedFrameCount :: HTMLVideoElement -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement.webkitDecodedFrameCount Mozilla HTMLVideoElement.webkitDecodedFrameCount documentation> 
 getWebkitDecodedFrameCount ::
                            (MonadIO m) => HTMLVideoElement -> m Word
 getWebkitDecodedFrameCount self
-  = liftIO (js_getWebkitDecodedFrameCount (unHTMLVideoElement self))
+  = liftIO (js_getWebkitDecodedFrameCount (self))
  
 foreign import javascript unsafe "$1[\"webkitDroppedFrameCount\"]"
-        js_getWebkitDroppedFrameCount :: JSRef HTMLVideoElement -> IO Word
+        js_getWebkitDroppedFrameCount :: HTMLVideoElement -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement.webkitDroppedFrameCount Mozilla HTMLVideoElement.webkitDroppedFrameCount documentation> 
 getWebkitDroppedFrameCount ::
                            (MonadIO m) => HTMLVideoElement -> m Word
 getWebkitDroppedFrameCount self
-  = liftIO (js_getWebkitDroppedFrameCount (unHTMLVideoElement self))
+  = liftIO (js_getWebkitDroppedFrameCount (self))
  
 foreign import javascript unsafe "$1[\"webkitPresentationMode\"]"
-        js_getWebkitPresentationMode ::
-        JSRef HTMLVideoElement -> IO (JSRef VideoPresentationMode)
+        js_getWebkitPresentationMode :: HTMLVideoElement -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement.webkitPresentationMode Mozilla HTMLVideoElement.webkitPresentationMode documentation> 
 getWebkitPresentationMode ::
                           (MonadIO m) => HTMLVideoElement -> m VideoPresentationMode
 getWebkitPresentationMode self
   = liftIO
-      ((js_getWebkitPresentationMode (unHTMLVideoElement self)) >>=
-         fromJSRefUnchecked)
+      ((js_getWebkitPresentationMode (self)) >>= fromJSRefUnchecked)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement.onwebkitpresentationmodechanged Mozilla HTMLVideoElement.onwebkitpresentationmodechanged documentation> 
 webKitPresentationModeChanged :: EventName HTMLVideoElement Event
diff --git a/src/GHCJS/DOM/JSFFI/Generated/HashChangeEvent.hs b/src/GHCJS/DOM/JSFFI/Generated/HashChangeEvent.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/HashChangeEvent.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/HashChangeEvent.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -22,7 +22,7 @@
 foreign import javascript unsafe
         "$1[\"initHashChangeEvent\"]($2,\n$3, $4, $5, $6)"
         js_initHashChangeEvent ::
-        JSRef HashChangeEvent ->
+        HashChangeEvent ->
           JSString -> Bool -> Bool -> JSString -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HashChangeEvent.initHashChangeEvent Mozilla HashChangeEvent.initHashChangeEvent documentation> 
@@ -33,26 +33,23 @@
                         type' -> Bool -> Bool -> oldURL -> newURL -> m ()
 initHashChangeEvent self type' canBubble cancelable oldURL newURL
   = liftIO
-      (js_initHashChangeEvent (unHashChangeEvent self) (toJSString type')
-         canBubble
+      (js_initHashChangeEvent (self) (toJSString type') canBubble
          cancelable
          (toJSString oldURL)
          (toJSString newURL))
  
 foreign import javascript unsafe "$1[\"oldURL\"]" js_getOldURL ::
-        JSRef HashChangeEvent -> IO JSString
+        HashChangeEvent -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HashChangeEvent.oldURL Mozilla HashChangeEvent.oldURL documentation> 
 getOldURL ::
           (MonadIO m, FromJSString result) => HashChangeEvent -> m result
-getOldURL self
-  = liftIO (fromJSString <$> (js_getOldURL (unHashChangeEvent self)))
+getOldURL self = liftIO (fromJSString <$> (js_getOldURL (self)))
  
 foreign import javascript unsafe "$1[\"newURL\"]" js_getNewURL ::
-        JSRef HashChangeEvent -> IO JSString
+        HashChangeEvent -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/HashChangeEvent.newURL Mozilla HashChangeEvent.newURL documentation> 
 getNewURL ::
           (MonadIO m, FromJSString result) => HashChangeEvent -> m result
-getNewURL self
-  = liftIO (fromJSString <$> (js_getNewURL (unHashChangeEvent self)))
+getNewURL self = liftIO (fromJSString <$> (js_getNewURL (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/History.hs b/src/GHCJS/DOM/JSFFI/Generated/History.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/History.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/History.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,64 +20,60 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"back\"]()" js_back ::
-        JSRef History -> IO ()
+        History -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/History.back Mozilla History.back documentation> 
 back :: (MonadIO m) => History -> m ()
-back self = liftIO (js_back (unHistory self))
+back self = liftIO (js_back (self))
  
 foreign import javascript unsafe "$1[\"forward\"]()" js_forward ::
-        JSRef History -> IO ()
+        History -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/History.forward Mozilla History.forward documentation> 
 forward :: (MonadIO m) => History -> m ()
-forward self = liftIO (js_forward (unHistory self))
+forward self = liftIO (js_forward (self))
  
 foreign import javascript unsafe "$1[\"go\"]($2)" js_go ::
-        JSRef History -> Int -> IO ()
+        History -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/History.go Mozilla History.go documentation> 
 go :: (MonadIO m) => History -> Int -> m ()
-go self distance = liftIO (js_go (unHistory self) distance)
+go self distance = liftIO (js_go (self) distance)
  
 foreign import javascript unsafe "$1[\"pushState\"]($2, $3, $4)"
-        js_pushState ::
-        JSRef History -> JSRef a -> JSString -> JSString -> IO ()
+        js_pushState :: History -> JSRef -> JSString -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/History.pushState Mozilla History.pushState documentation> 
 pushState ::
           (MonadIO m, ToJSString title, ToJSString url) =>
-            History -> JSRef a -> title -> url -> m ()
+            History -> JSRef -> title -> url -> m ()
 pushState self data' title url
   = liftIO
-      (js_pushState (unHistory self) data' (toJSString title)
-         (toJSString url))
+      (js_pushState (self) data' (toJSString title) (toJSString url))
  
 foreign import javascript unsafe "$1[\"replaceState\"]($2, $3, $4)"
         js_replaceState ::
-        JSRef History -> JSRef a -> JSString -> JSString -> IO ()
+        History -> JSRef -> JSString -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/History.replaceState Mozilla History.replaceState documentation> 
 replaceState ::
              (MonadIO m, ToJSString title, ToJSString url) =>
-               History -> JSRef a -> title -> url -> m ()
+               History -> JSRef -> title -> url -> m ()
 replaceState self data' title url
   = liftIO
-      (js_replaceState (unHistory self) data' (toJSString title)
-         (toJSString url))
+      (js_replaceState (self) data' (toJSString title) (toJSString url))
  
 foreign import javascript unsafe "$1[\"length\"]" js_getLength ::
-        JSRef History -> IO Word
+        History -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/History.length Mozilla History.length documentation> 
 getLength :: (MonadIO m) => History -> m Word
-getLength self = liftIO (js_getLength (unHistory self))
+getLength self = liftIO (js_getLength (self))
  
 foreign import javascript unsafe "$1[\"state\"]" js_getState ::
-        JSRef History -> IO (JSRef SerializedScriptValue)
+        History -> IO (Nullable SerializedScriptValue)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/History.state Mozilla History.state documentation> 
 getState ::
          (MonadIO m) => History -> m (Maybe SerializedScriptValue)
-getState self
-  = liftIO ((js_getState (unHistory self)) >>= fromJSRef)
+getState self = liftIO (nullableToMaybe <$> (js_getState (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/IDBCursor.hs b/src/GHCJS/DOM/JSFFI/Generated/IDBCursor.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/IDBCursor.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/IDBCursor.hs
@@ -8,7 +8,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -22,77 +22,67 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"update\"]($2)" js_update ::
-        JSRef IDBCursor -> JSRef a -> IO (JSRef IDBRequest)
+        IDBCursor -> JSRef -> IO (Nullable IDBRequest)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBCursor.update Mozilla IDBCursor.update documentation> 
 update ::
        (MonadIO m, IsIDBCursor self) =>
-         self -> JSRef a -> m (Maybe IDBRequest)
+         self -> JSRef -> m (Maybe IDBRequest)
 update self value
-  = liftIO
-      ((js_update (unIDBCursor (toIDBCursor self)) value) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_update (toIDBCursor self) value))
  
 foreign import javascript unsafe "$1[\"advance\"]($2)" js_advance
-        :: JSRef IDBCursor -> Word -> IO ()
+        :: IDBCursor -> Word -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBCursor.advance Mozilla IDBCursor.advance documentation> 
 advance :: (MonadIO m, IsIDBCursor self) => self -> Word -> m ()
-advance self count
-  = liftIO (js_advance (unIDBCursor (toIDBCursor self)) count)
+advance self count = liftIO (js_advance (toIDBCursor self) count)
  
 foreign import javascript unsafe "$1[\"continue\"]($2)" js_continue
-        :: JSRef IDBCursor -> JSRef a -> IO ()
+        :: IDBCursor -> JSRef -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBCursor.continue Mozilla IDBCursor.continue documentation> 
-continue ::
-         (MonadIO m, IsIDBCursor self) => self -> JSRef a -> m ()
-continue self key
-  = liftIO (js_continue (unIDBCursor (toIDBCursor self)) key)
+continue :: (MonadIO m, IsIDBCursor self) => self -> JSRef -> m ()
+continue self key = liftIO (js_continue (toIDBCursor self) key)
  
 foreign import javascript unsafe "$1[\"delete\"]()" js_delete ::
-        JSRef IDBCursor -> IO (JSRef IDBRequest)
+        IDBCursor -> IO (Nullable IDBRequest)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBCursor.delete Mozilla IDBCursor.delete documentation> 
 delete ::
        (MonadIO m, IsIDBCursor self) => self -> m (Maybe IDBRequest)
 delete self
-  = liftIO
-      ((js_delete (unIDBCursor (toIDBCursor self))) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_delete (toIDBCursor self)))
  
 foreign import javascript unsafe "$1[\"source\"]" js_getSource ::
-        JSRef IDBCursor -> IO (JSRef IDBAny)
+        IDBCursor -> IO (Nullable IDBAny)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBCursor.source Mozilla IDBCursor.source documentation> 
 getSource ::
           (MonadIO m, IsIDBCursor self) => self -> m (Maybe IDBAny)
 getSource self
-  = liftIO
-      ((js_getSource (unIDBCursor (toIDBCursor self))) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getSource (toIDBCursor self)))
  
 foreign import javascript unsafe "$1[\"direction\"]"
-        js_getDirection :: JSRef IDBCursor -> IO JSString
+        js_getDirection :: IDBCursor -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBCursor.direction Mozilla IDBCursor.direction documentation> 
 getDirection ::
              (MonadIO m, IsIDBCursor self, FromJSString result) =>
                self -> m result
 getDirection self
-  = liftIO
-      (fromJSString <$>
-         (js_getDirection (unIDBCursor (toIDBCursor self))))
+  = liftIO (fromJSString <$> (js_getDirection (toIDBCursor self)))
  
 foreign import javascript unsafe "$1[\"key\"]" js_getKey ::
-        JSRef IDBCursor -> IO (JSRef a)
+        IDBCursor -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBCursor.key Mozilla IDBCursor.key documentation> 
-getKey :: (MonadIO m, IsIDBCursor self) => self -> m (JSRef a)
-getKey self = liftIO (js_getKey (unIDBCursor (toIDBCursor self)))
+getKey :: (MonadIO m, IsIDBCursor self) => self -> m JSRef
+getKey self = liftIO (js_getKey (toIDBCursor self))
  
 foreign import javascript unsafe "$1[\"primaryKey\"]"
-        js_getPrimaryKey :: JSRef IDBCursor -> IO (JSRef a)
+        js_getPrimaryKey :: IDBCursor -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBCursor.primaryKey Mozilla IDBCursor.primaryKey documentation> 
-getPrimaryKey ::
-              (MonadIO m, IsIDBCursor self) => self -> m (JSRef a)
-getPrimaryKey self
-  = liftIO (js_getPrimaryKey (unIDBCursor (toIDBCursor self)))
+getPrimaryKey :: (MonadIO m, IsIDBCursor self) => self -> m JSRef
+getPrimaryKey self = liftIO (js_getPrimaryKey (toIDBCursor self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/IDBCursorWithValue.hs b/src/GHCJS/DOM/JSFFI/Generated/IDBCursorWithValue.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/IDBCursorWithValue.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/IDBCursorWithValue.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,8 +19,8 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"value\"]" js_getValue ::
-        JSRef IDBCursorWithValue -> IO (JSRef a)
+        IDBCursorWithValue -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBCursorWithValue.value Mozilla IDBCursorWithValue.value documentation> 
-getValue :: (MonadIO m) => IDBCursorWithValue -> m (JSRef a)
-getValue self = liftIO (js_getValue (unIDBCursorWithValue self))
+getValue :: (MonadIO m) => IDBCursorWithValue -> m JSRef
+getValue self = liftIO (js_getValue (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/IDBDatabase.hs b/src/GHCJS/DOM/JSFFI/Generated/IDBDatabase.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/IDBDatabase.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/IDBDatabase.hs
@@ -9,7 +9,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -24,8 +24,8 @@
  
 foreign import javascript unsafe
         "$1[\"createObjectStore\"]($2, $3)" js_createObjectStore ::
-        JSRef IDBDatabase ->
-          JSString -> JSRef Dictionary -> IO (JSRef IDBObjectStore)
+        IDBDatabase ->
+          JSString -> Nullable Dictionary -> IO (Nullable IDBObjectStore)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBDatabase.createObjectStore Mozilla IDBDatabase.createObjectStore documentation> 
 createObjectStore ::
@@ -33,24 +33,22 @@
                     IDBDatabase -> name -> Maybe options -> m (Maybe IDBObjectStore)
 createObjectStore self name options
   = liftIO
-      ((js_createObjectStore (unIDBDatabase self) (toJSString name)
-          (maybe jsNull (unDictionary . toDictionary) options))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createObjectStore (self) (toJSString name)
+            (maybeToNullable (fmap toDictionary options))))
  
 foreign import javascript unsafe "$1[\"deleteObjectStore\"]($2)"
-        js_deleteObjectStore :: JSRef IDBDatabase -> JSString -> IO ()
+        js_deleteObjectStore :: IDBDatabase -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBDatabase.deleteObjectStore Mozilla IDBDatabase.deleteObjectStore documentation> 
 deleteObjectStore ::
                   (MonadIO m, ToJSString name) => IDBDatabase -> name -> m ()
 deleteObjectStore self name
-  = liftIO
-      (js_deleteObjectStore (unIDBDatabase self) (toJSString name))
+  = liftIO (js_deleteObjectStore (self) (toJSString name))
  
 foreign import javascript unsafe "$1[\"transaction\"]($2, $3)"
         js_transaction ::
-        JSRef IDBDatabase ->
-          JSString -> JSString -> IO (JSRef IDBTransaction)
+        IDBDatabase -> JSString -> JSString -> IO (Nullable IDBTransaction)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBDatabase.transaction Mozilla IDBDatabase.transaction documentation> 
 transaction ::
@@ -58,14 +56,12 @@
               IDBDatabase -> storeName -> mode -> m (Maybe IDBTransaction)
 transaction self storeName mode
   = liftIO
-      ((js_transaction (unIDBDatabase self) (toJSString storeName)
-          (toJSString mode))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_transaction (self) (toJSString storeName) (toJSString mode)))
  
 foreign import javascript unsafe "$1[\"transaction\"]($2, $3)"
         js_transaction' ::
-        JSRef IDBDatabase ->
-          JSRef [storeNames] -> JSString -> IO (JSRef IDBTransaction)
+        IDBDatabase -> JSRef -> JSString -> IO (Nullable IDBTransaction)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBDatabase.transaction Mozilla IDBDatabase.transaction documentation> 
 transaction' ::
@@ -73,45 +69,42 @@
                IDBDatabase -> [storeNames] -> mode -> m (Maybe IDBTransaction)
 transaction' self storeNames mode
   = liftIO
-      ((toJSRef storeNames >>=
-          \ storeNames' -> js_transaction' (unIDBDatabase self) storeNames'
-          (toJSString mode))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (toJSRef storeNames >>=
+            \ storeNames' -> js_transaction' (self) storeNames'
+            (toJSString mode)))
  
 foreign import javascript unsafe "$1[\"close\"]()" js_close ::
-        JSRef IDBDatabase -> IO ()
+        IDBDatabase -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBDatabase.close Mozilla IDBDatabase.close documentation> 
 close :: (MonadIO m) => IDBDatabase -> m ()
-close self = liftIO (js_close (unIDBDatabase self))
+close self = liftIO (js_close (self))
  
 foreign import javascript unsafe "$1[\"name\"]" js_getName ::
-        JSRef IDBDatabase -> IO JSString
+        IDBDatabase -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBDatabase.name Mozilla IDBDatabase.name documentation> 
 getName ::
         (MonadIO m, FromJSString result) => IDBDatabase -> m result
-getName self
-  = liftIO (fromJSString <$> (js_getName (unIDBDatabase self)))
+getName self = liftIO (fromJSString <$> (js_getName (self)))
  
 foreign import javascript unsafe "$1[\"version\"]" js_getVersion ::
-        JSRef IDBDatabase -> IO Double
+        IDBDatabase -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBDatabase.version Mozilla IDBDatabase.version documentation> 
 getVersion :: (MonadIO m) => IDBDatabase -> m Word64
-getVersion self
-  = liftIO (round <$> (js_getVersion (unIDBDatabase self)))
+getVersion self = liftIO (round <$> (js_getVersion (self)))
  
 foreign import javascript unsafe "$1[\"objectStoreNames\"]"
         js_getObjectStoreNames ::
-        JSRef IDBDatabase -> IO (JSRef DOMStringList)
+        IDBDatabase -> IO (Nullable DOMStringList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBDatabase.objectStoreNames Mozilla IDBDatabase.objectStoreNames documentation> 
 getObjectStoreNames ::
                     (MonadIO m) => IDBDatabase -> m (Maybe DOMStringList)
 getObjectStoreNames self
-  = liftIO
-      ((js_getObjectStoreNames (unIDBDatabase self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getObjectStoreNames (self)))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBDatabase.onabort Mozilla IDBDatabase.onabort documentation> 
 abort :: EventName IDBDatabase Event
diff --git a/src/GHCJS/DOM/JSFFI/Generated/IDBFactory.hs b/src/GHCJS/DOM/JSFFI/Generated/IDBFactory.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/IDBFactory.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/IDBFactory.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,8 +19,7 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"open\"]($2, $3)" js_open ::
-        JSRef IDBFactory ->
-          JSString -> Double -> IO (JSRef IDBOpenDBRequest)
+        IDBFactory -> JSString -> Double -> IO (Nullable IDBOpenDBRequest)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBFactory.open Mozilla IDBFactory.open documentation> 
 open ::
@@ -28,13 +27,12 @@
        IDBFactory -> name -> Word64 -> m (Maybe IDBOpenDBRequest)
 open self name version
   = liftIO
-      ((js_open (unIDBFactory self) (toJSString name)
-          (fromIntegral version))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_open (self) (toJSString name) (fromIntegral version)))
  
 foreign import javascript unsafe "$1[\"deleteDatabase\"]($2)"
         js_deleteDatabase ::
-        JSRef IDBFactory -> JSString -> IO (JSRef IDBOpenDBRequest)
+        IDBFactory -> JSString -> IO (Nullable IDBOpenDBRequest)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBFactory.deleteDatabase Mozilla IDBFactory.deleteDatabase documentation> 
 deleteDatabase ::
@@ -42,13 +40,11 @@
                  IDBFactory -> name -> m (Maybe IDBOpenDBRequest)
 deleteDatabase self name
   = liftIO
-      ((js_deleteDatabase (unIDBFactory self) (toJSString name)) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_deleteDatabase (self) (toJSString name)))
  
 foreign import javascript unsafe "$1[\"cmp\"]($2, $3)" js_cmp ::
-        JSRef IDBFactory -> JSRef a -> JSRef a -> IO Int
+        IDBFactory -> JSRef -> JSRef -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBFactory.cmp Mozilla IDBFactory.cmp documentation> 
-cmp :: (MonadIO m) => IDBFactory -> JSRef a -> JSRef a -> m Int
-cmp self first second
-  = liftIO (js_cmp (unIDBFactory self) first second)
+cmp :: (MonadIO m) => IDBFactory -> JSRef -> JSRef -> m Int
+cmp self first second = liftIO (js_cmp (self) first second)
diff --git a/src/GHCJS/DOM/JSFFI/Generated/IDBIndex.hs b/src/GHCJS/DOM/JSFFI/Generated/IDBIndex.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/IDBIndex.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/IDBIndex.hs
@@ -11,7 +11,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -26,8 +26,8 @@
  
 foreign import javascript unsafe "$1[\"openCursor\"]($2, $3)"
         js_openCursorRange ::
-        JSRef IDBIndex ->
-          JSRef IDBKeyRange -> JSString -> IO (JSRef IDBRequest)
+        IDBIndex ->
+          Nullable IDBKeyRange -> JSString -> IO (Nullable IDBRequest)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBIndex.openCursor Mozilla IDBIndex.openCursor documentation> 
 openCursorRange ::
@@ -35,28 +35,27 @@
                   IDBIndex -> Maybe IDBKeyRange -> direction -> m (Maybe IDBRequest)
 openCursorRange self range direction
   = liftIO
-      ((js_openCursorRange (unIDBIndex self)
-          (maybe jsNull pToJSRef range)
-          (toJSString direction))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_openCursorRange (self) (maybeToNullable range)
+            (toJSString direction)))
  
 foreign import javascript unsafe "$1[\"openCursor\"]($2, $3)"
         js_openCursor ::
-        JSRef IDBIndex -> JSRef a -> JSString -> IO (JSRef IDBRequest)
+        IDBIndex -> JSRef -> JSString -> IO (Nullable IDBRequest)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBIndex.openCursor Mozilla IDBIndex.openCursor documentation> 
 openCursor ::
            (MonadIO m, ToJSString direction) =>
-             IDBIndex -> JSRef a -> direction -> m (Maybe IDBRequest)
+             IDBIndex -> JSRef -> direction -> m (Maybe IDBRequest)
 openCursor self key direction
   = liftIO
-      ((js_openCursor (unIDBIndex self) key (toJSString direction)) >>=
-         fromJSRef)
+      (nullableToMaybe <$>
+         (js_openCursor (self) key (toJSString direction)))
  
 foreign import javascript unsafe "$1[\"openKeyCursor\"]($2, $3)"
         js_openKeyCursorRange ::
-        JSRef IDBIndex ->
-          JSRef IDBKeyRange -> JSString -> IO (JSRef IDBRequest)
+        IDBIndex ->
+          Nullable IDBKeyRange -> JSString -> IO (Nullable IDBRequest)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBIndex.openKeyCursor Mozilla IDBIndex.openKeyCursor documentation> 
 openKeyCursorRange ::
@@ -64,26 +63,25 @@
                      IDBIndex -> Maybe IDBKeyRange -> direction -> m (Maybe IDBRequest)
 openKeyCursorRange self range direction
   = liftIO
-      ((js_openKeyCursorRange (unIDBIndex self)
-          (maybe jsNull pToJSRef range)
-          (toJSString direction))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_openKeyCursorRange (self) (maybeToNullable range)
+            (toJSString direction)))
  
 foreign import javascript unsafe "$1[\"openKeyCursor\"]($2, $3)"
         js_openKeyCursor ::
-        JSRef IDBIndex -> JSRef a -> JSString -> IO (JSRef IDBRequest)
+        IDBIndex -> JSRef -> JSString -> IO (Nullable IDBRequest)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBIndex.openKeyCursor Mozilla IDBIndex.openKeyCursor documentation> 
 openKeyCursor ::
               (MonadIO m, ToJSString direction) =>
-                IDBIndex -> JSRef a -> direction -> m (Maybe IDBRequest)
+                IDBIndex -> JSRef -> direction -> m (Maybe IDBRequest)
 openKeyCursor self key direction
   = liftIO
-      ((js_openKeyCursor (unIDBIndex self) key (toJSString direction))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_openKeyCursor (self) key (toJSString direction)))
  
 foreign import javascript unsafe "$1[\"get\"]($2)" js_getRange ::
-        JSRef IDBIndex -> JSRef IDBKeyRange -> IO (JSRef IDBRequest)
+        IDBIndex -> Nullable IDBKeyRange -> IO (Nullable IDBRequest)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBIndex.get Mozilla IDBIndex.get documentation> 
 getRange ::
@@ -91,20 +89,18 @@
            IDBIndex -> Maybe IDBKeyRange -> m (Maybe IDBRequest)
 getRange self key
   = liftIO
-      ((js_getRange (unIDBIndex self) (maybe jsNull pToJSRef key)) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_getRange (self) (maybeToNullable key)))
  
 foreign import javascript unsafe "$1[\"get\"]($2)" js_get ::
-        JSRef IDBIndex -> JSRef a -> IO (JSRef IDBRequest)
+        IDBIndex -> JSRef -> IO (Nullable IDBRequest)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBIndex.get Mozilla IDBIndex.get documentation> 
-get :: (MonadIO m) => IDBIndex -> JSRef a -> m (Maybe IDBRequest)
-get self key
-  = liftIO ((js_get (unIDBIndex self) key) >>= fromJSRef)
+get :: (MonadIO m) => IDBIndex -> JSRef -> m (Maybe IDBRequest)
+get self key = liftIO (nullableToMaybe <$> (js_get (self) key))
  
 foreign import javascript unsafe "$1[\"getKey\"]($2)"
         js_getKeyRange ::
-        JSRef IDBIndex -> JSRef IDBKeyRange -> IO (JSRef IDBRequest)
+        IDBIndex -> Nullable IDBKeyRange -> IO (Nullable IDBRequest)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBIndex.getKey Mozilla IDBIndex.getKey documentation> 
 getKeyRange ::
@@ -112,20 +108,18 @@
               IDBIndex -> Maybe IDBKeyRange -> m (Maybe IDBRequest)
 getKeyRange self key
   = liftIO
-      ((js_getKeyRange (unIDBIndex self) (maybe jsNull pToJSRef key)) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_getKeyRange (self) (maybeToNullable key)))
  
 foreign import javascript unsafe "$1[\"getKey\"]($2)" js_getKey ::
-        JSRef IDBIndex -> JSRef a -> IO (JSRef IDBRequest)
+        IDBIndex -> JSRef -> IO (Nullable IDBRequest)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBIndex.getKey Mozilla IDBIndex.getKey documentation> 
-getKey ::
-       (MonadIO m) => IDBIndex -> JSRef a -> m (Maybe IDBRequest)
+getKey :: (MonadIO m) => IDBIndex -> JSRef -> m (Maybe IDBRequest)
 getKey self key
-  = liftIO ((js_getKey (unIDBIndex self) key) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getKey (self) key))
  
 foreign import javascript unsafe "$1[\"count\"]($2)" js_countRange
-        :: JSRef IDBIndex -> JSRef IDBKeyRange -> IO (JSRef IDBRequest)
+        :: IDBIndex -> Nullable IDBKeyRange -> IO (Nullable IDBRequest)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBIndex.count Mozilla IDBIndex.count documentation> 
 countRange ::
@@ -133,52 +127,50 @@
              IDBIndex -> Maybe IDBKeyRange -> m (Maybe IDBRequest)
 countRange self range
   = liftIO
-      ((js_countRange (unIDBIndex self) (maybe jsNull pToJSRef range))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_countRange (self) (maybeToNullable range)))
  
 foreign import javascript unsafe "$1[\"count\"]($2)" js_count ::
-        JSRef IDBIndex -> JSRef a -> IO (JSRef IDBRequest)
+        IDBIndex -> JSRef -> IO (Nullable IDBRequest)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBIndex.count Mozilla IDBIndex.count documentation> 
-count :: (MonadIO m) => IDBIndex -> JSRef a -> m (Maybe IDBRequest)
-count self key
-  = liftIO ((js_count (unIDBIndex self) key) >>= fromJSRef)
+count :: (MonadIO m) => IDBIndex -> JSRef -> m (Maybe IDBRequest)
+count self key = liftIO (nullableToMaybe <$> (js_count (self) key))
  
 foreign import javascript unsafe "$1[\"name\"]" js_getName ::
-        JSRef IDBIndex -> IO JSString
+        IDBIndex -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBIndex.name Mozilla IDBIndex.name documentation> 
 getName :: (MonadIO m, FromJSString result) => IDBIndex -> m result
-getName self
-  = liftIO (fromJSString <$> (js_getName (unIDBIndex self)))
+getName self = liftIO (fromJSString <$> (js_getName (self)))
  
 foreign import javascript unsafe "$1[\"objectStore\"]"
-        js_getObjectStore :: JSRef IDBIndex -> IO (JSRef IDBObjectStore)
+        js_getObjectStore :: IDBIndex -> IO (Nullable IDBObjectStore)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBIndex.objectStore Mozilla IDBIndex.objectStore documentation> 
 getObjectStore ::
                (MonadIO m) => IDBIndex -> m (Maybe IDBObjectStore)
 getObjectStore self
-  = liftIO ((js_getObjectStore (unIDBIndex self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getObjectStore (self)))
  
 foreign import javascript unsafe "$1[\"keyPath\"]" js_getKeyPath ::
-        JSRef IDBIndex -> IO (JSRef IDBAny)
+        IDBIndex -> IO (Nullable IDBAny)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBIndex.keyPath Mozilla IDBIndex.keyPath documentation> 
 getKeyPath :: (MonadIO m) => IDBIndex -> m (Maybe IDBAny)
 getKeyPath self
-  = liftIO ((js_getKeyPath (unIDBIndex self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getKeyPath (self)))
  
 foreign import javascript unsafe "($1[\"multiEntry\"] ? 1 : 0)"
-        js_getMultiEntry :: JSRef IDBIndex -> IO Bool
+        js_getMultiEntry :: IDBIndex -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBIndex.multiEntry Mozilla IDBIndex.multiEntry documentation> 
 getMultiEntry :: (MonadIO m) => IDBIndex -> m Bool
-getMultiEntry self = liftIO (js_getMultiEntry (unIDBIndex self))
+getMultiEntry self = liftIO (js_getMultiEntry (self))
  
 foreign import javascript unsafe "($1[\"unique\"] ? 1 : 0)"
-        js_getUnique :: JSRef IDBIndex -> IO Bool
+        js_getUnique :: IDBIndex -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBIndex.unique Mozilla IDBIndex.unique documentation> 
 getUnique :: (MonadIO m) => IDBIndex -> m Bool
-getUnique self = liftIO (js_getUnique (unIDBIndex self))
+getUnique self = liftIO (js_getUnique (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/IDBKeyRange.hs b/src/GHCJS/DOM/JSFFI/Generated/IDBKeyRange.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/IDBKeyRange.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/IDBKeyRange.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -21,77 +21,75 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"only\"]($2)" js_only ::
-        JSRef IDBKeyRange -> JSRef a -> IO (JSRef IDBKeyRange)
+        IDBKeyRange -> JSRef -> IO (Nullable IDBKeyRange)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBKeyRange.only Mozilla IDBKeyRange.only documentation> 
 only ::
-     (MonadIO m) => IDBKeyRange -> JSRef a -> m (Maybe IDBKeyRange)
+     (MonadIO m) => IDBKeyRange -> JSRef -> m (Maybe IDBKeyRange)
 only self value
-  = liftIO ((js_only (unIDBKeyRange self) value) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_only (self) value))
  
 foreign import javascript unsafe "$1[\"lowerBound\"]($2, $3)"
         js_lowerBound ::
-        JSRef IDBKeyRange -> JSRef a -> Bool -> IO (JSRef IDBKeyRange)
+        IDBKeyRange -> JSRef -> Bool -> IO (Nullable IDBKeyRange)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBKeyRange.lowerBound Mozilla IDBKeyRange.lowerBound documentation> 
 lowerBound ::
            (MonadIO m) =>
-             IDBKeyRange -> JSRef a -> Bool -> m (Maybe IDBKeyRange)
+             IDBKeyRange -> JSRef -> Bool -> m (Maybe IDBKeyRange)
 lowerBound self lower open
-  = liftIO
-      ((js_lowerBound (unIDBKeyRange self) lower open) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_lowerBound (self) lower open))
  
 foreign import javascript unsafe "$1[\"upperBound\"]($2, $3)"
         js_upperBound ::
-        JSRef IDBKeyRange -> JSRef a -> Bool -> IO (JSRef IDBKeyRange)
+        IDBKeyRange -> JSRef -> Bool -> IO (Nullable IDBKeyRange)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBKeyRange.upperBound Mozilla IDBKeyRange.upperBound documentation> 
 upperBound ::
            (MonadIO m) =>
-             IDBKeyRange -> JSRef a -> Bool -> m (Maybe IDBKeyRange)
+             IDBKeyRange -> JSRef -> Bool -> m (Maybe IDBKeyRange)
 upperBound self upper open
-  = liftIO
-      ((js_upperBound (unIDBKeyRange self) upper open) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_upperBound (self) upper open))
  
 foreign import javascript unsafe "$1[\"bound\"]($2, $3, $4, $5)"
         js_bound ::
-        JSRef IDBKeyRange ->
-          JSRef a -> JSRef a -> Bool -> Bool -> IO (JSRef IDBKeyRange)
+        IDBKeyRange ->
+          JSRef -> JSRef -> Bool -> Bool -> IO (Nullable IDBKeyRange)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBKeyRange.bound Mozilla IDBKeyRange.bound documentation> 
 bound ::
       (MonadIO m) =>
         IDBKeyRange ->
-          JSRef a -> JSRef a -> Bool -> Bool -> m (Maybe IDBKeyRange)
+          JSRef -> JSRef -> Bool -> Bool -> m (Maybe IDBKeyRange)
 bound self lower upper lowerOpen upperOpen
   = liftIO
-      ((js_bound (unIDBKeyRange self) lower upper lowerOpen upperOpen)
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_bound (self) lower upper lowerOpen upperOpen))
  
 foreign import javascript unsafe "$1[\"lower\"]" js_getLower ::
-        JSRef IDBKeyRange -> IO (JSRef a)
+        IDBKeyRange -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBKeyRange.lower Mozilla IDBKeyRange.lower documentation> 
-getLower :: (MonadIO m) => IDBKeyRange -> m (JSRef a)
-getLower self = liftIO (js_getLower (unIDBKeyRange self))
+getLower :: (MonadIO m) => IDBKeyRange -> m JSRef
+getLower self = liftIO (js_getLower (self))
  
 foreign import javascript unsafe "$1[\"upper\"]" js_getUpper ::
-        JSRef IDBKeyRange -> IO (JSRef a)
+        IDBKeyRange -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBKeyRange.upper Mozilla IDBKeyRange.upper documentation> 
-getUpper :: (MonadIO m) => IDBKeyRange -> m (JSRef a)
-getUpper self = liftIO (js_getUpper (unIDBKeyRange self))
+getUpper :: (MonadIO m) => IDBKeyRange -> m JSRef
+getUpper self = liftIO (js_getUpper (self))
  
 foreign import javascript unsafe "($1[\"lowerOpen\"] ? 1 : 0)"
-        js_getLowerOpen :: JSRef IDBKeyRange -> IO Bool
+        js_getLowerOpen :: IDBKeyRange -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBKeyRange.lowerOpen Mozilla IDBKeyRange.lowerOpen documentation> 
 getLowerOpen :: (MonadIO m) => IDBKeyRange -> m Bool
-getLowerOpen self = liftIO (js_getLowerOpen (unIDBKeyRange self))
+getLowerOpen self = liftIO (js_getLowerOpen (self))
  
 foreign import javascript unsafe "($1[\"upperOpen\"] ? 1 : 0)"
-        js_getUpperOpen :: JSRef IDBKeyRange -> IO Bool
+        js_getUpperOpen :: IDBKeyRange -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBKeyRange.upperOpen Mozilla IDBKeyRange.upperOpen documentation> 
 getUpperOpen :: (MonadIO m) => IDBKeyRange -> m Bool
-getUpperOpen self = liftIO (js_getUpperOpen (unIDBKeyRange self))
+getUpperOpen self = liftIO (js_getUpperOpen (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/IDBObjectStore.hs b/src/GHCJS/DOM/JSFFI/Generated/IDBObjectStore.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/IDBObjectStore.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/IDBObjectStore.hs
@@ -12,7 +12,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -26,28 +26,28 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"put\"]($2, $3)" js_put ::
-        JSRef IDBObjectStore -> JSRef a -> JSRef a -> IO (JSRef IDBRequest)
+        IDBObjectStore -> JSRef -> JSRef -> IO (Nullable IDBRequest)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBObjectStore.put Mozilla IDBObjectStore.put documentation> 
 put ::
     (MonadIO m) =>
-      IDBObjectStore -> JSRef a -> JSRef a -> m (Maybe IDBRequest)
+      IDBObjectStore -> JSRef -> JSRef -> m (Maybe IDBRequest)
 put self value key
-  = liftIO ((js_put (unIDBObjectStore self) value key) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_put (self) value key))
  
 foreign import javascript unsafe "$1[\"add\"]($2, $3)" js_add ::
-        JSRef IDBObjectStore -> JSRef a -> JSRef a -> IO (JSRef IDBRequest)
+        IDBObjectStore -> JSRef -> JSRef -> IO (Nullable IDBRequest)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBObjectStore.add Mozilla IDBObjectStore.add documentation> 
 add ::
     (MonadIO m) =>
-      IDBObjectStore -> JSRef a -> JSRef a -> m (Maybe IDBRequest)
+      IDBObjectStore -> JSRef -> JSRef -> m (Maybe IDBRequest)
 add self value key
-  = liftIO ((js_add (unIDBObjectStore self) value key) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_add (self) value key))
  
 foreign import javascript unsafe "$1[\"delete\"]($2)"
         js_deleteRange ::
-        JSRef IDBObjectStore -> JSRef IDBKeyRange -> IO (JSRef IDBRequest)
+        IDBObjectStore -> Nullable IDBKeyRange -> IO (Nullable IDBRequest)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBObjectStore.delete Mozilla IDBObjectStore.delete documentation> 
 deleteRange ::
@@ -55,21 +55,20 @@
               IDBObjectStore -> Maybe IDBKeyRange -> m (Maybe IDBRequest)
 deleteRange self keyRange
   = liftIO
-      ((js_deleteRange (unIDBObjectStore self)
-          (maybe jsNull pToJSRef keyRange))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_deleteRange (self) (maybeToNullable keyRange)))
  
 foreign import javascript unsafe "$1[\"delete\"]($2)" js_delete ::
-        JSRef IDBObjectStore -> JSRef a -> IO (JSRef IDBRequest)
+        IDBObjectStore -> JSRef -> IO (Nullable IDBRequest)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBObjectStore.delete Mozilla IDBObjectStore.delete documentation> 
 delete ::
-       (MonadIO m) => IDBObjectStore -> JSRef a -> m (Maybe IDBRequest)
+       (MonadIO m) => IDBObjectStore -> JSRef -> m (Maybe IDBRequest)
 delete self key
-  = liftIO ((js_delete (unIDBObjectStore self) key) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_delete (self) key))
  
 foreign import javascript unsafe "$1[\"get\"]($2)" js_getRange ::
-        JSRef IDBObjectStore -> JSRef IDBKeyRange -> IO (JSRef IDBRequest)
+        IDBObjectStore -> Nullable IDBKeyRange -> IO (Nullable IDBRequest)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBObjectStore.get Mozilla IDBObjectStore.get documentation> 
 getRange ::
@@ -77,30 +76,27 @@
            IDBObjectStore -> Maybe IDBKeyRange -> m (Maybe IDBRequest)
 getRange self key
   = liftIO
-      ((js_getRange (unIDBObjectStore self) (maybe jsNull pToJSRef key))
-         >>= fromJSRef)
+      (nullableToMaybe <$> (js_getRange (self) (maybeToNullable key)))
  
 foreign import javascript unsafe "$1[\"get\"]($2)" js_get ::
-        JSRef IDBObjectStore -> JSRef a -> IO (JSRef IDBRequest)
+        IDBObjectStore -> JSRef -> IO (Nullable IDBRequest)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBObjectStore.get Mozilla IDBObjectStore.get documentation> 
 get ::
-    (MonadIO m) => IDBObjectStore -> JSRef a -> m (Maybe IDBRequest)
-get self key
-  = liftIO ((js_get (unIDBObjectStore self) key) >>= fromJSRef)
+    (MonadIO m) => IDBObjectStore -> JSRef -> m (Maybe IDBRequest)
+get self key = liftIO (nullableToMaybe <$> (js_get (self) key))
  
 foreign import javascript unsafe "$1[\"clear\"]()" js_clear ::
-        JSRef IDBObjectStore -> IO (JSRef IDBRequest)
+        IDBObjectStore -> IO (Nullable IDBRequest)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBObjectStore.clear Mozilla IDBObjectStore.clear documentation> 
 clear :: (MonadIO m) => IDBObjectStore -> m (Maybe IDBRequest)
-clear self
-  = liftIO ((js_clear (unIDBObjectStore self)) >>= fromJSRef)
+clear self = liftIO (nullableToMaybe <$> (js_clear (self)))
  
 foreign import javascript unsafe "$1[\"openCursor\"]($2, $3)"
         js_openCursorRange ::
-        JSRef IDBObjectStore ->
-          JSRef IDBKeyRange -> JSString -> IO (JSRef IDBRequest)
+        IDBObjectStore ->
+          Nullable IDBKeyRange -> JSString -> IO (Nullable IDBRequest)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBObjectStore.openCursor Mozilla IDBObjectStore.openCursor documentation> 
 openCursorRange ::
@@ -109,30 +105,27 @@
                     Maybe IDBKeyRange -> direction -> m (Maybe IDBRequest)
 openCursorRange self range direction
   = liftIO
-      ((js_openCursorRange (unIDBObjectStore self)
-          (maybe jsNull pToJSRef range)
-          (toJSString direction))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_openCursorRange (self) (maybeToNullable range)
+            (toJSString direction)))
  
 foreign import javascript unsafe "$1[\"openCursor\"]($2, $3)"
         js_openCursor ::
-        JSRef IDBObjectStore ->
-          JSRef a -> JSString -> IO (JSRef IDBRequest)
+        IDBObjectStore -> JSRef -> JSString -> IO (Nullable IDBRequest)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBObjectStore.openCursor Mozilla IDBObjectStore.openCursor documentation> 
 openCursor ::
            (MonadIO m, ToJSString direction) =>
-             IDBObjectStore -> JSRef a -> direction -> m (Maybe IDBRequest)
+             IDBObjectStore -> JSRef -> direction -> m (Maybe IDBRequest)
 openCursor self key direction
   = liftIO
-      ((js_openCursor (unIDBObjectStore self) key (toJSString direction))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_openCursor (self) key (toJSString direction)))
  
 foreign import javascript unsafe "$1[\"createIndex\"]($2, $3, $4)"
         js_createIndex' ::
-        JSRef IDBObjectStore ->
-          JSString ->
-            JSRef [keyPath] -> JSRef Dictionary -> IO (JSRef IDBIndex)
+        IDBObjectStore ->
+          JSString -> JSRef -> Nullable Dictionary -> IO (Nullable IDBIndex)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBObjectStore.createIndex Mozilla IDBObjectStore.createIndex documentation> 
 createIndex' ::
@@ -142,16 +135,16 @@
                  name -> [keyPath] -> Maybe options -> m (Maybe IDBIndex)
 createIndex' self name keyPath options
   = liftIO
-      ((toJSRef keyPath >>=
-          \ keyPath' ->
-            js_createIndex' (unIDBObjectStore self) (toJSString name) keyPath'
-          (maybe jsNull (unDictionary . toDictionary) options))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (toJSRef keyPath >>=
+            \ keyPath' -> js_createIndex' (self) (toJSString name) keyPath'
+            (maybeToNullable (fmap toDictionary options))))
  
 foreign import javascript unsafe "$1[\"createIndex\"]($2, $3, $4)"
         js_createIndex ::
-        JSRef IDBObjectStore ->
-          JSString -> JSString -> JSRef Dictionary -> IO (JSRef IDBIndex)
+        IDBObjectStore ->
+          JSString ->
+            JSString -> Nullable Dictionary -> IO (Nullable IDBIndex)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBObjectStore.createIndex Mozilla IDBObjectStore.createIndex documentation> 
 createIndex ::
@@ -161,35 +154,32 @@
                 name -> keyPath -> Maybe options -> m (Maybe IDBIndex)
 createIndex self name keyPath options
   = liftIO
-      ((js_createIndex (unIDBObjectStore self) (toJSString name)
-          (toJSString keyPath)
-          (maybe jsNull (unDictionary . toDictionary) options))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createIndex (self) (toJSString name) (toJSString keyPath)
+            (maybeToNullable (fmap toDictionary options))))
  
 foreign import javascript unsafe "$1[\"index\"]($2)" js_index ::
-        JSRef IDBObjectStore -> JSString -> IO (JSRef IDBIndex)
+        IDBObjectStore -> JSString -> IO (Nullable IDBIndex)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBObjectStore.index Mozilla IDBObjectStore.index documentation> 
 index ::
       (MonadIO m, ToJSString name) =>
         IDBObjectStore -> name -> m (Maybe IDBIndex)
 index self name
-  = liftIO
-      ((js_index (unIDBObjectStore self) (toJSString name)) >>=
-         fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_index (self) (toJSString name)))
  
 foreign import javascript unsafe "$1[\"deleteIndex\"]($2)"
-        js_deleteIndex :: JSRef IDBObjectStore -> JSString -> IO ()
+        js_deleteIndex :: IDBObjectStore -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBObjectStore.deleteIndex Mozilla IDBObjectStore.deleteIndex documentation> 
 deleteIndex ::
             (MonadIO m, ToJSString name) => IDBObjectStore -> name -> m ()
 deleteIndex self name
-  = liftIO (js_deleteIndex (unIDBObjectStore self) (toJSString name))
+  = liftIO (js_deleteIndex (self) (toJSString name))
  
 foreign import javascript unsafe "$1[\"count\"]($2)" js_countRange
         ::
-        JSRef IDBObjectStore -> JSRef IDBKeyRange -> IO (JSRef IDBRequest)
+        IDBObjectStore -> Nullable IDBKeyRange -> IO (Nullable IDBRequest)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBObjectStore.count Mozilla IDBObjectStore.count documentation> 
 countRange ::
@@ -197,63 +187,55 @@
              IDBObjectStore -> Maybe IDBKeyRange -> m (Maybe IDBRequest)
 countRange self range
   = liftIO
-      ((js_countRange (unIDBObjectStore self)
-          (maybe jsNull pToJSRef range))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_countRange (self) (maybeToNullable range)))
  
 foreign import javascript unsafe "$1[\"count\"]($2)" js_count ::
-        JSRef IDBObjectStore -> JSRef a -> IO (JSRef IDBRequest)
+        IDBObjectStore -> JSRef -> IO (Nullable IDBRequest)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBObjectStore.count Mozilla IDBObjectStore.count documentation> 
 count ::
-      (MonadIO m) => IDBObjectStore -> JSRef a -> m (Maybe IDBRequest)
-count self key
-  = liftIO ((js_count (unIDBObjectStore self) key) >>= fromJSRef)
+      (MonadIO m) => IDBObjectStore -> JSRef -> m (Maybe IDBRequest)
+count self key = liftIO (nullableToMaybe <$> (js_count (self) key))
  
 foreign import javascript unsafe "$1[\"name\"]" js_getName ::
-        JSRef IDBObjectStore -> IO (JSRef (Maybe JSString))
+        IDBObjectStore -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBObjectStore.name Mozilla IDBObjectStore.name documentation> 
 getName ::
         (MonadIO m, FromJSString result) =>
           IDBObjectStore -> m (Maybe result)
-getName self
-  = liftIO
-      (fromMaybeJSString <$> (js_getName (unIDBObjectStore self)))
+getName self = liftIO (fromMaybeJSString <$> (js_getName (self)))
  
 foreign import javascript unsafe "$1[\"keyPath\"]" js_getKeyPath ::
-        JSRef IDBObjectStore -> IO (JSRef IDBAny)
+        IDBObjectStore -> IO (Nullable IDBAny)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBObjectStore.keyPath Mozilla IDBObjectStore.keyPath documentation> 
 getKeyPath :: (MonadIO m) => IDBObjectStore -> m (Maybe IDBAny)
 getKeyPath self
-  = liftIO ((js_getKeyPath (unIDBObjectStore self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getKeyPath (self)))
  
 foreign import javascript unsafe "$1[\"indexNames\"]"
-        js_getIndexNames ::
-        JSRef IDBObjectStore -> IO (JSRef DOMStringList)
+        js_getIndexNames :: IDBObjectStore -> IO (Nullable DOMStringList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBObjectStore.indexNames Mozilla IDBObjectStore.indexNames documentation> 
 getIndexNames ::
               (MonadIO m) => IDBObjectStore -> m (Maybe DOMStringList)
 getIndexNames self
-  = liftIO ((js_getIndexNames (unIDBObjectStore self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getIndexNames (self)))
  
 foreign import javascript unsafe "$1[\"transaction\"]"
-        js_getTransaction ::
-        JSRef IDBObjectStore -> IO (JSRef IDBTransaction)
+        js_getTransaction :: IDBObjectStore -> IO (Nullable IDBTransaction)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBObjectStore.transaction Mozilla IDBObjectStore.transaction documentation> 
 getTransaction ::
                (MonadIO m) => IDBObjectStore -> m (Maybe IDBTransaction)
 getTransaction self
-  = liftIO
-      ((js_getTransaction (unIDBObjectStore self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getTransaction (self)))
  
 foreign import javascript unsafe "($1[\"autoIncrement\"] ? 1 : 0)"
-        js_getAutoIncrement :: JSRef IDBObjectStore -> IO Bool
+        js_getAutoIncrement :: IDBObjectStore -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBObjectStore.autoIncrement Mozilla IDBObjectStore.autoIncrement documentation> 
 getAutoIncrement :: (MonadIO m) => IDBObjectStore -> m Bool
-getAutoIncrement self
-  = liftIO (js_getAutoIncrement (unIDBObjectStore self))
+getAutoIncrement self = liftIO (js_getAutoIncrement (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/IDBOpenDBRequest.hs b/src/GHCJS/DOM/JSFFI/Generated/IDBOpenDBRequest.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/IDBOpenDBRequest.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/IDBOpenDBRequest.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/IDBRequest.hs b/src/GHCJS/DOM/JSFFI/Generated/IDBRequest.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/IDBRequest.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/IDBRequest.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -21,57 +21,51 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"result\"]" js_getResult ::
-        JSRef IDBRequest -> IO (JSRef IDBAny)
+        IDBRequest -> IO (Nullable IDBAny)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBRequest.result Mozilla IDBRequest.result documentation> 
 getResult ::
           (MonadIO m, IsIDBRequest self) => self -> m (Maybe IDBAny)
 getResult self
-  = liftIO
-      ((js_getResult (unIDBRequest (toIDBRequest self))) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getResult (toIDBRequest self)))
  
 foreign import javascript unsafe "$1[\"error\"]" js_getError ::
-        JSRef IDBRequest -> IO (JSRef DOMError)
+        IDBRequest -> IO (Nullable DOMError)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBRequest.error Mozilla IDBRequest.error documentation> 
 getError ::
          (MonadIO m, IsIDBRequest self) => self -> m (Maybe DOMError)
 getError self
-  = liftIO
-      ((js_getError (unIDBRequest (toIDBRequest self))) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getError (toIDBRequest self)))
  
 foreign import javascript unsafe "$1[\"source\"]" js_getSource ::
-        JSRef IDBRequest -> IO (JSRef IDBAny)
+        IDBRequest -> IO (Nullable IDBAny)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBRequest.source Mozilla IDBRequest.source documentation> 
 getSource ::
           (MonadIO m, IsIDBRequest self) => self -> m (Maybe IDBAny)
 getSource self
-  = liftIO
-      ((js_getSource (unIDBRequest (toIDBRequest self))) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getSource (toIDBRequest self)))
  
 foreign import javascript unsafe "$1[\"transaction\"]"
-        js_getTransaction :: JSRef IDBRequest -> IO (JSRef IDBTransaction)
+        js_getTransaction :: IDBRequest -> IO (Nullable IDBTransaction)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBRequest.transaction Mozilla IDBRequest.transaction documentation> 
 getTransaction ::
                (MonadIO m, IsIDBRequest self) => self -> m (Maybe IDBTransaction)
 getTransaction self
   = liftIO
-      ((js_getTransaction (unIDBRequest (toIDBRequest self))) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_getTransaction (toIDBRequest self)))
  
 foreign import javascript unsafe "$1[\"readyState\"]"
-        js_getReadyState :: JSRef IDBRequest -> IO JSString
+        js_getReadyState :: IDBRequest -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBRequest.readyState Mozilla IDBRequest.readyState documentation> 
 getReadyState ::
               (MonadIO m, IsIDBRequest self, FromJSString result) =>
                 self -> m result
 getReadyState self
-  = liftIO
-      (fromJSString <$>
-         (js_getReadyState (unIDBRequest (toIDBRequest self))))
+  = liftIO (fromJSString <$> (js_getReadyState (toIDBRequest self)))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBRequest.onsuccess Mozilla IDBRequest.onsuccess documentation> 
 success ::
diff --git a/src/GHCJS/DOM/JSFFI/Generated/IDBTransaction.hs b/src/GHCJS/DOM/JSFFI/Generated/IDBTransaction.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/IDBTransaction.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/IDBTransaction.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -21,7 +21,7 @@
  
 foreign import javascript unsafe "$1[\"objectStore\"]($2)"
         js_objectStore ::
-        JSRef IDBTransaction -> JSString -> IO (JSRef IDBObjectStore)
+        IDBTransaction -> JSString -> IO (Nullable IDBObjectStore)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBTransaction.objectStore Mozilla IDBTransaction.objectStore documentation> 
 objectStore ::
@@ -29,40 +29,36 @@
               IDBTransaction -> name -> m (Maybe IDBObjectStore)
 objectStore self name
   = liftIO
-      ((js_objectStore (unIDBTransaction self) (toJSString name)) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_objectStore (self) (toJSString name)))
  
 foreign import javascript unsafe "$1[\"abort\"]()" js_abort ::
-        JSRef IDBTransaction -> IO ()
+        IDBTransaction -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBTransaction.abort Mozilla IDBTransaction.abort documentation> 
 abort :: (MonadIO m) => IDBTransaction -> m ()
-abort self = liftIO (js_abort (unIDBTransaction self))
+abort self = liftIO (js_abort (self))
  
 foreign import javascript unsafe "$1[\"mode\"]" js_getMode ::
-        JSRef IDBTransaction -> IO JSString
+        IDBTransaction -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBTransaction.mode Mozilla IDBTransaction.mode documentation> 
 getMode ::
         (MonadIO m, FromJSString result) => IDBTransaction -> m result
-getMode self
-  = liftIO (fromJSString <$> (js_getMode (unIDBTransaction self)))
+getMode self = liftIO (fromJSString <$> (js_getMode (self)))
  
 foreign import javascript unsafe "$1[\"db\"]" js_getDb ::
-        JSRef IDBTransaction -> IO (JSRef IDBDatabase)
+        IDBTransaction -> IO (Nullable IDBDatabase)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBTransaction.db Mozilla IDBTransaction.db documentation> 
 getDb :: (MonadIO m) => IDBTransaction -> m (Maybe IDBDatabase)
-getDb self
-  = liftIO ((js_getDb (unIDBTransaction self)) >>= fromJSRef)
+getDb self = liftIO (nullableToMaybe <$> (js_getDb (self)))
  
 foreign import javascript unsafe "$1[\"error\"]" js_getError ::
-        JSRef IDBTransaction -> IO (JSRef DOMError)
+        IDBTransaction -> IO (Nullable DOMError)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBTransaction.error Mozilla IDBTransaction.error documentation> 
 getError :: (MonadIO m) => IDBTransaction -> m (Maybe DOMError)
-getError self
-  = liftIO ((js_getError (unIDBTransaction self)) >>= fromJSRef)
+getError self = liftIO (nullableToMaybe <$> (js_getError (self)))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBTransaction.onabort Mozilla IDBTransaction.onabort documentation> 
 abortEvent :: EventName IDBTransaction Event
diff --git a/src/GHCJS/DOM/JSFFI/Generated/IDBVersionChangeEvent.hs b/src/GHCJS/DOM/JSFFI/Generated/IDBVersionChangeEvent.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/IDBVersionChangeEvent.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/IDBVersionChangeEvent.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,22 +20,18 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"oldVersion\"]"
-        js_getOldVersion :: JSRef IDBVersionChangeEvent -> IO Double
+        js_getOldVersion :: IDBVersionChangeEvent -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBVersionChangeEvent.oldVersion Mozilla IDBVersionChangeEvent.oldVersion documentation> 
 getOldVersion :: (MonadIO m) => IDBVersionChangeEvent -> m Word64
-getOldVersion self
-  = liftIO
-      (round <$> (js_getOldVersion (unIDBVersionChangeEvent self)))
+getOldVersion self = liftIO (round <$> (js_getOldVersion (self)))
  
 foreign import javascript unsafe "$1[\"newVersion\"]"
-        js_getNewVersion ::
-        JSRef IDBVersionChangeEvent -> IO (JSRef (Maybe Double))
+        js_getNewVersion :: IDBVersionChangeEvent -> IO (Nullable Double)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/IDBVersionChangeEvent.newVersion Mozilla IDBVersionChangeEvent.newVersion documentation> 
 getNewVersion ::
               (MonadIO m) => IDBVersionChangeEvent -> m (Maybe Word64)
 getNewVersion self
   = liftIO
-      (fmap round . pFromJSRef <$>
-         (js_getNewVersion (unIDBVersionChangeEvent self)))
+      (fmap round . nullableToMaybe <$> (js_getNewVersion (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/ImageData.hs b/src/GHCJS/DOM/JSFFI/Generated/ImageData.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/ImageData.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/ImageData.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -21,7 +21,7 @@
  
 foreign import javascript unsafe
         "new window[\"ImageData\"]($1, $2,\n$3)" js_newImageData ::
-        JSRef Uint8ClampedArray -> Word -> Word -> IO (JSRef ImageData)
+        Nullable Uint8ClampedArray -> Word -> Word -> IO ImageData
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ImageData Mozilla ImageData documentation> 
 newImageData ::
@@ -29,31 +29,28 @@
                Maybe data' -> Word -> Word -> m ImageData
 newImageData data' sw sh
   = liftIO
-      (js_newImageData
-         (maybe jsNull (unUint8ClampedArray . toUint8ClampedArray) data')
+      (js_newImageData (maybeToNullable (fmap toUint8ClampedArray data'))
          sw
-         sh
-         >>= fromJSRefUnchecked)
+         sh)
  
 foreign import javascript unsafe
         "new window[\"ImageData\"]($1, $2)" js_newImageData' ::
-        Word -> Word -> IO (JSRef ImageData)
+        Word -> Word -> IO ImageData
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ImageData Mozilla ImageData documentation> 
 newImageData' :: (MonadIO m) => Word -> Word -> m ImageData
-newImageData' sw sh
-  = liftIO (js_newImageData' sw sh >>= fromJSRefUnchecked)
+newImageData' sw sh = liftIO (js_newImageData' sw sh)
  
 foreign import javascript unsafe "$1[\"width\"]" js_getWidth ::
-        JSRef ImageData -> IO Int
+        ImageData -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ImageData.width Mozilla ImageData.width documentation> 
 getWidth :: (MonadIO m) => ImageData -> m Int
-getWidth self = liftIO (js_getWidth (unImageData self))
+getWidth self = liftIO (js_getWidth (self))
  
 foreign import javascript unsafe "$1[\"height\"]" js_getHeight ::
-        JSRef ImageData -> IO Int
+        ImageData -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ImageData.height Mozilla ImageData.height documentation> 
 getHeight :: (MonadIO m) => ImageData -> m Int
-getHeight self = liftIO (js_getHeight (unImageData self))
+getHeight self = liftIO (js_getHeight (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/InspectorFrontendHost.hs b/src/GHCJS/DOM/JSFFI/Generated/InspectorFrontendHost.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/InspectorFrontendHost.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/InspectorFrontendHost.hs
@@ -20,7 +20,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -34,162 +34,140 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"loaded\"]()" js_loaded ::
-        JSRef InspectorFrontendHost -> IO ()
+        InspectorFrontendHost -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/InspectorFrontendHost.loaded Mozilla InspectorFrontendHost.loaded documentation> 
 loaded :: (MonadIO m) => InspectorFrontendHost -> m ()
-loaded self = liftIO (js_loaded (unInspectorFrontendHost self))
+loaded self = liftIO (js_loaded (self))
  
 foreign import javascript unsafe "$1[\"closeWindow\"]()"
-        js_closeWindow :: JSRef InspectorFrontendHost -> IO ()
+        js_closeWindow :: InspectorFrontendHost -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/InspectorFrontendHost.closeWindow Mozilla InspectorFrontendHost.closeWindow documentation> 
 closeWindow :: (MonadIO m) => InspectorFrontendHost -> m ()
-closeWindow self
-  = liftIO (js_closeWindow (unInspectorFrontendHost self))
+closeWindow self = liftIO (js_closeWindow (self))
  
 foreign import javascript unsafe "$1[\"bringToFront\"]()"
-        js_bringToFront :: JSRef InspectorFrontendHost -> IO ()
+        js_bringToFront :: InspectorFrontendHost -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/InspectorFrontendHost.bringToFront Mozilla InspectorFrontendHost.bringToFront documentation> 
 bringToFront :: (MonadIO m) => InspectorFrontendHost -> m ()
-bringToFront self
-  = liftIO (js_bringToFront (unInspectorFrontendHost self))
+bringToFront self = liftIO (js_bringToFront (self))
  
 foreign import javascript unsafe "$1[\"setZoomFactor\"]($2)"
-        js_setZoomFactor :: JSRef InspectorFrontendHost -> Float -> IO ()
+        js_setZoomFactor :: InspectorFrontendHost -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/InspectorFrontendHost.setZoomFactor Mozilla InspectorFrontendHost.setZoomFactor documentation> 
 setZoomFactor ::
               (MonadIO m) => InspectorFrontendHost -> Float -> m ()
-setZoomFactor self zoom
-  = liftIO (js_setZoomFactor (unInspectorFrontendHost self) zoom)
+setZoomFactor self zoom = liftIO (js_setZoomFactor (self) zoom)
  
 foreign import javascript unsafe "$1[\"inspectedURLChanged\"]($2)"
         js_inspectedURLChanged ::
-        JSRef InspectorFrontendHost -> JSString -> IO ()
+        InspectorFrontendHost -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/InspectorFrontendHost.inspectedURLChanged Mozilla InspectorFrontendHost.inspectedURLChanged documentation> 
 inspectedURLChanged ::
                     (MonadIO m, ToJSString newURL) =>
                       InspectorFrontendHost -> newURL -> m ()
 inspectedURLChanged self newURL
-  = liftIO
-      (js_inspectedURLChanged (unInspectorFrontendHost self)
-         (toJSString newURL))
+  = liftIO (js_inspectedURLChanged (self) (toJSString newURL))
  
 foreign import javascript unsafe "$1[\"requestSetDockSide\"]($2)"
-        js_requestSetDockSide ::
-        JSRef InspectorFrontendHost -> JSString -> IO ()
+        js_requestSetDockSide :: InspectorFrontendHost -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/InspectorFrontendHost.requestSetDockSide Mozilla InspectorFrontendHost.requestSetDockSide documentation> 
 requestSetDockSide ::
                    (MonadIO m, ToJSString side) =>
                      InspectorFrontendHost -> side -> m ()
 requestSetDockSide self side
-  = liftIO
-      (js_requestSetDockSide (unInspectorFrontendHost self)
-         (toJSString side))
+  = liftIO (js_requestSetDockSide (self) (toJSString side))
  
 foreign import javascript unsafe
         "$1[\"setAttachedWindowHeight\"]($2)" js_setAttachedWindowHeight ::
-        JSRef InspectorFrontendHost -> Word -> IO ()
+        InspectorFrontendHost -> Word -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/InspectorFrontendHost.setAttachedWindowHeight Mozilla InspectorFrontendHost.setAttachedWindowHeight documentation> 
 setAttachedWindowHeight ::
                         (MonadIO m) => InspectorFrontendHost -> Word -> m ()
 setAttachedWindowHeight self height
-  = liftIO
-      (js_setAttachedWindowHeight (unInspectorFrontendHost self) height)
+  = liftIO (js_setAttachedWindowHeight (self) height)
  
 foreign import javascript unsafe
         "$1[\"setAttachedWindowWidth\"]($2)" js_setAttachedWindowWidth ::
-        JSRef InspectorFrontendHost -> Word -> IO ()
+        InspectorFrontendHost -> Word -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/InspectorFrontendHost.setAttachedWindowWidth Mozilla InspectorFrontendHost.setAttachedWindowWidth documentation> 
 setAttachedWindowWidth ::
                        (MonadIO m) => InspectorFrontendHost -> Word -> m ()
 setAttachedWindowWidth self width
-  = liftIO
-      (js_setAttachedWindowWidth (unInspectorFrontendHost self) width)
+  = liftIO (js_setAttachedWindowWidth (self) width)
  
 foreign import javascript unsafe "$1[\"setToolbarHeight\"]($2)"
-        js_setToolbarHeight ::
-        JSRef InspectorFrontendHost -> Float -> IO ()
+        js_setToolbarHeight :: InspectorFrontendHost -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/InspectorFrontendHost.setToolbarHeight Mozilla InspectorFrontendHost.setToolbarHeight documentation> 
 setToolbarHeight ::
                  (MonadIO m) => InspectorFrontendHost -> Float -> m ()
 setToolbarHeight self height
-  = liftIO
-      (js_setToolbarHeight (unInspectorFrontendHost self) height)
+  = liftIO (js_setToolbarHeight (self) height)
  
 foreign import javascript unsafe "$1[\"moveWindowBy\"]($2, $3)"
-        js_moveWindowBy ::
-        JSRef InspectorFrontendHost -> Float -> Float -> IO ()
+        js_moveWindowBy :: InspectorFrontendHost -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/InspectorFrontendHost.moveWindowBy Mozilla InspectorFrontendHost.moveWindowBy documentation> 
 moveWindowBy ::
              (MonadIO m) => InspectorFrontendHost -> Float -> Float -> m ()
-moveWindowBy self x y
-  = liftIO (js_moveWindowBy (unInspectorFrontendHost self) x y)
+moveWindowBy self x y = liftIO (js_moveWindowBy (self) x y)
  
 foreign import javascript unsafe "$1[\"localizedStringsURL\"]()"
-        js_localizedStringsURL ::
-        JSRef InspectorFrontendHost -> IO JSString
+        js_localizedStringsURL :: InspectorFrontendHost -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/InspectorFrontendHost.localizedStringsURL Mozilla InspectorFrontendHost.localizedStringsURL documentation> 
 localizedStringsURL ::
                     (MonadIO m, FromJSString result) =>
                       InspectorFrontendHost -> m result
 localizedStringsURL self
-  = liftIO
-      (fromJSString <$>
-         (js_localizedStringsURL (unInspectorFrontendHost self)))
+  = liftIO (fromJSString <$> (js_localizedStringsURL (self)))
  
 foreign import javascript unsafe "$1[\"debuggableType\"]()"
-        js_debuggableType :: JSRef InspectorFrontendHost -> IO JSString
+        js_debuggableType :: InspectorFrontendHost -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/InspectorFrontendHost.debuggableType Mozilla InspectorFrontendHost.debuggableType documentation> 
 debuggableType ::
                (MonadIO m, FromJSString result) =>
                  InspectorFrontendHost -> m result
 debuggableType self
-  = liftIO
-      (fromJSString <$>
-         (js_debuggableType (unInspectorFrontendHost self)))
+  = liftIO (fromJSString <$> (js_debuggableType (self)))
  
 foreign import javascript unsafe "$1[\"copyText\"]($2)" js_copyText
-        :: JSRef InspectorFrontendHost -> JSString -> IO ()
+        :: InspectorFrontendHost -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/InspectorFrontendHost.copyText Mozilla InspectorFrontendHost.copyText documentation> 
 copyText ::
          (MonadIO m, ToJSString text) =>
            InspectorFrontendHost -> text -> m ()
-copyText self text
-  = liftIO
-      (js_copyText (unInspectorFrontendHost self) (toJSString text))
+copyText self text = liftIO (js_copyText (self) (toJSString text))
  
 foreign import javascript unsafe "$1[\"openInNewTab\"]($2)"
-        js_openInNewTab :: JSRef InspectorFrontendHost -> JSString -> IO ()
+        js_openInNewTab :: InspectorFrontendHost -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/InspectorFrontendHost.openInNewTab Mozilla InspectorFrontendHost.openInNewTab documentation> 
 openInNewTab ::
              (MonadIO m, ToJSString url) => InspectorFrontendHost -> url -> m ()
 openInNewTab self url
-  = liftIO
-      (js_openInNewTab (unInspectorFrontendHost self) (toJSString url))
+  = liftIO (js_openInNewTab (self) (toJSString url))
  
 foreign import javascript unsafe "($1[\"canSave\"]() ? 1 : 0)"
-        js_canSave :: JSRef InspectorFrontendHost -> IO Bool
+        js_canSave :: InspectorFrontendHost -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/InspectorFrontendHost.canSave Mozilla InspectorFrontendHost.canSave documentation> 
 canSave :: (MonadIO m) => InspectorFrontendHost -> m Bool
-canSave self = liftIO (js_canSave (unInspectorFrontendHost self))
+canSave self = liftIO (js_canSave (self))
  
 foreign import javascript unsafe "$1[\"save\"]($2, $3, $4, $5)"
         js_save ::
-        JSRef InspectorFrontendHost ->
+        InspectorFrontendHost ->
           JSString -> JSString -> Bool -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/InspectorFrontendHost.save Mozilla InspectorFrontendHost.save documentation> 
@@ -198,72 +176,63 @@
        InspectorFrontendHost -> url -> content -> Bool -> Bool -> m ()
 save self url content base64Encoded forceSaveAs
   = liftIO
-      (js_save (unInspectorFrontendHost self) (toJSString url)
-         (toJSString content)
-         base64Encoded
+      (js_save (self) (toJSString url) (toJSString content) base64Encoded
          forceSaveAs)
  
 foreign import javascript unsafe "$1[\"append\"]($2, $3)" js_append
-        :: JSRef InspectorFrontendHost -> JSString -> JSString -> IO ()
+        :: InspectorFrontendHost -> JSString -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/InspectorFrontendHost.append Mozilla InspectorFrontendHost.append documentation> 
 append ::
        (MonadIO m, ToJSString url, ToJSString content) =>
          InspectorFrontendHost -> url -> content -> m ()
 append self url content
-  = liftIO
-      (js_append (unInspectorFrontendHost self) (toJSString url)
-         (toJSString content))
+  = liftIO (js_append (self) (toJSString url) (toJSString content))
  
 foreign import javascript unsafe "$1[\"close\"]($2)" js_close ::
-        JSRef InspectorFrontendHost -> JSString -> IO ()
+        InspectorFrontendHost -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/InspectorFrontendHost.close Mozilla InspectorFrontendHost.close documentation> 
 close ::
       (MonadIO m, ToJSString url) => InspectorFrontendHost -> url -> m ()
-close self url
-  = liftIO (js_close (unInspectorFrontendHost self) (toJSString url))
+close self url = liftIO (js_close (self) (toJSString url))
  
 foreign import javascript unsafe "$1[\"platform\"]()" js_platform
-        :: JSRef InspectorFrontendHost -> IO JSString
+        :: InspectorFrontendHost -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/InspectorFrontendHost.platform Mozilla InspectorFrontendHost.platform documentation> 
 platform ::
          (MonadIO m, FromJSString result) =>
            InspectorFrontendHost -> m result
-platform self
-  = liftIO
-      (fromJSString <$> (js_platform (unInspectorFrontendHost self)))
+platform self = liftIO (fromJSString <$> (js_platform (self)))
  
 foreign import javascript unsafe "$1[\"port\"]()" js_port ::
-        JSRef InspectorFrontendHost -> IO JSString
+        InspectorFrontendHost -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/InspectorFrontendHost.port Mozilla InspectorFrontendHost.port documentation> 
 port ::
      (MonadIO m, FromJSString result) =>
        InspectorFrontendHost -> m result
-port self
-  = liftIO
-      (fromJSString <$> (js_port (unInspectorFrontendHost self)))
+port self = liftIO (fromJSString <$> (js_port (self)))
  
 foreign import javascript unsafe "$1[\"showContextMenu\"]($2, $3)"
         js_showContextMenu ::
-        JSRef InspectorFrontendHost -> JSRef MouseEvent -> JSRef a -> IO ()
+        InspectorFrontendHost -> Nullable MouseEvent -> JSRef -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/InspectorFrontendHost.showContextMenu Mozilla InspectorFrontendHost.showContextMenu documentation> 
 showContextMenu ::
                 (MonadIO m, IsMouseEvent event) =>
-                  InspectorFrontendHost -> Maybe event -> JSRef a -> m ()
+                  InspectorFrontendHost -> Maybe event -> JSRef -> m ()
 showContextMenu self event items
   = liftIO
-      (js_showContextMenu (unInspectorFrontendHost self)
-         (maybe jsNull (unMouseEvent . toMouseEvent) event)
+      (js_showContextMenu (self)
+         (maybeToNullable (fmap toMouseEvent event))
          items)
  
 foreign import javascript unsafe
         "$1[\"dispatchEventAsContextMenuEvent\"]($2)"
         js_dispatchEventAsContextMenuEvent ::
-        JSRef InspectorFrontendHost -> JSRef Event -> IO ()
+        InspectorFrontendHost -> Nullable Event -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/InspectorFrontendHost.dispatchEventAsContextMenuEvent Mozilla InspectorFrontendHost.dispatchEventAsContextMenuEvent documentation> 
 dispatchEventAsContextMenuEvent ::
@@ -271,63 +240,55 @@
                                   InspectorFrontendHost -> Maybe event -> m ()
 dispatchEventAsContextMenuEvent self event
   = liftIO
-      (js_dispatchEventAsContextMenuEvent (unInspectorFrontendHost self)
-         (maybe jsNull (unEvent . toEvent) event))
+      (js_dispatchEventAsContextMenuEvent (self)
+         (maybeToNullable (fmap toEvent event)))
  
 foreign import javascript unsafe "$1[\"sendMessageToBackend\"]($2)"
         js_sendMessageToBackend ::
-        JSRef InspectorFrontendHost -> JSString -> IO ()
+        InspectorFrontendHost -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/InspectorFrontendHost.sendMessageToBackend Mozilla InspectorFrontendHost.sendMessageToBackend documentation> 
 sendMessageToBackend ::
                      (MonadIO m, ToJSString message) =>
                        InspectorFrontendHost -> message -> m ()
 sendMessageToBackend self message
-  = liftIO
-      (js_sendMessageToBackend (unInspectorFrontendHost self)
-         (toJSString message))
+  = liftIO (js_sendMessageToBackend (self) (toJSString message))
  
 foreign import javascript unsafe "$1[\"unbufferedLog\"]($2)"
-        js_unbufferedLog ::
-        JSRef InspectorFrontendHost -> JSString -> IO ()
+        js_unbufferedLog :: InspectorFrontendHost -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/InspectorFrontendHost.unbufferedLog Mozilla InspectorFrontendHost.unbufferedLog documentation> 
 unbufferedLog ::
               (MonadIO m, ToJSString message) =>
                 InspectorFrontendHost -> message -> m ()
 unbufferedLog self message
-  = liftIO
-      (js_unbufferedLog (unInspectorFrontendHost self)
-         (toJSString message))
+  = liftIO (js_unbufferedLog (self) (toJSString message))
  
 foreign import javascript unsafe "($1[\"isUnderTest\"]() ? 1 : 0)"
-        js_isUnderTest :: JSRef InspectorFrontendHost -> IO Bool
+        js_isUnderTest :: InspectorFrontendHost -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/InspectorFrontendHost.isUnderTest Mozilla InspectorFrontendHost.isUnderTest documentation> 
 isUnderTest :: (MonadIO m) => InspectorFrontendHost -> m Bool
-isUnderTest self
-  = liftIO (js_isUnderTest (unInspectorFrontendHost self))
+isUnderTest self = liftIO (js_isUnderTest (self))
  
 foreign import javascript unsafe "$1[\"beep\"]()" js_beep ::
-        JSRef InspectorFrontendHost -> IO ()
+        InspectorFrontendHost -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/InspectorFrontendHost.beep Mozilla InspectorFrontendHost.beep documentation> 
 beep :: (MonadIO m) => InspectorFrontendHost -> m ()
-beep self = liftIO (js_beep (unInspectorFrontendHost self))
+beep self = liftIO (js_beep (self))
  
 foreign import javascript unsafe
         "($1[\"canInspectWorkers\"]() ? 1 : 0)" js_canInspectWorkers ::
-        JSRef InspectorFrontendHost -> IO Bool
+        InspectorFrontendHost -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/InspectorFrontendHost.canInspectWorkers Mozilla InspectorFrontendHost.canInspectWorkers documentation> 
 canInspectWorkers :: (MonadIO m) => InspectorFrontendHost -> m Bool
-canInspectWorkers self
-  = liftIO (js_canInspectWorkers (unInspectorFrontendHost self))
+canInspectWorkers self = liftIO (js_canInspectWorkers (self))
  
 foreign import javascript unsafe "($1[\"canSaveAs\"]() ? 1 : 0)"
-        js_canSaveAs :: JSRef InspectorFrontendHost -> IO Bool
+        js_canSaveAs :: InspectorFrontendHost -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/InspectorFrontendHost.canSaveAs Mozilla InspectorFrontendHost.canSaveAs documentation> 
 canSaveAs :: (MonadIO m) => InspectorFrontendHost -> m Bool
-canSaveAs self
-  = liftIO (js_canSaveAs (unInspectorFrontendHost self))
+canSaveAs self = liftIO (js_canSaveAs (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/InternalSettings.hs b/src/GHCJS/DOM/JSFFI/Generated/InternalSettings.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/InternalSettings.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/InternalSettings.hs
@@ -40,7 +40,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -56,19 +56,17 @@
 foreign import javascript unsafe
         "$1[\"setTouchEventEmulationEnabled\"]($2)"
         js_setTouchEventEmulationEnabled ::
-        JSRef InternalSettings -> Bool -> IO ()
+        InternalSettings -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/InternalSettings.setTouchEventEmulationEnabled Mozilla InternalSettings.setTouchEventEmulationEnabled documentation> 
 setTouchEventEmulationEnabled ::
                               (MonadIO m) => InternalSettings -> Bool -> m ()
 setTouchEventEmulationEnabled self enabled
-  = liftIO
-      (js_setTouchEventEmulationEnabled (unInternalSettings self)
-         enabled)
+  = liftIO (js_setTouchEventEmulationEnabled (self) enabled)
  
 foreign import javascript unsafe
         "$1[\"setStandardFontFamily\"]($2,\n$3)" js_setStandardFontFamily
-        :: JSRef InternalSettings -> JSString -> JSString -> IO ()
+        :: InternalSettings -> JSString -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/InternalSettings.setStandardFontFamily Mozilla InternalSettings.setStandardFontFamily documentation> 
 setStandardFontFamily ::
@@ -76,13 +74,12 @@
                         InternalSettings -> family' -> script -> m ()
 setStandardFontFamily self family' script
   = liftIO
-      (js_setStandardFontFamily (unInternalSettings self)
-         (toJSString family')
+      (js_setStandardFontFamily (self) (toJSString family')
          (toJSString script))
  
 foreign import javascript unsafe
         "$1[\"setSerifFontFamily\"]($2, $3)" js_setSerifFontFamily ::
-        JSRef InternalSettings -> JSString -> JSString -> IO ()
+        InternalSettings -> JSString -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/InternalSettings.setSerifFontFamily Mozilla InternalSettings.setSerifFontFamily documentation> 
 setSerifFontFamily ::
@@ -90,13 +87,12 @@
                      InternalSettings -> family' -> script -> m ()
 setSerifFontFamily self family' script
   = liftIO
-      (js_setSerifFontFamily (unInternalSettings self)
-         (toJSString family')
+      (js_setSerifFontFamily (self) (toJSString family')
          (toJSString script))
  
 foreign import javascript unsafe
         "$1[\"setSansSerifFontFamily\"]($2,\n$3)" js_setSansSerifFontFamily
-        :: JSRef InternalSettings -> JSString -> JSString -> IO ()
+        :: InternalSettings -> JSString -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/InternalSettings.setSansSerifFontFamily Mozilla InternalSettings.setSansSerifFontFamily documentation> 
 setSansSerifFontFamily ::
@@ -104,13 +100,12 @@
                          InternalSettings -> family' -> script -> m ()
 setSansSerifFontFamily self family' script
   = liftIO
-      (js_setSansSerifFontFamily (unInternalSettings self)
-         (toJSString family')
+      (js_setSansSerifFontFamily (self) (toJSString family')
          (toJSString script))
  
 foreign import javascript unsafe
         "$1[\"setFixedFontFamily\"]($2, $3)" js_setFixedFontFamily ::
-        JSRef InternalSettings -> JSString -> JSString -> IO ()
+        InternalSettings -> JSString -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/InternalSettings.setFixedFontFamily Mozilla InternalSettings.setFixedFontFamily documentation> 
 setFixedFontFamily ::
@@ -118,13 +113,12 @@
                      InternalSettings -> family' -> script -> m ()
 setFixedFontFamily self family' script
   = liftIO
-      (js_setFixedFontFamily (unInternalSettings self)
-         (toJSString family')
+      (js_setFixedFontFamily (self) (toJSString family')
          (toJSString script))
  
 foreign import javascript unsafe
         "$1[\"setCursiveFontFamily\"]($2,\n$3)" js_setCursiveFontFamily ::
-        JSRef InternalSettings -> JSString -> JSString -> IO ()
+        InternalSettings -> JSString -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/InternalSettings.setCursiveFontFamily Mozilla InternalSettings.setCursiveFontFamily documentation> 
 setCursiveFontFamily ::
@@ -132,13 +126,12 @@
                        InternalSettings -> family' -> script -> m ()
 setCursiveFontFamily self family' script
   = liftIO
-      (js_setCursiveFontFamily (unInternalSettings self)
-         (toJSString family')
+      (js_setCursiveFontFamily (self) (toJSString family')
          (toJSString script))
  
 foreign import javascript unsafe
         "$1[\"setFantasyFontFamily\"]($2,\n$3)" js_setFantasyFontFamily ::
-        JSRef InternalSettings -> JSString -> JSString -> IO ()
+        InternalSettings -> JSString -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/InternalSettings.setFantasyFontFamily Mozilla InternalSettings.setFantasyFontFamily documentation> 
 setFantasyFontFamily ::
@@ -146,14 +139,13 @@
                        InternalSettings -> family' -> script -> m ()
 setFantasyFontFamily self family' script
   = liftIO
-      (js_setFantasyFontFamily (unInternalSettings self)
-         (toJSString family')
+      (js_setFantasyFontFamily (self) (toJSString family')
          (toJSString script))
  
 foreign import javascript unsafe
         "$1[\"setPictographFontFamily\"]($2,\n$3)"
         js_setPictographFontFamily ::
-        JSRef InternalSettings -> JSString -> JSString -> IO ()
+        InternalSettings -> JSString -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/InternalSettings.setPictographFontFamily Mozilla InternalSettings.setPictographFontFamily documentation> 
 setPictographFontFamily ::
@@ -161,82 +153,76 @@
                           InternalSettings -> family' -> script -> m ()
 setPictographFontFamily self family' script
   = liftIO
-      (js_setPictographFontFamily (unInternalSettings self)
-         (toJSString family')
+      (js_setPictographFontFamily (self) (toJSString family')
          (toJSString script))
  
 foreign import javascript unsafe
         "$1[\"setFontFallbackPrefersPictographs\"]($2)"
         js_setFontFallbackPrefersPictographs ::
-        JSRef InternalSettings -> Bool -> IO ()
+        InternalSettings -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/InternalSettings.setFontFallbackPrefersPictographs Mozilla InternalSettings.setFontFallbackPrefersPictographs documentation> 
 setFontFallbackPrefersPictographs ::
                                   (MonadIO m) => InternalSettings -> Bool -> m ()
 setFontFallbackPrefersPictographs self preferPictographs
   = liftIO
-      (js_setFontFallbackPrefersPictographs (unInternalSettings self)
-         preferPictographs)
+      (js_setFontFallbackPrefersPictographs (self) preferPictographs)
  
 foreign import javascript unsafe
         "$1[\"setTextAutosizingEnabled\"]($2)" js_setTextAutosizingEnabled
-        :: JSRef InternalSettings -> Bool -> IO ()
+        :: InternalSettings -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/InternalSettings.setTextAutosizingEnabled Mozilla InternalSettings.setTextAutosizingEnabled documentation> 
 setTextAutosizingEnabled ::
                          (MonadIO m) => InternalSettings -> Bool -> m ()
 setTextAutosizingEnabled self enabled
-  = liftIO
-      (js_setTextAutosizingEnabled (unInternalSettings self) enabled)
+  = liftIO (js_setTextAutosizingEnabled (self) enabled)
  
 foreign import javascript unsafe
         "$1[\"setTextAutosizingWindowSizeOverride\"]($2,\n$3)"
         js_setTextAutosizingWindowSizeOverride ::
-        JSRef InternalSettings -> Int -> Int -> IO ()
+        InternalSettings -> Int -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/InternalSettings.setTextAutosizingWindowSizeOverride Mozilla InternalSettings.setTextAutosizingWindowSizeOverride documentation> 
 setTextAutosizingWindowSizeOverride ::
                                     (MonadIO m) => InternalSettings -> Int -> Int -> m ()
 setTextAutosizingWindowSizeOverride self width height
   = liftIO
-      (js_setTextAutosizingWindowSizeOverride (unInternalSettings self)
-         width
-         height)
+      (js_setTextAutosizingWindowSizeOverride (self) width height)
  
 foreign import javascript unsafe
         "$1[\"setTextAutosizingFontScaleFactor\"]($2)"
         js_setTextAutosizingFontScaleFactor ::
-        JSRef InternalSettings -> Float -> IO ()
+        InternalSettings -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/InternalSettings.setTextAutosizingFontScaleFactor Mozilla InternalSettings.setTextAutosizingFontScaleFactor documentation> 
 setTextAutosizingFontScaleFactor ::
                                  (MonadIO m) => InternalSettings -> Float -> m ()
 setTextAutosizingFontScaleFactor self fontScaleFactor
   = liftIO
-      (js_setTextAutosizingFontScaleFactor (unInternalSettings self)
-         fontScaleFactor)
+      (js_setTextAutosizingFontScaleFactor (self) fontScaleFactor)
  
 foreign import javascript unsafe "$1[\"setCSSShapesEnabled\"]($2)"
-        js_setCSSShapesEnabled :: JSRef InternalSettings -> Bool -> IO ()
+        js_setCSSShapesEnabled :: InternalSettings -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/InternalSettings.setCSSShapesEnabled Mozilla InternalSettings.setCSSShapesEnabled documentation> 
 setCSSShapesEnabled ::
                     (MonadIO m) => InternalSettings -> Bool -> m ()
 setCSSShapesEnabled self enabled
-  = liftIO (js_setCSSShapesEnabled (unInternalSettings self) enabled)
+  = liftIO (js_setCSSShapesEnabled (self) enabled)
  
 foreign import javascript unsafe "$1[\"setCanStartMedia\"]($2)"
-        js_setCanStartMedia :: JSRef InternalSettings -> Bool -> IO ()
+        js_setCanStartMedia :: InternalSettings -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/InternalSettings.setCanStartMedia Mozilla InternalSettings.setCanStartMedia documentation> 
 setCanStartMedia :: (MonadIO m) => InternalSettings -> Bool -> m ()
 setCanStartMedia self enabled
-  = liftIO (js_setCanStartMedia (unInternalSettings self) enabled)
+  = liftIO (js_setCanStartMedia (self) enabled)
  
 foreign import javascript unsafe
         "$1[\"setShouldDisplayTrackKind\"]($2,\n$3)"
         js_setShouldDisplayTrackKind ::
-        JSRef InternalSettings -> JSString -> Bool -> IO ()
+        InternalSettings -> JSString -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/InternalSettings.setShouldDisplayTrackKind Mozilla InternalSettings.setShouldDisplayTrackKind documentation> 
 setShouldDisplayTrackKind ::
@@ -244,54 +230,45 @@
                             InternalSettings -> kind -> Bool -> m ()
 setShouldDisplayTrackKind self kind enabled
   = liftIO
-      (js_setShouldDisplayTrackKind (unInternalSettings self)
-         (toJSString kind)
-         enabled)
+      (js_setShouldDisplayTrackKind (self) (toJSString kind) enabled)
  
 foreign import javascript unsafe
         "($1[\"shouldDisplayTrackKind\"]($2) ? 1 : 0)"
         js_shouldDisplayTrackKind ::
-        JSRef InternalSettings -> JSString -> IO Bool
+        InternalSettings -> JSString -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/InternalSettings.shouldDisplayTrackKind Mozilla InternalSettings.shouldDisplayTrackKind documentation> 
 shouldDisplayTrackKind ::
                        (MonadIO m, ToJSString trackKind) =>
                          InternalSettings -> trackKind -> m Bool
 shouldDisplayTrackKind self trackKind
-  = liftIO
-      (js_shouldDisplayTrackKind (unInternalSettings self)
-         (toJSString trackKind))
+  = liftIO (js_shouldDisplayTrackKind (self) (toJSString trackKind))
  
 foreign import javascript unsafe
         "$1[\"setDefaultVideoPosterURL\"]($2)" js_setDefaultVideoPosterURL
-        :: JSRef InternalSettings -> JSString -> IO ()
+        :: InternalSettings -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/InternalSettings.setDefaultVideoPosterURL Mozilla InternalSettings.setDefaultVideoPosterURL documentation> 
 setDefaultVideoPosterURL ::
                          (MonadIO m, ToJSString poster) =>
                            InternalSettings -> poster -> m ()
 setDefaultVideoPosterURL self poster
-  = liftIO
-      (js_setDefaultVideoPosterURL (unInternalSettings self)
-         (toJSString poster))
+  = liftIO (js_setDefaultVideoPosterURL (self) (toJSString poster))
  
 foreign import javascript unsafe
         "$1[\"setTimeWithoutMouseMovementBeforeHidingControls\"]($2)"
         js_setTimeWithoutMouseMovementBeforeHidingControls ::
-        JSRef InternalSettings -> Double -> IO ()
+        InternalSettings -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/InternalSettings.setTimeWithoutMouseMovementBeforeHidingControls Mozilla InternalSettings.setTimeWithoutMouseMovementBeforeHidingControls documentation> 
 setTimeWithoutMouseMovementBeforeHidingControls ::
                                                 (MonadIO m) => InternalSettings -> Double -> m ()
 setTimeWithoutMouseMovementBeforeHidingControls self time
   = liftIO
-      (js_setTimeWithoutMouseMovementBeforeHidingControls
-         (unInternalSettings self)
-         time)
+      (js_setTimeWithoutMouseMovementBeforeHidingControls (self) time)
  
 foreign import javascript unsafe "$1[\"setMediaTypeOverride\"]($2)"
-        js_setMediaTypeOverride ::
-        JSRef InternalSettings -> JSString -> IO ()
+        js_setMediaTypeOverride :: InternalSettings -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/InternalSettings.setMediaTypeOverride Mozilla InternalSettings.setMediaTypeOverride documentation> 
 setMediaTypeOverride ::
@@ -299,143 +276,123 @@
                        InternalSettings -> mediaTypeOverride -> m ()
 setMediaTypeOverride self mediaTypeOverride
   = liftIO
-      (js_setMediaTypeOverride (unInternalSettings self)
-         (toJSString mediaTypeOverride))
+      (js_setMediaTypeOverride (self) (toJSString mediaTypeOverride))
  
 foreign import javascript unsafe
         "$1[\"setPluginReplacementEnabled\"]($2)"
-        js_setPluginReplacementEnabled ::
-        JSRef InternalSettings -> Bool -> IO ()
+        js_setPluginReplacementEnabled :: InternalSettings -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/InternalSettings.setPluginReplacementEnabled Mozilla InternalSettings.setPluginReplacementEnabled documentation> 
 setPluginReplacementEnabled ::
                             (MonadIO m) => InternalSettings -> Bool -> m ()
 setPluginReplacementEnabled self enabled
-  = liftIO
-      (js_setPluginReplacementEnabled (unInternalSettings self) enabled)
+  = liftIO (js_setPluginReplacementEnabled (self) enabled)
  
 foreign import javascript unsafe "$1[\"setEditingBehavior\"]($2)"
-        js_setEditingBehavior ::
-        JSRef InternalSettings -> JSString -> IO ()
+        js_setEditingBehavior :: InternalSettings -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/InternalSettings.setEditingBehavior Mozilla InternalSettings.setEditingBehavior documentation> 
 setEditingBehavior ::
                    (MonadIO m, ToJSString behavior) =>
                      InternalSettings -> behavior -> m ()
 setEditingBehavior self behavior
-  = liftIO
-      (js_setEditingBehavior (unInternalSettings self)
-         (toJSString behavior))
+  = liftIO (js_setEditingBehavior (self) (toJSString behavior))
  
 foreign import javascript unsafe
         "$1[\"setShouldConvertPositionStyleOnCopy\"]($2)"
         js_setShouldConvertPositionStyleOnCopy ::
-        JSRef InternalSettings -> Bool -> IO ()
+        InternalSettings -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/InternalSettings.setShouldConvertPositionStyleOnCopy Mozilla InternalSettings.setShouldConvertPositionStyleOnCopy documentation> 
 setShouldConvertPositionStyleOnCopy ::
                                     (MonadIO m) => InternalSettings -> Bool -> m ()
 setShouldConvertPositionStyleOnCopy self convert
-  = liftIO
-      (js_setShouldConvertPositionStyleOnCopy (unInternalSettings self)
-         convert)
+  = liftIO (js_setShouldConvertPositionStyleOnCopy (self) convert)
  
 foreign import javascript unsafe
         "$1[\"setLangAttributeAwareFormControlUIEnabled\"]($2)"
         js_setLangAttributeAwareFormControlUIEnabled ::
-        JSRef InternalSettings -> Bool -> IO ()
+        InternalSettings -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/InternalSettings.setLangAttributeAwareFormControlUIEnabled Mozilla InternalSettings.setLangAttributeAwareFormControlUIEnabled documentation> 
 setLangAttributeAwareFormControlUIEnabled ::
                                           (MonadIO m) => InternalSettings -> Bool -> m ()
 setLangAttributeAwareFormControlUIEnabled self enabled
   = liftIO
-      (js_setLangAttributeAwareFormControlUIEnabled
-         (unInternalSettings self)
-         enabled)
+      (js_setLangAttributeAwareFormControlUIEnabled (self) enabled)
  
 foreign import javascript unsafe
         "$1[\"setStorageBlockingPolicy\"]($2)" js_setStorageBlockingPolicy
-        :: JSRef InternalSettings -> JSString -> IO ()
+        :: InternalSettings -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/InternalSettings.setStorageBlockingPolicy Mozilla InternalSettings.setStorageBlockingPolicy documentation> 
 setStorageBlockingPolicy ::
                          (MonadIO m, ToJSString policy) =>
                            InternalSettings -> policy -> m ()
 setStorageBlockingPolicy self policy
-  = liftIO
-      (js_setStorageBlockingPolicy (unInternalSettings self)
-         (toJSString policy))
+  = liftIO (js_setStorageBlockingPolicy (self) (toJSString policy))
  
 foreign import javascript unsafe "$1[\"setImagesEnabled\"]($2)"
-        js_setImagesEnabled :: JSRef InternalSettings -> Bool -> IO ()
+        js_setImagesEnabled :: InternalSettings -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/InternalSettings.setImagesEnabled Mozilla InternalSettings.setImagesEnabled documentation> 
 setImagesEnabled :: (MonadIO m) => InternalSettings -> Bool -> m ()
 setImagesEnabled self enabled
-  = liftIO (js_setImagesEnabled (unInternalSettings self) enabled)
+  = liftIO (js_setImagesEnabled (self) enabled)
  
 foreign import javascript unsafe
         "$1[\"setUseLegacyBackgroundSizeShorthandBehavior\"]($2)"
         js_setUseLegacyBackgroundSizeShorthandBehavior ::
-        JSRef InternalSettings -> Bool -> IO ()
+        InternalSettings -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/InternalSettings.setUseLegacyBackgroundSizeShorthandBehavior Mozilla InternalSettings.setUseLegacyBackgroundSizeShorthandBehavior documentation> 
 setUseLegacyBackgroundSizeShorthandBehavior ::
                                             (MonadIO m) => InternalSettings -> Bool -> m ()
 setUseLegacyBackgroundSizeShorthandBehavior self enabled
   = liftIO
-      (js_setUseLegacyBackgroundSizeShorthandBehavior
-         (unInternalSettings self)
-         enabled)
+      (js_setUseLegacyBackgroundSizeShorthandBehavior (self) enabled)
  
 foreign import javascript unsafe
         "$1[\"setAutoscrollForDragAndDropEnabled\"]($2)"
         js_setAutoscrollForDragAndDropEnabled ::
-        JSRef InternalSettings -> Bool -> IO ()
+        InternalSettings -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/InternalSettings.setAutoscrollForDragAndDropEnabled Mozilla InternalSettings.setAutoscrollForDragAndDropEnabled documentation> 
 setAutoscrollForDragAndDropEnabled ::
                                    (MonadIO m) => InternalSettings -> Bool -> m ()
 setAutoscrollForDragAndDropEnabled self enabled
-  = liftIO
-      (js_setAutoscrollForDragAndDropEnabled (unInternalSettings self)
-         enabled)
+  = liftIO (js_setAutoscrollForDragAndDropEnabled (self) enabled)
  
 foreign import javascript unsafe
         "$1[\"setBackgroundShouldExtendBeyondPage\"]($2)"
         js_setBackgroundShouldExtendBeyondPage ::
-        JSRef InternalSettings -> Bool -> IO ()
+        InternalSettings -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/InternalSettings.setBackgroundShouldExtendBeyondPage Mozilla InternalSettings.setBackgroundShouldExtendBeyondPage documentation> 
 setBackgroundShouldExtendBeyondPage ::
                                     (MonadIO m) => InternalSettings -> Bool -> m ()
 setBackgroundShouldExtendBeyondPage self hasExtendedBackground
   = liftIO
-      (js_setBackgroundShouldExtendBeyondPage (unInternalSettings self)
+      (js_setBackgroundShouldExtendBeyondPage (self)
          hasExtendedBackground)
  
 foreign import javascript unsafe
         "$1[\"setScrollingTreeIncludesFrames\"]($2)"
         js_setScrollingTreeIncludesFrames ::
-        JSRef InternalSettings -> Bool -> IO ()
+        InternalSettings -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/InternalSettings.setScrollingTreeIncludesFrames Mozilla InternalSettings.setScrollingTreeIncludesFrames documentation> 
 setScrollingTreeIncludesFrames ::
                                (MonadIO m) => InternalSettings -> Bool -> m ()
 setScrollingTreeIncludesFrames self enabled
-  = liftIO
-      (js_setScrollingTreeIncludesFrames (unInternalSettings self)
-         enabled)
+  = liftIO (js_setScrollingTreeIncludesFrames (self) enabled)
  
 foreign import javascript unsafe
         "$1[\"setMinimumTimerInterval\"]($2)" js_setMinimumTimerInterval ::
-        JSRef InternalSettings -> Double -> IO ()
+        InternalSettings -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/InternalSettings.setMinimumTimerInterval Mozilla InternalSettings.setMinimumTimerInterval documentation> 
 setMinimumTimerInterval ::
                         (MonadIO m) => InternalSettings -> Double -> m ()
 setMinimumTimerInterval self intervalInSeconds
-  = liftIO
-      (js_setMinimumTimerInterval (unInternalSettings self)
-         intervalInSeconds)
+  = liftIO (js_setMinimumTimerInterval (self) intervalInSeconds)
diff --git a/src/GHCJS/DOM/JSFFI/Generated/Internals.hs b/src/GHCJS/DOM/JSFFI/Generated/Internals.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/Internals.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/Internals.hs
@@ -171,7 +171,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -185,7 +185,7 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"address\"]($2)" js_address
-        :: JSRef Internals -> JSRef Node -> IO JSString
+        :: Internals -> Nullable Node -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.address Mozilla Internals.address documentation> 
 address ::
@@ -194,36 +194,33 @@
 address self node
   = liftIO
       (fromJSString <$>
-         (js_address (unInternals self)
-            (maybe jsNull (unNode . toNode) node)))
+         (js_address (self) (maybeToNullable (fmap toNode node))))
  
 foreign import javascript unsafe
         "($1[\"nodeNeedsStyleRecalc\"]($2) ? 1 : 0)"
-        js_nodeNeedsStyleRecalc :: JSRef Internals -> JSRef Node -> IO Bool
+        js_nodeNeedsStyleRecalc :: Internals -> Nullable Node -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.nodeNeedsStyleRecalc Mozilla Internals.nodeNeedsStyleRecalc documentation> 
 nodeNeedsStyleRecalc ::
                      (MonadIO m, IsNode node) => Internals -> Maybe node -> m Bool
 nodeNeedsStyleRecalc self node
   = liftIO
-      (js_nodeNeedsStyleRecalc (unInternals self)
-         (maybe jsNull (unNode . toNode) node))
+      (js_nodeNeedsStyleRecalc (self)
+         (maybeToNullable (fmap toNode node)))
  
 foreign import javascript unsafe "$1[\"description\"]($2)"
-        js_description :: JSRef Internals -> JSRef a -> IO JSString
+        js_description :: Internals -> JSRef -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.description Mozilla Internals.description documentation> 
 description ::
-            (MonadIO m, FromJSString result) =>
-              Internals -> JSRef a -> m result
+            (MonadIO m, FromJSString result) => Internals -> JSRef -> m result
 description self value
-  = liftIO
-      (fromJSString <$> (js_description (unInternals self) value))
+  = liftIO (fromJSString <$> (js_description (self) value))
  
 foreign import javascript unsafe
         "($1[\"hasPausedImageAnimations\"]($2) ? 1 : 0)"
         js_hasPausedImageAnimations ::
-        JSRef Internals -> JSRef Element -> IO Bool
+        Internals -> Nullable Element -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.hasPausedImageAnimations Mozilla Internals.hasPausedImageAnimations documentation> 
 hasPausedImageAnimations ::
@@ -231,12 +228,12 @@
                            Internals -> Maybe element -> m Bool
 hasPausedImageAnimations self element
   = liftIO
-      (js_hasPausedImageAnimations (unInternals self)
-         (maybe jsNull (unElement . toElement) element))
+      (js_hasPausedImageAnimations (self)
+         (maybeToNullable (fmap toElement element)))
  
 foreign import javascript unsafe
         "$1[\"elementRenderTreeAsText\"]($2)" js_elementRenderTreeAsText ::
-        JSRef Internals -> JSRef Element -> IO JSString
+        Internals -> Nullable Element -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.elementRenderTreeAsText Mozilla Internals.elementRenderTreeAsText documentation> 
 elementRenderTreeAsText ::
@@ -245,34 +242,32 @@
 elementRenderTreeAsText self element
   = liftIO
       (fromJSString <$>
-         (js_elementRenderTreeAsText (unInternals self)
-            (maybe jsNull (unElement . toElement) element)))
+         (js_elementRenderTreeAsText (self)
+            (maybeToNullable (fmap toElement element))))
  
 foreign import javascript unsafe
         "($1[\"isPreloaded\"]($2) ? 1 : 0)" js_isPreloaded ::
-        JSRef Internals -> JSString -> IO Bool
+        Internals -> JSString -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.isPreloaded Mozilla Internals.isPreloaded documentation> 
 isPreloaded ::
             (MonadIO m, ToJSString url) => Internals -> url -> m Bool
 isPreloaded self url
-  = liftIO (js_isPreloaded (unInternals self) (toJSString url))
+  = liftIO (js_isPreloaded (self) (toJSString url))
  
 foreign import javascript unsafe
         "($1[\"isLoadingFromMemoryCache\"]($2) ? 1 : 0)"
-        js_isLoadingFromMemoryCache ::
-        JSRef Internals -> JSString -> IO Bool
+        js_isLoadingFromMemoryCache :: Internals -> JSString -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.isLoadingFromMemoryCache Mozilla Internals.isLoadingFromMemoryCache documentation> 
 isLoadingFromMemoryCache ::
                          (MonadIO m, ToJSString url) => Internals -> url -> m Bool
 isLoadingFromMemoryCache self url
-  = liftIO
-      (js_isLoadingFromMemoryCache (unInternals self) (toJSString url))
+  = liftIO (js_isLoadingFromMemoryCache (self) (toJSString url))
  
 foreign import javascript unsafe "$1[\"xhrResponseSource\"]($2)"
         js_xhrResponseSource ::
-        JSRef Internals -> JSRef XMLHttpRequest -> IO JSString
+        Internals -> Nullable XMLHttpRequest -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.xhrResponseSource Mozilla Internals.xhrResponseSource documentation> 
 xhrResponseSource ::
@@ -281,52 +276,49 @@
 xhrResponseSource self xhr
   = liftIO
       (fromJSString <$>
-         (js_xhrResponseSource (unInternals self)
-            (maybe jsNull pToJSRef xhr)))
+         (js_xhrResponseSource (self) (maybeToNullable xhr)))
  
 foreign import javascript unsafe "$1[\"clearMemoryCache\"]()"
-        js_clearMemoryCache :: JSRef Internals -> IO ()
+        js_clearMemoryCache :: Internals -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.clearMemoryCache Mozilla Internals.clearMemoryCache documentation> 
 clearMemoryCache :: (MonadIO m) => Internals -> m ()
-clearMemoryCache self
-  = liftIO (js_clearMemoryCache (unInternals self))
+clearMemoryCache self = liftIO (js_clearMemoryCache (self))
  
 foreign import javascript unsafe
         "$1[\"pruneMemoryCacheToSize\"]($2)" js_pruneMemoryCacheToSize ::
-        JSRef Internals -> Int -> IO ()
+        Internals -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.pruneMemoryCacheToSize Mozilla Internals.pruneMemoryCacheToSize documentation> 
 pruneMemoryCacheToSize :: (MonadIO m) => Internals -> Int -> m ()
 pruneMemoryCacheToSize self size
-  = liftIO (js_pruneMemoryCacheToSize (unInternals self) size)
+  = liftIO (js_pruneMemoryCacheToSize (self) size)
  
 foreign import javascript unsafe "$1[\"memoryCacheSize\"]()"
-        js_memoryCacheSize :: JSRef Internals -> IO Int
+        js_memoryCacheSize :: Internals -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.memoryCacheSize Mozilla Internals.memoryCacheSize documentation> 
 memoryCacheSize :: (MonadIO m) => Internals -> m Int
-memoryCacheSize self
-  = liftIO (js_memoryCacheSize (unInternals self))
+memoryCacheSize self = liftIO (js_memoryCacheSize (self))
  
 foreign import javascript unsafe "$1[\"clearPageCache\"]()"
-        js_clearPageCache :: JSRef Internals -> IO ()
+        js_clearPageCache :: Internals -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.clearPageCache Mozilla Internals.clearPageCache documentation> 
 clearPageCache :: (MonadIO m) => Internals -> m ()
-clearPageCache self = liftIO (js_clearPageCache (unInternals self))
+clearPageCache self = liftIO (js_clearPageCache (self))
  
 foreign import javascript unsafe "$1[\"pageCacheSize\"]()"
-        js_pageCacheSize :: JSRef Internals -> IO Word
+        js_pageCacheSize :: Internals -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.pageCacheSize Mozilla Internals.pageCacheSize documentation> 
 pageCacheSize :: (MonadIO m) => Internals -> m Word
-pageCacheSize self = liftIO (js_pageCacheSize (unInternals self))
+pageCacheSize self = liftIO (js_pageCacheSize (self))
  
 foreign import javascript unsafe
         "$1[\"computedStyleIncludingVisitedInfo\"]($2)"
         js_computedStyleIncludingVisitedInfo ::
-        JSRef Internals -> JSRef Node -> IO (JSRef CSSStyleDeclaration)
+        Internals -> Nullable Node -> IO (Nullable CSSStyleDeclaration)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.computedStyleIncludingVisitedInfo Mozilla Internals.computedStyleIncludingVisitedInfo documentation> 
 computedStyleIncludingVisitedInfo ::
@@ -334,13 +326,13 @@
                                     Internals -> Maybe node -> m (Maybe CSSStyleDeclaration)
 computedStyleIncludingVisitedInfo self node
   = liftIO
-      ((js_computedStyleIncludingVisitedInfo (unInternals self)
-          (maybe jsNull (unNode . toNode) node))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_computedStyleIncludingVisitedInfo (self)
+            (maybeToNullable (fmap toNode node))))
  
 foreign import javascript unsafe "$1[\"ensureShadowRoot\"]($2)"
         js_ensureShadowRoot ::
-        JSRef Internals -> JSRef Element -> IO (JSRef Node)
+        Internals -> Nullable Element -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.ensureShadowRoot Mozilla Internals.ensureShadowRoot documentation> 
 ensureShadowRoot ::
@@ -348,13 +340,13 @@
                    Internals -> Maybe host -> m (Maybe Node)
 ensureShadowRoot self host
   = liftIO
-      ((js_ensureShadowRoot (unInternals self)
-          (maybe jsNull (unElement . toElement) host))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_ensureShadowRoot (self)
+            (maybeToNullable (fmap toElement host))))
  
 foreign import javascript unsafe "$1[\"createShadowRoot\"]($2)"
         js_createShadowRoot ::
-        JSRef Internals -> JSRef Element -> IO (JSRef Node)
+        Internals -> Nullable Element -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.createShadowRoot Mozilla Internals.createShadowRoot documentation> 
 createShadowRoot ::
@@ -362,13 +354,13 @@
                    Internals -> Maybe host -> m (Maybe Node)
 createShadowRoot self host
   = liftIO
-      ((js_createShadowRoot (unInternals self)
-          (maybe jsNull (unElement . toElement) host))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createShadowRoot (self)
+            (maybeToNullable (fmap toElement host))))
  
 foreign import javascript unsafe "$1[\"shadowRoot\"]($2)"
         js_shadowRoot ::
-        JSRef Internals -> JSRef Element -> IO (JSRef Node)
+        Internals -> Nullable Element -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.shadowRoot Mozilla Internals.shadowRoot documentation> 
 shadowRoot ::
@@ -376,12 +368,11 @@
              Internals -> Maybe host -> m (Maybe Node)
 shadowRoot self host
   = liftIO
-      ((js_shadowRoot (unInternals self)
-          (maybe jsNull (unElement . toElement) host))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_shadowRoot (self) (maybeToNullable (fmap toElement host))))
  
 foreign import javascript unsafe "$1[\"shadowRootType\"]($2)"
-        js_shadowRootType :: JSRef Internals -> JSRef Node -> IO JSString
+        js_shadowRootType :: Internals -> Nullable Node -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.shadowRootType Mozilla Internals.shadowRootType documentation> 
 shadowRootType ::
@@ -390,12 +381,11 @@
 shadowRootType self root
   = liftIO
       (fromJSString <$>
-         (js_shadowRootType (unInternals self)
-            (maybe jsNull (unNode . toNode) root)))
+         (js_shadowRootType (self) (maybeToNullable (fmap toNode root))))
  
 foreign import javascript unsafe "$1[\"includerFor\"]($2)"
         js_includerFor ::
-        JSRef Internals -> JSRef Node -> IO (JSRef Element)
+        Internals -> Nullable Node -> IO (Nullable Element)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.includerFor Mozilla Internals.includerFor documentation> 
 includerFor ::
@@ -403,13 +393,11 @@
               Internals -> Maybe node -> m (Maybe Element)
 includerFor self node
   = liftIO
-      ((js_includerFor (unInternals self)
-          (maybe jsNull (unNode . toNode) node))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_includerFor (self) (maybeToNullable (fmap toNode node))))
  
 foreign import javascript unsafe "$1[\"shadowPseudoId\"]($2)"
-        js_shadowPseudoId ::
-        JSRef Internals -> JSRef Element -> IO JSString
+        js_shadowPseudoId :: Internals -> Nullable Element -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.shadowPseudoId Mozilla Internals.shadowPseudoId documentation> 
 shadowPseudoId ::
@@ -418,12 +406,12 @@
 shadowPseudoId self element
   = liftIO
       (fromJSString <$>
-         (js_shadowPseudoId (unInternals self)
-            (maybe jsNull (unElement . toElement) element)))
+         (js_shadowPseudoId (self)
+            (maybeToNullable (fmap toElement element))))
  
 foreign import javascript unsafe
         "$1[\"setShadowPseudoId\"]($2, $3)" js_setShadowPseudoId ::
-        JSRef Internals -> JSRef Element -> JSString -> IO ()
+        Internals -> Nullable Element -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.setShadowPseudoId Mozilla Internals.setShadowPseudoId documentation> 
 setShadowPseudoId ::
@@ -431,13 +419,13 @@
                     Internals -> Maybe element -> id -> m ()
 setShadowPseudoId self element id
   = liftIO
-      (js_setShadowPseudoId (unInternals self)
-         (maybe jsNull (unElement . toElement) element)
+      (js_setShadowPseudoId (self)
+         (maybeToNullable (fmap toElement element))
          (toJSString id))
  
 foreign import javascript unsafe "$1[\"treeScopeRootNode\"]($2)"
         js_treeScopeRootNode ::
-        JSRef Internals -> JSRef Node -> IO (JSRef Node)
+        Internals -> Nullable Node -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.treeScopeRootNode Mozilla Internals.treeScopeRootNode documentation> 
 treeScopeRootNode ::
@@ -445,13 +433,12 @@
                     Internals -> Maybe node -> m (Maybe Node)
 treeScopeRootNode self node
   = liftIO
-      ((js_treeScopeRootNode (unInternals self)
-          (maybe jsNull (unNode . toNode) node))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_treeScopeRootNode (self) (maybeToNullable (fmap toNode node))))
  
 foreign import javascript unsafe "$1[\"parentTreeScope\"]($2)"
         js_parentTreeScope ::
-        JSRef Internals -> JSRef Node -> IO (JSRef Node)
+        Internals -> Nullable Node -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.parentTreeScope Mozilla Internals.parentTreeScope documentation> 
 parentTreeScope ::
@@ -459,60 +446,55 @@
                   Internals -> Maybe node -> m (Maybe Node)
 parentTreeScope self node
   = liftIO
-      ((js_parentTreeScope (unInternals self)
-          (maybe jsNull (unNode . toNode) node))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_parentTreeScope (self) (maybeToNullable (fmap toNode node))))
  
 foreign import javascript unsafe
         "$1[\"lastSpatialNavigationCandidateCount\"]()"
-        js_lastSpatialNavigationCandidateCount ::
-        JSRef Internals -> IO Word
+        js_lastSpatialNavigationCandidateCount :: Internals -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.lastSpatialNavigationCandidateCount Mozilla Internals.lastSpatialNavigationCandidateCount documentation> 
 lastSpatialNavigationCandidateCount ::
                                     (MonadIO m) => Internals -> m Word
 lastSpatialNavigationCandidateCount self
-  = liftIO
-      (js_lastSpatialNavigationCandidateCount (unInternals self))
+  = liftIO (js_lastSpatialNavigationCandidateCount (self))
  
 foreign import javascript unsafe
         "$1[\"numberOfActiveAnimations\"]()" js_numberOfActiveAnimations ::
-        JSRef Internals -> IO Word
+        Internals -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.numberOfActiveAnimations Mozilla Internals.numberOfActiveAnimations documentation> 
 numberOfActiveAnimations :: (MonadIO m) => Internals -> m Word
 numberOfActiveAnimations self
-  = liftIO (js_numberOfActiveAnimations (unInternals self))
+  = liftIO (js_numberOfActiveAnimations (self))
  
 foreign import javascript unsafe "$1[\"suspendAnimations\"]()"
-        js_suspendAnimations :: JSRef Internals -> IO ()
+        js_suspendAnimations :: Internals -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.suspendAnimations Mozilla Internals.suspendAnimations documentation> 
 suspendAnimations :: (MonadIO m) => Internals -> m ()
-suspendAnimations self
-  = liftIO (js_suspendAnimations (unInternals self))
+suspendAnimations self = liftIO (js_suspendAnimations (self))
  
 foreign import javascript unsafe "$1[\"resumeAnimations\"]()"
-        js_resumeAnimations :: JSRef Internals -> IO ()
+        js_resumeAnimations :: Internals -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.resumeAnimations Mozilla Internals.resumeAnimations documentation> 
 resumeAnimations :: (MonadIO m) => Internals -> m ()
-resumeAnimations self
-  = liftIO (js_resumeAnimations (unInternals self))
+resumeAnimations self = liftIO (js_resumeAnimations (self))
  
 foreign import javascript unsafe
         "($1[\"animationsAreSuspended\"]() ? 1 : 0)"
-        js_animationsAreSuspended :: JSRef Internals -> IO Bool
+        js_animationsAreSuspended :: Internals -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.animationsAreSuspended Mozilla Internals.animationsAreSuspended documentation> 
 animationsAreSuspended :: (MonadIO m) => Internals -> m Bool
 animationsAreSuspended self
-  = liftIO (js_animationsAreSuspended (unInternals self))
+  = liftIO (js_animationsAreSuspended (self))
  
 foreign import javascript unsafe
         "($1[\"pauseAnimationAtTimeOnElement\"]($2,\n$3, $4) ? 1 : 0)"
         js_pauseAnimationAtTimeOnElement ::
-        JSRef Internals -> JSString -> Double -> JSRef Element -> IO Bool
+        Internals -> JSString -> Double -> Nullable Element -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.pauseAnimationAtTimeOnElement Mozilla Internals.pauseAnimationAtTimeOnElement documentation> 
 pauseAnimationAtTimeOnElement ::
@@ -520,16 +502,15 @@
                                 Internals -> animationName -> Double -> Maybe element -> m Bool
 pauseAnimationAtTimeOnElement self animationName pauseTime element
   = liftIO
-      (js_pauseAnimationAtTimeOnElement (unInternals self)
-         (toJSString animationName)
+      (js_pauseAnimationAtTimeOnElement (self) (toJSString animationName)
          pauseTime
-         (maybe jsNull (unElement . toElement) element))
+         (maybeToNullable (fmap toElement element)))
  
 foreign import javascript unsafe
         "($1[\"pauseAnimationAtTimeOnPseudoElement\"]($2,\n$3, $4, $5) ? 1 : 0)"
         js_pauseAnimationAtTimeOnPseudoElement ::
-        JSRef Internals ->
-          JSString -> Double -> JSRef Element -> JSString -> IO Bool
+        Internals ->
+          JSString -> Double -> Nullable Element -> JSString -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.pauseAnimationAtTimeOnPseudoElement Mozilla Internals.pauseAnimationAtTimeOnPseudoElement documentation> 
 pauseAnimationAtTimeOnPseudoElement ::
@@ -541,16 +522,16 @@
 pauseAnimationAtTimeOnPseudoElement self animationName pauseTime
   element pseudoId
   = liftIO
-      (js_pauseAnimationAtTimeOnPseudoElement (unInternals self)
+      (js_pauseAnimationAtTimeOnPseudoElement (self)
          (toJSString animationName)
          pauseTime
-         (maybe jsNull (unElement . toElement) element)
+         (maybeToNullable (fmap toElement element))
          (toJSString pseudoId))
  
 foreign import javascript unsafe
         "($1[\"pauseTransitionAtTimeOnElement\"]($2,\n$3, $4) ? 1 : 0)"
         js_pauseTransitionAtTimeOnElement ::
-        JSRef Internals -> JSString -> Double -> JSRef Element -> IO Bool
+        Internals -> JSString -> Double -> Nullable Element -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.pauseTransitionAtTimeOnElement Mozilla Internals.pauseTransitionAtTimeOnElement documentation> 
 pauseTransitionAtTimeOnElement ::
@@ -558,16 +539,15 @@
                                  Internals -> propertyName -> Double -> Maybe element -> m Bool
 pauseTransitionAtTimeOnElement self propertyName pauseTime element
   = liftIO
-      (js_pauseTransitionAtTimeOnElement (unInternals self)
-         (toJSString propertyName)
+      (js_pauseTransitionAtTimeOnElement (self) (toJSString propertyName)
          pauseTime
-         (maybe jsNull (unElement . toElement) element))
+         (maybeToNullable (fmap toElement element)))
  
 foreign import javascript unsafe
         "($1[\"pauseTransitionAtTimeOnPseudoElement\"]($2,\n$3, $4, $5) ? 1 : 0)"
         js_pauseTransitionAtTimeOnPseudoElement ::
-        JSRef Internals ->
-          JSString -> Double -> JSRef Element -> JSString -> IO Bool
+        Internals ->
+          JSString -> Double -> Nullable Element -> JSString -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.pauseTransitionAtTimeOnPseudoElement Mozilla Internals.pauseTransitionAtTimeOnPseudoElement documentation> 
 pauseTransitionAtTimeOnPseudoElement ::
@@ -578,26 +558,24 @@
 pauseTransitionAtTimeOnPseudoElement self property pauseTime
   element pseudoId
   = liftIO
-      (js_pauseTransitionAtTimeOnPseudoElement (unInternals self)
+      (js_pauseTransitionAtTimeOnPseudoElement (self)
          (toJSString property)
          pauseTime
-         (maybe jsNull (unElement . toElement) element)
+         (maybeToNullable (fmap toElement element))
          (toJSString pseudoId))
  
 foreign import javascript unsafe "($1[\"attached\"]($2) ? 1 : 0)"
-        js_attached :: JSRef Internals -> JSRef Node -> IO Bool
+        js_attached :: Internals -> Nullable Node -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.attached Mozilla Internals.attached documentation> 
 attached ::
          (MonadIO m, IsNode node) => Internals -> Maybe node -> m Bool
 attached self node
-  = liftIO
-      (js_attached (unInternals self)
-         (maybe jsNull (unNode . toNode) node))
+  = liftIO (js_attached (self) (maybeToNullable (fmap toNode node)))
  
 foreign import javascript unsafe "$1[\"visiblePlaceholder\"]($2)"
         js_visiblePlaceholder ::
-        JSRef Internals -> JSRef Element -> IO JSString
+        Internals -> Nullable Element -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.visiblePlaceholder Mozilla Internals.visiblePlaceholder documentation> 
 visiblePlaceholder ::
@@ -606,13 +584,13 @@
 visiblePlaceholder self element
   = liftIO
       (fromJSString <$>
-         (js_visiblePlaceholder (unInternals self)
-            (maybe jsNull (unElement . toElement) element)))
+         (js_visiblePlaceholder (self)
+            (maybeToNullable (fmap toElement element))))
  
 foreign import javascript unsafe
         "$1[\"selectColorInColorChooser\"]($2,\n$3)"
         js_selectColorInColorChooser ::
-        JSRef Internals -> JSRef Element -> JSString -> IO ()
+        Internals -> Nullable Element -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.selectColorInColorChooser Mozilla Internals.selectColorInColorChooser documentation> 
 selectColorInColorChooser ::
@@ -620,27 +598,26 @@
                             Internals -> Maybe element -> colorValue -> m ()
 selectColorInColorChooser self element colorValue
   = liftIO
-      (js_selectColorInColorChooser (unInternals self)
-         (maybe jsNull (unElement . toElement) element)
+      (js_selectColorInColorChooser (self)
+         (maybeToNullable (fmap toElement element))
          (toJSString colorValue))
  
 foreign import javascript unsafe
         "$1[\"formControlStateOfPreviousHistoryItem\"]()"
-        js_formControlStateOfPreviousHistoryItem ::
-        JSRef Internals -> IO (JSRef [result])
+        js_formControlStateOfPreviousHistoryItem :: Internals -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.formControlStateOfPreviousHistoryItem Mozilla Internals.formControlStateOfPreviousHistoryItem documentation> 
 formControlStateOfPreviousHistoryItem ::
                                       (MonadIO m, FromJSString result) => Internals -> m [result]
 formControlStateOfPreviousHistoryItem self
   = liftIO
-      ((js_formControlStateOfPreviousHistoryItem (unInternals self)) >>=
+      ((js_formControlStateOfPreviousHistoryItem (self)) >>=
          fromJSRefUnchecked)
  
 foreign import javascript unsafe
         "$1[\"setFormControlStateOfPreviousHistoryItem\"]($2)"
         js_setFormControlStateOfPreviousHistoryItem ::
-        JSRef Internals -> JSRef [values] -> IO ()
+        Internals -> JSRef -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.setFormControlStateOfPreviousHistoryItem Mozilla Internals.setFormControlStateOfPreviousHistoryItem documentation> 
 setFormControlStateOfPreviousHistoryItem ::
@@ -650,22 +627,20 @@
   = liftIO
       (toJSRef values >>=
          \ values' ->
-           js_setFormControlStateOfPreviousHistoryItem (unInternals self)
-             values')
+           js_setFormControlStateOfPreviousHistoryItem (self) values')
  
 foreign import javascript unsafe "$1[\"absoluteCaretBounds\"]()"
-        js_absoluteCaretBounds :: JSRef Internals -> IO (JSRef ClientRect)
+        js_absoluteCaretBounds :: Internals -> IO (Nullable ClientRect)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.absoluteCaretBounds Mozilla Internals.absoluteCaretBounds documentation> 
 absoluteCaretBounds ::
                     (MonadIO m) => Internals -> m (Maybe ClientRect)
 absoluteCaretBounds self
-  = liftIO
-      ((js_absoluteCaretBounds (unInternals self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_absoluteCaretBounds (self)))
  
 foreign import javascript unsafe "$1[\"boundingBox\"]($2)"
         js_boundingBox ::
-        JSRef Internals -> JSRef Element -> IO (JSRef ClientRect)
+        Internals -> Nullable Element -> IO (Nullable ClientRect)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.boundingBox Mozilla Internals.boundingBox documentation> 
 boundingBox ::
@@ -673,35 +648,32 @@
               Internals -> Maybe element -> m (Maybe ClientRect)
 boundingBox self element
   = liftIO
-      ((js_boundingBox (unInternals self)
-          (maybe jsNull (unElement . toElement) element))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_boundingBox (self) (maybeToNullable (fmap toElement element))))
  
 foreign import javascript unsafe
         "$1[\"inspectorHighlightRects\"]()" js_inspectorHighlightRects ::
-        JSRef Internals -> IO (JSRef ClientRectList)
+        Internals -> IO (Nullable ClientRectList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.inspectorHighlightRects Mozilla Internals.inspectorHighlightRects documentation> 
 inspectorHighlightRects ::
                         (MonadIO m) => Internals -> m (Maybe ClientRectList)
 inspectorHighlightRects self
-  = liftIO
-      ((js_inspectorHighlightRects (unInternals self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_inspectorHighlightRects (self)))
  
 foreign import javascript unsafe
         "$1[\"inspectorHighlightObject\"]()" js_inspectorHighlightObject ::
-        JSRef Internals -> IO JSString
+        Internals -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.inspectorHighlightObject Mozilla Internals.inspectorHighlightObject documentation> 
 inspectorHighlightObject ::
                          (MonadIO m, FromJSString result) => Internals -> m result
 inspectorHighlightObject self
-  = liftIO
-      (fromJSString <$> (js_inspectorHighlightObject (unInternals self)))
+  = liftIO (fromJSString <$> (js_inspectorHighlightObject (self)))
  
 foreign import javascript unsafe
         "$1[\"markerCountForNode\"]($2, $3)" js_markerCountForNode ::
-        JSRef Internals -> JSRef Node -> JSString -> IO Word
+        Internals -> Nullable Node -> JSString -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.markerCountForNode Mozilla Internals.markerCountForNode documentation> 
 markerCountForNode ::
@@ -709,14 +681,13 @@
                      Internals -> Maybe node -> markerType -> m Word
 markerCountForNode self node markerType
   = liftIO
-      (js_markerCountForNode (unInternals self)
-         (maybe jsNull (unNode . toNode) node)
+      (js_markerCountForNode (self) (maybeToNullable (fmap toNode node))
          (toJSString markerType))
  
 foreign import javascript unsafe
         "$1[\"markerRangeForNode\"]($2, $3,\n$4)" js_markerRangeForNode ::
-        JSRef Internals ->
-          JSRef Node -> JSString -> Word -> IO (JSRef Range)
+        Internals ->
+          Nullable Node -> JSString -> Word -> IO (Nullable Range)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.markerRangeForNode Mozilla Internals.markerRangeForNode documentation> 
 markerRangeForNode ::
@@ -724,16 +695,15 @@
                      Internals -> Maybe node -> markerType -> Word -> m (Maybe Range)
 markerRangeForNode self node markerType index
   = liftIO
-      ((js_markerRangeForNode (unInternals self)
-          (maybe jsNull (unNode . toNode) node)
-          (toJSString markerType)
-          index)
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_markerRangeForNode (self) (maybeToNullable (fmap toNode node))
+            (toJSString markerType)
+            index))
  
 foreign import javascript unsafe
         "$1[\"markerDescriptionForNode\"]($2,\n$3, $4)"
         js_markerDescriptionForNode ::
-        JSRef Internals -> JSRef Node -> JSString -> Word -> IO JSString
+        Internals -> Nullable Node -> JSString -> Word -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.markerDescriptionForNode Mozilla Internals.markerDescriptionForNode documentation> 
 markerDescriptionForNode ::
@@ -743,71 +713,64 @@
 markerDescriptionForNode self node markerType index
   = liftIO
       (fromJSString <$>
-         (js_markerDescriptionForNode (unInternals self)
-            (maybe jsNull (unNode . toNode) node)
+         (js_markerDescriptionForNode (self)
+            (maybeToNullable (fmap toNode node))
             (toJSString markerType)
             index))
  
 foreign import javascript unsafe
         "$1[\"addTextMatchMarker\"]($2, $3)" js_addTextMatchMarker ::
-        JSRef Internals -> JSRef Range -> Bool -> IO ()
+        Internals -> Nullable Range -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.addTextMatchMarker Mozilla Internals.addTextMatchMarker documentation> 
 addTextMatchMarker ::
                    (MonadIO m) => Internals -> Maybe Range -> Bool -> m ()
 addTextMatchMarker self range isActive
   = liftIO
-      (js_addTextMatchMarker (unInternals self)
-         (maybe jsNull pToJSRef range)
-         isActive)
+      (js_addTextMatchMarker (self) (maybeToNullable range) isActive)
  
 foreign import javascript unsafe
         "$1[\"setMarkedTextMatchesAreHighlighted\"]($2)"
-        js_setMarkedTextMatchesAreHighlighted ::
-        JSRef Internals -> Bool -> IO ()
+        js_setMarkedTextMatchesAreHighlighted :: Internals -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.setMarkedTextMatchesAreHighlighted Mozilla Internals.setMarkedTextMatchesAreHighlighted documentation> 
 setMarkedTextMatchesAreHighlighted ::
                                    (MonadIO m) => Internals -> Bool -> m ()
 setMarkedTextMatchesAreHighlighted self flag
-  = liftIO
-      (js_setMarkedTextMatchesAreHighlighted (unInternals self) flag)
+  = liftIO (js_setMarkedTextMatchesAreHighlighted (self) flag)
  
 foreign import javascript unsafe "$1[\"invalidateFontCache\"]()"
-        js_invalidateFontCache :: JSRef Internals -> IO ()
+        js_invalidateFontCache :: Internals -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.invalidateFontCache Mozilla Internals.invalidateFontCache documentation> 
 invalidateFontCache :: (MonadIO m) => Internals -> m ()
-invalidateFontCache self
-  = liftIO (js_invalidateFontCache (unInternals self))
+invalidateFontCache self = liftIO (js_invalidateFontCache (self))
  
 foreign import javascript unsafe
         "$1[\"setScrollViewPosition\"]($2,\n$3)" js_setScrollViewPosition
-        :: JSRef Internals -> Int -> Int -> IO ()
+        :: Internals -> Int -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.setScrollViewPosition Mozilla Internals.setScrollViewPosition documentation> 
 setScrollViewPosition ::
                       (MonadIO m) => Internals -> Int -> Int -> m ()
 setScrollViewPosition self x y
-  = liftIO (js_setScrollViewPosition (unInternals self) x y)
+  = liftIO (js_setScrollViewPosition (self) x y)
  
 foreign import javascript unsafe
         "$1[\"setPagination\"]($2, $3, $4)" js_setPagination ::
-        JSRef Internals -> JSString -> Int -> Int -> IO ()
+        Internals -> JSString -> Int -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.setPagination Mozilla Internals.setPagination documentation> 
 setPagination ::
               (MonadIO m, ToJSString mode) =>
                 Internals -> mode -> Int -> Int -> m ()
 setPagination self mode gap pageLength
-  = liftIO
-      (js_setPagination (unInternals self) (toJSString mode) gap
-         pageLength)
+  = liftIO (js_setPagination (self) (toJSString mode) gap pageLength)
  
 foreign import javascript unsafe
         "$1[\"configurationForViewport\"]($2,\n$3, $4, $5, $6)"
         js_configurationForViewport ::
-        JSRef Internals -> Float -> Int -> Int -> Int -> Int -> IO JSString
+        Internals -> Float -> Int -> Int -> Int -> Int -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.configurationForViewport Mozilla Internals.configurationForViewport documentation> 
 configurationForViewport ::
@@ -817,8 +780,7 @@
   deviceHeight availableWidth availableHeight
   = liftIO
       (fromJSString <$>
-         (js_configurationForViewport (unInternals self) devicePixelRatio
-            deviceWidth
+         (js_configurationForViewport (self) devicePixelRatio deviceWidth
             deviceHeight
             availableWidth
             availableHeight))
@@ -826,7 +788,7 @@
 foreign import javascript unsafe
         "($1[\"wasLastChangeUserEdit\"]($2) ? 1 : 0)"
         js_wasLastChangeUserEdit ::
-        JSRef Internals -> JSRef Element -> IO Bool
+        Internals -> Nullable Element -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.wasLastChangeUserEdit Mozilla Internals.wasLastChangeUserEdit documentation> 
 wasLastChangeUserEdit ::
@@ -834,13 +796,13 @@
                         Internals -> Maybe textField -> m Bool
 wasLastChangeUserEdit self textField
   = liftIO
-      (js_wasLastChangeUserEdit (unInternals self)
-         (maybe jsNull (unElement . toElement) textField))
+      (js_wasLastChangeUserEdit (self)
+         (maybeToNullable (fmap toElement textField)))
  
 foreign import javascript unsafe
         "($1[\"elementShouldAutoComplete\"]($2) ? 1 : 0)"
         js_elementShouldAutoComplete ::
-        JSRef Internals -> JSRef Element -> IO Bool
+        Internals -> Nullable Element -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.elementShouldAutoComplete Mozilla Internals.elementShouldAutoComplete documentation> 
 elementShouldAutoComplete ::
@@ -848,12 +810,12 @@
                             Internals -> Maybe inputElement -> m Bool
 elementShouldAutoComplete self inputElement
   = liftIO
-      (js_elementShouldAutoComplete (unInternals self)
-         (maybe jsNull (unElement . toElement) inputElement))
+      (js_elementShouldAutoComplete (self)
+         (maybeToNullable (fmap toElement inputElement)))
  
 foreign import javascript unsafe "$1[\"setEditingValue\"]($2, $3)"
         js_setEditingValue ::
-        JSRef Internals -> JSRef Element -> JSString -> IO ()
+        Internals -> Nullable Element -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.setEditingValue Mozilla Internals.setEditingValue documentation> 
 setEditingValue ::
@@ -861,13 +823,12 @@
                   Internals -> Maybe inputElement -> value -> m ()
 setEditingValue self inputElement value
   = liftIO
-      (js_setEditingValue (unInternals self)
-         (maybe jsNull (unElement . toElement) inputElement)
+      (js_setEditingValue (self)
+         (maybeToNullable (fmap toElement inputElement))
          (toJSString value))
  
 foreign import javascript unsafe "$1[\"setAutofilled\"]($2, $3)"
-        js_setAutofilled ::
-        JSRef Internals -> JSRef Element -> Bool -> IO ()
+        js_setAutofilled :: Internals -> Nullable Element -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.setAutofilled Mozilla Internals.setAutofilled documentation> 
 setAutofilled ::
@@ -875,13 +836,13 @@
                 Internals -> Maybe inputElement -> Bool -> m ()
 setAutofilled self inputElement enabled
   = liftIO
-      (js_setAutofilled (unInternals self)
-         (maybe jsNull (unElement . toElement) inputElement)
+      (js_setAutofilled (self)
+         (maybeToNullable (fmap toElement inputElement))
          enabled)
  
 foreign import javascript unsafe
         "$1[\"countMatchesForText\"]($2,\n$3, $4)" js_countMatchesForText
-        :: JSRef Internals -> JSString -> Word -> JSString -> IO Word
+        :: Internals -> JSString -> Word -> JSString -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.countMatchesForText Mozilla Internals.countMatchesForText documentation> 
 countMatchesForText ::
@@ -889,23 +850,20 @@
                       Internals -> text -> Word -> markMatches -> m Word
 countMatchesForText self text findOptions markMatches
   = liftIO
-      (js_countMatchesForText (unInternals self) (toJSString text)
-         findOptions
+      (js_countMatchesForText (self) (toJSString text) findOptions
          (toJSString markMatches))
  
 foreign import javascript unsafe "$1[\"paintControlTints\"]()"
-        js_paintControlTints :: JSRef Internals -> IO ()
+        js_paintControlTints :: Internals -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.paintControlTints Mozilla Internals.paintControlTints documentation> 
 paintControlTints :: (MonadIO m) => Internals -> m ()
-paintControlTints self
-  = liftIO (js_paintControlTints (unInternals self))
+paintControlTints self = liftIO (js_paintControlTints (self))
  
 foreign import javascript unsafe
         "$1[\"scrollElementToRect\"]($2,\n$3, $4, $5, $6)"
         js_scrollElementToRect ::
-        JSRef Internals ->
-          JSRef Element -> Int -> Int -> Int -> Int -> IO ()
+        Internals -> Nullable Element -> Int -> Int -> Int -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.scrollElementToRect Mozilla Internals.scrollElementToRect documentation> 
 scrollElementToRect ::
@@ -913,8 +871,8 @@
                       Internals -> Maybe element -> Int -> Int -> Int -> Int -> m ()
 scrollElementToRect self element x y w h
   = liftIO
-      (js_scrollElementToRect (unInternals self)
-         (maybe jsNull (unElement . toElement) element)
+      (js_scrollElementToRect (self)
+         (maybeToNullable (fmap toElement element))
          x
          y
          w
@@ -923,7 +881,7 @@
 foreign import javascript unsafe
         "$1[\"rangeFromLocationAndLength\"]($2,\n$3, $4)"
         js_rangeFromLocationAndLength ::
-        JSRef Internals -> JSRef Element -> Int -> Int -> IO (JSRef Range)
+        Internals -> Nullable Element -> Int -> Int -> IO (Nullable Range)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.rangeFromLocationAndLength Mozilla Internals.rangeFromLocationAndLength documentation> 
 rangeFromLocationAndLength ::
@@ -931,15 +889,15 @@
                              Internals -> Maybe scope -> Int -> Int -> m (Maybe Range)
 rangeFromLocationAndLength self scope rangeLocation rangeLength
   = liftIO
-      ((js_rangeFromLocationAndLength (unInternals self)
-          (maybe jsNull (unElement . toElement) scope)
-          rangeLocation
-          rangeLength)
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_rangeFromLocationAndLength (self)
+            (maybeToNullable (fmap toElement scope))
+            rangeLocation
+            rangeLength))
  
 foreign import javascript unsafe
         "$1[\"locationFromRange\"]($2, $3)" js_locationFromRange ::
-        JSRef Internals -> JSRef Element -> JSRef Range -> IO Word
+        Internals -> Nullable Element -> Nullable Range -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.locationFromRange Mozilla Internals.locationFromRange documentation> 
 locationFromRange ::
@@ -947,13 +905,13 @@
                     Internals -> Maybe scope -> Maybe Range -> m Word
 locationFromRange self scope range
   = liftIO
-      (js_locationFromRange (unInternals self)
-         (maybe jsNull (unElement . toElement) scope)
-         (maybe jsNull pToJSRef range))
+      (js_locationFromRange (self)
+         (maybeToNullable (fmap toElement scope))
+         (maybeToNullable range))
  
 foreign import javascript unsafe "$1[\"lengthFromRange\"]($2, $3)"
         js_lengthFromRange ::
-        JSRef Internals -> JSRef Element -> JSRef Range -> IO Word
+        Internals -> Nullable Element -> Nullable Range -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.lengthFromRange Mozilla Internals.lengthFromRange documentation> 
 lengthFromRange ::
@@ -961,12 +919,11 @@
                   Internals -> Maybe scope -> Maybe Range -> m Word
 lengthFromRange self scope range
   = liftIO
-      (js_lengthFromRange (unInternals self)
-         (maybe jsNull (unElement . toElement) scope)
-         (maybe jsNull pToJSRef range))
+      (js_lengthFromRange (self) (maybeToNullable (fmap toElement scope))
+         (maybeToNullable range))
  
 foreign import javascript unsafe "$1[\"rangeAsText\"]($2)"
-        js_rangeAsText :: JSRef Internals -> JSRef Range -> IO JSString
+        js_rangeAsText :: Internals -> Nullable Range -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.rangeAsText Mozilla Internals.rangeAsText documentation> 
 rangeAsText ::
@@ -974,12 +931,11 @@
               Internals -> Maybe Range -> m result
 rangeAsText self range
   = liftIO
-      (fromJSString <$>
-         (js_rangeAsText (unInternals self) (maybe jsNull pToJSRef range)))
+      (fromJSString <$> (js_rangeAsText (self) (maybeToNullable range)))
  
 foreign import javascript unsafe "$1[\"subrange\"]($2, $3, $4)"
         js_subrange ::
-        JSRef Internals -> JSRef Range -> Int -> Int -> IO (JSRef Range)
+        Internals -> Nullable Range -> Int -> Int -> IO (Nullable Range)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.subrange Mozilla Internals.subrange documentation> 
 subrange ::
@@ -987,67 +943,64 @@
            Internals -> Maybe Range -> Int -> Int -> m (Maybe Range)
 subrange self range rangeLocation rangeLength
   = liftIO
-      ((js_subrange (unInternals self) (maybe jsNull pToJSRef range)
-          rangeLocation
-          rangeLength)
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_subrange (self) (maybeToNullable range) rangeLocation
+            rangeLength))
  
 foreign import javascript unsafe
         "$1[\"rangeForDictionaryLookupAtLocation\"]($2,\n$3)"
         js_rangeForDictionaryLookupAtLocation ::
-        JSRef Internals -> Int -> Int -> IO (JSRef Range)
+        Internals -> Int -> Int -> IO (Nullable Range)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.rangeForDictionaryLookupAtLocation Mozilla Internals.rangeForDictionaryLookupAtLocation documentation> 
 rangeForDictionaryLookupAtLocation ::
                                    (MonadIO m) => Internals -> Int -> Int -> m (Maybe Range)
 rangeForDictionaryLookupAtLocation self x y
   = liftIO
-      ((js_rangeForDictionaryLookupAtLocation (unInternals self) x y) >>=
-         fromJSRef)
+      (nullableToMaybe <$>
+         (js_rangeForDictionaryLookupAtLocation (self) x y))
  
 foreign import javascript unsafe
         "$1[\"setDelegatesScrolling\"]($2)" js_setDelegatesScrolling ::
-        JSRef Internals -> Bool -> IO ()
+        Internals -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.setDelegatesScrolling Mozilla Internals.setDelegatesScrolling documentation> 
 setDelegatesScrolling :: (MonadIO m) => Internals -> Bool -> m ()
 setDelegatesScrolling self enabled
-  = liftIO (js_setDelegatesScrolling (unInternals self) enabled)
+  = liftIO (js_setDelegatesScrolling (self) enabled)
  
 foreign import javascript unsafe
         "$1[\"lastSpellCheckRequestSequence\"]()"
-        js_lastSpellCheckRequestSequence :: JSRef Internals -> IO Int
+        js_lastSpellCheckRequestSequence :: Internals -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.lastSpellCheckRequestSequence Mozilla Internals.lastSpellCheckRequestSequence documentation> 
 lastSpellCheckRequestSequence :: (MonadIO m) => Internals -> m Int
 lastSpellCheckRequestSequence self
-  = liftIO (js_lastSpellCheckRequestSequence (unInternals self))
+  = liftIO (js_lastSpellCheckRequestSequence (self))
  
 foreign import javascript unsafe
         "$1[\"lastSpellCheckProcessedSequence\"]()"
-        js_lastSpellCheckProcessedSequence :: JSRef Internals -> IO Int
+        js_lastSpellCheckProcessedSequence :: Internals -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.lastSpellCheckProcessedSequence Mozilla Internals.lastSpellCheckProcessedSequence documentation> 
 lastSpellCheckProcessedSequence ::
                                 (MonadIO m) => Internals -> m Int
 lastSpellCheckProcessedSequence self
-  = liftIO (js_lastSpellCheckProcessedSequence (unInternals self))
+  = liftIO (js_lastSpellCheckProcessedSequence (self))
  
 foreign import javascript unsafe "$1[\"userPreferredLanguages\"]()"
-        js_userPreferredLanguages :: JSRef Internals -> IO (JSRef [result])
+        js_userPreferredLanguages :: Internals -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.userPreferredLanguages Mozilla Internals.userPreferredLanguages documentation> 
 userPreferredLanguages ::
                        (MonadIO m, FromJSString result) => Internals -> m [result]
 userPreferredLanguages self
   = liftIO
-      ((js_userPreferredLanguages (unInternals self)) >>=
-         fromJSRefUnchecked)
+      ((js_userPreferredLanguages (self)) >>= fromJSRefUnchecked)
  
 foreign import javascript unsafe
         "$1[\"setUserPreferredLanguages\"]($2)"
-        js_setUserPreferredLanguages ::
-        JSRef Internals -> JSRef [languages] -> IO ()
+        js_setUserPreferredLanguages :: Internals -> JSRef -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.setUserPreferredLanguages Mozilla Internals.setUserPreferredLanguages documentation> 
 setUserPreferredLanguages ::
@@ -1056,34 +1009,34 @@
 setUserPreferredLanguages self languages
   = liftIO
       (toJSRef languages >>=
-         \ languages' ->
-           js_setUserPreferredLanguages (unInternals self) languages')
+         \ languages' -> js_setUserPreferredLanguages (self) languages')
  
 foreign import javascript unsafe "$1[\"wheelEventHandlerCount\"]()"
-        js_wheelEventHandlerCount :: JSRef Internals -> IO Word
+        js_wheelEventHandlerCount :: Internals -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.wheelEventHandlerCount Mozilla Internals.wheelEventHandlerCount documentation> 
 wheelEventHandlerCount :: (MonadIO m) => Internals -> m Word
 wheelEventHandlerCount self
-  = liftIO (js_wheelEventHandlerCount (unInternals self))
+  = liftIO (js_wheelEventHandlerCount (self))
  
 foreign import javascript unsafe "$1[\"touchEventHandlerCount\"]()"
-        js_touchEventHandlerCount :: JSRef Internals -> IO Word
+        js_touchEventHandlerCount :: Internals -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.touchEventHandlerCount Mozilla Internals.touchEventHandlerCount documentation> 
 touchEventHandlerCount :: (MonadIO m) => Internals -> m Word
 touchEventHandlerCount self
-  = liftIO (js_touchEventHandlerCount (unInternals self))
+  = liftIO (js_touchEventHandlerCount (self))
  
 foreign import javascript unsafe
         "$1[\"nodesFromRect\"]($2, $3, $4,\n$5, $6, $7, $8, $9, $10, $11)"
         js_nodesFromRect ::
-        JSRef Internals ->
-          JSRef Document ->
+        Internals ->
+          Nullable Document ->
             Int ->
               Int ->
                 Word ->
-                  Word -> Word -> Word -> Bool -> Bool -> Bool -> IO (JSRef NodeList)
+                  Word ->
+                    Word -> Word -> Bool -> Bool -> Bool -> IO (Nullable NodeList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.nodesFromRect Mozilla Internals.nodesFromRect documentation> 
 nodesFromRect ::
@@ -1098,183 +1051,169 @@
   bottomPadding leftPadding ignoreClipping allowShadowContent
   allowChildFrameContent
   = liftIO
-      ((js_nodesFromRect (unInternals self)
-          (maybe jsNull (unDocument . toDocument) document)
-          x
-          y
-          topPadding
-          rightPadding
-          bottomPadding
-          leftPadding
-          ignoreClipping
-          allowShadowContent
-          allowChildFrameContent)
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_nodesFromRect (self)
+            (maybeToNullable (fmap toDocument document))
+            x
+            y
+            topPadding
+            rightPadding
+            bottomPadding
+            leftPadding
+            ignoreClipping
+            allowShadowContent
+            allowChildFrameContent))
  
 foreign import javascript unsafe "$1[\"parserMetaData\"]($2)"
-        js_parserMetaData :: JSRef Internals -> JSRef a -> IO JSString
+        js_parserMetaData :: Internals -> JSRef -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.parserMetaData Mozilla Internals.parserMetaData documentation> 
 parserMetaData ::
-               (MonadIO m, FromJSString result) =>
-                 Internals -> JSRef a -> m result
+               (MonadIO m, FromJSString result) => Internals -> JSRef -> m result
 parserMetaData self func
-  = liftIO
-      (fromJSString <$> (js_parserMetaData (unInternals self) func))
+  = liftIO (fromJSString <$> (js_parserMetaData (self) func))
  
 foreign import javascript unsafe
         "$1[\"updateEditorUINowIfScheduled\"]()"
-        js_updateEditorUINowIfScheduled :: JSRef Internals -> IO ()
+        js_updateEditorUINowIfScheduled :: Internals -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.updateEditorUINowIfScheduled Mozilla Internals.updateEditorUINowIfScheduled documentation> 
 updateEditorUINowIfScheduled :: (MonadIO m) => Internals -> m ()
 updateEditorUINowIfScheduled self
-  = liftIO (js_updateEditorUINowIfScheduled (unInternals self))
+  = liftIO (js_updateEditorUINowIfScheduled (self))
  
 foreign import javascript unsafe
         "($1[\"hasSpellingMarker\"]($2,\n$3) ? 1 : 0)" js_hasSpellingMarker
-        :: JSRef Internals -> Int -> Int -> IO Bool
+        :: Internals -> Int -> Int -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.hasSpellingMarker Mozilla Internals.hasSpellingMarker documentation> 
 hasSpellingMarker ::
                   (MonadIO m) => Internals -> Int -> Int -> m Bool
 hasSpellingMarker self from length
-  = liftIO (js_hasSpellingMarker (unInternals self) from length)
+  = liftIO (js_hasSpellingMarker (self) from length)
  
 foreign import javascript unsafe
         "($1[\"hasGrammarMarker\"]($2,\n$3) ? 1 : 0)" js_hasGrammarMarker
-        :: JSRef Internals -> Int -> Int -> IO Bool
+        :: Internals -> Int -> Int -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.hasGrammarMarker Mozilla Internals.hasGrammarMarker documentation> 
 hasGrammarMarker ::
                  (MonadIO m) => Internals -> Int -> Int -> m Bool
 hasGrammarMarker self from length
-  = liftIO (js_hasGrammarMarker (unInternals self) from length)
+  = liftIO (js_hasGrammarMarker (self) from length)
  
 foreign import javascript unsafe
         "($1[\"hasAutocorrectedMarker\"]($2,\n$3) ? 1 : 0)"
-        js_hasAutocorrectedMarker ::
-        JSRef Internals -> Int -> Int -> IO Bool
+        js_hasAutocorrectedMarker :: Internals -> Int -> Int -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.hasAutocorrectedMarker Mozilla Internals.hasAutocorrectedMarker documentation> 
 hasAutocorrectedMarker ::
                        (MonadIO m) => Internals -> Int -> Int -> m Bool
 hasAutocorrectedMarker self from length
-  = liftIO (js_hasAutocorrectedMarker (unInternals self) from length)
+  = liftIO (js_hasAutocorrectedMarker (self) from length)
  
 foreign import javascript unsafe
         "$1[\"setContinuousSpellCheckingEnabled\"]($2)"
-        js_setContinuousSpellCheckingEnabled ::
-        JSRef Internals -> Bool -> IO ()
+        js_setContinuousSpellCheckingEnabled :: Internals -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.setContinuousSpellCheckingEnabled Mozilla Internals.setContinuousSpellCheckingEnabled documentation> 
 setContinuousSpellCheckingEnabled ::
                                   (MonadIO m) => Internals -> Bool -> m ()
 setContinuousSpellCheckingEnabled self enabled
-  = liftIO
-      (js_setContinuousSpellCheckingEnabled (unInternals self) enabled)
+  = liftIO (js_setContinuousSpellCheckingEnabled (self) enabled)
  
 foreign import javascript unsafe
         "$1[\"setAutomaticQuoteSubstitutionEnabled\"]($2)"
         js_setAutomaticQuoteSubstitutionEnabled ::
-        JSRef Internals -> Bool -> IO ()
+        Internals -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.setAutomaticQuoteSubstitutionEnabled Mozilla Internals.setAutomaticQuoteSubstitutionEnabled documentation> 
 setAutomaticQuoteSubstitutionEnabled ::
                                      (MonadIO m) => Internals -> Bool -> m ()
 setAutomaticQuoteSubstitutionEnabled self enabled
-  = liftIO
-      (js_setAutomaticQuoteSubstitutionEnabled (unInternals self)
-         enabled)
+  = liftIO (js_setAutomaticQuoteSubstitutionEnabled (self) enabled)
  
 foreign import javascript unsafe
         "$1[\"setAutomaticLinkDetectionEnabled\"]($2)"
-        js_setAutomaticLinkDetectionEnabled ::
-        JSRef Internals -> Bool -> IO ()
+        js_setAutomaticLinkDetectionEnabled :: Internals -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.setAutomaticLinkDetectionEnabled Mozilla Internals.setAutomaticLinkDetectionEnabled documentation> 
 setAutomaticLinkDetectionEnabled ::
                                  (MonadIO m) => Internals -> Bool -> m ()
 setAutomaticLinkDetectionEnabled self enabled
-  = liftIO
-      (js_setAutomaticLinkDetectionEnabled (unInternals self) enabled)
+  = liftIO (js_setAutomaticLinkDetectionEnabled (self) enabled)
  
 foreign import javascript unsafe
         "$1[\"setAutomaticDashSubstitutionEnabled\"]($2)"
         js_setAutomaticDashSubstitutionEnabled ::
-        JSRef Internals -> Bool -> IO ()
+        Internals -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.setAutomaticDashSubstitutionEnabled Mozilla Internals.setAutomaticDashSubstitutionEnabled documentation> 
 setAutomaticDashSubstitutionEnabled ::
                                     (MonadIO m) => Internals -> Bool -> m ()
 setAutomaticDashSubstitutionEnabled self enabled
-  = liftIO
-      (js_setAutomaticDashSubstitutionEnabled (unInternals self) enabled)
+  = liftIO (js_setAutomaticDashSubstitutionEnabled (self) enabled)
  
 foreign import javascript unsafe
         "$1[\"setAutomaticTextReplacementEnabled\"]($2)"
-        js_setAutomaticTextReplacementEnabled ::
-        JSRef Internals -> Bool -> IO ()
+        js_setAutomaticTextReplacementEnabled :: Internals -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.setAutomaticTextReplacementEnabled Mozilla Internals.setAutomaticTextReplacementEnabled documentation> 
 setAutomaticTextReplacementEnabled ::
                                    (MonadIO m) => Internals -> Bool -> m ()
 setAutomaticTextReplacementEnabled self enabled
-  = liftIO
-      (js_setAutomaticTextReplacementEnabled (unInternals self) enabled)
+  = liftIO (js_setAutomaticTextReplacementEnabled (self) enabled)
  
 foreign import javascript unsafe
         "$1[\"setAutomaticSpellingCorrectionEnabled\"]($2)"
         js_setAutomaticSpellingCorrectionEnabled ::
-        JSRef Internals -> Bool -> IO ()
+        Internals -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.setAutomaticSpellingCorrectionEnabled Mozilla Internals.setAutomaticSpellingCorrectionEnabled documentation> 
 setAutomaticSpellingCorrectionEnabled ::
                                       (MonadIO m) => Internals -> Bool -> m ()
 setAutomaticSpellingCorrectionEnabled self enabled
-  = liftIO
-      (js_setAutomaticSpellingCorrectionEnabled (unInternals self)
-         enabled)
+  = liftIO (js_setAutomaticSpellingCorrectionEnabled (self) enabled)
  
 foreign import javascript unsafe
         "($1[\"isOverwriteModeEnabled\"]() ? 1 : 0)"
-        js_isOverwriteModeEnabled :: JSRef Internals -> IO Bool
+        js_isOverwriteModeEnabled :: Internals -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.isOverwriteModeEnabled Mozilla Internals.isOverwriteModeEnabled documentation> 
 isOverwriteModeEnabled :: (MonadIO m) => Internals -> m Bool
 isOverwriteModeEnabled self
-  = liftIO (js_isOverwriteModeEnabled (unInternals self))
+  = liftIO (js_isOverwriteModeEnabled (self))
  
 foreign import javascript unsafe
         "$1[\"toggleOverwriteModeEnabled\"]()"
-        js_toggleOverwriteModeEnabled :: JSRef Internals -> IO ()
+        js_toggleOverwriteModeEnabled :: Internals -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.toggleOverwriteModeEnabled Mozilla Internals.toggleOverwriteModeEnabled documentation> 
 toggleOverwriteModeEnabled :: (MonadIO m) => Internals -> m ()
 toggleOverwriteModeEnabled self
-  = liftIO (js_toggleOverwriteModeEnabled (unInternals self))
+  = liftIO (js_toggleOverwriteModeEnabled (self))
  
 foreign import javascript unsafe
         "$1[\"numberOfScrollableAreas\"]()" js_numberOfScrollableAreas ::
-        JSRef Internals -> IO Word
+        Internals -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.numberOfScrollableAreas Mozilla Internals.numberOfScrollableAreas documentation> 
 numberOfScrollableAreas :: (MonadIO m) => Internals -> m Word
 numberOfScrollableAreas self
-  = liftIO (js_numberOfScrollableAreas (unInternals self))
+  = liftIO (js_numberOfScrollableAreas (self))
  
 foreign import javascript unsafe
         "($1[\"isPageBoxVisible\"]($2) ? 1 : 0)" js_isPageBoxVisible ::
-        JSRef Internals -> Int -> IO Bool
+        Internals -> Int -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.isPageBoxVisible Mozilla Internals.isPageBoxVisible documentation> 
 isPageBoxVisible :: (MonadIO m) => Internals -> Int -> m Bool
 isPageBoxVisible self pageNumber
-  = liftIO (js_isPageBoxVisible (unInternals self) pageNumber)
+  = liftIO (js_isPageBoxVisible (self) pageNumber)
  
 foreign import javascript unsafe "$1[\"layerTreeAsText\"]($2, $3)"
         js_layerTreeAsText ::
-        JSRef Internals -> JSRef Document -> Word -> IO JSString
+        Internals -> Nullable Document -> Word -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.layerTreeAsText Mozilla Internals.layerTreeAsText documentation> 
 layerTreeAsText ::
@@ -1283,93 +1222,87 @@
 layerTreeAsText self document flags
   = liftIO
       (fromJSString <$>
-         (js_layerTreeAsText (unInternals self)
-            (maybe jsNull (unDocument . toDocument) document)
+         (js_layerTreeAsText (self)
+            (maybeToNullable (fmap toDocument document))
             flags))
  
 foreign import javascript unsafe
         "$1[\"scrollingStateTreeAsText\"]()" js_scrollingStateTreeAsText ::
-        JSRef Internals -> IO JSString
+        Internals -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.scrollingStateTreeAsText Mozilla Internals.scrollingStateTreeAsText documentation> 
 scrollingStateTreeAsText ::
                          (MonadIO m, FromJSString result) => Internals -> m result
 scrollingStateTreeAsText self
-  = liftIO
-      (fromJSString <$> (js_scrollingStateTreeAsText (unInternals self)))
+  = liftIO (fromJSString <$> (js_scrollingStateTreeAsText (self)))
  
 foreign import javascript unsafe
         "$1[\"mainThreadScrollingReasons\"]()"
-        js_mainThreadScrollingReasons :: JSRef Internals -> IO JSString
+        js_mainThreadScrollingReasons :: Internals -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.mainThreadScrollingReasons Mozilla Internals.mainThreadScrollingReasons documentation> 
 mainThreadScrollingReasons ::
                            (MonadIO m, FromJSString result) => Internals -> m result
 mainThreadScrollingReasons self
-  = liftIO
-      (fromJSString <$>
-         (js_mainThreadScrollingReasons (unInternals self)))
+  = liftIO (fromJSString <$> (js_mainThreadScrollingReasons (self)))
  
 foreign import javascript unsafe "$1[\"nonFastScrollableRects\"]()"
         js_nonFastScrollableRects ::
-        JSRef Internals -> IO (JSRef ClientRectList)
+        Internals -> IO (Nullable ClientRectList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.nonFastScrollableRects Mozilla Internals.nonFastScrollableRects documentation> 
 nonFastScrollableRects ::
                        (MonadIO m) => Internals -> m (Maybe ClientRectList)
 nonFastScrollableRects self
-  = liftIO
-      ((js_nonFastScrollableRects (unInternals self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_nonFastScrollableRects (self)))
  
 foreign import javascript unsafe "$1[\"repaintRectsAsText\"]()"
-        js_repaintRectsAsText :: JSRef Internals -> IO JSString
+        js_repaintRectsAsText :: Internals -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.repaintRectsAsText Mozilla Internals.repaintRectsAsText documentation> 
 repaintRectsAsText ::
                    (MonadIO m, FromJSString result) => Internals -> m result
 repaintRectsAsText self
-  = liftIO
-      (fromJSString <$> (js_repaintRectsAsText (unInternals self)))
+  = liftIO (fromJSString <$> (js_repaintRectsAsText (self)))
  
 foreign import javascript unsafe
         "$1[\"garbageCollectDocumentResources\"]()"
-        js_garbageCollectDocumentResources :: JSRef Internals -> IO ()
+        js_garbageCollectDocumentResources :: Internals -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.garbageCollectDocumentResources Mozilla Internals.garbageCollectDocumentResources documentation> 
 garbageCollectDocumentResources :: (MonadIO m) => Internals -> m ()
 garbageCollectDocumentResources self
-  = liftIO (js_garbageCollectDocumentResources (unInternals self))
+  = liftIO (js_garbageCollectDocumentResources (self))
  
 foreign import javascript unsafe "$1[\"allowRoundingHacks\"]()"
-        js_allowRoundingHacks :: JSRef Internals -> IO ()
+        js_allowRoundingHacks :: Internals -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.allowRoundingHacks Mozilla Internals.allowRoundingHacks documentation> 
 allowRoundingHacks :: (MonadIO m) => Internals -> m ()
-allowRoundingHacks self
-  = liftIO (js_allowRoundingHacks (unInternals self))
+allowRoundingHacks self = liftIO (js_allowRoundingHacks (self))
  
 foreign import javascript unsafe "$1[\"insertAuthorCSS\"]($2)"
-        js_insertAuthorCSS :: JSRef Internals -> JSString -> IO ()
+        js_insertAuthorCSS :: Internals -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.insertAuthorCSS Mozilla Internals.insertAuthorCSS documentation> 
 insertAuthorCSS ::
                 (MonadIO m, ToJSString css) => Internals -> css -> m ()
 insertAuthorCSS self css
-  = liftIO (js_insertAuthorCSS (unInternals self) (toJSString css))
+  = liftIO (js_insertAuthorCSS (self) (toJSString css))
  
 foreign import javascript unsafe "$1[\"insertUserCSS\"]($2)"
-        js_insertUserCSS :: JSRef Internals -> JSString -> IO ()
+        js_insertUserCSS :: Internals -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.insertUserCSS Mozilla Internals.insertUserCSS documentation> 
 insertUserCSS ::
               (MonadIO m, ToJSString css) => Internals -> css -> m ()
 insertUserCSS self css
-  = liftIO (js_insertUserCSS (unInternals self) (toJSString css))
+  = liftIO (js_insertUserCSS (self) (toJSString css))
  
 foreign import javascript unsafe
         "$1[\"setBatteryStatus\"]($2, $3,\n$4, $5, $6)" js_setBatteryStatus
         ::
-        JSRef Internals ->
+        Internals ->
           JSString -> Bool -> Double -> Double -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.setBatteryStatus Mozilla Internals.setBatteryStatus documentation> 
@@ -1380,16 +1313,14 @@
 setBatteryStatus self eventType charging chargingTime
   dischargingTime level
   = liftIO
-      (js_setBatteryStatus (unInternals self) (toJSString eventType)
-         charging
+      (js_setBatteryStatus (self) (toJSString eventType) charging
          chargingTime
          dischargingTime
          level)
  
 foreign import javascript unsafe
         "$1[\"setDeviceProximity\"]($2, $3,\n$4, $5)" js_setDeviceProximity
-        ::
-        JSRef Internals -> JSString -> Double -> Double -> Double -> IO ()
+        :: Internals -> JSString -> Double -> Double -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.setDeviceProximity Mozilla Internals.setDeviceProximity documentation> 
 setDeviceProximity ::
@@ -1397,87 +1328,77 @@
                      Internals -> eventType -> Double -> Double -> Double -> m ()
 setDeviceProximity self eventType value min max
   = liftIO
-      (js_setDeviceProximity (unInternals self) (toJSString eventType)
-         value
-         min
-         max)
+      (js_setDeviceProximity (self) (toJSString eventType) value min max)
  
 foreign import javascript unsafe "$1[\"numberOfLiveNodes\"]()"
-        js_numberOfLiveNodes :: JSRef Internals -> IO Word
+        js_numberOfLiveNodes :: Internals -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.numberOfLiveNodes Mozilla Internals.numberOfLiveNodes documentation> 
 numberOfLiveNodes :: (MonadIO m) => Internals -> m Word
-numberOfLiveNodes self
-  = liftIO (js_numberOfLiveNodes (unInternals self))
+numberOfLiveNodes self = liftIO (js_numberOfLiveNodes (self))
  
 foreign import javascript unsafe "$1[\"numberOfLiveDocuments\"]()"
-        js_numberOfLiveDocuments :: JSRef Internals -> IO Word
+        js_numberOfLiveDocuments :: Internals -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.numberOfLiveDocuments Mozilla Internals.numberOfLiveDocuments documentation> 
 numberOfLiveDocuments :: (MonadIO m) => Internals -> m Word
 numberOfLiveDocuments self
-  = liftIO (js_numberOfLiveDocuments (unInternals self))
+  = liftIO (js_numberOfLiveDocuments (self))
  
 foreign import javascript unsafe
         "$1[\"consoleMessageArgumentCounts\"]()"
-        js_consoleMessageArgumentCounts ::
-        JSRef Internals -> IO (JSRef [result])
+        js_consoleMessageArgumentCounts :: Internals -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.consoleMessageArgumentCounts Mozilla Internals.consoleMessageArgumentCounts documentation> 
 consoleMessageArgumentCounts ::
                              (MonadIO m, FromJSString result) => Internals -> m [result]
 consoleMessageArgumentCounts self
   = liftIO
-      ((js_consoleMessageArgumentCounts (unInternals self)) >>=
-         fromJSRefUnchecked)
+      ((js_consoleMessageArgumentCounts (self)) >>= fromJSRefUnchecked)
  
 foreign import javascript unsafe
         "$1[\"openDummyInspectorFrontend\"]($2)"
         js_openDummyInspectorFrontend ::
-        JSRef Internals -> JSString -> IO (JSRef Window)
+        Internals -> JSString -> IO (Nullable Window)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.openDummyInspectorFrontend Mozilla Internals.openDummyInspectorFrontend documentation> 
 openDummyInspectorFrontend ::
                            (MonadIO m, ToJSString url) => Internals -> url -> m (Maybe Window)
 openDummyInspectorFrontend self url
   = liftIO
-      ((js_openDummyInspectorFrontend (unInternals self)
-          (toJSString url))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_openDummyInspectorFrontend (self) (toJSString url)))
  
 foreign import javascript unsafe
         "$1[\"closeDummyInspectorFrontend\"]()"
-        js_closeDummyInspectorFrontend :: JSRef Internals -> IO ()
+        js_closeDummyInspectorFrontend :: Internals -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.closeDummyInspectorFrontend Mozilla Internals.closeDummyInspectorFrontend documentation> 
 closeDummyInspectorFrontend :: (MonadIO m) => Internals -> m ()
 closeDummyInspectorFrontend self
-  = liftIO (js_closeDummyInspectorFrontend (unInternals self))
+  = liftIO (js_closeDummyInspectorFrontend (self))
  
 foreign import javascript unsafe
         "$1[\"setJavaScriptProfilingEnabled\"]($2)"
-        js_setJavaScriptProfilingEnabled ::
-        JSRef Internals -> Bool -> IO ()
+        js_setJavaScriptProfilingEnabled :: Internals -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.setJavaScriptProfilingEnabled Mozilla Internals.setJavaScriptProfilingEnabled documentation> 
 setJavaScriptProfilingEnabled ::
                               (MonadIO m) => Internals -> Bool -> m ()
 setJavaScriptProfilingEnabled self creates
-  = liftIO
-      (js_setJavaScriptProfilingEnabled (unInternals self) creates)
+  = liftIO (js_setJavaScriptProfilingEnabled (self) creates)
  
 foreign import javascript unsafe
         "$1[\"setInspectorIsUnderTest\"]($2)" js_setInspectorIsUnderTest ::
-        JSRef Internals -> Bool -> IO ()
+        Internals -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.setInspectorIsUnderTest Mozilla Internals.setInspectorIsUnderTest documentation> 
 setInspectorIsUnderTest :: (MonadIO m) => Internals -> Bool -> m ()
 setInspectorIsUnderTest self isUnderTest
-  = liftIO
-      (js_setInspectorIsUnderTest (unInternals self) isUnderTest)
+  = liftIO (js_setInspectorIsUnderTest (self) isUnderTest)
  
 foreign import javascript unsafe "$1[\"counterValue\"]($2)"
-        js_counterValue :: JSRef Internals -> JSRef Element -> IO JSString
+        js_counterValue :: Internals -> Nullable Element -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.counterValue Mozilla Internals.counterValue documentation> 
 counterValue ::
@@ -1486,12 +1407,12 @@
 counterValue self element
   = liftIO
       (fromJSString <$>
-         (js_counterValue (unInternals self)
-            (maybe jsNull (unElement . toElement) element)))
+         (js_counterValue (self)
+            (maybeToNullable (fmap toElement element))))
  
 foreign import javascript unsafe "$1[\"pageNumber\"]($2, $3, $4)"
         js_pageNumber ::
-        JSRef Internals -> JSRef Element -> Float -> Float -> IO Int
+        Internals -> Nullable Element -> Float -> Float -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.pageNumber Mozilla Internals.pageNumber documentation> 
 pageNumber ::
@@ -1499,45 +1420,40 @@
              Internals -> Maybe element -> Float -> Float -> m Int
 pageNumber self element pageWidth pageHeight
   = liftIO
-      (js_pageNumber (unInternals self)
-         (maybe jsNull (unElement . toElement) element)
+      (js_pageNumber (self) (maybeToNullable (fmap toElement element))
          pageWidth
          pageHeight)
  
 foreign import javascript unsafe "$1[\"shortcutIconURLs\"]()"
-        js_shortcutIconURLs :: JSRef Internals -> IO (JSRef [result])
+        js_shortcutIconURLs :: Internals -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.shortcutIconURLs Mozilla Internals.shortcutIconURLs documentation> 
 shortcutIconURLs ::
                  (MonadIO m, FromJSString result) => Internals -> m [result]
 shortcutIconURLs self
-  = liftIO
-      ((js_shortcutIconURLs (unInternals self)) >>= fromJSRefUnchecked)
+  = liftIO ((js_shortcutIconURLs (self)) >>= fromJSRefUnchecked)
  
 foreign import javascript unsafe "$1[\"allIconURLs\"]()"
-        js_allIconURLs :: JSRef Internals -> IO (JSRef [result])
+        js_allIconURLs :: Internals -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.allIconURLs Mozilla Internals.allIconURLs documentation> 
 allIconURLs ::
             (MonadIO m, FromJSString result) => Internals -> m [result]
 allIconURLs self
-  = liftIO
-      ((js_allIconURLs (unInternals self)) >>= fromJSRefUnchecked)
+  = liftIO ((js_allIconURLs (self)) >>= fromJSRefUnchecked)
  
 foreign import javascript unsafe "$1[\"numberOfPages\"]($2, $3)"
-        js_numberOfPages :: JSRef Internals -> Double -> Double -> IO Int
+        js_numberOfPages :: Internals -> Double -> Double -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.numberOfPages Mozilla Internals.numberOfPages documentation> 
 numberOfPages ::
               (MonadIO m) => Internals -> Double -> Double -> m Int
 numberOfPages self pageWidthInPixels pageHeightInPixels
   = liftIO
-      (js_numberOfPages (unInternals self) pageWidthInPixels
-         pageHeightInPixels)
+      (js_numberOfPages (self) pageWidthInPixels pageHeightInPixels)
  
 foreign import javascript unsafe "$1[\"pageProperty\"]($2, $3)"
-        js_pageProperty ::
-        JSRef Internals -> JSString -> Int -> IO JSString
+        js_pageProperty :: Internals -> JSString -> Int -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.pageProperty Mozilla Internals.pageProperty documentation> 
 pageProperty ::
@@ -1546,13 +1462,12 @@
 pageProperty self propertyName pageNumber
   = liftIO
       (fromJSString <$>
-         (js_pageProperty (unInternals self) (toJSString propertyName)
-            pageNumber))
+         (js_pageProperty (self) (toJSString propertyName) pageNumber))
  
 foreign import javascript unsafe
         "$1[\"pageSizeAndMarginsInPixels\"]($2,\n$3, $4, $5, $6, $7, $8)"
         js_pageSizeAndMarginsInPixels ::
-        JSRef Internals ->
+        Internals ->
           Int -> Int -> Int -> Int -> Int -> Int -> Int -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.pageSizeAndMarginsInPixels Mozilla Internals.pageSizeAndMarginsInPixels documentation> 
@@ -1564,8 +1479,7 @@
   marginRight marginBottom marginLeft
   = liftIO
       (fromJSString <$>
-         (js_pageSizeAndMarginsInPixels (unInternals self) pageIndex width
-            height
+         (js_pageSizeAndMarginsInPixels (self) pageIndex width height
             marginTop
             marginRight
             marginBottom
@@ -1573,50 +1487,50 @@
  
 foreign import javascript unsafe
         "$1[\"setPageScaleFactor\"]($2, $3,\n$4)" js_setPageScaleFactor ::
-        JSRef Internals -> Float -> Int -> Int -> IO ()
+        Internals -> Float -> Int -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.setPageScaleFactor Mozilla Internals.setPageScaleFactor documentation> 
 setPageScaleFactor ::
                    (MonadIO m) => Internals -> Float -> Int -> Int -> m ()
 setPageScaleFactor self scaleFactor x y
-  = liftIO (js_setPageScaleFactor (unInternals self) scaleFactor x y)
+  = liftIO (js_setPageScaleFactor (self) scaleFactor x y)
  
 foreign import javascript unsafe "$1[\"setPageZoomFactor\"]($2)"
-        js_setPageZoomFactor :: JSRef Internals -> Float -> IO ()
+        js_setPageZoomFactor :: Internals -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.setPageZoomFactor Mozilla Internals.setPageZoomFactor documentation> 
 setPageZoomFactor :: (MonadIO m) => Internals -> Float -> m ()
 setPageZoomFactor self zoomFactor
-  = liftIO (js_setPageZoomFactor (unInternals self) zoomFactor)
+  = liftIO (js_setPageZoomFactor (self) zoomFactor)
  
 foreign import javascript unsafe "$1[\"setHeaderHeight\"]($2)"
-        js_setHeaderHeight :: JSRef Internals -> Float -> IO ()
+        js_setHeaderHeight :: Internals -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.setHeaderHeight Mozilla Internals.setHeaderHeight documentation> 
 setHeaderHeight :: (MonadIO m) => Internals -> Float -> m ()
 setHeaderHeight self height
-  = liftIO (js_setHeaderHeight (unInternals self) height)
+  = liftIO (js_setHeaderHeight (self) height)
  
 foreign import javascript unsafe "$1[\"setFooterHeight\"]($2)"
-        js_setFooterHeight :: JSRef Internals -> Float -> IO ()
+        js_setFooterHeight :: Internals -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.setFooterHeight Mozilla Internals.setFooterHeight documentation> 
 setFooterHeight :: (MonadIO m) => Internals -> Float -> m ()
 setFooterHeight self height
-  = liftIO (js_setFooterHeight (unInternals self) height)
+  = liftIO (js_setFooterHeight (self) height)
  
 foreign import javascript unsafe "$1[\"setTopContentInset\"]($2)"
-        js_setTopContentInset :: JSRef Internals -> Float -> IO ()
+        js_setTopContentInset :: Internals -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.setTopContentInset Mozilla Internals.setTopContentInset documentation> 
 setTopContentInset :: (MonadIO m) => Internals -> Float -> m ()
 setTopContentInset self contentInset
-  = liftIO (js_setTopContentInset (unInternals self) contentInset)
+  = liftIO (js_setTopContentInset (self) contentInset)
  
 foreign import javascript unsafe
         "$1[\"webkitWillEnterFullScreenForElement\"]($2)"
         js_webkitWillEnterFullScreenForElement ::
-        JSRef Internals -> JSRef Element -> IO ()
+        Internals -> Nullable Element -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.webkitWillEnterFullScreenForElement Mozilla Internals.webkitWillEnterFullScreenForElement documentation> 
 webkitWillEnterFullScreenForElement ::
@@ -1624,13 +1538,13 @@
                                       Internals -> Maybe element -> m ()
 webkitWillEnterFullScreenForElement self element
   = liftIO
-      (js_webkitWillEnterFullScreenForElement (unInternals self)
-         (maybe jsNull (unElement . toElement) element))
+      (js_webkitWillEnterFullScreenForElement (self)
+         (maybeToNullable (fmap toElement element)))
  
 foreign import javascript unsafe
         "$1[\"webkitDidEnterFullScreenForElement\"]($2)"
         js_webkitDidEnterFullScreenForElement ::
-        JSRef Internals -> JSRef Element -> IO ()
+        Internals -> Nullable Element -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.webkitDidEnterFullScreenForElement Mozilla Internals.webkitDidEnterFullScreenForElement documentation> 
 webkitDidEnterFullScreenForElement ::
@@ -1638,13 +1552,13 @@
                                      Internals -> Maybe element -> m ()
 webkitDidEnterFullScreenForElement self element
   = liftIO
-      (js_webkitDidEnterFullScreenForElement (unInternals self)
-         (maybe jsNull (unElement . toElement) element))
+      (js_webkitDidEnterFullScreenForElement (self)
+         (maybeToNullable (fmap toElement element)))
  
 foreign import javascript unsafe
         "$1[\"webkitWillExitFullScreenForElement\"]($2)"
         js_webkitWillExitFullScreenForElement ::
-        JSRef Internals -> JSRef Element -> IO ()
+        Internals -> Nullable Element -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.webkitWillExitFullScreenForElement Mozilla Internals.webkitWillExitFullScreenForElement documentation> 
 webkitWillExitFullScreenForElement ::
@@ -1652,13 +1566,13 @@
                                      Internals -> Maybe element -> m ()
 webkitWillExitFullScreenForElement self element
   = liftIO
-      (js_webkitWillExitFullScreenForElement (unInternals self)
-         (maybe jsNull (unElement . toElement) element))
+      (js_webkitWillExitFullScreenForElement (self)
+         (maybeToNullable (fmap toElement element)))
  
 foreign import javascript unsafe
         "$1[\"webkitDidExitFullScreenForElement\"]($2)"
         js_webkitDidExitFullScreenForElement ::
-        JSRef Internals -> JSRef Element -> IO ()
+        Internals -> Nullable Element -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.webkitDidExitFullScreenForElement Mozilla Internals.webkitDidExitFullScreenForElement documentation> 
 webkitDidExitFullScreenForElement ::
@@ -1666,26 +1580,24 @@
                                     Internals -> Maybe element -> m ()
 webkitDidExitFullScreenForElement self element
   = liftIO
-      (js_webkitDidExitFullScreenForElement (unInternals self)
-         (maybe jsNull (unElement . toElement) element))
+      (js_webkitDidExitFullScreenForElement (self)
+         (maybeToNullable (fmap toElement element)))
  
 foreign import javascript unsafe
         "$1[\"setApplicationCacheOriginQuota\"]($2)"
-        js_setApplicationCacheOriginQuota ::
-        JSRef Internals -> Double -> IO ()
+        js_setApplicationCacheOriginQuota :: Internals -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.setApplicationCacheOriginQuota Mozilla Internals.setApplicationCacheOriginQuota documentation> 
 setApplicationCacheOriginQuota ::
                                (MonadIO m) => Internals -> Word64 -> m ()
 setApplicationCacheOriginQuota self quota
   = liftIO
-      (js_setApplicationCacheOriginQuota (unInternals self)
-         (fromIntegral quota))
+      (js_setApplicationCacheOriginQuota (self) (fromIntegral quota))
  
 foreign import javascript unsafe
         "$1[\"registerURLSchemeAsBypassingContentSecurityPolicy\"]($2)"
         js_registerURLSchemeAsBypassingContentSecurityPolicy ::
-        JSRef Internals -> JSString -> IO ()
+        Internals -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.registerURLSchemeAsBypassingContentSecurityPolicy Mozilla Internals.registerURLSchemeAsBypassingContentSecurityPolicy documentation> 
 registerURLSchemeAsBypassingContentSecurityPolicy ::
@@ -1693,14 +1605,13 @@
                                                     Internals -> scheme -> m ()
 registerURLSchemeAsBypassingContentSecurityPolicy self scheme
   = liftIO
-      (js_registerURLSchemeAsBypassingContentSecurityPolicy
-         (unInternals self)
+      (js_registerURLSchemeAsBypassingContentSecurityPolicy (self)
          (toJSString scheme))
  
 foreign import javascript unsafe
         "$1[\"removeURLSchemeRegisteredAsBypassingContentSecurityPolicy\"]($2)"
         js_removeURLSchemeRegisteredAsBypassingContentSecurityPolicy ::
-        JSRef Internals -> JSString -> IO ()
+        Internals -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.removeURLSchemeRegisteredAsBypassingContentSecurityPolicy Mozilla Internals.removeURLSchemeRegisteredAsBypassingContentSecurityPolicy documentation> 
 removeURLSchemeRegisteredAsBypassingContentSecurityPolicy ::
@@ -1710,76 +1621,73 @@
   scheme
   = liftIO
       (js_removeURLSchemeRegisteredAsBypassingContentSecurityPolicy
-         (unInternals self)
+         (self)
          (toJSString scheme))
  
 foreign import javascript unsafe "$1[\"mallocStatistics\"]()"
-        js_mallocStatistics ::
-        JSRef Internals -> IO (JSRef MallocStatistics)
+        js_mallocStatistics :: Internals -> IO (Nullable MallocStatistics)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.mallocStatistics Mozilla Internals.mallocStatistics documentation> 
 mallocStatistics ::
                  (MonadIO m) => Internals -> m (Maybe MallocStatistics)
 mallocStatistics self
-  = liftIO ((js_mallocStatistics (unInternals self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_mallocStatistics (self)))
  
 foreign import javascript unsafe "$1[\"typeConversions\"]()"
-        js_typeConversions :: JSRef Internals -> IO (JSRef TypeConversions)
+        js_typeConversions :: Internals -> IO (Nullable TypeConversions)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.typeConversions Mozilla Internals.typeConversions documentation> 
 typeConversions ::
                 (MonadIO m) => Internals -> m (Maybe TypeConversions)
 typeConversions self
-  = liftIO ((js_typeConversions (unInternals self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_typeConversions (self)))
  
 foreign import javascript unsafe "$1[\"memoryInfo\"]()"
-        js_memoryInfo :: JSRef Internals -> IO (JSRef MemoryInfo)
+        js_memoryInfo :: Internals -> IO (Nullable MemoryInfo)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.memoryInfo Mozilla Internals.memoryInfo documentation> 
 memoryInfo :: (MonadIO m) => Internals -> m (Maybe MemoryInfo)
 memoryInfo self
-  = liftIO ((js_memoryInfo (unInternals self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_memoryInfo (self)))
  
 foreign import javascript unsafe "$1[\"getReferencedFilePaths\"]()"
-        js_getReferencedFilePaths :: JSRef Internals -> IO (JSRef [result])
+        js_getReferencedFilePaths :: Internals -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.getReferencedFilePaths Mozilla Internals.getReferencedFilePaths documentation> 
 getReferencedFilePaths ::
                        (MonadIO m, FromJSString result) => Internals -> m [result]
 getReferencedFilePaths self
   = liftIO
-      ((js_getReferencedFilePaths (unInternals self)) >>=
-         fromJSRefUnchecked)
+      ((js_getReferencedFilePaths (self)) >>= fromJSRefUnchecked)
  
 foreign import javascript unsafe "$1[\"startTrackingRepaints\"]()"
-        js_startTrackingRepaints :: JSRef Internals -> IO ()
+        js_startTrackingRepaints :: Internals -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.startTrackingRepaints Mozilla Internals.startTrackingRepaints documentation> 
 startTrackingRepaints :: (MonadIO m) => Internals -> m ()
 startTrackingRepaints self
-  = liftIO (js_startTrackingRepaints (unInternals self))
+  = liftIO (js_startTrackingRepaints (self))
  
 foreign import javascript unsafe "$1[\"stopTrackingRepaints\"]()"
-        js_stopTrackingRepaints :: JSRef Internals -> IO ()
+        js_stopTrackingRepaints :: Internals -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.stopTrackingRepaints Mozilla Internals.stopTrackingRepaints documentation> 
 stopTrackingRepaints :: (MonadIO m) => Internals -> m ()
-stopTrackingRepaints self
-  = liftIO (js_stopTrackingRepaints (unInternals self))
+stopTrackingRepaints self = liftIO (js_stopTrackingRepaints (self))
  
 foreign import javascript unsafe
         "($1[\"isTimerThrottled\"]($2) ? 1 : 0)" js_isTimerThrottled ::
-        JSRef Internals -> Int -> IO Bool
+        Internals -> Int -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.isTimerThrottled Mozilla Internals.isTimerThrottled documentation> 
 isTimerThrottled :: (MonadIO m) => Internals -> Int -> m Bool
 isTimerThrottled self timerHandle
-  = liftIO (js_isTimerThrottled (unInternals self) timerHandle)
+  = liftIO (js_isTimerThrottled (self) timerHandle)
  
 foreign import javascript unsafe
         "$1[\"updateLayoutIgnorePendingStylesheetsAndRunPostLayoutTasks\"]($2)"
         js_updateLayoutIgnorePendingStylesheetsAndRunPostLayoutTasks ::
-        JSRef Internals -> JSRef Node -> IO ()
+        Internals -> Nullable Node -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.updateLayoutIgnorePendingStylesheetsAndRunPostLayoutTasks Mozilla Internals.updateLayoutIgnorePendingStylesheetsAndRunPostLayoutTasks documentation> 
 updateLayoutIgnorePendingStylesheetsAndRunPostLayoutTasks ::
@@ -1788,22 +1696,21 @@
 updateLayoutIgnorePendingStylesheetsAndRunPostLayoutTasks self node
   = liftIO
       (js_updateLayoutIgnorePendingStylesheetsAndRunPostLayoutTasks
-         (unInternals self)
-         (maybe jsNull (unNode . toNode) node))
+         (self)
+         (maybeToNullable (fmap toNode node)))
  
 foreign import javascript unsafe "$1[\"getCurrentCursorInfo\"]()"
-        js_getCurrentCursorInfo :: JSRef Internals -> IO JSString
+        js_getCurrentCursorInfo :: Internals -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.getCurrentCursorInfo Mozilla Internals.getCurrentCursorInfo documentation> 
 getCurrentCursorInfo ::
                      (MonadIO m, FromJSString result) => Internals -> m result
 getCurrentCursorInfo self
-  = liftIO
-      (fromJSString <$> (js_getCurrentCursorInfo (unInternals self)))
+  = liftIO (fromJSString <$> (js_getCurrentCursorInfo (self)))
  
 foreign import javascript unsafe
         "$1[\"markerTextForListItem\"]($2)" js_markerTextForListItem ::
-        JSRef Internals -> JSRef Element -> IO JSString
+        Internals -> Nullable Element -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.markerTextForListItem Mozilla Internals.markerTextForListItem documentation> 
 markerTextForListItem ::
@@ -1812,12 +1719,12 @@
 markerTextForListItem self element
   = liftIO
       (fromJSString <$>
-         (js_markerTextForListItem (unInternals self)
-            (maybe jsNull (unElement . toElement) element)))
+         (js_markerTextForListItem (self)
+            (maybeToNullable (fmap toElement element))))
  
 foreign import javascript unsafe "$1[\"toolTipFromElement\"]($2)"
         js_toolTipFromElement ::
-        JSRef Internals -> JSRef Element -> IO JSString
+        Internals -> Nullable Element -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.toolTipFromElement Mozilla Internals.toolTipFromElement documentation> 
 toolTipFromElement ::
@@ -1826,13 +1733,13 @@
 toolTipFromElement self element
   = liftIO
       (fromJSString <$>
-         (js_toolTipFromElement (unInternals self)
-            (maybe jsNull (unElement . toElement) element)))
+         (js_toolTipFromElement (self)
+            (maybeToNullable (fmap toElement element))))
  
 foreign import javascript unsafe "$1[\"deserializeBuffer\"]($2)"
         js_deserializeBuffer ::
-        JSRef Internals ->
-          JSRef ArrayBuffer -> IO (JSRef SerializedScriptValue)
+        Internals ->
+          Nullable ArrayBuffer -> IO (Nullable SerializedScriptValue)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.deserializeBuffer Mozilla Internals.deserializeBuffer documentation> 
 deserializeBuffer ::
@@ -1840,14 +1747,14 @@
                     Internals -> Maybe buffer -> m (Maybe SerializedScriptValue)
 deserializeBuffer self buffer
   = liftIO
-      ((js_deserializeBuffer (unInternals self)
-          (maybe jsNull (unArrayBuffer . toArrayBuffer) buffer))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_deserializeBuffer (self)
+            (maybeToNullable (fmap toArrayBuffer buffer))))
  
 foreign import javascript unsafe "$1[\"serializeObject\"]($2)"
         js_serializeObject ::
-        JSRef Internals ->
-          JSRef SerializedScriptValue -> IO (JSRef ArrayBuffer)
+        Internals ->
+          Nullable SerializedScriptValue -> IO (Nullable ArrayBuffer)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.serializeObject Mozilla Internals.serializeObject documentation> 
 serializeObject ::
@@ -1855,46 +1762,43 @@
                   Internals -> Maybe obj -> m (Maybe ArrayBuffer)
 serializeObject self obj
   = liftIO
-      ((js_serializeObject (unInternals self)
-          (maybe jsNull (unSerializedScriptValue . toSerializedScriptValue)
-             obj))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_serializeObject (self)
+            (maybeToNullable (fmap toSerializedScriptValue obj))))
  
 foreign import javascript unsafe
         "$1[\"setUsesOverlayScrollbars\"]($2)" js_setUsesOverlayScrollbars
-        :: JSRef Internals -> Bool -> IO ()
+        :: Internals -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.setUsesOverlayScrollbars Mozilla Internals.setUsesOverlayScrollbars documentation> 
 setUsesOverlayScrollbars ::
                          (MonadIO m) => Internals -> Bool -> m ()
 setUsesOverlayScrollbars self enabled
-  = liftIO (js_setUsesOverlayScrollbars (unInternals self) enabled)
+  = liftIO (js_setUsesOverlayScrollbars (self) enabled)
  
 foreign import javascript unsafe "$1[\"forceReload\"]($2)"
-        js_forceReload :: JSRef Internals -> Bool -> IO ()
+        js_forceReload :: Internals -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.forceReload Mozilla Internals.forceReload documentation> 
 forceReload :: (MonadIO m) => Internals -> Bool -> m ()
-forceReload self endToEnd
-  = liftIO (js_forceReload (unInternals self) endToEnd)
+forceReload self endToEnd = liftIO (js_forceReload (self) endToEnd)
  
 foreign import javascript unsafe
         "$1[\"simulateAudioInterruption\"]($2)"
-        js_simulateAudioInterruption ::
-        JSRef Internals -> JSRef Node -> IO ()
+        js_simulateAudioInterruption :: Internals -> Nullable Node -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.simulateAudioInterruption Mozilla Internals.simulateAudioInterruption documentation> 
 simulateAudioInterruption ::
                           (MonadIO m, IsNode node) => Internals -> Maybe node -> m ()
 simulateAudioInterruption self node
   = liftIO
-      (js_simulateAudioInterruption (unInternals self)
-         (maybe jsNull (unNode . toNode) node))
+      (js_simulateAudioInterruption (self)
+         (maybeToNullable (fmap toNode node)))
  
 foreign import javascript unsafe
         "($1[\"mediaElementHasCharacteristic\"]($2,\n$3) ? 1 : 0)"
         js_mediaElementHasCharacteristic ::
-        JSRef Internals -> JSRef Node -> JSString -> IO Bool
+        Internals -> Nullable Node -> JSString -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.mediaElementHasCharacteristic Mozilla Internals.mediaElementHasCharacteristic documentation> 
 mediaElementHasCharacteristic ::
@@ -1902,30 +1806,29 @@
                                 Internals -> Maybe node -> characteristic -> m Bool
 mediaElementHasCharacteristic self node characteristic
   = liftIO
-      (js_mediaElementHasCharacteristic (unInternals self)
-         (maybe jsNull (unNode . toNode) node)
+      (js_mediaElementHasCharacteristic (self)
+         (maybeToNullable (fmap toNode node))
          (toJSString characteristic))
  
 foreign import javascript unsafe "$1[\"initializeMockCDM\"]()"
-        js_initializeMockCDM :: JSRef Internals -> IO ()
+        js_initializeMockCDM :: Internals -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.initializeMockCDM Mozilla Internals.initializeMockCDM documentation> 
 initializeMockCDM :: (MonadIO m) => Internals -> m ()
-initializeMockCDM self
-  = liftIO (js_initializeMockCDM (unInternals self))
+initializeMockCDM self = liftIO (js_initializeMockCDM (self))
  
 foreign import javascript unsafe
         "$1[\"enableMockSpeechSynthesizer\"]()"
-        js_enableMockSpeechSynthesizer :: JSRef Internals -> IO ()
+        js_enableMockSpeechSynthesizer :: Internals -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.enableMockSpeechSynthesizer Mozilla Internals.enableMockSpeechSynthesizer documentation> 
 enableMockSpeechSynthesizer :: (MonadIO m) => Internals -> m ()
 enableMockSpeechSynthesizer self
-  = liftIO (js_enableMockSpeechSynthesizer (unInternals self))
+  = liftIO (js_enableMockSpeechSynthesizer (self))
  
 foreign import javascript unsafe "$1[\"getImageSourceURL\"]($2)"
         js_getImageSourceURL ::
-        JSRef Internals -> JSRef Element -> IO JSString
+        Internals -> Nullable Element -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.getImageSourceURL Mozilla Internals.getImageSourceURL documentation> 
 getImageSourceURL ::
@@ -1934,38 +1837,34 @@
 getImageSourceURL self element
   = liftIO
       (fromJSString <$>
-         (js_getImageSourceURL (unInternals self)
-            (maybe jsNull (unElement . toElement) element)))
+         (js_getImageSourceURL (self)
+            (maybeToNullable (fmap toElement element))))
  
 foreign import javascript unsafe
         "$1[\"captionsStyleSheetOverride\"]()"
-        js_captionsStyleSheetOverride :: JSRef Internals -> IO JSString
+        js_captionsStyleSheetOverride :: Internals -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.captionsStyleSheetOverride Mozilla Internals.captionsStyleSheetOverride documentation> 
 captionsStyleSheetOverride ::
                            (MonadIO m, FromJSString result) => Internals -> m result
 captionsStyleSheetOverride self
-  = liftIO
-      (fromJSString <$>
-         (js_captionsStyleSheetOverride (unInternals self)))
+  = liftIO (fromJSString <$> (js_captionsStyleSheetOverride (self)))
  
 foreign import javascript unsafe
         "$1[\"setCaptionsStyleSheetOverride\"]($2)"
-        js_setCaptionsStyleSheetOverride ::
-        JSRef Internals -> JSString -> IO ()
+        js_setCaptionsStyleSheetOverride :: Internals -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.setCaptionsStyleSheetOverride Mozilla Internals.setCaptionsStyleSheetOverride documentation> 
 setCaptionsStyleSheetOverride ::
                               (MonadIO m, ToJSString override) => Internals -> override -> m ()
 setCaptionsStyleSheetOverride self override
   = liftIO
-      (js_setCaptionsStyleSheetOverride (unInternals self)
-         (toJSString override))
+      (js_setCaptionsStyleSheetOverride (self) (toJSString override))
  
 foreign import javascript unsafe
         "$1[\"setPrimaryAudioTrackLanguageOverride\"]($2)"
         js_setPrimaryAudioTrackLanguageOverride ::
-        JSRef Internals -> JSString -> IO ()
+        Internals -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.setPrimaryAudioTrackLanguageOverride Mozilla Internals.setPrimaryAudioTrackLanguageOverride documentation> 
 setPrimaryAudioTrackLanguageOverride ::
@@ -1973,24 +1872,24 @@
                                        Internals -> language -> m ()
 setPrimaryAudioTrackLanguageOverride self language
   = liftIO
-      (js_setPrimaryAudioTrackLanguageOverride (unInternals self)
+      (js_setPrimaryAudioTrackLanguageOverride (self)
          (toJSString language))
  
 foreign import javascript unsafe
         "$1[\"setCaptionDisplayMode\"]($2)" js_setCaptionDisplayMode ::
-        JSRef Internals -> JSString -> IO ()
+        Internals -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.setCaptionDisplayMode Mozilla Internals.setCaptionDisplayMode documentation> 
 setCaptionDisplayMode ::
                       (MonadIO m, ToJSString mode) => Internals -> mode -> m ()
 setCaptionDisplayMode self mode
-  = liftIO
-      (js_setCaptionDisplayMode (unInternals self) (toJSString mode))
+  = liftIO (js_setCaptionDisplayMode (self) (toJSString mode))
  
 foreign import javascript unsafe "$1[\"createTimeRanges\"]($2, $3)"
         js_createTimeRanges ::
-        JSRef Internals ->
-          JSRef Float32Array -> JSRef Float32Array -> IO (JSRef TimeRanges)
+        Internals ->
+          Nullable Float32Array ->
+            Nullable Float32Array -> IO (Nullable TimeRanges)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.createTimeRanges Mozilla Internals.createTimeRanges documentation> 
 createTimeRanges ::
@@ -1999,47 +1898,46 @@
                      Maybe startTimes -> Maybe endTimes -> m (Maybe TimeRanges)
 createTimeRanges self startTimes endTimes
   = liftIO
-      ((js_createTimeRanges (unInternals self)
-          (maybe jsNull (unFloat32Array . toFloat32Array) startTimes)
-          (maybe jsNull (unFloat32Array . toFloat32Array) endTimes))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createTimeRanges (self)
+            (maybeToNullable (fmap toFloat32Array startTimes))
+            (maybeToNullable (fmap toFloat32Array endTimes))))
  
 foreign import javascript unsafe
         "$1[\"closestTimeToTimeRanges\"]($2,\n$3)"
         js_closestTimeToTimeRanges ::
-        JSRef Internals -> Double -> JSRef TimeRanges -> IO Double
+        Internals -> Double -> Nullable TimeRanges -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.closestTimeToTimeRanges Mozilla Internals.closestTimeToTimeRanges documentation> 
 closestTimeToTimeRanges ::
                         (MonadIO m) => Internals -> Double -> Maybe TimeRanges -> m Double
 closestTimeToTimeRanges self time ranges
   = liftIO
-      (js_closestTimeToTimeRanges (unInternals self) time
-         (maybe jsNull pToJSRef ranges))
+      (js_closestTimeToTimeRanges (self) time (maybeToNullable ranges))
  
 foreign import javascript unsafe
         "($1[\"isSelectPopupVisible\"]($2) ? 1 : 0)"
-        js_isSelectPopupVisible :: JSRef Internals -> JSRef Node -> IO Bool
+        js_isSelectPopupVisible :: Internals -> Nullable Node -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.isSelectPopupVisible Mozilla Internals.isSelectPopupVisible documentation> 
 isSelectPopupVisible ::
                      (MonadIO m, IsNode node) => Internals -> Maybe node -> m Bool
 isSelectPopupVisible self node
   = liftIO
-      (js_isSelectPopupVisible (unInternals self)
-         (maybe jsNull (unNode . toNode) node))
+      (js_isSelectPopupVisible (self)
+         (maybeToNullable (fmap toNode node)))
  
 foreign import javascript unsafe "($1[\"isVibrating\"]() ? 1 : 0)"
-        js_isVibrating :: JSRef Internals -> IO Bool
+        js_isVibrating :: Internals -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.isVibrating Mozilla Internals.isVibrating documentation> 
 isVibrating :: (MonadIO m) => Internals -> m Bool
-isVibrating self = liftIO (js_isVibrating (unInternals self))
+isVibrating self = liftIO (js_isVibrating (self))
  
 foreign import javascript unsafe
         "($1[\"isPluginUnavailabilityIndicatorObscured\"]($2) ? 1 : 0)"
         js_isPluginUnavailabilityIndicatorObscured ::
-        JSRef Internals -> JSRef Element -> IO Bool
+        Internals -> Nullable Element -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.isPluginUnavailabilityIndicatorObscured Mozilla Internals.isPluginUnavailabilityIndicatorObscured documentation> 
 isPluginUnavailabilityIndicatorObscured ::
@@ -2047,12 +1945,12 @@
                                           Internals -> Maybe element -> m Bool
 isPluginUnavailabilityIndicatorObscured self element
   = liftIO
-      (js_isPluginUnavailabilityIndicatorObscured (unInternals self)
-         (maybe jsNull (unElement . toElement) element))
+      (js_isPluginUnavailabilityIndicatorObscured (self)
+         (maybeToNullable (fmap toElement element)))
  
 foreign import javascript unsafe
         "($1[\"isPluginSnapshotted\"]($2) ? 1 : 0)" js_isPluginSnapshotted
-        :: JSRef Internals -> JSRef Element -> IO Bool
+        :: Internals -> Nullable Element -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.isPluginSnapshotted Mozilla Internals.isPluginSnapshotted documentation> 
 isPluginSnapshotted ::
@@ -2060,31 +1958,30 @@
                       Internals -> Maybe element -> m Bool
 isPluginSnapshotted self element
   = liftIO
-      (js_isPluginSnapshotted (unInternals self)
-         (maybe jsNull (unElement . toElement) element))
+      (js_isPluginSnapshotted (self)
+         (maybeToNullable (fmap toElement element)))
  
 foreign import javascript unsafe "$1[\"selectionBounds\"]()"
-        js_selectionBounds :: JSRef Internals -> IO (JSRef ClientRect)
+        js_selectionBounds :: Internals -> IO (Nullable ClientRect)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.selectionBounds Mozilla Internals.selectionBounds documentation> 
 selectionBounds :: (MonadIO m) => Internals -> m (Maybe ClientRect)
 selectionBounds self
-  = liftIO ((js_selectionBounds (unInternals self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_selectionBounds (self)))
  
 foreign import javascript unsafe
         "$1[\"initializeMockMediaSource\"]()" js_initializeMockMediaSource
-        :: JSRef Internals -> IO ()
+        :: Internals -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.initializeMockMediaSource Mozilla Internals.initializeMockMediaSource documentation> 
 initializeMockMediaSource :: (MonadIO m) => Internals -> m ()
 initializeMockMediaSource self
-  = liftIO (js_initializeMockMediaSource (unInternals self))
+  = liftIO (js_initializeMockMediaSource (self))
  
 foreign import javascript unsafe
         "$1[\"bufferedSamplesForTrackID\"]($2,\n$3)"
         js_bufferedSamplesForTrackID ::
-        JSRef Internals ->
-          JSRef SourceBuffer -> JSString -> IO (JSRef [result])
+        Internals -> Nullable SourceBuffer -> JSString -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.bufferedSamplesForTrackID Mozilla Internals.bufferedSamplesForTrackID documentation> 
 bufferedSamplesForTrackID ::
@@ -2092,55 +1989,51 @@
                             Internals -> Maybe SourceBuffer -> trackID -> m [result]
 bufferedSamplesForTrackID self buffer trackID
   = liftIO
-      ((js_bufferedSamplesForTrackID (unInternals self)
-          (maybe jsNull pToJSRef buffer)
+      ((js_bufferedSamplesForTrackID (self) (maybeToNullable buffer)
           (toJSString trackID))
          >>= fromJSRefUnchecked)
  
 foreign import javascript unsafe
         "$1[\"beginMediaSessionInterruption\"]()"
-        js_beginMediaSessionInterruption :: JSRef Internals -> IO ()
+        js_beginMediaSessionInterruption :: Internals -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.beginMediaSessionInterruption Mozilla Internals.beginMediaSessionInterruption documentation> 
 beginMediaSessionInterruption :: (MonadIO m) => Internals -> m ()
 beginMediaSessionInterruption self
-  = liftIO (js_beginMediaSessionInterruption (unInternals self))
+  = liftIO (js_beginMediaSessionInterruption (self))
  
 foreign import javascript unsafe
         "$1[\"endMediaSessionInterruption\"]($2)"
-        js_endMediaSessionInterruption ::
-        JSRef Internals -> JSString -> IO ()
+        js_endMediaSessionInterruption :: Internals -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.endMediaSessionInterruption Mozilla Internals.endMediaSessionInterruption documentation> 
 endMediaSessionInterruption ::
                             (MonadIO m, ToJSString flags) => Internals -> flags -> m ()
 endMediaSessionInterruption self flags
-  = liftIO
-      (js_endMediaSessionInterruption (unInternals self)
-         (toJSString flags))
+  = liftIO (js_endMediaSessionInterruption (self) (toJSString flags))
  
 foreign import javascript unsafe
         "$1[\"applicationWillEnterForeground\"]()"
-        js_applicationWillEnterForeground :: JSRef Internals -> IO ()
+        js_applicationWillEnterForeground :: Internals -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.applicationWillEnterForeground Mozilla Internals.applicationWillEnterForeground documentation> 
 applicationWillEnterForeground :: (MonadIO m) => Internals -> m ()
 applicationWillEnterForeground self
-  = liftIO (js_applicationWillEnterForeground (unInternals self))
+  = liftIO (js_applicationWillEnterForeground (self))
  
 foreign import javascript unsafe
         "$1[\"applicationWillEnterBackground\"]()"
-        js_applicationWillEnterBackground :: JSRef Internals -> IO ()
+        js_applicationWillEnterBackground :: Internals -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.applicationWillEnterBackground Mozilla Internals.applicationWillEnterBackground documentation> 
 applicationWillEnterBackground :: (MonadIO m) => Internals -> m ()
 applicationWillEnterBackground self
-  = liftIO (js_applicationWillEnterBackground (unInternals self))
+  = liftIO (js_applicationWillEnterBackground (self))
  
 foreign import javascript unsafe
         "$1[\"setMediaSessionRestrictions\"]($2,\n$3)"
         js_setMediaSessionRestrictions ::
-        JSRef Internals -> JSString -> JSString -> IO ()
+        Internals -> JSString -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.setMediaSessionRestrictions Mozilla Internals.setMediaSessionRestrictions documentation> 
 setMediaSessionRestrictions ::
@@ -2148,42 +2041,37 @@
                               Internals -> mediaType -> restrictions -> m ()
 setMediaSessionRestrictions self mediaType restrictions
   = liftIO
-      (js_setMediaSessionRestrictions (unInternals self)
-         (toJSString mediaType)
+      (js_setMediaSessionRestrictions (self) (toJSString mediaType)
          (toJSString restrictions))
  
 foreign import javascript unsafe
         "$1[\"postRemoteControlCommand\"]($2)" js_postRemoteControlCommand
-        :: JSRef Internals -> JSString -> IO ()
+        :: Internals -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.postRemoteControlCommand Mozilla Internals.postRemoteControlCommand documentation> 
 postRemoteControlCommand ::
                          (MonadIO m, ToJSString command) => Internals -> command -> m ()
 postRemoteControlCommand self command
-  = liftIO
-      (js_postRemoteControlCommand (unInternals self)
-         (toJSString command))
+  = liftIO (js_postRemoteControlCommand (self) (toJSString command))
  
 foreign import javascript unsafe "$1[\"simulateSystemSleep\"]()"
-        js_simulateSystemSleep :: JSRef Internals -> IO ()
+        js_simulateSystemSleep :: Internals -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.simulateSystemSleep Mozilla Internals.simulateSystemSleep documentation> 
 simulateSystemSleep :: (MonadIO m) => Internals -> m ()
-simulateSystemSleep self
-  = liftIO (js_simulateSystemSleep (unInternals self))
+simulateSystemSleep self = liftIO (js_simulateSystemSleep (self))
  
 foreign import javascript unsafe "$1[\"simulateSystemWake\"]()"
-        js_simulateSystemWake :: JSRef Internals -> IO ()
+        js_simulateSystemWake :: Internals -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.simulateSystemWake Mozilla Internals.simulateSystemWake documentation> 
 simulateSystemWake :: (MonadIO m) => Internals -> m ()
-simulateSystemWake self
-  = liftIO (js_simulateSystemWake (unInternals self))
+simulateSystemWake self = liftIO (js_simulateSystemWake (self))
  
 foreign import javascript unsafe
         "($1[\"elementIsBlockingDisplaySleep\"]($2) ? 1 : 0)"
         js_elementIsBlockingDisplaySleep ::
-        JSRef Internals -> JSRef Element -> IO Bool
+        Internals -> Nullable Element -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.elementIsBlockingDisplaySleep Mozilla Internals.elementIsBlockingDisplaySleep documentation> 
 elementIsBlockingDisplaySleep ::
@@ -2191,48 +2079,43 @@
                                 Internals -> Maybe element -> m Bool
 elementIsBlockingDisplaySleep self element
   = liftIO
-      (js_elementIsBlockingDisplaySleep (unInternals self)
-         (maybe jsNull (unElement . toElement) element))
+      (js_elementIsBlockingDisplaySleep (self)
+         (maybeToNullable (fmap toElement element)))
  
 foreign import javascript unsafe
         "$1[\"installMockPageOverlay\"]($2)" js_installMockPageOverlay ::
-        JSRef Internals -> JSRef PageOverlayType -> IO ()
+        Internals -> JSRef -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.installMockPageOverlay Mozilla Internals.installMockPageOverlay documentation> 
 installMockPageOverlay ::
                        (MonadIO m) => Internals -> PageOverlayType -> m ()
 installMockPageOverlay self type'
-  = liftIO
-      (js_installMockPageOverlay (unInternals self) (pToJSRef type'))
+  = liftIO (js_installMockPageOverlay (self) (pToJSRef type'))
  
 foreign import javascript unsafe
         "$1[\"pageOverlayLayerTreeAsText\"]()"
-        js_pageOverlayLayerTreeAsText :: JSRef Internals -> IO JSString
+        js_pageOverlayLayerTreeAsText :: Internals -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.pageOverlayLayerTreeAsText Mozilla Internals.pageOverlayLayerTreeAsText documentation> 
 pageOverlayLayerTreeAsText ::
                            (MonadIO m, FromJSString result) => Internals -> m result
 pageOverlayLayerTreeAsText self
-  = liftIO
-      (fromJSString <$>
-         (js_pageOverlayLayerTreeAsText (unInternals self)))
+  = liftIO (fromJSString <$> (js_pageOverlayLayerTreeAsText (self)))
  
 foreign import javascript unsafe "$1[\"setPageMuted\"]($2)"
-        js_setPageMuted :: JSRef Internals -> Bool -> IO ()
+        js_setPageMuted :: Internals -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.setPageMuted Mozilla Internals.setPageMuted documentation> 
 setPageMuted :: (MonadIO m) => Internals -> Bool -> m ()
-setPageMuted self muted
-  = liftIO (js_setPageMuted (unInternals self) muted)
+setPageMuted self muted = liftIO (js_setPageMuted (self) muted)
  
 foreign import javascript unsafe
         "($1[\"isPagePlayingAudio\"]() ? 1 : 0)" js_isPagePlayingAudio ::
-        JSRef Internals -> IO Bool
+        Internals -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.isPagePlayingAudio Mozilla Internals.isPagePlayingAudio documentation> 
 isPagePlayingAudio :: (MonadIO m) => Internals -> m Bool
-isPagePlayingAudio self
-  = liftIO (js_isPagePlayingAudio (unInternals self))
+isPagePlayingAudio self = liftIO (js_isPagePlayingAudio (self))
 pattern LAYER_TREE_INCLUDES_VISIBLE_RECTS = 1
 pattern LAYER_TREE_INCLUDES_TILE_CACHES = 2
 pattern LAYER_TREE_INCLUDES_REPAINT_RECTS = 4
@@ -2240,29 +2123,26 @@
 pattern LAYER_TREE_INCLUDES_CONTENT_LAYERS = 16
  
 foreign import javascript unsafe "$1[\"settings\"]" js_getSettings
-        :: JSRef Internals -> IO (JSRef InternalSettings)
+        :: Internals -> IO (Nullable InternalSettings)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.settings Mozilla Internals.settings documentation> 
 getSettings ::
             (MonadIO m) => Internals -> m (Maybe InternalSettings)
 getSettings self
-  = liftIO ((js_getSettings (unInternals self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getSettings (self)))
  
 foreign import javascript unsafe "$1[\"workerThreadCount\"]"
-        js_getWorkerThreadCount :: JSRef Internals -> IO Word
+        js_getWorkerThreadCount :: Internals -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.workerThreadCount Mozilla Internals.workerThreadCount documentation> 
 getWorkerThreadCount :: (MonadIO m) => Internals -> m Word
-getWorkerThreadCount self
-  = liftIO (js_getWorkerThreadCount (unInternals self))
+getWorkerThreadCount self = liftIO (js_getWorkerThreadCount (self))
  
 foreign import javascript unsafe "$1[\"consoleProfiles\"]"
-        js_getConsoleProfiles ::
-        JSRef Internals -> IO (JSRef [Maybe ScriptProfile])
+        js_getConsoleProfiles :: Internals -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Internals.consoleProfiles Mozilla Internals.consoleProfiles documentation> 
 getConsoleProfiles ::
                    (MonadIO m) => Internals -> m [Maybe ScriptProfile]
 getConsoleProfiles self
-  = liftIO
-      ((js_getConsoleProfiles (unInternals self)) >>= fromJSRefUnchecked)
+  = liftIO ((js_getConsoleProfiles (self)) >>= fromJSRefUnchecked)
diff --git a/src/GHCJS/DOM/JSFFI/Generated/KeyboardEvent.hs b/src/GHCJS/DOM/JSFFI/Generated/KeyboardEvent.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/KeyboardEvent.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/KeyboardEvent.hs
@@ -11,7 +11,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -27,11 +27,11 @@
 foreign import javascript unsafe
         "$1[\"initKeyboardEvent\"]($2, $3,\n$4, $5, $6, $7, $8, $9, $10,\n$11, $12)"
         js_initKeyboardEvent ::
-        JSRef KeyboardEvent ->
+        KeyboardEvent ->
           JSString ->
             Bool ->
               Bool ->
-                JSRef Window ->
+                Nullable Window ->
                   JSString -> Word -> Bool -> Bool -> Bool -> Bool -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent.initKeyboardEvent Mozilla KeyboardEvent.initKeyboardEvent documentation> 
@@ -47,10 +47,9 @@
 initKeyboardEvent self type' canBubble cancelable view
   keyIdentifier location ctrlKey altKey shiftKey metaKey altGraphKey
   = liftIO
-      (js_initKeyboardEvent (unKeyboardEvent self) (toJSString type')
-         canBubble
+      (js_initKeyboardEvent (self) (toJSString type') canBubble
          cancelable
-         (maybe jsNull pToJSRef view)
+         (maybeToNullable view)
          (toJSString keyIdentifier)
          location
          ctrlKey
@@ -64,62 +63,59 @@
 pattern DOM_KEY_LOCATION_NUMPAD = 3
  
 foreign import javascript unsafe "$1[\"keyIdentifier\"]"
-        js_getKeyIdentifier :: JSRef KeyboardEvent -> IO JSString
+        js_getKeyIdentifier :: KeyboardEvent -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent.keyIdentifier Mozilla KeyboardEvent.keyIdentifier documentation> 
 getKeyIdentifier ::
                  (MonadIO m, FromJSString result) => KeyboardEvent -> m result
 getKeyIdentifier self
-  = liftIO
-      (fromJSString <$> (js_getKeyIdentifier (unKeyboardEvent self)))
+  = liftIO (fromJSString <$> (js_getKeyIdentifier (self)))
  
 foreign import javascript unsafe "$1[\"location\"]" js_getLocation
-        :: JSRef KeyboardEvent -> IO Word
+        :: KeyboardEvent -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent.location Mozilla KeyboardEvent.location documentation> 
 getLocation :: (MonadIO m) => KeyboardEvent -> m Word
-getLocation self = liftIO (js_getLocation (unKeyboardEvent self))
+getLocation self = liftIO (js_getLocation (self))
  
 foreign import javascript unsafe "$1[\"keyLocation\"]"
-        js_getKeyLocation :: JSRef KeyboardEvent -> IO Word
+        js_getKeyLocation :: KeyboardEvent -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent.keyLocation Mozilla KeyboardEvent.keyLocation documentation> 
 getKeyLocation :: (MonadIO m) => KeyboardEvent -> m Word
-getKeyLocation self
-  = liftIO (js_getKeyLocation (unKeyboardEvent self))
+getKeyLocation self = liftIO (js_getKeyLocation (self))
  
 foreign import javascript unsafe "($1[\"ctrlKey\"] ? 1 : 0)"
-        js_getCtrlKey :: JSRef KeyboardEvent -> IO Bool
+        js_getCtrlKey :: KeyboardEvent -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent.ctrlKey Mozilla KeyboardEvent.ctrlKey documentation> 
 getCtrlKey :: (MonadIO m) => KeyboardEvent -> m Bool
-getCtrlKey self = liftIO (js_getCtrlKey (unKeyboardEvent self))
+getCtrlKey self = liftIO (js_getCtrlKey (self))
  
 foreign import javascript unsafe "($1[\"shiftKey\"] ? 1 : 0)"
-        js_getShiftKey :: JSRef KeyboardEvent -> IO Bool
+        js_getShiftKey :: KeyboardEvent -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent.shiftKey Mozilla KeyboardEvent.shiftKey documentation> 
 getShiftKey :: (MonadIO m) => KeyboardEvent -> m Bool
-getShiftKey self = liftIO (js_getShiftKey (unKeyboardEvent self))
+getShiftKey self = liftIO (js_getShiftKey (self))
  
 foreign import javascript unsafe "($1[\"altKey\"] ? 1 : 0)"
-        js_getAltKey :: JSRef KeyboardEvent -> IO Bool
+        js_getAltKey :: KeyboardEvent -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent.altKey Mozilla KeyboardEvent.altKey documentation> 
 getAltKey :: (MonadIO m) => KeyboardEvent -> m Bool
-getAltKey self = liftIO (js_getAltKey (unKeyboardEvent self))
+getAltKey self = liftIO (js_getAltKey (self))
  
 foreign import javascript unsafe "($1[\"metaKey\"] ? 1 : 0)"
-        js_getMetaKey :: JSRef KeyboardEvent -> IO Bool
+        js_getMetaKey :: KeyboardEvent -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent.metaKey Mozilla KeyboardEvent.metaKey documentation> 
 getMetaKey :: (MonadIO m) => KeyboardEvent -> m Bool
-getMetaKey self = liftIO (js_getMetaKey (unKeyboardEvent self))
+getMetaKey self = liftIO (js_getMetaKey (self))
  
 foreign import javascript unsafe "($1[\"altGraphKey\"] ? 1 : 0)"
-        js_getAltGraphKey :: JSRef KeyboardEvent -> IO Bool
+        js_getAltGraphKey :: KeyboardEvent -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent.altGraphKey Mozilla KeyboardEvent.altGraphKey documentation> 
 getAltGraphKey :: (MonadIO m) => KeyboardEvent -> m Bool
-getAltGraphKey self
-  = liftIO (js_getAltGraphKey (unKeyboardEvent self))
+getAltGraphKey self = liftIO (js_getAltGraphKey (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/Location.hs b/src/GHCJS/DOM/JSFFI/Generated/Location.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/Location.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/Location.hs
@@ -13,7 +13,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -27,186 +27,172 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"assign\"]($2)" js_assign ::
-        JSRef Location -> JSString -> IO ()
+        Location -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Location.assign Mozilla Location.assign documentation> 
 assign :: (MonadIO m, ToJSString url) => Location -> url -> m ()
-assign self url
-  = liftIO (js_assign (unLocation self) (toJSString url))
+assign self url = liftIO (js_assign (self) (toJSString url))
  
 foreign import javascript unsafe "$1[\"replace\"]($2)" js_replace
-        :: JSRef Location -> JSString -> IO ()
+        :: Location -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Location.replace Mozilla Location.replace documentation> 
 replace :: (MonadIO m, ToJSString url) => Location -> url -> m ()
-replace self url
-  = liftIO (js_replace (unLocation self) (toJSString url))
+replace self url = liftIO (js_replace (self) (toJSString url))
  
 foreign import javascript unsafe "$1[\"reload\"]()" js_reload ::
-        JSRef Location -> IO ()
+        Location -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Location.reload Mozilla Location.reload documentation> 
 reload :: (MonadIO m) => Location -> m ()
-reload self = liftIO (js_reload (unLocation self))
+reload self = liftIO (js_reload (self))
  
 foreign import javascript unsafe "$1[\"toString\"]()" js_toString
-        :: JSRef Location -> IO JSString
+        :: Location -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Location.toString Mozilla Location.toString documentation> 
 toString ::
          (MonadIO m, FromJSString result) => Location -> m result
-toString self
-  = liftIO (fromJSString <$> (js_toString (unLocation self)))
+toString self = liftIO (fromJSString <$> (js_toString (self)))
  
 foreign import javascript unsafe "$1[\"href\"] = $2;" js_setHref ::
-        JSRef Location -> JSString -> IO ()
+        Location -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Location.href Mozilla Location.href documentation> 
 setHref :: (MonadIO m, ToJSString val) => Location -> val -> m ()
-setHref self val
-  = liftIO (js_setHref (unLocation self) (toJSString val))
+setHref self val = liftIO (js_setHref (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"href\"]" js_getHref ::
-        JSRef Location -> IO JSString
+        Location -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Location.href Mozilla Location.href documentation> 
 getHref :: (MonadIO m, FromJSString result) => Location -> m result
-getHref self
-  = liftIO (fromJSString <$> (js_getHref (unLocation self)))
+getHref self = liftIO (fromJSString <$> (js_getHref (self)))
  
 foreign import javascript unsafe "$1[\"protocol\"] = $2;"
-        js_setProtocol :: JSRef Location -> JSString -> IO ()
+        js_setProtocol :: Location -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Location.protocol Mozilla Location.protocol documentation> 
 setProtocol ::
             (MonadIO m, ToJSString val) => Location -> val -> m ()
 setProtocol self val
-  = liftIO (js_setProtocol (unLocation self) (toJSString val))
+  = liftIO (js_setProtocol (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"protocol\"]" js_getProtocol
-        :: JSRef Location -> IO JSString
+        :: Location -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Location.protocol Mozilla Location.protocol documentation> 
 getProtocol ::
             (MonadIO m, FromJSString result) => Location -> m result
 getProtocol self
-  = liftIO (fromJSString <$> (js_getProtocol (unLocation self)))
+  = liftIO (fromJSString <$> (js_getProtocol (self)))
  
 foreign import javascript unsafe "$1[\"host\"] = $2;" js_setHost ::
-        JSRef Location -> JSString -> IO ()
+        Location -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Location.host Mozilla Location.host documentation> 
 setHost :: (MonadIO m, ToJSString val) => Location -> val -> m ()
-setHost self val
-  = liftIO (js_setHost (unLocation self) (toJSString val))
+setHost self val = liftIO (js_setHost (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"host\"]" js_getHost ::
-        JSRef Location -> IO JSString
+        Location -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Location.host Mozilla Location.host documentation> 
 getHost :: (MonadIO m, FromJSString result) => Location -> m result
-getHost self
-  = liftIO (fromJSString <$> (js_getHost (unLocation self)))
+getHost self = liftIO (fromJSString <$> (js_getHost (self)))
  
 foreign import javascript unsafe "$1[\"hostname\"] = $2;"
-        js_setHostname :: JSRef Location -> JSString -> IO ()
+        js_setHostname :: Location -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Location.hostname Mozilla Location.hostname documentation> 
 setHostname ::
             (MonadIO m, ToJSString val) => Location -> val -> m ()
 setHostname self val
-  = liftIO (js_setHostname (unLocation self) (toJSString val))
+  = liftIO (js_setHostname (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"hostname\"]" js_getHostname
-        :: JSRef Location -> IO JSString
+        :: Location -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Location.hostname Mozilla Location.hostname documentation> 
 getHostname ::
             (MonadIO m, FromJSString result) => Location -> m result
 getHostname self
-  = liftIO (fromJSString <$> (js_getHostname (unLocation self)))
+  = liftIO (fromJSString <$> (js_getHostname (self)))
  
 foreign import javascript unsafe "$1[\"port\"] = $2;" js_setPort ::
-        JSRef Location -> JSString -> IO ()
+        Location -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Location.port Mozilla Location.port documentation> 
 setPort :: (MonadIO m, ToJSString val) => Location -> val -> m ()
-setPort self val
-  = liftIO (js_setPort (unLocation self) (toJSString val))
+setPort self val = liftIO (js_setPort (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"port\"]" js_getPort ::
-        JSRef Location -> IO JSString
+        Location -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Location.port Mozilla Location.port documentation> 
 getPort :: (MonadIO m, FromJSString result) => Location -> m result
-getPort self
-  = liftIO (fromJSString <$> (js_getPort (unLocation self)))
+getPort self = liftIO (fromJSString <$> (js_getPort (self)))
  
 foreign import javascript unsafe "$1[\"pathname\"] = $2;"
-        js_setPathname :: JSRef Location -> JSString -> IO ()
+        js_setPathname :: Location -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Location.pathname Mozilla Location.pathname documentation> 
 setPathname ::
             (MonadIO m, ToJSString val) => Location -> val -> m ()
 setPathname self val
-  = liftIO (js_setPathname (unLocation self) (toJSString val))
+  = liftIO (js_setPathname (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"pathname\"]" js_getPathname
-        :: JSRef Location -> IO JSString
+        :: Location -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Location.pathname Mozilla Location.pathname documentation> 
 getPathname ::
             (MonadIO m, FromJSString result) => Location -> m result
 getPathname self
-  = liftIO (fromJSString <$> (js_getPathname (unLocation self)))
+  = liftIO (fromJSString <$> (js_getPathname (self)))
  
 foreign import javascript unsafe "$1[\"search\"] = $2;"
-        js_setSearch :: JSRef Location -> JSString -> IO ()
+        js_setSearch :: Location -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Location.search Mozilla Location.search documentation> 
 setSearch :: (MonadIO m, ToJSString val) => Location -> val -> m ()
-setSearch self val
-  = liftIO (js_setSearch (unLocation self) (toJSString val))
+setSearch self val = liftIO (js_setSearch (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"search\"]" js_getSearch ::
-        JSRef Location -> IO JSString
+        Location -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Location.search Mozilla Location.search documentation> 
 getSearch ::
           (MonadIO m, FromJSString result) => Location -> m result
-getSearch self
-  = liftIO (fromJSString <$> (js_getSearch (unLocation self)))
+getSearch self = liftIO (fromJSString <$> (js_getSearch (self)))
  
 foreign import javascript unsafe "$1[\"hash\"] = $2;" js_setHash ::
-        JSRef Location -> JSString -> IO ()
+        Location -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Location.hash Mozilla Location.hash documentation> 
 setHash :: (MonadIO m, ToJSString val) => Location -> val -> m ()
-setHash self val
-  = liftIO (js_setHash (unLocation self) (toJSString val))
+setHash self val = liftIO (js_setHash (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"hash\"]" js_getHash ::
-        JSRef Location -> IO JSString
+        Location -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Location.hash Mozilla Location.hash documentation> 
 getHash :: (MonadIO m, FromJSString result) => Location -> m result
-getHash self
-  = liftIO (fromJSString <$> (js_getHash (unLocation self)))
+getHash self = liftIO (fromJSString <$> (js_getHash (self)))
  
 foreign import javascript unsafe "$1[\"origin\"]" js_getOrigin ::
-        JSRef Location -> IO JSString
+        Location -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Location.origin Mozilla Location.origin documentation> 
 getOrigin ::
           (MonadIO m, FromJSString result) => Location -> m result
-getOrigin self
-  = liftIO (fromJSString <$> (js_getOrigin (unLocation self)))
+getOrigin self = liftIO (fromJSString <$> (js_getOrigin (self)))
  
 foreign import javascript unsafe "$1[\"ancestorOrigins\"]"
-        js_getAncestorOrigins :: JSRef Location -> IO (JSRef DOMStringList)
+        js_getAncestorOrigins :: Location -> IO (Nullable DOMStringList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Location.ancestorOrigins Mozilla Location.ancestorOrigins documentation> 
 getAncestorOrigins ::
                    (MonadIO m) => Location -> m (Maybe DOMStringList)
 getAncestorOrigins self
-  = liftIO ((js_getAncestorOrigins (unLocation self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getAncestorOrigins (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/MallocStatistics.hs b/src/GHCJS/DOM/JSFFI/Generated/MallocStatistics.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/MallocStatistics.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/MallocStatistics.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,25 +20,22 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"reservedVMBytes\"]"
-        js_getReservedVMBytes :: JSRef MallocStatistics -> IO Word
+        js_getReservedVMBytes :: MallocStatistics -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MallocStatistics.reservedVMBytes Mozilla MallocStatistics.reservedVMBytes documentation> 
 getReservedVMBytes :: (MonadIO m) => MallocStatistics -> m Word
-getReservedVMBytes self
-  = liftIO (js_getReservedVMBytes (unMallocStatistics self))
+getReservedVMBytes self = liftIO (js_getReservedVMBytes (self))
  
 foreign import javascript unsafe "$1[\"committedVMBytes\"]"
-        js_getCommittedVMBytes :: JSRef MallocStatistics -> IO Word
+        js_getCommittedVMBytes :: MallocStatistics -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MallocStatistics.committedVMBytes Mozilla MallocStatistics.committedVMBytes documentation> 
 getCommittedVMBytes :: (MonadIO m) => MallocStatistics -> m Word
-getCommittedVMBytes self
-  = liftIO (js_getCommittedVMBytes (unMallocStatistics self))
+getCommittedVMBytes self = liftIO (js_getCommittedVMBytes (self))
  
 foreign import javascript unsafe "$1[\"freeListBytes\"]"
-        js_getFreeListBytes :: JSRef MallocStatistics -> IO Word
+        js_getFreeListBytes :: MallocStatistics -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MallocStatistics.freeListBytes Mozilla MallocStatistics.freeListBytes documentation> 
 getFreeListBytes :: (MonadIO m) => MallocStatistics -> m Word
-getFreeListBytes self
-  = liftIO (js_getFreeListBytes (unMallocStatistics self))
+getFreeListBytes self = liftIO (js_getFreeListBytes (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/MediaController.hs b/src/GHCJS/DOM/JSFFI/Generated/MediaController.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/MediaController.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/MediaController.hs
@@ -15,7 +15,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -30,161 +30,152 @@
  
 foreign import javascript unsafe
         "new window[\"MediaController\"]()" js_newMediaController ::
-        IO (JSRef MediaController)
+        IO MediaController
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaController Mozilla MediaController documentation> 
 newMediaController :: (MonadIO m) => m MediaController
-newMediaController
-  = liftIO (js_newMediaController >>= fromJSRefUnchecked)
+newMediaController = liftIO (js_newMediaController)
  
 foreign import javascript unsafe "$1[\"play\"]()" js_play ::
-        JSRef MediaController -> IO ()
+        MediaController -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaController.play Mozilla MediaController.play documentation> 
 play :: (MonadIO m) => MediaController -> m ()
-play self = liftIO (js_play (unMediaController self))
+play self = liftIO (js_play (self))
  
 foreign import javascript unsafe "$1[\"pause\"]()" js_pause ::
-        JSRef MediaController -> IO ()
+        MediaController -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaController.pause Mozilla MediaController.pause documentation> 
 pause :: (MonadIO m) => MediaController -> m ()
-pause self = liftIO (js_pause (unMediaController self))
+pause self = liftIO (js_pause (self))
  
 foreign import javascript unsafe "$1[\"unpause\"]()" js_unpause ::
-        JSRef MediaController -> IO ()
+        MediaController -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaController.unpause Mozilla MediaController.unpause documentation> 
 unpause :: (MonadIO m) => MediaController -> m ()
-unpause self = liftIO (js_unpause (unMediaController self))
+unpause self = liftIO (js_unpause (self))
  
 foreign import javascript unsafe "$1[\"buffered\"]" js_getBuffered
-        :: JSRef MediaController -> IO (JSRef TimeRanges)
+        :: MediaController -> IO (Nullable TimeRanges)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaController.buffered Mozilla MediaController.buffered documentation> 
 getBuffered ::
             (MonadIO m) => MediaController -> m (Maybe TimeRanges)
 getBuffered self
-  = liftIO ((js_getBuffered (unMediaController self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getBuffered (self)))
  
 foreign import javascript unsafe "$1[\"seekable\"]" js_getSeekable
-        :: JSRef MediaController -> IO (JSRef TimeRanges)
+        :: MediaController -> IO (Nullable TimeRanges)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaController.seekable Mozilla MediaController.seekable documentation> 
 getSeekable ::
             (MonadIO m) => MediaController -> m (Maybe TimeRanges)
 getSeekable self
-  = liftIO ((js_getSeekable (unMediaController self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getSeekable (self)))
  
 foreign import javascript unsafe "$1[\"duration\"]" js_getDuration
-        :: JSRef MediaController -> IO Double
+        :: MediaController -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaController.duration Mozilla MediaController.duration documentation> 
 getDuration :: (MonadIO m) => MediaController -> m Double
-getDuration self = liftIO (js_getDuration (unMediaController self))
+getDuration self = liftIO (js_getDuration (self))
  
 foreign import javascript unsafe "$1[\"currentTime\"] = $2;"
-        js_setCurrentTime :: JSRef MediaController -> Double -> IO ()
+        js_setCurrentTime :: MediaController -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaController.currentTime Mozilla MediaController.currentTime documentation> 
 setCurrentTime :: (MonadIO m) => MediaController -> Double -> m ()
-setCurrentTime self val
-  = liftIO (js_setCurrentTime (unMediaController self) val)
+setCurrentTime self val = liftIO (js_setCurrentTime (self) val)
  
 foreign import javascript unsafe "$1[\"currentTime\"]"
-        js_getCurrentTime :: JSRef MediaController -> IO Double
+        js_getCurrentTime :: MediaController -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaController.currentTime Mozilla MediaController.currentTime documentation> 
 getCurrentTime :: (MonadIO m) => MediaController -> m Double
-getCurrentTime self
-  = liftIO (js_getCurrentTime (unMediaController self))
+getCurrentTime self = liftIO (js_getCurrentTime (self))
  
 foreign import javascript unsafe "($1[\"paused\"] ? 1 : 0)"
-        js_getPaused :: JSRef MediaController -> IO Bool
+        js_getPaused :: MediaController -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaController.paused Mozilla MediaController.paused documentation> 
 getPaused :: (MonadIO m) => MediaController -> m Bool
-getPaused self = liftIO (js_getPaused (unMediaController self))
+getPaused self = liftIO (js_getPaused (self))
  
 foreign import javascript unsafe "$1[\"played\"]" js_getPlayed ::
-        JSRef MediaController -> IO (JSRef TimeRanges)
+        MediaController -> IO (Nullable TimeRanges)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaController.played Mozilla MediaController.played documentation> 
 getPlayed :: (MonadIO m) => MediaController -> m (Maybe TimeRanges)
-getPlayed self
-  = liftIO ((js_getPlayed (unMediaController self)) >>= fromJSRef)
+getPlayed self = liftIO (nullableToMaybe <$> (js_getPlayed (self)))
  
 foreign import javascript unsafe "$1[\"playbackState\"]"
-        js_getPlaybackState :: JSRef MediaController -> IO JSString
+        js_getPlaybackState :: MediaController -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaController.playbackState Mozilla MediaController.playbackState documentation> 
 getPlaybackState ::
                  (MonadIO m, FromJSString result) => MediaController -> m result
 getPlaybackState self
-  = liftIO
-      (fromJSString <$> (js_getPlaybackState (unMediaController self)))
+  = liftIO (fromJSString <$> (js_getPlaybackState (self)))
  
 foreign import javascript unsafe
         "$1[\"defaultPlaybackRate\"] = $2;" js_setDefaultPlaybackRate ::
-        JSRef MediaController -> Double -> IO ()
+        MediaController -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaController.defaultPlaybackRate Mozilla MediaController.defaultPlaybackRate documentation> 
 setDefaultPlaybackRate ::
                        (MonadIO m) => MediaController -> Double -> m ()
 setDefaultPlaybackRate self val
-  = liftIO (js_setDefaultPlaybackRate (unMediaController self) val)
+  = liftIO (js_setDefaultPlaybackRate (self) val)
  
 foreign import javascript unsafe "$1[\"defaultPlaybackRate\"]"
-        js_getDefaultPlaybackRate :: JSRef MediaController -> IO Double
+        js_getDefaultPlaybackRate :: MediaController -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaController.defaultPlaybackRate Mozilla MediaController.defaultPlaybackRate documentation> 
 getDefaultPlaybackRate ::
                        (MonadIO m) => MediaController -> m Double
 getDefaultPlaybackRate self
-  = liftIO (js_getDefaultPlaybackRate (unMediaController self))
+  = liftIO (js_getDefaultPlaybackRate (self))
  
 foreign import javascript unsafe "$1[\"playbackRate\"] = $2;"
-        js_setPlaybackRate :: JSRef MediaController -> Double -> IO ()
+        js_setPlaybackRate :: MediaController -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaController.playbackRate Mozilla MediaController.playbackRate documentation> 
 setPlaybackRate :: (MonadIO m) => MediaController -> Double -> m ()
-setPlaybackRate self val
-  = liftIO (js_setPlaybackRate (unMediaController self) val)
+setPlaybackRate self val = liftIO (js_setPlaybackRate (self) val)
  
 foreign import javascript unsafe "$1[\"playbackRate\"]"
-        js_getPlaybackRate :: JSRef MediaController -> IO Double
+        js_getPlaybackRate :: MediaController -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaController.playbackRate Mozilla MediaController.playbackRate documentation> 
 getPlaybackRate :: (MonadIO m) => MediaController -> m Double
-getPlaybackRate self
-  = liftIO (js_getPlaybackRate (unMediaController self))
+getPlaybackRate self = liftIO (js_getPlaybackRate (self))
  
 foreign import javascript unsafe "$1[\"volume\"] = $2;"
-        js_setVolume :: JSRef MediaController -> Double -> IO ()
+        js_setVolume :: MediaController -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaController.volume Mozilla MediaController.volume documentation> 
 setVolume :: (MonadIO m) => MediaController -> Double -> m ()
-setVolume self val
-  = liftIO (js_setVolume (unMediaController self) val)
+setVolume self val = liftIO (js_setVolume (self) val)
  
 foreign import javascript unsafe "$1[\"volume\"]" js_getVolume ::
-        JSRef MediaController -> IO Double
+        MediaController -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaController.volume Mozilla MediaController.volume documentation> 
 getVolume :: (MonadIO m) => MediaController -> m Double
-getVolume self = liftIO (js_getVolume (unMediaController self))
+getVolume self = liftIO (js_getVolume (self))
  
 foreign import javascript unsafe "$1[\"muted\"] = $2;" js_setMuted
-        :: JSRef MediaController -> Bool -> IO ()
+        :: MediaController -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaController.muted Mozilla MediaController.muted documentation> 
 setMuted :: (MonadIO m) => MediaController -> Bool -> m ()
-setMuted self val
-  = liftIO (js_setMuted (unMediaController self) val)
+setMuted self val = liftIO (js_setMuted (self) val)
  
 foreign import javascript unsafe "($1[\"muted\"] ? 1 : 0)"
-        js_getMuted :: JSRef MediaController -> IO Bool
+        js_getMuted :: MediaController -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaController.muted Mozilla MediaController.muted documentation> 
 getMuted :: (MonadIO m) => MediaController -> m Bool
-getMuted self = liftIO (js_getMuted (unMediaController self))
+getMuted self = liftIO (js_getMuted (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/MediaControlsHost.hs b/src/GHCJS/DOM/JSFFI/Generated/MediaControlsHost.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/MediaControlsHost.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/MediaControlsHost.hs
@@ -26,7 +26,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -41,8 +41,7 @@
  
 foreign import javascript unsafe
         "$1[\"sortedTrackListForMenu\"]($2)" js_sortedTrackListForMenu ::
-        JSRef MediaControlsHost ->
-          JSRef TextTrackList -> IO (JSRef [Maybe TextTrack])
+        MediaControlsHost -> Nullable TextTrackList -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaControlsHost.sortedTrackListForMenu Mozilla MediaControlsHost.sortedTrackListForMenu documentation> 
 sortedTrackListForMenu ::
@@ -50,15 +49,12 @@
                          MediaControlsHost -> Maybe TextTrackList -> m [Maybe TextTrack]
 sortedTrackListForMenu self trackList
   = liftIO
-      ((js_sortedTrackListForMenu (unMediaControlsHost self)
-          (maybe jsNull pToJSRef trackList))
-         >>= fromJSRefUnchecked)
+      ((js_sortedTrackListForMenu (self) (maybeToNullable trackList)) >>=
+         fromJSRefUnchecked)
  
 foreign import javascript unsafe
         "$1[\"sortedTrackListForMenu\"]($2)" js_sortedTrackListForMenuAudio
-        ::
-        JSRef MediaControlsHost ->
-          JSRef AudioTrackList -> IO (JSRef [Maybe AudioTrack])
+        :: MediaControlsHost -> Nullable AudioTrackList -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaControlsHost.sortedTrackListForMenu Mozilla MediaControlsHost.sortedTrackListForMenu documentation> 
 sortedTrackListForMenuAudio ::
@@ -66,13 +62,13 @@
                               MediaControlsHost -> Maybe AudioTrackList -> m [Maybe AudioTrack]
 sortedTrackListForMenuAudio self trackList
   = liftIO
-      ((js_sortedTrackListForMenuAudio (unMediaControlsHost self)
-          (maybe jsNull pToJSRef trackList))
+      ((js_sortedTrackListForMenuAudio (self)
+          (maybeToNullable trackList))
          >>= fromJSRefUnchecked)
  
 foreign import javascript unsafe "$1[\"displayNameForTrack\"]($2)"
         js_displayNameForTrack ::
-        JSRef MediaControlsHost -> JSRef TextTrack -> IO JSString
+        MediaControlsHost -> Nullable TextTrack -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaControlsHost.displayNameForTrack Mozilla MediaControlsHost.displayNameForTrack documentation> 
 displayNameForTrack ::
@@ -81,12 +77,11 @@
 displayNameForTrack self track
   = liftIO
       (fromJSString <$>
-         (js_displayNameForTrack (unMediaControlsHost self)
-            (maybe jsNull pToJSRef track)))
+         (js_displayNameForTrack (self) (maybeToNullable track)))
  
 foreign import javascript unsafe "$1[\"displayNameForTrack\"]($2)"
         js_displayNameForTrackAudio ::
-        JSRef MediaControlsHost -> JSRef AudioTrack -> IO JSString
+        MediaControlsHost -> Nullable AudioTrack -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaControlsHost.displayNameForTrack Mozilla MediaControlsHost.displayNameForTrack documentation> 
 displayNameForTrackAudio ::
@@ -95,60 +90,54 @@
 displayNameForTrackAudio self track
   = liftIO
       (fromJSString <$>
-         (js_displayNameForTrackAudio (unMediaControlsHost self)
-            (maybe jsNull pToJSRef track)))
+         (js_displayNameForTrackAudio (self) (maybeToNullable track)))
  
 foreign import javascript unsafe "$1[\"setSelectedTextTrack\"]($2)"
         js_setSelectedTextTrack ::
-        JSRef MediaControlsHost -> JSRef TextTrack -> IO ()
+        MediaControlsHost -> Nullable TextTrack -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaControlsHost.setSelectedTextTrack Mozilla MediaControlsHost.setSelectedTextTrack documentation> 
 setSelectedTextTrack ::
                      (MonadIO m) => MediaControlsHost -> Maybe TextTrack -> m ()
 setSelectedTextTrack self track
-  = liftIO
-      (js_setSelectedTextTrack (unMediaControlsHost self)
-         (maybe jsNull pToJSRef track))
+  = liftIO (js_setSelectedTextTrack (self) (maybeToNullable track))
  
 foreign import javascript unsafe
         "$1[\"updateTextTrackContainer\"]()" js_updateTextTrackContainer ::
-        JSRef MediaControlsHost -> IO ()
+        MediaControlsHost -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaControlsHost.updateTextTrackContainer Mozilla MediaControlsHost.updateTextTrackContainer documentation> 
 updateTextTrackContainer ::
                          (MonadIO m) => MediaControlsHost -> m ()
 updateTextTrackContainer self
-  = liftIO (js_updateTextTrackContainer (unMediaControlsHost self))
+  = liftIO (js_updateTextTrackContainer (self))
  
 foreign import javascript unsafe "$1[\"enteredFullscreen\"]()"
-        js_enteredFullscreen :: JSRef MediaControlsHost -> IO ()
+        js_enteredFullscreen :: MediaControlsHost -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaControlsHost.enteredFullscreen Mozilla MediaControlsHost.enteredFullscreen documentation> 
 enteredFullscreen :: (MonadIO m) => MediaControlsHost -> m ()
-enteredFullscreen self
-  = liftIO (js_enteredFullscreen (unMediaControlsHost self))
+enteredFullscreen self = liftIO (js_enteredFullscreen (self))
  
 foreign import javascript unsafe "$1[\"exitedFullscreen\"]()"
-        js_exitedFullscreen :: JSRef MediaControlsHost -> IO ()
+        js_exitedFullscreen :: MediaControlsHost -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaControlsHost.exitedFullscreen Mozilla MediaControlsHost.exitedFullscreen documentation> 
 exitedFullscreen :: (MonadIO m) => MediaControlsHost -> m ()
-exitedFullscreen self
-  = liftIO (js_exitedFullscreen (unMediaControlsHost self))
+exitedFullscreen self = liftIO (js_exitedFullscreen (self))
  
 foreign import javascript unsafe
         "$1[\"enterFullscreenOptimized\"]()" js_enterFullscreenOptimized ::
-        JSRef MediaControlsHost -> IO ()
+        MediaControlsHost -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaControlsHost.enterFullscreenOptimized Mozilla MediaControlsHost.enterFullscreenOptimized documentation> 
 enterFullscreenOptimized ::
                          (MonadIO m) => MediaControlsHost -> m ()
 enterFullscreenOptimized self
-  = liftIO (js_enterFullscreenOptimized (unMediaControlsHost self))
+  = liftIO (js_enterFullscreenOptimized (self))
  
 foreign import javascript unsafe "$1[\"mediaUIImageData\"]($2)"
-        js_mediaUIImageData ::
-        JSRef MediaControlsHost -> JSRef MediaUIPartID -> IO JSString
+        js_mediaUIImageData :: MediaControlsHost -> JSRef -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaControlsHost.mediaUIImageData Mozilla MediaControlsHost.mediaUIImageData documentation> 
 mediaUIImageData ::
@@ -156,132 +145,115 @@
                    MediaControlsHost -> MediaUIPartID -> m result
 mediaUIImageData self partID
   = liftIO
-      (fromJSString <$>
-         (js_mediaUIImageData (unMediaControlsHost self) (pToJSRef partID)))
+      (fromJSString <$> (js_mediaUIImageData (self) (pToJSRef partID)))
  
 foreign import javascript unsafe "$1[\"captionMenuOffItem\"]"
         js_getCaptionMenuOffItem ::
-        JSRef MediaControlsHost -> IO (JSRef TextTrack)
+        MediaControlsHost -> IO (Nullable TextTrack)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaControlsHost.captionMenuOffItem Mozilla MediaControlsHost.captionMenuOffItem documentation> 
 getCaptionMenuOffItem ::
                       (MonadIO m) => MediaControlsHost -> m (Maybe TextTrack)
 getCaptionMenuOffItem self
-  = liftIO
-      ((js_getCaptionMenuOffItem (unMediaControlsHost self)) >>=
-         fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getCaptionMenuOffItem (self)))
  
 foreign import javascript unsafe "$1[\"captionMenuAutomaticItem\"]"
         js_getCaptionMenuAutomaticItem ::
-        JSRef MediaControlsHost -> IO (JSRef TextTrack)
+        MediaControlsHost -> IO (Nullable TextTrack)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaControlsHost.captionMenuAutomaticItem Mozilla MediaControlsHost.captionMenuAutomaticItem documentation> 
 getCaptionMenuAutomaticItem ::
                             (MonadIO m) => MediaControlsHost -> m (Maybe TextTrack)
 getCaptionMenuAutomaticItem self
   = liftIO
-      ((js_getCaptionMenuAutomaticItem (unMediaControlsHost self)) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_getCaptionMenuAutomaticItem (self)))
  
 foreign import javascript unsafe "$1[\"captionDisplayMode\"]"
-        js_getCaptionDisplayMode :: JSRef MediaControlsHost -> IO JSString
+        js_getCaptionDisplayMode :: MediaControlsHost -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaControlsHost.captionDisplayMode Mozilla MediaControlsHost.captionDisplayMode documentation> 
 getCaptionDisplayMode ::
                       (MonadIO m, FromJSString result) => MediaControlsHost -> m result
 getCaptionDisplayMode self
-  = liftIO
-      (fromJSString <$>
-         (js_getCaptionDisplayMode (unMediaControlsHost self)))
+  = liftIO (fromJSString <$> (js_getCaptionDisplayMode (self)))
  
 foreign import javascript unsafe "$1[\"textTrackContainer\"]"
         js_getTextTrackContainer ::
-        JSRef MediaControlsHost -> IO (JSRef HTMLElement)
+        MediaControlsHost -> IO (Nullable HTMLElement)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaControlsHost.textTrackContainer Mozilla MediaControlsHost.textTrackContainer documentation> 
 getTextTrackContainer ::
                       (MonadIO m) => MediaControlsHost -> m (Maybe HTMLElement)
 getTextTrackContainer self
-  = liftIO
-      ((js_getTextTrackContainer (unMediaControlsHost self)) >>=
-         fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getTextTrackContainer (self)))
  
 foreign import javascript unsafe
         "($1[\"mediaPlaybackAllowsInline\"] ? 1 : 0)"
-        js_getMediaPlaybackAllowsInline ::
-        JSRef MediaControlsHost -> IO Bool
+        js_getMediaPlaybackAllowsInline :: MediaControlsHost -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaControlsHost.mediaPlaybackAllowsInline Mozilla MediaControlsHost.mediaPlaybackAllowsInline documentation> 
 getMediaPlaybackAllowsInline ::
                              (MonadIO m) => MediaControlsHost -> m Bool
 getMediaPlaybackAllowsInline self
-  = liftIO
-      (js_getMediaPlaybackAllowsInline (unMediaControlsHost self))
+  = liftIO (js_getMediaPlaybackAllowsInline (self))
  
 foreign import javascript unsafe
         "($1[\"supportsFullscreen\"] ? 1 : 0)" js_getSupportsFullscreen ::
-        JSRef MediaControlsHost -> IO Bool
+        MediaControlsHost -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaControlsHost.supportsFullscreen Mozilla MediaControlsHost.supportsFullscreen documentation> 
 getSupportsFullscreen :: (MonadIO m) => MediaControlsHost -> m Bool
 getSupportsFullscreen self
-  = liftIO (js_getSupportsFullscreen (unMediaControlsHost self))
+  = liftIO (js_getSupportsFullscreen (self))
  
 foreign import javascript unsafe
         "($1[\"userGestureRequired\"] ? 1 : 0)" js_getUserGestureRequired
-        :: JSRef MediaControlsHost -> IO Bool
+        :: MediaControlsHost -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaControlsHost.userGestureRequired Mozilla MediaControlsHost.userGestureRequired documentation> 
 getUserGestureRequired ::
                        (MonadIO m) => MediaControlsHost -> m Bool
 getUserGestureRequired self
-  = liftIO (js_getUserGestureRequired (unMediaControlsHost self))
+  = liftIO (js_getUserGestureRequired (self))
  
 foreign import javascript unsafe
         "$1[\"externalDeviceDisplayName\"]" js_getExternalDeviceDisplayName
-        :: JSRef MediaControlsHost -> IO JSString
+        :: MediaControlsHost -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaControlsHost.externalDeviceDisplayName Mozilla MediaControlsHost.externalDeviceDisplayName documentation> 
 getExternalDeviceDisplayName ::
                              (MonadIO m, FromJSString result) => MediaControlsHost -> m result
 getExternalDeviceDisplayName self
   = liftIO
-      (fromJSString <$>
-         (js_getExternalDeviceDisplayName (unMediaControlsHost self)))
+      (fromJSString <$> (js_getExternalDeviceDisplayName (self)))
  
 foreign import javascript unsafe "$1[\"externalDeviceType\"]"
-        js_getExternalDeviceType ::
-        JSRef MediaControlsHost -> IO (JSRef DeviceType)
+        js_getExternalDeviceType :: MediaControlsHost -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaControlsHost.externalDeviceType Mozilla MediaControlsHost.externalDeviceType documentation> 
 getExternalDeviceType ::
                       (MonadIO m) => MediaControlsHost -> m DeviceType
 getExternalDeviceType self
-  = liftIO
-      ((js_getExternalDeviceType (unMediaControlsHost self)) >>=
-         fromJSRefUnchecked)
+  = liftIO ((js_getExternalDeviceType (self)) >>= fromJSRefUnchecked)
  
 foreign import javascript unsafe
         "$1[\"controlsDependOnPageScaleFactor\"] = $2;"
         js_setControlsDependOnPageScaleFactor ::
-        JSRef MediaControlsHost -> Bool -> IO ()
+        MediaControlsHost -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaControlsHost.controlsDependOnPageScaleFactor Mozilla MediaControlsHost.controlsDependOnPageScaleFactor documentation> 
 setControlsDependOnPageScaleFactor ::
                                    (MonadIO m) => MediaControlsHost -> Bool -> m ()
 setControlsDependOnPageScaleFactor self val
-  = liftIO
-      (js_setControlsDependOnPageScaleFactor (unMediaControlsHost self)
-         val)
+  = liftIO (js_setControlsDependOnPageScaleFactor (self) val)
  
 foreign import javascript unsafe
         "($1[\"controlsDependOnPageScaleFactor\"] ? 1 : 0)"
         js_getControlsDependOnPageScaleFactor ::
-        JSRef MediaControlsHost -> IO Bool
+        MediaControlsHost -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaControlsHost.controlsDependOnPageScaleFactor Mozilla MediaControlsHost.controlsDependOnPageScaleFactor documentation> 
 getControlsDependOnPageScaleFactor ::
                                    (MonadIO m) => MediaControlsHost -> m Bool
 getControlsDependOnPageScaleFactor self
-  = liftIO
-      (js_getControlsDependOnPageScaleFactor (unMediaControlsHost self))
+  = liftIO (js_getControlsDependOnPageScaleFactor (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/MediaElementAudioSourceNode.hs b/src/GHCJS/DOM/JSFFI/Generated/MediaElementAudioSourceNode.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/MediaElementAudioSourceNode.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/MediaElementAudioSourceNode.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -21,13 +21,11 @@
  
 foreign import javascript unsafe "$1[\"mediaElement\"]"
         js_getMediaElement ::
-        JSRef MediaElementAudioSourceNode -> IO (JSRef HTMLMediaElement)
+        MediaElementAudioSourceNode -> IO (Nullable HTMLMediaElement)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaElementAudioSourceNode.mediaElement Mozilla MediaElementAudioSourceNode.mediaElement documentation> 
 getMediaElement ::
                 (MonadIO m) =>
                   MediaElementAudioSourceNode -> m (Maybe HTMLMediaElement)
 getMediaElement self
-  = liftIO
-      ((js_getMediaElement (unMediaElementAudioSourceNode self)) >>=
-         fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getMediaElement (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/MediaError.hs b/src/GHCJS/DOM/JSFFI/Generated/MediaError.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/MediaError.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/MediaError.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -26,8 +26,8 @@
 pattern MEDIA_ERR_ENCRYPTED = 5
  
 foreign import javascript unsafe "$1[\"code\"]" js_getCode ::
-        JSRef MediaError -> IO Word
+        MediaError -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaError.code Mozilla MediaError.code documentation> 
 getCode :: (MonadIO m) => MediaError -> m Word
-getCode self = liftIO (js_getCode (unMediaError self))
+getCode self = liftIO (js_getCode (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/MediaKeyError.hs b/src/GHCJS/DOM/JSFFI/Generated/MediaKeyError.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/MediaKeyError.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/MediaKeyError.hs
@@ -8,7 +8,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -28,16 +28,15 @@
 pattern MEDIA_KEYERR_DOMAIN = 6
  
 foreign import javascript unsafe "$1[\"code\"]" js_getCode ::
-        JSRef MediaKeyError -> IO Word
+        MediaKeyError -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitMediaKeyError.code Mozilla WebKitMediaKeyError.code documentation> 
 getCode :: (MonadIO m) => MediaKeyError -> m Word
-getCode self = liftIO (js_getCode (unMediaKeyError self))
+getCode self = liftIO (js_getCode (self))
  
 foreign import javascript unsafe "$1[\"systemCode\"]"
-        js_getSystemCode :: JSRef MediaKeyError -> IO Word
+        js_getSystemCode :: MediaKeyError -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitMediaKeyError.systemCode Mozilla WebKitMediaKeyError.systemCode documentation> 
 getSystemCode :: (MonadIO m) => MediaKeyError -> m Word
-getSystemCode self
-  = liftIO (js_getSystemCode (unMediaKeyError self))
+getSystemCode self = liftIO (js_getSystemCode (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/MediaKeyEvent.hs b/src/GHCJS/DOM/JSFFI/Generated/MediaKeyEvent.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/MediaKeyEvent.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/MediaKeyEvent.hs
@@ -8,7 +8,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -22,64 +22,60 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"keySystem\"]"
-        js_getKeySystem :: JSRef MediaKeyEvent -> IO JSString
+        js_getKeySystem :: MediaKeyEvent -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaKeyEvent.keySystem Mozilla MediaKeyEvent.keySystem documentation> 
 getKeySystem ::
              (MonadIO m, FromJSString result) => MediaKeyEvent -> m result
 getKeySystem self
-  = liftIO
-      (fromJSString <$> (js_getKeySystem (unMediaKeyEvent self)))
+  = liftIO (fromJSString <$> (js_getKeySystem (self)))
  
 foreign import javascript unsafe "$1[\"sessionId\"]"
-        js_getSessionId :: JSRef MediaKeyEvent -> IO JSString
+        js_getSessionId :: MediaKeyEvent -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaKeyEvent.sessionId Mozilla MediaKeyEvent.sessionId documentation> 
 getSessionId ::
              (MonadIO m, FromJSString result) => MediaKeyEvent -> m result
 getSessionId self
-  = liftIO
-      (fromJSString <$> (js_getSessionId (unMediaKeyEvent self)))
+  = liftIO (fromJSString <$> (js_getSessionId (self)))
  
 foreign import javascript unsafe "$1[\"initData\"]" js_getInitData
-        :: JSRef MediaKeyEvent -> IO (JSRef Uint8Array)
+        :: MediaKeyEvent -> IO (Nullable Uint8Array)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaKeyEvent.initData Mozilla MediaKeyEvent.initData documentation> 
 getInitData :: (MonadIO m) => MediaKeyEvent -> m (Maybe Uint8Array)
 getInitData self
-  = liftIO ((js_getInitData (unMediaKeyEvent self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getInitData (self)))
  
 foreign import javascript unsafe "$1[\"message\"]" js_getMessage ::
-        JSRef MediaKeyEvent -> IO (JSRef Uint8Array)
+        MediaKeyEvent -> IO (Nullable Uint8Array)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaKeyEvent.message Mozilla MediaKeyEvent.message documentation> 
 getMessage :: (MonadIO m) => MediaKeyEvent -> m (Maybe Uint8Array)
 getMessage self
-  = liftIO ((js_getMessage (unMediaKeyEvent self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getMessage (self)))
  
 foreign import javascript unsafe "$1[\"defaultURL\"]"
-        js_getDefaultURL :: JSRef MediaKeyEvent -> IO JSString
+        js_getDefaultURL :: MediaKeyEvent -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaKeyEvent.defaultURL Mozilla MediaKeyEvent.defaultURL documentation> 
 getDefaultURL ::
               (MonadIO m, FromJSString result) => MediaKeyEvent -> m result
 getDefaultURL self
-  = liftIO
-      (fromJSString <$> (js_getDefaultURL (unMediaKeyEvent self)))
+  = liftIO (fromJSString <$> (js_getDefaultURL (self)))
  
 foreign import javascript unsafe "$1[\"errorCode\"]"
-        js_getErrorCode :: JSRef MediaKeyEvent -> IO (JSRef MediaKeyError)
+        js_getErrorCode :: MediaKeyEvent -> IO (Nullable MediaKeyError)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaKeyEvent.errorCode Mozilla MediaKeyEvent.errorCode documentation> 
 getErrorCode ::
              (MonadIO m) => MediaKeyEvent -> m (Maybe MediaKeyError)
 getErrorCode self
-  = liftIO ((js_getErrorCode (unMediaKeyEvent self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getErrorCode (self)))
  
 foreign import javascript unsafe "$1[\"systemCode\"]"
-        js_getSystemCode :: JSRef MediaKeyEvent -> IO Word
+        js_getSystemCode :: MediaKeyEvent -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaKeyEvent.systemCode Mozilla MediaKeyEvent.systemCode documentation> 
 getSystemCode :: (MonadIO m) => MediaKeyEvent -> m Word
-getSystemCode self
-  = liftIO (js_getSystemCode (unMediaKeyEvent self))
+getSystemCode self = liftIO (js_getSystemCode (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/MediaKeyMessageEvent.hs b/src/GHCJS/DOM/JSFFI/Generated/MediaKeyMessageEvent.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/MediaKeyMessageEvent.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/MediaKeyMessageEvent.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,23 +20,20 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"message\"]" js_getMessage ::
-        JSRef MediaKeyMessageEvent -> IO (JSRef Uint8Array)
+        MediaKeyMessageEvent -> IO (Nullable Uint8Array)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitMediaKeyMessageEvent.message Mozilla WebKitMediaKeyMessageEvent.message documentation> 
 getMessage ::
            (MonadIO m) => MediaKeyMessageEvent -> m (Maybe Uint8Array)
 getMessage self
-  = liftIO
-      ((js_getMessage (unMediaKeyMessageEvent self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getMessage (self)))
  
 foreign import javascript unsafe "$1[\"destinationURL\"]"
-        js_getDestinationURL :: JSRef MediaKeyMessageEvent -> IO JSString
+        js_getDestinationURL :: MediaKeyMessageEvent -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitMediaKeyMessageEvent.destinationURL Mozilla WebKitMediaKeyMessageEvent.destinationURL documentation> 
 getDestinationURL ::
                   (MonadIO m, FromJSString result) =>
                     MediaKeyMessageEvent -> m result
 getDestinationURL self
-  = liftIO
-      (fromJSString <$>
-         (js_getDestinationURL (unMediaKeyMessageEvent self)))
+  = liftIO (fromJSString <$> (js_getDestinationURL (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/MediaKeyNeededEvent.hs b/src/GHCJS/DOM/JSFFI/Generated/MediaKeyNeededEvent.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/MediaKeyNeededEvent.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/MediaKeyNeededEvent.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,11 +19,10 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"initData\"]" js_getInitData
-        :: JSRef MediaKeyNeededEvent -> IO (JSRef Uint8Array)
+        :: MediaKeyNeededEvent -> IO (Nullable Uint8Array)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaKeyNeededEvent.initData Mozilla MediaKeyNeededEvent.initData documentation> 
 getInitData ::
             (MonadIO m) => MediaKeyNeededEvent -> m (Maybe Uint8Array)
 getInitData self
-  = liftIO
-      ((js_getInitData (unMediaKeyNeededEvent self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getInitData (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/MediaKeySession.hs b/src/GHCJS/DOM/JSFFI/Generated/MediaKeySession.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/MediaKeySession.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/MediaKeySession.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -21,7 +21,7 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"update\"]($2)" js_update ::
-        JSRef MediaKeySession -> JSRef Uint8Array -> IO ()
+        MediaKeySession -> Nullable Uint8Array -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitMediaKeySession.update Mozilla WebKitMediaKeySession.update documentation> 
 update ::
@@ -29,44 +29,40 @@
          MediaKeySession -> Maybe key -> m ()
 update self key
   = liftIO
-      (js_update (unMediaKeySession self)
-         (maybe jsNull (unUint8Array . toUint8Array) key))
+      (js_update (self) (maybeToNullable (fmap toUint8Array key)))
  
 foreign import javascript unsafe "$1[\"close\"]()" js_close ::
-        JSRef MediaKeySession -> IO ()
+        MediaKeySession -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitMediaKeySession.close Mozilla WebKitMediaKeySession.close documentation> 
 close :: (MonadIO m) => MediaKeySession -> m ()
-close self = liftIO (js_close (unMediaKeySession self))
+close self = liftIO (js_close (self))
  
 foreign import javascript unsafe "$1[\"error\"]" js_getError ::
-        JSRef MediaKeySession -> IO (JSRef MediaKeyError)
+        MediaKeySession -> IO (Nullable MediaKeyError)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitMediaKeySession.error Mozilla WebKitMediaKeySession.error documentation> 
 getError ::
          (MonadIO m) => MediaKeySession -> m (Maybe MediaKeyError)
-getError self
-  = liftIO ((js_getError (unMediaKeySession self)) >>= fromJSRef)
+getError self = liftIO (nullableToMaybe <$> (js_getError (self)))
  
 foreign import javascript unsafe "$1[\"keySystem\"]"
-        js_getKeySystem :: JSRef MediaKeySession -> IO JSString
+        js_getKeySystem :: MediaKeySession -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitMediaKeySession.keySystem Mozilla WebKitMediaKeySession.keySystem documentation> 
 getKeySystem ::
              (MonadIO m, FromJSString result) => MediaKeySession -> m result
 getKeySystem self
-  = liftIO
-      (fromJSString <$> (js_getKeySystem (unMediaKeySession self)))
+  = liftIO (fromJSString <$> (js_getKeySystem (self)))
  
 foreign import javascript unsafe "$1[\"sessionId\"]"
-        js_getSessionId :: JSRef MediaKeySession -> IO JSString
+        js_getSessionId :: MediaKeySession -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitMediaKeySession.sessionId Mozilla WebKitMediaKeySession.sessionId documentation> 
 getSessionId ::
              (MonadIO m, FromJSString result) => MediaKeySession -> m result
 getSessionId self
-  = liftIO
-      (fromJSString <$> (js_getSessionId (unMediaKeySession self)))
+  = liftIO (fromJSString <$> (js_getSessionId (self)))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitMediaKeySession.onwebkitkeyadded Mozilla WebKitMediaKeySession.onwebkitkeyadded documentation> 
 webKitKeyAdded :: EventName MediaKeySession Event
diff --git a/src/GHCJS/DOM/JSFFI/Generated/MediaKeys.hs b/src/GHCJS/DOM/JSFFI/Generated/MediaKeys.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/MediaKeys.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/MediaKeys.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -21,19 +21,18 @@
  
 foreign import javascript unsafe
         "new window[\"WebKitMediaKeys\"]($1)" js_newMediaKeys ::
-        JSString -> IO (JSRef MediaKeys)
+        JSString -> IO MediaKeys
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitMediaKeys Mozilla WebKitMediaKeys documentation> 
 newMediaKeys ::
              (MonadIO m, ToJSString keySystem) => keySystem -> m MediaKeys
 newMediaKeys keySystem
-  = liftIO
-      (js_newMediaKeys (toJSString keySystem) >>= fromJSRefUnchecked)
+  = liftIO (js_newMediaKeys (toJSString keySystem))
  
 foreign import javascript unsafe "$1[\"createSession\"]($2, $3)"
         js_createSession ::
-        JSRef MediaKeys ->
-          JSString -> JSRef Uint8Array -> IO (JSRef MediaKeySession)
+        MediaKeys ->
+          JSString -> Nullable Uint8Array -> IO (Nullable MediaKeySession)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitMediaKeys.createSession Mozilla WebKitMediaKeys.createSession documentation> 
 createSession ::
@@ -41,13 +40,13 @@
                 MediaKeys -> type' -> Maybe initData -> m (Maybe MediaKeySession)
 createSession self type' initData
   = liftIO
-      ((js_createSession (unMediaKeys self) (toJSString type')
-          (maybe jsNull (unUint8Array . toUint8Array) initData))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createSession (self) (toJSString type')
+            (maybeToNullable (fmap toUint8Array initData))))
  
 foreign import javascript unsafe
         "($1[\"isTypeSupported\"]($2,\n$3) ? 1 : 0)" js_isTypeSupported ::
-        JSRef MediaKeys -> JSString -> JSString -> IO Bool
+        MediaKeys -> JSString -> JSString -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitMediaKeys.isTypeSupported Mozilla WebKitMediaKeys.isTypeSupported documentation> 
 isTypeSupported ::
@@ -55,14 +54,14 @@
                   MediaKeys -> keySystem -> type' -> m Bool
 isTypeSupported self keySystem type'
   = liftIO
-      (js_isTypeSupported (unMediaKeys self) (toJSString keySystem)
+      (js_isTypeSupported (self) (toJSString keySystem)
          (toJSString type'))
  
 foreign import javascript unsafe "$1[\"keySystem\"]"
-        js_getKeySystem :: JSRef MediaKeys -> IO JSString
+        js_getKeySystem :: MediaKeys -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitMediaKeys.keySystem Mozilla WebKitMediaKeys.keySystem documentation> 
 getKeySystem ::
              (MonadIO m, FromJSString result) => MediaKeys -> m result
 getKeySystem self
-  = liftIO (fromJSString <$> (js_getKeySystem (unMediaKeys self)))
+  = liftIO (fromJSString <$> (js_getKeySystem (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/MediaList.hs b/src/GHCJS/DOM/JSFFI/Generated/MediaList.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/MediaList.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/MediaList.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -21,58 +21,54 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"item\"]($2)" js_item ::
-        JSRef MediaList -> Word -> IO (JSRef (Maybe JSString))
+        MediaList -> Word -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaList.item Mozilla MediaList.item documentation> 
 item ::
      (MonadIO m, FromJSString result) =>
        MediaList -> Word -> m (Maybe result)
 item self index
-  = liftIO (fromMaybeJSString <$> (js_item (unMediaList self) index))
+  = liftIO (fromMaybeJSString <$> (js_item (self) index))
  
 foreign import javascript unsafe "$1[\"deleteMedium\"]($2)"
-        js_deleteMedium :: JSRef MediaList -> JSString -> IO ()
+        js_deleteMedium :: MediaList -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaList.deleteMedium Mozilla MediaList.deleteMedium documentation> 
 deleteMedium ::
              (MonadIO m, ToJSString oldMedium) => MediaList -> oldMedium -> m ()
 deleteMedium self oldMedium
-  = liftIO
-      (js_deleteMedium (unMediaList self) (toJSString oldMedium))
+  = liftIO (js_deleteMedium (self) (toJSString oldMedium))
  
 foreign import javascript unsafe "$1[\"appendMedium\"]($2)"
-        js_appendMedium :: JSRef MediaList -> JSString -> IO ()
+        js_appendMedium :: MediaList -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaList.appendMedium Mozilla MediaList.appendMedium documentation> 
 appendMedium ::
              (MonadIO m, ToJSString newMedium) => MediaList -> newMedium -> m ()
 appendMedium self newMedium
-  = liftIO
-      (js_appendMedium (unMediaList self) (toJSString newMedium))
+  = liftIO (js_appendMedium (self) (toJSString newMedium))
  
 foreign import javascript unsafe "$1[\"mediaText\"] = $2;"
-        js_setMediaText ::
-        JSRef MediaList -> JSRef (Maybe JSString) -> IO ()
+        js_setMediaText :: MediaList -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaList.mediaText Mozilla MediaList.mediaText documentation> 
 setMediaText ::
              (MonadIO m, ToJSString val) => MediaList -> Maybe val -> m ()
 setMediaText self val
-  = liftIO (js_setMediaText (unMediaList self) (toMaybeJSString val))
+  = liftIO (js_setMediaText (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"mediaText\"]"
-        js_getMediaText :: JSRef MediaList -> IO (JSRef (Maybe JSString))
+        js_getMediaText :: MediaList -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaList.mediaText Mozilla MediaList.mediaText documentation> 
 getMediaText ::
              (MonadIO m, FromJSString result) => MediaList -> m (Maybe result)
 getMediaText self
-  = liftIO
-      (fromMaybeJSString <$> (js_getMediaText (unMediaList self)))
+  = liftIO (fromMaybeJSString <$> (js_getMediaText (self)))
  
 foreign import javascript unsafe "$1[\"length\"]" js_getLength ::
-        JSRef MediaList -> IO Word
+        MediaList -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaList.length Mozilla MediaList.length documentation> 
 getLength :: (MonadIO m) => MediaList -> m Word
-getLength self = liftIO (js_getLength (unMediaList self))
+getLength self = liftIO (js_getLength (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/MediaQueryList.hs b/src/GHCJS/DOM/JSFFI/Generated/MediaQueryList.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/MediaQueryList.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/MediaQueryList.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -21,42 +21,37 @@
  
 foreign import javascript unsafe "$1[\"addListener\"]($2)"
         js_addListener ::
-        JSRef MediaQueryList -> JSRef MediaQueryListListener -> IO ()
+        MediaQueryList -> Nullable MediaQueryListListener -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaQueryList.addListener Mozilla MediaQueryList.addListener documentation> 
 addListener ::
             (MonadIO m) =>
               MediaQueryList -> Maybe MediaQueryListListener -> m ()
 addListener self listener
-  = liftIO
-      (js_addListener (unMediaQueryList self)
-         (maybe jsNull pToJSRef listener))
+  = liftIO (js_addListener (self) (maybeToNullable listener))
  
 foreign import javascript unsafe "$1[\"removeListener\"]($2)"
         js_removeListener ::
-        JSRef MediaQueryList -> JSRef MediaQueryListListener -> IO ()
+        MediaQueryList -> Nullable MediaQueryListListener -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaQueryList.removeListener Mozilla MediaQueryList.removeListener documentation> 
 removeListener ::
                (MonadIO m) =>
                  MediaQueryList -> Maybe MediaQueryListListener -> m ()
 removeListener self listener
-  = liftIO
-      (js_removeListener (unMediaQueryList self)
-         (maybe jsNull pToJSRef listener))
+  = liftIO (js_removeListener (self) (maybeToNullable listener))
  
 foreign import javascript unsafe "$1[\"media\"]" js_getMedia ::
-        JSRef MediaQueryList -> IO JSString
+        MediaQueryList -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaQueryList.media Mozilla MediaQueryList.media documentation> 
 getMedia ::
          (MonadIO m, FromJSString result) => MediaQueryList -> m result
-getMedia self
-  = liftIO (fromJSString <$> (js_getMedia (unMediaQueryList self)))
+getMedia self = liftIO (fromJSString <$> (js_getMedia (self)))
  
 foreign import javascript unsafe "($1[\"matches\"] ? 1 : 0)"
-        js_getMatches :: JSRef MediaQueryList -> IO Bool
+        js_getMatches :: MediaQueryList -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaQueryList.matches Mozilla MediaQueryList.matches documentation> 
 getMatches :: (MonadIO m) => MediaQueryList -> m Bool
-getMatches self = liftIO (js_getMatches (unMediaQueryList self))
+getMatches self = liftIO (js_getMatches (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/MediaQueryListListener.hs b/src/GHCJS/DOM/JSFFI/Generated/MediaQueryListListener.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/MediaQueryListListener.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/MediaQueryListListener.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -24,8 +24,9 @@
                             (Maybe MediaQueryList -> IO ()) -> m MediaQueryListListener
 newMediaQueryListListener callback
   = liftIO
-      (syncCallback1 ThrowWouldBlock
-         (\ list -> fromJSRefUnchecked list >>= \ list' -> callback list'))
+      (MediaQueryListListener <$>
+         syncCallback1 ThrowWouldBlock
+           (\ list -> fromJSRefUnchecked list >>= \ list' -> callback list'))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaQueryListListener Mozilla MediaQueryListListener documentation> 
 newMediaQueryListListenerSync ::
@@ -33,8 +34,9 @@
                                 (Maybe MediaQueryList -> IO ()) -> m MediaQueryListListener
 newMediaQueryListListenerSync callback
   = liftIO
-      (syncCallback1 ContinueAsync
-         (\ list -> fromJSRefUnchecked list >>= \ list' -> callback list'))
+      (MediaQueryListListener <$>
+         syncCallback1 ContinueAsync
+           (\ list -> fromJSRefUnchecked list >>= \ list' -> callback list'))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaQueryListListener Mozilla MediaQueryListListener documentation> 
 newMediaQueryListListenerAsync ::
@@ -42,5 +44,6 @@
                                  (Maybe MediaQueryList -> IO ()) -> m MediaQueryListListener
 newMediaQueryListListenerAsync callback
   = liftIO
-      (asyncCallback1
-         (\ list -> fromJSRefUnchecked list >>= \ list' -> callback list'))
+      (MediaQueryListListener <$>
+         asyncCallback1
+           (\ list -> fromJSRefUnchecked list >>= \ list' -> callback list'))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/MediaSource.hs b/src/GHCJS/DOM/JSFFI/Generated/MediaSource.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/MediaSource.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/MediaSource.hs
@@ -10,7 +10,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -24,15 +24,15 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "new window[\"MediaSource\"]()"
-        js_newMediaSource :: IO (JSRef MediaSource)
+        js_newMediaSource :: IO MediaSource
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaSource Mozilla MediaSource documentation> 
 newMediaSource :: (MonadIO m) => m MediaSource
-newMediaSource = liftIO (js_newMediaSource >>= fromJSRefUnchecked)
+newMediaSource = liftIO (js_newMediaSource)
  
 foreign import javascript unsafe "$1[\"addSourceBuffer\"]($2)"
         js_addSourceBuffer ::
-        JSRef MediaSource -> JSString -> IO (JSRef SourceBuffer)
+        MediaSource -> JSString -> IO (Nullable SourceBuffer)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaSource.addSourceBuffer Mozilla MediaSource.addSourceBuffer documentation> 
 addSourceBuffer ::
@@ -40,83 +40,77 @@
                   MediaSource -> type' -> m (Maybe SourceBuffer)
 addSourceBuffer self type'
   = liftIO
-      ((js_addSourceBuffer (unMediaSource self) (toJSString type')) >>=
-         fromJSRef)
+      (nullableToMaybe <$>
+         (js_addSourceBuffer (self) (toJSString type')))
  
 foreign import javascript unsafe "$1[\"removeSourceBuffer\"]($2)"
         js_removeSourceBuffer ::
-        JSRef MediaSource -> JSRef SourceBuffer -> IO ()
+        MediaSource -> Nullable SourceBuffer -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaSource.removeSourceBuffer Mozilla MediaSource.removeSourceBuffer documentation> 
 removeSourceBuffer ::
                    (MonadIO m) => MediaSource -> Maybe SourceBuffer -> m ()
 removeSourceBuffer self buffer
-  = liftIO
-      (js_removeSourceBuffer (unMediaSource self)
-         (maybe jsNull pToJSRef buffer))
+  = liftIO (js_removeSourceBuffer (self) (maybeToNullable buffer))
  
 foreign import javascript unsafe "$1[\"endOfStream\"]($2)"
-        js_endOfStream ::
-        JSRef MediaSource -> JSRef EndOfStreamError -> IO ()
+        js_endOfStream :: MediaSource -> JSRef -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaSource.endOfStream Mozilla MediaSource.endOfStream documentation> 
 endOfStream ::
             (MonadIO m) => MediaSource -> EndOfStreamError -> m ()
 endOfStream self error
-  = liftIO (js_endOfStream (unMediaSource self) (pToJSRef error))
+  = liftIO (js_endOfStream (self) (pToJSRef error))
  
 foreign import javascript unsafe
         "($1[\"isTypeSupported\"]($2) ? 1 : 0)" js_isTypeSupported ::
-        JSRef MediaSource -> JSString -> IO Bool
+        MediaSource -> JSString -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaSource.isTypeSupported Mozilla MediaSource.isTypeSupported documentation> 
 isTypeSupported ::
                 (MonadIO m, ToJSString type') => MediaSource -> type' -> m Bool
 isTypeSupported self type'
-  = liftIO
-      (js_isTypeSupported (unMediaSource self) (toJSString type'))
+  = liftIO (js_isTypeSupported (self) (toJSString type'))
  
 foreign import javascript unsafe "$1[\"sourceBuffers\"]"
         js_getSourceBuffers ::
-        JSRef MediaSource -> IO (JSRef SourceBufferList)
+        MediaSource -> IO (Nullable SourceBufferList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaSource.sourceBuffers Mozilla MediaSource.sourceBuffers documentation> 
 getSourceBuffers ::
                  (MonadIO m) => MediaSource -> m (Maybe SourceBufferList)
 getSourceBuffers self
-  = liftIO ((js_getSourceBuffers (unMediaSource self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getSourceBuffers (self)))
  
 foreign import javascript unsafe "$1[\"activeSourceBuffers\"]"
         js_getActiveSourceBuffers ::
-        JSRef MediaSource -> IO (JSRef SourceBufferList)
+        MediaSource -> IO (Nullable SourceBufferList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaSource.activeSourceBuffers Mozilla MediaSource.activeSourceBuffers documentation> 
 getActiveSourceBuffers ::
                        (MonadIO m) => MediaSource -> m (Maybe SourceBufferList)
 getActiveSourceBuffers self
-  = liftIO
-      ((js_getActiveSourceBuffers (unMediaSource self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getActiveSourceBuffers (self)))
  
 foreign import javascript unsafe "$1[\"duration\"] = $2;"
-        js_setDuration :: JSRef MediaSource -> Double -> IO ()
+        js_setDuration :: MediaSource -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaSource.duration Mozilla MediaSource.duration documentation> 
 setDuration :: (MonadIO m) => MediaSource -> Double -> m ()
-setDuration self val
-  = liftIO (js_setDuration (unMediaSource self) val)
+setDuration self val = liftIO (js_setDuration (self) val)
  
 foreign import javascript unsafe "$1[\"duration\"]" js_getDuration
-        :: JSRef MediaSource -> IO Double
+        :: MediaSource -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaSource.duration Mozilla MediaSource.duration documentation> 
 getDuration :: (MonadIO m) => MediaSource -> m Double
-getDuration self = liftIO (js_getDuration (unMediaSource self))
+getDuration self = liftIO (js_getDuration (self))
  
 foreign import javascript unsafe "$1[\"readyState\"]"
-        js_getReadyState :: JSRef MediaSource -> IO JSString
+        js_getReadyState :: MediaSource -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaSource.readyState Mozilla MediaSource.readyState documentation> 
 getReadyState ::
               (MonadIO m, FromJSString result) => MediaSource -> m result
 getReadyState self
-  = liftIO (fromJSString <$> (js_getReadyState (unMediaSource self)))
+  = liftIO (fromJSString <$> (js_getReadyState (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/MediaSourceStates.hs b/src/GHCJS/DOM/JSFFI/Generated/MediaSourceStates.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/MediaSourceStates.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/MediaSourceStates.hs
@@ -8,7 +8,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -22,85 +22,69 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"sourceType\"]"
-        js_getSourceType ::
-        JSRef MediaSourceStates -> IO (JSRef SourceTypeEnum)
+        js_getSourceType :: MediaSourceStates -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaSourceStates.sourceType Mozilla MediaSourceStates.sourceType documentation> 
 getSourceType ::
               (MonadIO m) => MediaSourceStates -> m SourceTypeEnum
 getSourceType self
-  = liftIO
-      ((js_getSourceType (unMediaSourceStates self)) >>=
-         fromJSRefUnchecked)
+  = liftIO ((js_getSourceType (self)) >>= fromJSRefUnchecked)
  
 foreign import javascript unsafe "$1[\"sourceId\"]" js_getSourceId
-        :: JSRef MediaSourceStates -> IO JSString
+        :: MediaSourceStates -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaSourceStates.sourceId Mozilla MediaSourceStates.sourceId documentation> 
 getSourceId ::
             (MonadIO m, FromJSString result) => MediaSourceStates -> m result
 getSourceId self
-  = liftIO
-      (fromJSString <$> (js_getSourceId (unMediaSourceStates self)))
+  = liftIO (fromJSString <$> (js_getSourceId (self)))
  
 foreign import javascript unsafe "$1[\"width\"]" js_getWidth ::
-        JSRef MediaSourceStates -> IO (JSRef (Maybe Word))
+        MediaSourceStates -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaSourceStates.width Mozilla MediaSourceStates.width documentation> 
 getWidth :: (MonadIO m) => MediaSourceStates -> m (Maybe Word)
 getWidth self
-  = liftIO
-      ((js_getWidth (unMediaSourceStates self)) >>= fromJSRefUnchecked)
+  = liftIO ((js_getWidth (self)) >>= fromJSRefUnchecked)
  
 foreign import javascript unsafe "$1[\"height\"]" js_getHeight ::
-        JSRef MediaSourceStates -> IO (JSRef (Maybe Word))
+        MediaSourceStates -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaSourceStates.height Mozilla MediaSourceStates.height documentation> 
 getHeight :: (MonadIO m) => MediaSourceStates -> m (Maybe Word)
 getHeight self
-  = liftIO
-      ((js_getHeight (unMediaSourceStates self)) >>= fromJSRefUnchecked)
+  = liftIO ((js_getHeight (self)) >>= fromJSRefUnchecked)
  
 foreign import javascript unsafe "$1[\"frameRate\"]"
-        js_getFrameRate ::
-        JSRef MediaSourceStates -> IO (JSRef (Maybe Float))
+        js_getFrameRate :: MediaSourceStates -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaSourceStates.frameRate Mozilla MediaSourceStates.frameRate documentation> 
 getFrameRate :: (MonadIO m) => MediaSourceStates -> m (Maybe Float)
 getFrameRate self
-  = liftIO
-      ((js_getFrameRate (unMediaSourceStates self)) >>=
-         fromJSRefUnchecked)
+  = liftIO ((js_getFrameRate (self)) >>= fromJSRefUnchecked)
  
 foreign import javascript unsafe "$1[\"aspectRatio\"]"
-        js_getAspectRatio ::
-        JSRef MediaSourceStates -> IO (JSRef (Maybe Float))
+        js_getAspectRatio :: MediaSourceStates -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaSourceStates.aspectRatio Mozilla MediaSourceStates.aspectRatio documentation> 
 getAspectRatio ::
                (MonadIO m) => MediaSourceStates -> m (Maybe Float)
 getAspectRatio self
-  = liftIO
-      ((js_getAspectRatio (unMediaSourceStates self)) >>=
-         fromJSRefUnchecked)
+  = liftIO ((js_getAspectRatio (self)) >>= fromJSRefUnchecked)
  
 foreign import javascript unsafe "$1[\"facingMode\"]"
-        js_getFacingMode ::
-        JSRef MediaSourceStates -> IO (JSRef VideoFacingModeEnum)
+        js_getFacingMode :: MediaSourceStates -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaSourceStates.facingMode Mozilla MediaSourceStates.facingMode documentation> 
 getFacingMode ::
               (MonadIO m) => MediaSourceStates -> m VideoFacingModeEnum
 getFacingMode self
-  = liftIO
-      ((js_getFacingMode (unMediaSourceStates self)) >>=
-         fromJSRefUnchecked)
+  = liftIO ((js_getFacingMode (self)) >>= fromJSRefUnchecked)
  
 foreign import javascript unsafe "$1[\"volume\"]" js_getVolume ::
-        JSRef MediaSourceStates -> IO (JSRef (Maybe Word))
+        MediaSourceStates -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaSourceStates.volume Mozilla MediaSourceStates.volume documentation> 
 getVolume :: (MonadIO m) => MediaSourceStates -> m (Maybe Word)
 getVolume self
-  = liftIO
-      ((js_getVolume (unMediaSourceStates self)) >>= fromJSRefUnchecked)
+  = liftIO ((js_getVolume (self)) >>= fromJSRefUnchecked)
diff --git a/src/GHCJS/DOM/JSFFI/Generated/MediaStream.hs b/src/GHCJS/DOM/JSFFI/Generated/MediaStream.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/MediaStream.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/MediaStream.hs
@@ -11,7 +11,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -26,27 +26,25 @@
  
 foreign import javascript unsafe
         "new window[\"webkitMediaStream\"]()" js_newMediaStream ::
-        IO (JSRef MediaStream)
+        IO MediaStream
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/webkitMediaStream Mozilla webkitMediaStream documentation> 
 newMediaStream :: (MonadIO m) => m MediaStream
-newMediaStream = liftIO (js_newMediaStream >>= fromJSRefUnchecked)
+newMediaStream = liftIO (js_newMediaStream)
  
 foreign import javascript unsafe
         "new window[\"webkitMediaStream\"]($1)" js_newMediaStream' ::
-        JSRef MediaStream -> IO (JSRef MediaStream)
+        Nullable MediaStream -> IO MediaStream
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/webkitMediaStream Mozilla webkitMediaStream documentation> 
 newMediaStream' ::
                 (MonadIO m) => Maybe MediaStream -> m MediaStream
 newMediaStream' stream
-  = liftIO
-      (js_newMediaStream' (maybe jsNull pToJSRef stream) >>=
-         fromJSRefUnchecked)
+  = liftIO (js_newMediaStream' (maybeToNullable stream))
  
 foreign import javascript unsafe
         "new window[\"webkitMediaStream\"]($1)" js_newMediaStream'' ::
-        JSRef [Maybe tracks] -> IO (JSRef MediaStream)
+        JSRef -> IO MediaStream
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/webkitMediaStream Mozilla webkitMediaStream documentation> 
 newMediaStream'' ::
@@ -54,43 +52,37 @@
                    [Maybe tracks] -> m MediaStream
 newMediaStream'' tracks
   = liftIO
-      (toJSRef tracks >>= \ tracks' -> js_newMediaStream'' tracks' >>=
-         fromJSRefUnchecked)
+      (toJSRef tracks >>= \ tracks' -> js_newMediaStream'' tracks')
  
 foreign import javascript unsafe "$1[\"getAudioTracks\"]()"
-        js_getAudioTracks ::
-        JSRef MediaStream -> IO (JSRef [Maybe MediaStreamTrack])
+        js_getAudioTracks :: MediaStream -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/webkitMediaStream.getAudioTracks Mozilla webkitMediaStream.getAudioTracks documentation> 
 getAudioTracks ::
                (MonadIO m) => MediaStream -> m [Maybe MediaStreamTrack]
 getAudioTracks self
-  = liftIO
-      ((js_getAudioTracks (unMediaStream self)) >>= fromJSRefUnchecked)
+  = liftIO ((js_getAudioTracks (self)) >>= fromJSRefUnchecked)
  
 foreign import javascript unsafe "$1[\"getVideoTracks\"]()"
-        js_getVideoTracks ::
-        JSRef MediaStream -> IO (JSRef [Maybe MediaStreamTrack])
+        js_getVideoTracks :: MediaStream -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/webkitMediaStream.getVideoTracks Mozilla webkitMediaStream.getVideoTracks documentation> 
 getVideoTracks ::
                (MonadIO m) => MediaStream -> m [Maybe MediaStreamTrack]
 getVideoTracks self
-  = liftIO
-      ((js_getVideoTracks (unMediaStream self)) >>= fromJSRefUnchecked)
+  = liftIO ((js_getVideoTracks (self)) >>= fromJSRefUnchecked)
  
 foreign import javascript unsafe "$1[\"getTracks\"]()" js_getTracks
-        :: JSRef MediaStream -> IO (JSRef [Maybe MediaStreamTrack])
+        :: MediaStream -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/webkitMediaStream.getTracks Mozilla webkitMediaStream.getTracks documentation> 
 getTracks ::
           (MonadIO m) => MediaStream -> m [Maybe MediaStreamTrack]
 getTracks self
-  = liftIO
-      ((js_getTracks (unMediaStream self)) >>= fromJSRefUnchecked)
+  = liftIO ((js_getTracks (self)) >>= fromJSRefUnchecked)
  
 foreign import javascript unsafe "$1[\"addTrack\"]($2)" js_addTrack
-        :: JSRef MediaStream -> JSRef MediaStreamTrack -> IO ()
+        :: MediaStream -> Nullable MediaStreamTrack -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/webkitMediaStream.addTrack Mozilla webkitMediaStream.addTrack documentation> 
 addTrack ::
@@ -98,12 +90,11 @@
            MediaStream -> Maybe track -> m ()
 addTrack self track
   = liftIO
-      (js_addTrack (unMediaStream self)
-         (maybe jsNull (unMediaStreamTrack . toMediaStreamTrack) track))
+      (js_addTrack (self)
+         (maybeToNullable (fmap toMediaStreamTrack track)))
  
 foreign import javascript unsafe "$1[\"removeTrack\"]($2)"
-        js_removeTrack ::
-        JSRef MediaStream -> JSRef MediaStreamTrack -> IO ()
+        js_removeTrack :: MediaStream -> Nullable MediaStreamTrack -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/webkitMediaStream.removeTrack Mozilla webkitMediaStream.removeTrack documentation> 
 removeTrack ::
@@ -111,12 +102,12 @@
               MediaStream -> Maybe track -> m ()
 removeTrack self track
   = liftIO
-      (js_removeTrack (unMediaStream self)
-         (maybe jsNull (unMediaStreamTrack . toMediaStreamTrack) track))
+      (js_removeTrack (self)
+         (maybeToNullable (fmap toMediaStreamTrack track)))
  
 foreign import javascript unsafe "$1[\"getTrackById\"]($2)"
         js_getTrackById ::
-        JSRef MediaStream -> JSString -> IO (JSRef MediaStreamTrack)
+        MediaStream -> JSString -> IO (Nullable MediaStreamTrack)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/webkitMediaStream.getTrackById Mozilla webkitMediaStream.getTrackById documentation> 
 getTrackById ::
@@ -124,31 +115,29 @@
                MediaStream -> trackId -> m (Maybe MediaStreamTrack)
 getTrackById self trackId
   = liftIO
-      ((js_getTrackById (unMediaStream self) (toJSString trackId)) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_getTrackById (self) (toJSString trackId)))
  
 foreign import javascript unsafe "$1[\"clone\"]()" js_clone ::
-        JSRef MediaStream -> IO (JSRef MediaStream)
+        MediaStream -> IO (Nullable MediaStream)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/webkitMediaStream.clone Mozilla webkitMediaStream.clone documentation> 
 clone :: (MonadIO m) => MediaStream -> m (Maybe MediaStream)
-clone self = liftIO ((js_clone (unMediaStream self)) >>= fromJSRef)
+clone self = liftIO (nullableToMaybe <$> (js_clone (self)))
  
 foreign import javascript unsafe "$1[\"id\"]" js_getId ::
-        JSRef MediaStream -> IO JSString
+        MediaStream -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/webkitMediaStream.id Mozilla webkitMediaStream.id documentation> 
 getId ::
       (MonadIO m, FromJSString result) => MediaStream -> m result
-getId self
-  = liftIO (fromJSString <$> (js_getId (unMediaStream self)))
+getId self = liftIO (fromJSString <$> (js_getId (self)))
  
 foreign import javascript unsafe "($1[\"active\"] ? 1 : 0)"
-        js_getActive :: JSRef MediaStream -> IO Bool
+        js_getActive :: MediaStream -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/webkitMediaStream.active Mozilla webkitMediaStream.active documentation> 
 getActive :: (MonadIO m) => MediaStream -> m Bool
-getActive self = liftIO (js_getActive (unMediaStream self))
+getActive self = liftIO (js_getActive (self))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/webkitMediaStream.onactive Mozilla webkitMediaStream.onactive documentation> 
 active :: EventName MediaStream Event
diff --git a/src/GHCJS/DOM/JSFFI/Generated/MediaStreamAudioDestinationNode.hs b/src/GHCJS/DOM/JSFFI/Generated/MediaStreamAudioDestinationNode.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/MediaStreamAudioDestinationNode.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/MediaStreamAudioDestinationNode.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,13 +20,10 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"stream\"]" js_getStream ::
-        JSRef MediaStreamAudioDestinationNode -> IO (JSRef MediaStream)
+        MediaStreamAudioDestinationNode -> IO (Nullable MediaStream)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamAudioDestinationNode.stream Mozilla MediaStreamAudioDestinationNode.stream documentation> 
 getStream ::
           (MonadIO m) =>
             MediaStreamAudioDestinationNode -> m (Maybe MediaStream)
-getStream self
-  = liftIO
-      ((js_getStream (unMediaStreamAudioDestinationNode self)) >>=
-         fromJSRef)
+getStream self = liftIO (nullableToMaybe <$> (js_getStream (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/MediaStreamAudioSourceNode.hs b/src/GHCJS/DOM/JSFFI/Generated/MediaStreamAudioSourceNode.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/MediaStreamAudioSourceNode.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/MediaStreamAudioSourceNode.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,12 +20,10 @@
  
 foreign import javascript unsafe "$1[\"mediaStream\"]"
         js_getMediaStream ::
-        JSRef MediaStreamAudioSourceNode -> IO (JSRef MediaStream)
+        MediaStreamAudioSourceNode -> IO (Nullable MediaStream)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamAudioSourceNode.mediaStream Mozilla MediaStreamAudioSourceNode.mediaStream documentation> 
 getMediaStream ::
                (MonadIO m) => MediaStreamAudioSourceNode -> m (Maybe MediaStream)
 getMediaStream self
-  = liftIO
-      ((js_getMediaStream (unMediaStreamAudioSourceNode self)) >>=
-         fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getMediaStream (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/MediaStreamEvent.hs b/src/GHCJS/DOM/JSFFI/Generated/MediaStreamEvent.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/MediaStreamEvent.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/MediaStreamEvent.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,10 +19,9 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"stream\"]" js_getStream ::
-        JSRef MediaStreamEvent -> IO (JSRef MediaStream)
+        MediaStreamEvent -> IO (Nullable MediaStream)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamEvent.stream Mozilla MediaStreamEvent.stream documentation> 
 getStream ::
           (MonadIO m) => MediaStreamEvent -> m (Maybe MediaStream)
-getStream self
-  = liftIO ((js_getStream (unMediaStreamEvent self)) >>= fromJSRef)
+getStream self = liftIO (nullableToMaybe <$> (js_getStream (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/MediaStreamTrack.hs b/src/GHCJS/DOM/JSFFI/Generated/MediaStreamTrack.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/MediaStreamTrack.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/MediaStreamTrack.hs
@@ -12,7 +12,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -27,8 +27,8 @@
  
 foreign import javascript unsafe "$1[\"getSources\"]($2)"
         js_getSources ::
-        JSRef MediaStreamTrack ->
-          JSRef MediaStreamTrackSourcesCallback -> IO ()
+        MediaStreamTrack ->
+          Nullable MediaStreamTrackSourcesCallback -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack.getSources Mozilla MediaStreamTrack.getSources documentation> 
 getSources ::
@@ -36,12 +36,12 @@
              self -> Maybe MediaStreamTrackSourcesCallback -> m ()
 getSources self callback
   = liftIO
-      (js_getSources (unMediaStreamTrack (toMediaStreamTrack self))
-         (maybe jsNull pToJSRef callback))
+      (js_getSources (toMediaStreamTrack self)
+         (maybeToNullable callback))
  
 foreign import javascript unsafe "$1[\"getConstraints\"]()"
         js_getConstraints ::
-        JSRef MediaStreamTrack -> IO (JSRef MediaTrackConstraints)
+        MediaStreamTrack -> IO (Nullable MediaTrackConstraints)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack.getConstraints Mozilla MediaStreamTrack.getConstraints documentation> 
 getConstraints ::
@@ -49,11 +49,10 @@
                  self -> m (Maybe MediaTrackConstraints)
 getConstraints self
   = liftIO
-      ((js_getConstraints (unMediaStreamTrack (toMediaStreamTrack self)))
-         >>= fromJSRef)
+      (nullableToMaybe <$> (js_getConstraints (toMediaStreamTrack self)))
  
 foreign import javascript unsafe "$1[\"states\"]()" js_states ::
-        JSRef MediaStreamTrack -> IO (JSRef MediaSourceStates)
+        MediaStreamTrack -> IO (Nullable MediaSourceStates)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack.states Mozilla MediaStreamTrack.states documentation> 
 states ::
@@ -61,12 +60,11 @@
          self -> m (Maybe MediaSourceStates)
 states self
   = liftIO
-      ((js_states (unMediaStreamTrack (toMediaStreamTrack self))) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_states (toMediaStreamTrack self)))
  
 foreign import javascript unsafe "$1[\"getCapabilities\"]()"
         js_getCapabilities ::
-        JSRef MediaStreamTrack -> IO (JSRef MediaStreamCapabilities)
+        MediaStreamTrack -> IO (Nullable MediaStreamCapabilities)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack.getCapabilities Mozilla MediaStreamTrack.getCapabilities documentation> 
 getCapabilities ::
@@ -74,13 +72,12 @@
                   self -> m (Maybe MediaStreamCapabilities)
 getCapabilities self
   = liftIO
-      ((js_getCapabilities
-          (unMediaStreamTrack (toMediaStreamTrack self)))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_getCapabilities (toMediaStreamTrack self)))
  
 foreign import javascript unsafe "$1[\"applyConstraints\"]($2)"
         js_applyConstraints ::
-        JSRef MediaStreamTrack -> JSRef Dictionary -> IO ()
+        MediaStreamTrack -> Nullable Dictionary -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack.applyConstraints Mozilla MediaStreamTrack.applyConstraints documentation> 
 applyConstraints ::
@@ -88,93 +85,79 @@
                    self -> Maybe constraints -> m ()
 applyConstraints self constraints
   = liftIO
-      (js_applyConstraints (unMediaStreamTrack (toMediaStreamTrack self))
-         (maybe jsNull (unDictionary . toDictionary) constraints))
+      (js_applyConstraints (toMediaStreamTrack self)
+         (maybeToNullable (fmap toDictionary constraints)))
  
 foreign import javascript unsafe "$1[\"clone\"]()" js_clone ::
-        JSRef MediaStreamTrack -> IO (JSRef MediaStreamTrack)
+        MediaStreamTrack -> IO (Nullable MediaStreamTrack)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack.clone Mozilla MediaStreamTrack.clone documentation> 
 clone ::
       (MonadIO m, IsMediaStreamTrack self) =>
         self -> m (Maybe MediaStreamTrack)
 clone self
-  = liftIO
-      ((js_clone (unMediaStreamTrack (toMediaStreamTrack self))) >>=
-         fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_clone (toMediaStreamTrack self)))
  
 foreign import javascript unsafe "$1[\"stop\"]()" js_stop ::
-        JSRef MediaStreamTrack -> IO ()
+        MediaStreamTrack -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack.stop Mozilla MediaStreamTrack.stop documentation> 
 stop :: (MonadIO m, IsMediaStreamTrack self) => self -> m ()
-stop self
-  = liftIO (js_stop (unMediaStreamTrack (toMediaStreamTrack self)))
+stop self = liftIO (js_stop (toMediaStreamTrack self))
  
 foreign import javascript unsafe "$1[\"kind\"]" js_getKind ::
-        JSRef MediaStreamTrack -> IO JSString
+        MediaStreamTrack -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack.kind Mozilla MediaStreamTrack.kind documentation> 
 getKind ::
         (MonadIO m, IsMediaStreamTrack self, FromJSString result) =>
           self -> m result
 getKind self
-  = liftIO
-      (fromJSString <$>
-         (js_getKind (unMediaStreamTrack (toMediaStreamTrack self))))
+  = liftIO (fromJSString <$> (js_getKind (toMediaStreamTrack self)))
  
 foreign import javascript unsafe "$1[\"id\"]" js_getId ::
-        JSRef MediaStreamTrack -> IO JSString
+        MediaStreamTrack -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack.id Mozilla MediaStreamTrack.id documentation> 
 getId ::
       (MonadIO m, IsMediaStreamTrack self, FromJSString result) =>
         self -> m result
 getId self
-  = liftIO
-      (fromJSString <$>
-         (js_getId (unMediaStreamTrack (toMediaStreamTrack self))))
+  = liftIO (fromJSString <$> (js_getId (toMediaStreamTrack self)))
  
 foreign import javascript unsafe "$1[\"label\"]" js_getLabel ::
-        JSRef MediaStreamTrack -> IO JSString
+        MediaStreamTrack -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack.label Mozilla MediaStreamTrack.label documentation> 
 getLabel ::
          (MonadIO m, IsMediaStreamTrack self, FromJSString result) =>
            self -> m result
 getLabel self
-  = liftIO
-      (fromJSString <$>
-         (js_getLabel (unMediaStreamTrack (toMediaStreamTrack self))))
+  = liftIO (fromJSString <$> (js_getLabel (toMediaStreamTrack self)))
  
 foreign import javascript unsafe "$1[\"enabled\"] = $2;"
-        js_setEnabled :: JSRef MediaStreamTrack -> Bool -> IO ()
+        js_setEnabled :: MediaStreamTrack -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack.enabled Mozilla MediaStreamTrack.enabled documentation> 
 setEnabled ::
            (MonadIO m, IsMediaStreamTrack self) => self -> Bool -> m ()
 setEnabled self val
-  = liftIO
-      (js_setEnabled (unMediaStreamTrack (toMediaStreamTrack self)) val)
+  = liftIO (js_setEnabled (toMediaStreamTrack self) val)
  
 foreign import javascript unsafe "($1[\"enabled\"] ? 1 : 0)"
-        js_getEnabled :: JSRef MediaStreamTrack -> IO Bool
+        js_getEnabled :: MediaStreamTrack -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack.enabled Mozilla MediaStreamTrack.enabled documentation> 
 getEnabled ::
            (MonadIO m, IsMediaStreamTrack self) => self -> m Bool
-getEnabled self
-  = liftIO
-      (js_getEnabled (unMediaStreamTrack (toMediaStreamTrack self)))
+getEnabled self = liftIO (js_getEnabled (toMediaStreamTrack self))
  
 foreign import javascript unsafe "($1[\"muted\"] ? 1 : 0)"
-        js_getMuted :: JSRef MediaStreamTrack -> IO Bool
+        js_getMuted :: MediaStreamTrack -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack.muted Mozilla MediaStreamTrack.muted documentation> 
 getMuted :: (MonadIO m, IsMediaStreamTrack self) => self -> m Bool
-getMuted self
-  = liftIO
-      (js_getMuted (unMediaStreamTrack (toMediaStreamTrack self)))
+getMuted self = liftIO (js_getMuted (toMediaStreamTrack self))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack.onmute Mozilla MediaStreamTrack.onmute documentation> 
 mute ::
@@ -189,27 +172,23 @@
 unmute = unsafeEventName (toJSString "unmute")
  
 foreign import javascript unsafe "($1[\"_readonly\"] ? 1 : 0)"
-        js_get_readonly :: JSRef MediaStreamTrack -> IO Bool
+        js_get_readonly :: MediaStreamTrack -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack._readonly Mozilla MediaStreamTrack._readonly documentation> 
 get_readonly ::
              (MonadIO m, IsMediaStreamTrack self) => self -> m Bool
 get_readonly self
-  = liftIO
-      (js_get_readonly (unMediaStreamTrack (toMediaStreamTrack self)))
+  = liftIO (js_get_readonly (toMediaStreamTrack self))
  
 foreign import javascript unsafe "($1[\"remote\"] ? 1 : 0)"
-        js_getRemote :: JSRef MediaStreamTrack -> IO Bool
+        js_getRemote :: MediaStreamTrack -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack.remote Mozilla MediaStreamTrack.remote documentation> 
 getRemote :: (MonadIO m, IsMediaStreamTrack self) => self -> m Bool
-getRemote self
-  = liftIO
-      (js_getRemote (unMediaStreamTrack (toMediaStreamTrack self)))
+getRemote self = liftIO (js_getRemote (toMediaStreamTrack self))
  
 foreign import javascript unsafe "$1[\"readyState\"]"
-        js_getReadyState ::
-        JSRef MediaStreamTrack -> IO (JSRef MediaStreamTrackState)
+        js_getReadyState :: MediaStreamTrack -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack.readyState Mozilla MediaStreamTrack.readyState documentation> 
 getReadyState ::
@@ -217,8 +196,8 @@
                 self -> m MediaStreamTrackState
 getReadyState self
   = liftIO
-      ((js_getReadyState (unMediaStreamTrack (toMediaStreamTrack self)))
-         >>= fromJSRefUnchecked)
+      ((js_getReadyState (toMediaStreamTrack self)) >>=
+         fromJSRefUnchecked)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack.onstarted Mozilla MediaStreamTrack.onstarted documentation> 
 started ::
diff --git a/src/GHCJS/DOM/JSFFI/Generated/MediaStreamTrackEvent.hs b/src/GHCJS/DOM/JSFFI/Generated/MediaStreamTrackEvent.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/MediaStreamTrackEvent.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/MediaStreamTrackEvent.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,11 +19,9 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"track\"]" js_getTrack ::
-        JSRef MediaStreamTrackEvent -> IO (JSRef MediaStreamTrack)
+        MediaStreamTrackEvent -> IO (Nullable MediaStreamTrack)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrackEvent.track Mozilla MediaStreamTrackEvent.track documentation> 
 getTrack ::
          (MonadIO m) => MediaStreamTrackEvent -> m (Maybe MediaStreamTrack)
-getTrack self
-  = liftIO
-      ((js_getTrack (unMediaStreamTrackEvent self)) >>= fromJSRef)
+getTrack self = liftIO (nullableToMaybe <$> (js_getTrack (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/MediaStreamTrackSourcesCallback.hs b/src/GHCJS/DOM/JSFFI/Generated/MediaStreamTrackSourcesCallback.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/MediaStreamTrackSourcesCallback.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/MediaStreamTrackSourcesCallback.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -27,9 +27,10 @@
                                        m MediaStreamTrackSourcesCallback
 newMediaStreamTrackSourcesCallback callback
   = liftIO
-      (syncCallback1 ThrowWouldBlock
-         (\ sources ->
-            fromJSRefUnchecked sources >>= \ sources' -> callback sources'))
+      (MediaStreamTrackSourcesCallback <$>
+         syncCallback1 ThrowWouldBlock
+           (\ sources ->
+              fromJSRefUnchecked sources >>= \ sources' -> callback sources'))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrackSourcesCallback Mozilla MediaStreamTrackSourcesCallback documentation> 
 newMediaStreamTrackSourcesCallbackSync ::
@@ -38,9 +39,10 @@
                                            m MediaStreamTrackSourcesCallback
 newMediaStreamTrackSourcesCallbackSync callback
   = liftIO
-      (syncCallback1 ContinueAsync
-         (\ sources ->
-            fromJSRefUnchecked sources >>= \ sources' -> callback sources'))
+      (MediaStreamTrackSourcesCallback <$>
+         syncCallback1 ContinueAsync
+           (\ sources ->
+              fromJSRefUnchecked sources >>= \ sources' -> callback sources'))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrackSourcesCallback Mozilla MediaStreamTrackSourcesCallback documentation> 
 newMediaStreamTrackSourcesCallbackAsync ::
@@ -49,6 +51,7 @@
                                             m MediaStreamTrackSourcesCallback
 newMediaStreamTrackSourcesCallbackAsync callback
   = liftIO
-      (asyncCallback1
-         (\ sources ->
-            fromJSRefUnchecked sources >>= \ sources' -> callback sources'))
+      (MediaStreamTrackSourcesCallback <$>
+         asyncCallback1
+           (\ sources ->
+              fromJSRefUnchecked sources >>= \ sources' -> callback sources'))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/MediaTrackConstraints.hs b/src/GHCJS/DOM/JSFFI/Generated/MediaTrackConstraints.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/MediaTrackConstraints.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/MediaTrackConstraints.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,29 +20,21 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"mandatory\"]"
-        js_getMandatory ::
-        JSRef MediaTrackConstraints ->
-          IO (JSRef (Maybe MediaTrackConstraintSet))
+        js_getMandatory :: MediaTrackConstraints -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraints.mandatory Mozilla MediaTrackConstraints.mandatory documentation> 
 getMandatory ::
              (MonadIO m) =>
                MediaTrackConstraints -> m (Maybe MediaTrackConstraintSet)
 getMandatory self
-  = liftIO
-      ((js_getMandatory (unMediaTrackConstraints self)) >>=
-         fromJSRefUnchecked)
+  = liftIO ((js_getMandatory (self)) >>= fromJSRefUnchecked)
  
 foreign import javascript unsafe "$1[\"optional\"]" js_getOptional
-        ::
-        JSRef MediaTrackConstraints ->
-          IO (JSRef (Maybe [Maybe MediaTrackConstraint]))
+        :: MediaTrackConstraints -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraints.optional Mozilla MediaTrackConstraints.optional documentation> 
 getOptional ::
             (MonadIO m) =>
               MediaTrackConstraints -> m (Maybe [Maybe MediaTrackConstraint])
 getOptional self
-  = liftIO
-      ((js_getOptional (unMediaTrackConstraints self)) >>=
-         fromJSRefUnchecked)
+  = liftIO ((js_getOptional (self)) >>= fromJSRefUnchecked)
diff --git a/src/GHCJS/DOM/JSFFI/Generated/MemoryInfo.hs b/src/GHCJS/DOM/JSFFI/Generated/MemoryInfo.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/MemoryInfo.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/MemoryInfo.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,17 +19,15 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"usedJSHeapSize\"]"
-        js_getUsedJSHeapSize :: JSRef MemoryInfo -> IO Word
+        js_getUsedJSHeapSize :: MemoryInfo -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MemoryInfo.usedJSHeapSize Mozilla MemoryInfo.usedJSHeapSize documentation> 
 getUsedJSHeapSize :: (MonadIO m) => MemoryInfo -> m Word
-getUsedJSHeapSize self
-  = liftIO (js_getUsedJSHeapSize (unMemoryInfo self))
+getUsedJSHeapSize self = liftIO (js_getUsedJSHeapSize (self))
  
 foreign import javascript unsafe "$1[\"totalJSHeapSize\"]"
-        js_getTotalJSHeapSize :: JSRef MemoryInfo -> IO Word
+        js_getTotalJSHeapSize :: MemoryInfo -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MemoryInfo.totalJSHeapSize Mozilla MemoryInfo.totalJSHeapSize documentation> 
 getTotalJSHeapSize :: (MonadIO m) => MemoryInfo -> m Word
-getTotalJSHeapSize self
-  = liftIO (js_getTotalJSHeapSize (unMemoryInfo self))
+getTotalJSHeapSize self = liftIO (js_getTotalJSHeapSize (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/MessageChannel.hs b/src/GHCJS/DOM/JSFFI/Generated/MessageChannel.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/MessageChannel.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/MessageChannel.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,25 +20,22 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "new window[\"MessageChannel\"]()"
-        js_newMessageChannel :: IO (JSRef MessageChannel)
+        js_newMessageChannel :: IO MessageChannel
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MessageChannel Mozilla MessageChannel documentation> 
 newMessageChannel :: (MonadIO m) => m MessageChannel
-newMessageChannel
-  = liftIO (js_newMessageChannel >>= fromJSRefUnchecked)
+newMessageChannel = liftIO (js_newMessageChannel)
  
 foreign import javascript unsafe "$1[\"port1\"]" js_getPort1 ::
-        JSRef MessageChannel -> IO (JSRef MessagePort)
+        MessageChannel -> IO (Nullable MessagePort)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MessageChannel.port1 Mozilla MessageChannel.port1 documentation> 
 getPort1 :: (MonadIO m) => MessageChannel -> m (Maybe MessagePort)
-getPort1 self
-  = liftIO ((js_getPort1 (unMessageChannel self)) >>= fromJSRef)
+getPort1 self = liftIO (nullableToMaybe <$> (js_getPort1 (self)))
  
 foreign import javascript unsafe "$1[\"port2\"]" js_getPort2 ::
-        JSRef MessageChannel -> IO (JSRef MessagePort)
+        MessageChannel -> IO (Nullable MessagePort)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MessageChannel.port2 Mozilla MessageChannel.port2 documentation> 
 getPort2 :: (MonadIO m) => MessageChannel -> m (Maybe MessagePort)
-getPort2 self
-  = liftIO ((js_getPort2 (unMessageChannel self)) >>= fromJSRef)
+getPort2 self = liftIO (nullableToMaybe <$> (js_getPort2 (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/MessageEvent.hs b/src/GHCJS/DOM/JSFFI/Generated/MessageEvent.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/MessageEvent.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/MessageEvent.hs
@@ -8,7 +8,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -24,12 +24,12 @@
 foreign import javascript unsafe
         "$1[\"initMessageEvent\"]($2, $3,\n$4, $5, $6, $7, $8, $9)"
         js_initMessageEvent ::
-        JSRef MessageEvent ->
+        MessageEvent ->
           JSString ->
             Bool ->
               Bool ->
-                JSRef a ->
-                  JSString -> JSString -> JSRef Window -> JSRef Array -> IO ()
+                JSRef ->
+                  JSString -> JSString -> Nullable Window -> Nullable Array -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MessageEvent.initMessageEvent Mozilla MessageEvent.initMessageEvent documentation> 
 initMessageEvent ::
@@ -39,30 +39,29 @@
                      typeArg ->
                        Bool ->
                          Bool ->
-                           JSRef a ->
+                           JSRef ->
                              originArg ->
                                lastEventIdArg -> Maybe Window -> Maybe messagePorts -> m ()
 initMessageEvent self typeArg canBubbleArg cancelableArg dataArg
   originArg lastEventIdArg sourceArg messagePorts
   = liftIO
-      (js_initMessageEvent (unMessageEvent self) (toJSString typeArg)
-         canBubbleArg
+      (js_initMessageEvent (self) (toJSString typeArg) canBubbleArg
          cancelableArg
          dataArg
          (toJSString originArg)
          (toJSString lastEventIdArg)
-         (maybe jsNull pToJSRef sourceArg)
-         (maybe jsNull (unArray . toArray) messagePorts))
+         (maybeToNullable sourceArg)
+         (maybeToNullable (fmap toArray messagePorts)))
  
 foreign import javascript unsafe
         "$1[\"webkitInitMessageEvent\"]($2,\n$3, $4, $5, $6, $7, $8, $9)"
         js_webkitInitMessageEvent ::
-        JSRef MessageEvent ->
+        MessageEvent ->
           JSString ->
             Bool ->
               Bool ->
-                JSRef a ->
-                  JSString -> JSString -> JSRef Window -> JSRef Array -> IO ()
+                JSRef ->
+                  JSString -> JSString -> Nullable Window -> Nullable Array -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MessageEvent.webkitInitMessageEvent Mozilla MessageEvent.webkitInitMessageEvent documentation> 
 webkitInitMessageEvent ::
@@ -72,61 +71,55 @@
                            typeArg ->
                              Bool ->
                                Bool ->
-                                 JSRef a ->
+                                 JSRef ->
                                    originArg ->
                                      lastEventIdArg -> Maybe Window -> Maybe transferables -> m ()
 webkitInitMessageEvent self typeArg canBubbleArg cancelableArg
   dataArg originArg lastEventIdArg sourceArg transferables
   = liftIO
-      (js_webkitInitMessageEvent (unMessageEvent self)
-         (toJSString typeArg)
-         canBubbleArg
+      (js_webkitInitMessageEvent (self) (toJSString typeArg) canBubbleArg
          cancelableArg
          dataArg
          (toJSString originArg)
          (toJSString lastEventIdArg)
-         (maybe jsNull pToJSRef sourceArg)
-         (maybe jsNull (unArray . toArray) transferables))
+         (maybeToNullable sourceArg)
+         (maybeToNullable (fmap toArray transferables)))
  
 foreign import javascript unsafe "$1[\"origin\"]" js_getOrigin ::
-        JSRef MessageEvent -> IO JSString
+        MessageEvent -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MessageEvent.origin Mozilla MessageEvent.origin documentation> 
 getOrigin ::
           (MonadIO m, FromJSString result) => MessageEvent -> m result
-getOrigin self
-  = liftIO (fromJSString <$> (js_getOrigin (unMessageEvent self)))
+getOrigin self = liftIO (fromJSString <$> (js_getOrigin (self)))
  
 foreign import javascript unsafe "$1[\"lastEventId\"]"
-        js_getLastEventId :: JSRef MessageEvent -> IO JSString
+        js_getLastEventId :: MessageEvent -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MessageEvent.lastEventId Mozilla MessageEvent.lastEventId documentation> 
 getLastEventId ::
                (MonadIO m, FromJSString result) => MessageEvent -> m result
 getLastEventId self
-  = liftIO
-      (fromJSString <$> (js_getLastEventId (unMessageEvent self)))
+  = liftIO (fromJSString <$> (js_getLastEventId (self)))
  
 foreign import javascript unsafe "$1[\"source\"]" js_getSource ::
-        JSRef MessageEvent -> IO (JSRef EventTarget)
+        MessageEvent -> IO (Nullable EventTarget)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MessageEvent.source Mozilla MessageEvent.source documentation> 
 getSource :: (MonadIO m) => MessageEvent -> m (Maybe EventTarget)
-getSource self
-  = liftIO ((js_getSource (unMessageEvent self)) >>= fromJSRef)
+getSource self = liftIO (nullableToMaybe <$> (js_getSource (self)))
  
 foreign import javascript unsafe "$1[\"data\"]" js_getData ::
-        JSRef MessageEvent -> IO (JSRef a)
+        MessageEvent -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MessageEvent.data Mozilla MessageEvent.data documentation> 
-getData :: (MonadIO m) => MessageEvent -> m (JSRef a)
-getData self = liftIO (js_getData (unMessageEvent self))
+getData :: (MonadIO m) => MessageEvent -> m JSRef
+getData self = liftIO (js_getData (self))
  
 foreign import javascript unsafe "$1[\"ports\"]" js_getPorts ::
-        JSRef MessageEvent -> IO (JSRef [Maybe MessagePort])
+        MessageEvent -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MessageEvent.ports Mozilla MessageEvent.ports documentation> 
 getPorts :: (MonadIO m) => MessageEvent -> m [Maybe MessagePort]
 getPorts self
-  = liftIO
-      ((js_getPorts (unMessageEvent self)) >>= fromJSRefUnchecked)
+  = liftIO ((js_getPorts (self)) >>= fromJSRefUnchecked)
diff --git a/src/GHCJS/DOM/JSFFI/Generated/MessagePort.hs b/src/GHCJS/DOM/JSFFI/Generated/MessagePort.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/MessagePort.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/MessagePort.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,31 +19,30 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"postMessage\"]($2, $3)"
-        js_postMessage ::
-        JSRef MessagePort -> JSRef a -> JSRef Array -> IO ()
+        js_postMessage :: MessagePort -> JSRef -> Nullable Array -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MessagePort.postMessage Mozilla MessagePort.postMessage documentation> 
 postMessage ::
             (MonadIO m, IsArray messagePorts) =>
-              MessagePort -> JSRef a -> Maybe messagePorts -> m ()
+              MessagePort -> JSRef -> Maybe messagePorts -> m ()
 postMessage self message messagePorts
   = liftIO
-      (js_postMessage (unMessagePort self) message
-         (maybe jsNull (unArray . toArray) messagePorts))
+      (js_postMessage (self) message
+         (maybeToNullable (fmap toArray messagePorts)))
  
 foreign import javascript unsafe "$1[\"start\"]()" js_start ::
-        JSRef MessagePort -> IO ()
+        MessagePort -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MessagePort.start Mozilla MessagePort.start documentation> 
 start :: (MonadIO m) => MessagePort -> m ()
-start self = liftIO (js_start (unMessagePort self))
+start self = liftIO (js_start (self))
  
 foreign import javascript unsafe "$1[\"close\"]()" js_close ::
-        JSRef MessagePort -> IO ()
+        MessagePort -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MessagePort.close Mozilla MessagePort.close documentation> 
 close :: (MonadIO m) => MessagePort -> m ()
-close self = liftIO (js_close (unMessagePort self))
+close self = liftIO (js_close (self))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MessagePort.onmessage Mozilla MessagePort.onmessage documentation> 
 message :: EventName MessagePort MessageEvent
diff --git a/src/GHCJS/DOM/JSFFI/Generated/MimeType.hs b/src/GHCJS/DOM/JSFFI/Generated/MimeType.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/MimeType.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/MimeType.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,35 +20,34 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"type\"]" js_getType ::
-        JSRef MimeType -> IO JSString
+        MimeType -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MimeType.type Mozilla MimeType.type documentation> 
 getType :: (MonadIO m, FromJSString result) => MimeType -> m result
-getType self
-  = liftIO (fromJSString <$> (js_getType (unMimeType self)))
+getType self = liftIO (fromJSString <$> (js_getType (self)))
  
 foreign import javascript unsafe "$1[\"suffixes\"]" js_getSuffixes
-        :: JSRef MimeType -> IO JSString
+        :: MimeType -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MimeType.suffixes Mozilla MimeType.suffixes documentation> 
 getSuffixes ::
             (MonadIO m, FromJSString result) => MimeType -> m result
 getSuffixes self
-  = liftIO (fromJSString <$> (js_getSuffixes (unMimeType self)))
+  = liftIO (fromJSString <$> (js_getSuffixes (self)))
  
 foreign import javascript unsafe "$1[\"description\"]"
-        js_getDescription :: JSRef MimeType -> IO JSString
+        js_getDescription :: MimeType -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MimeType.description Mozilla MimeType.description documentation> 
 getDescription ::
                (MonadIO m, FromJSString result) => MimeType -> m result
 getDescription self
-  = liftIO (fromJSString <$> (js_getDescription (unMimeType self)))
+  = liftIO (fromJSString <$> (js_getDescription (self)))
  
 foreign import javascript unsafe "$1[\"enabledPlugin\"]"
-        js_getEnabledPlugin :: JSRef MimeType -> IO (JSRef Plugin)
+        js_getEnabledPlugin :: MimeType -> IO (Nullable Plugin)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MimeType.enabledPlugin Mozilla MimeType.enabledPlugin documentation> 
 getEnabledPlugin :: (MonadIO m) => MimeType -> m (Maybe Plugin)
 getEnabledPlugin self
-  = liftIO ((js_getEnabledPlugin (unMimeType self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getEnabledPlugin (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/MimeTypeArray.hs b/src/GHCJS/DOM/JSFFI/Generated/MimeTypeArray.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/MimeTypeArray.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/MimeTypeArray.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,16 +19,15 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"item\"]($2)" js_item ::
-        JSRef MimeTypeArray -> Word -> IO (JSRef MimeType)
+        MimeTypeArray -> Word -> IO (Nullable MimeType)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MimeTypeArray.item Mozilla MimeTypeArray.item documentation> 
 item :: (MonadIO m) => MimeTypeArray -> Word -> m (Maybe MimeType)
 item self index
-  = liftIO ((js_item (unMimeTypeArray self) index) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_item (self) index))
  
 foreign import javascript unsafe "$1[\"namedItem\"]($2)"
-        js_namedItem ::
-        JSRef MimeTypeArray -> JSString -> IO (JSRef MimeType)
+        js_namedItem :: MimeTypeArray -> JSString -> IO (Nullable MimeType)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MimeTypeArray.namedItem Mozilla MimeTypeArray.namedItem documentation> 
 namedItem ::
@@ -36,12 +35,11 @@
             MimeTypeArray -> name -> m (Maybe MimeType)
 namedItem self name
   = liftIO
-      ((js_namedItem (unMimeTypeArray self) (toJSString name)) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_namedItem (self) (toJSString name)))
  
 foreign import javascript unsafe "$1[\"length\"]" js_getLength ::
-        JSRef MimeTypeArray -> IO Word
+        MimeTypeArray -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MimeTypeArray.length Mozilla MimeTypeArray.length documentation> 
 getLength :: (MonadIO m) => MimeTypeArray -> m Word
-getLength self = liftIO (js_getLength (unMimeTypeArray self))
+getLength self = liftIO (js_getLength (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/MouseEvent.hs b/src/GHCJS/DOM/JSFFI/Generated/MouseEvent.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/MouseEvent.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/MouseEvent.hs
@@ -14,7 +14,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -29,17 +29,18 @@
 foreign import javascript unsafe
         "$1[\"initMouseEvent\"]($2, $3, $4,\n$5, $6, $7, $8, $9, $10, $11,\n$12, $13, $14, $15, $16)"
         js_initMouseEvent ::
-        JSRef MouseEvent ->
+        MouseEvent ->
           JSString ->
             Bool ->
               Bool ->
-                JSRef Window ->
+                Nullable Window ->
                   Int ->
                     Int ->
                       Int ->
                         Int ->
                           Int ->
-                            Bool -> Bool -> Bool -> Bool -> Word -> JSRef EventTarget -> IO ()
+                            Bool ->
+                              Bool -> Bool -> Bool -> Word -> Nullable EventTarget -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent.initMouseEvent Mozilla MouseEvent.initMouseEvent documentation> 
 initMouseEvent ::
@@ -61,11 +62,9 @@
   screenY clientX clientY ctrlKey altKey shiftKey metaKey button
   relatedTarget
   = liftIO
-      (js_initMouseEvent (unMouseEvent (toMouseEvent self))
-         (toJSString type')
-         canBubble
+      (js_initMouseEvent (toMouseEvent self) (toJSString type') canBubble
          cancelable
-         (maybe jsNull pToJSRef view)
+         (maybeToNullable view)
          detail
          screenX
          screenY
@@ -76,166 +75,149 @@
          shiftKey
          metaKey
          button
-         (maybe jsNull (unEventTarget . toEventTarget) relatedTarget))
+         (maybeToNullable (fmap toEventTarget relatedTarget)))
  
 foreign import javascript unsafe "$1[\"screenX\"]" js_getScreenX ::
-        JSRef MouseEvent -> IO Int
+        MouseEvent -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent.screenX Mozilla MouseEvent.screenX documentation> 
 getScreenX :: (MonadIO m, IsMouseEvent self) => self -> m Int
-getScreenX self
-  = liftIO (js_getScreenX (unMouseEvent (toMouseEvent self)))
+getScreenX self = liftIO (js_getScreenX (toMouseEvent self))
  
 foreign import javascript unsafe "$1[\"screenY\"]" js_getScreenY ::
-        JSRef MouseEvent -> IO Int
+        MouseEvent -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent.screenY Mozilla MouseEvent.screenY documentation> 
 getScreenY :: (MonadIO m, IsMouseEvent self) => self -> m Int
-getScreenY self
-  = liftIO (js_getScreenY (unMouseEvent (toMouseEvent self)))
+getScreenY self = liftIO (js_getScreenY (toMouseEvent self))
  
 foreign import javascript unsafe "$1[\"clientX\"]" js_getClientX ::
-        JSRef MouseEvent -> IO Int
+        MouseEvent -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent.clientX Mozilla MouseEvent.clientX documentation> 
 getClientX :: (MonadIO m, IsMouseEvent self) => self -> m Int
-getClientX self
-  = liftIO (js_getClientX (unMouseEvent (toMouseEvent self)))
+getClientX self = liftIO (js_getClientX (toMouseEvent self))
  
 foreign import javascript unsafe "$1[\"clientY\"]" js_getClientY ::
-        JSRef MouseEvent -> IO Int
+        MouseEvent -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent.clientY Mozilla MouseEvent.clientY documentation> 
 getClientY :: (MonadIO m, IsMouseEvent self) => self -> m Int
-getClientY self
-  = liftIO (js_getClientY (unMouseEvent (toMouseEvent self)))
+getClientY self = liftIO (js_getClientY (toMouseEvent self))
  
 foreign import javascript unsafe "($1[\"ctrlKey\"] ? 1 : 0)"
-        js_getCtrlKey :: JSRef MouseEvent -> IO Bool
+        js_getCtrlKey :: MouseEvent -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent.ctrlKey Mozilla MouseEvent.ctrlKey documentation> 
 getCtrlKey :: (MonadIO m, IsMouseEvent self) => self -> m Bool
-getCtrlKey self
-  = liftIO (js_getCtrlKey (unMouseEvent (toMouseEvent self)))
+getCtrlKey self = liftIO (js_getCtrlKey (toMouseEvent self))
  
 foreign import javascript unsafe "($1[\"shiftKey\"] ? 1 : 0)"
-        js_getShiftKey :: JSRef MouseEvent -> IO Bool
+        js_getShiftKey :: MouseEvent -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent.shiftKey Mozilla MouseEvent.shiftKey documentation> 
 getShiftKey :: (MonadIO m, IsMouseEvent self) => self -> m Bool
-getShiftKey self
-  = liftIO (js_getShiftKey (unMouseEvent (toMouseEvent self)))
+getShiftKey self = liftIO (js_getShiftKey (toMouseEvent self))
  
 foreign import javascript unsafe "($1[\"altKey\"] ? 1 : 0)"
-        js_getAltKey :: JSRef MouseEvent -> IO Bool
+        js_getAltKey :: MouseEvent -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent.altKey Mozilla MouseEvent.altKey documentation> 
 getAltKey :: (MonadIO m, IsMouseEvent self) => self -> m Bool
-getAltKey self
-  = liftIO (js_getAltKey (unMouseEvent (toMouseEvent self)))
+getAltKey self = liftIO (js_getAltKey (toMouseEvent self))
  
 foreign import javascript unsafe "($1[\"metaKey\"] ? 1 : 0)"
-        js_getMetaKey :: JSRef MouseEvent -> IO Bool
+        js_getMetaKey :: MouseEvent -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent.metaKey Mozilla MouseEvent.metaKey documentation> 
 getMetaKey :: (MonadIO m, IsMouseEvent self) => self -> m Bool
-getMetaKey self
-  = liftIO (js_getMetaKey (unMouseEvent (toMouseEvent self)))
+getMetaKey self = liftIO (js_getMetaKey (toMouseEvent self))
  
 foreign import javascript unsafe "$1[\"button\"]" js_getButton ::
-        JSRef MouseEvent -> IO Word
+        MouseEvent -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent.button Mozilla MouseEvent.button documentation> 
 getButton :: (MonadIO m, IsMouseEvent self) => self -> m Word
-getButton self
-  = liftIO (js_getButton (unMouseEvent (toMouseEvent self)))
+getButton self = liftIO (js_getButton (toMouseEvent self))
  
 foreign import javascript unsafe "$1[\"relatedTarget\"]"
-        js_getRelatedTarget :: JSRef MouseEvent -> IO (JSRef EventTarget)
+        js_getRelatedTarget :: MouseEvent -> IO (Nullable EventTarget)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent.relatedTarget Mozilla MouseEvent.relatedTarget documentation> 
 getRelatedTarget ::
                  (MonadIO m, IsMouseEvent self) => self -> m (Maybe EventTarget)
 getRelatedTarget self
   = liftIO
-      ((js_getRelatedTarget (unMouseEvent (toMouseEvent self))) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_getRelatedTarget (toMouseEvent self)))
  
 foreign import javascript unsafe "$1[\"movementX\"]"
-        js_getMovementX :: JSRef MouseEvent -> IO Int
+        js_getMovementX :: MouseEvent -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent.movementX Mozilla MouseEvent.movementX documentation> 
 getMovementX :: (MonadIO m, IsMouseEvent self) => self -> m Int
-getMovementX self
-  = liftIO (js_getMovementX (unMouseEvent (toMouseEvent self)))
+getMovementX self = liftIO (js_getMovementX (toMouseEvent self))
  
 foreign import javascript unsafe "$1[\"movementY\"]"
-        js_getMovementY :: JSRef MouseEvent -> IO Int
+        js_getMovementY :: MouseEvent -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent.movementY Mozilla MouseEvent.movementY documentation> 
 getMovementY :: (MonadIO m, IsMouseEvent self) => self -> m Int
-getMovementY self
-  = liftIO (js_getMovementY (unMouseEvent (toMouseEvent self)))
+getMovementY self = liftIO (js_getMovementY (toMouseEvent self))
  
 foreign import javascript unsafe "$1[\"offsetX\"]" js_getOffsetX ::
-        JSRef MouseEvent -> IO Int
+        MouseEvent -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent.offsetX Mozilla MouseEvent.offsetX documentation> 
 getOffsetX :: (MonadIO m, IsMouseEvent self) => self -> m Int
-getOffsetX self
-  = liftIO (js_getOffsetX (unMouseEvent (toMouseEvent self)))
+getOffsetX self = liftIO (js_getOffsetX (toMouseEvent self))
  
 foreign import javascript unsafe "$1[\"offsetY\"]" js_getOffsetY ::
-        JSRef MouseEvent -> IO Int
+        MouseEvent -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent.offsetY Mozilla MouseEvent.offsetY documentation> 
 getOffsetY :: (MonadIO m, IsMouseEvent self) => self -> m Int
-getOffsetY self
-  = liftIO (js_getOffsetY (unMouseEvent (toMouseEvent self)))
+getOffsetY self = liftIO (js_getOffsetY (toMouseEvent self))
  
 foreign import javascript unsafe "$1[\"x\"]" js_getX ::
-        JSRef MouseEvent -> IO Int
+        MouseEvent -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent.x Mozilla MouseEvent.x documentation> 
 getX :: (MonadIO m, IsMouseEvent self) => self -> m Int
-getX self = liftIO (js_getX (unMouseEvent (toMouseEvent self)))
+getX self = liftIO (js_getX (toMouseEvent self))
  
 foreign import javascript unsafe "$1[\"y\"]" js_getY ::
-        JSRef MouseEvent -> IO Int
+        MouseEvent -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent.y Mozilla MouseEvent.y documentation> 
 getY :: (MonadIO m, IsMouseEvent self) => self -> m Int
-getY self = liftIO (js_getY (unMouseEvent (toMouseEvent self)))
+getY self = liftIO (js_getY (toMouseEvent self))
  
 foreign import javascript unsafe "$1[\"fromElement\"]"
-        js_getFromElement :: JSRef MouseEvent -> IO (JSRef Node)
+        js_getFromElement :: MouseEvent -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent.fromElement Mozilla MouseEvent.fromElement documentation> 
 getFromElement ::
                (MonadIO m, IsMouseEvent self) => self -> m (Maybe Node)
 getFromElement self
   = liftIO
-      ((js_getFromElement (unMouseEvent (toMouseEvent self))) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_getFromElement (toMouseEvent self)))
  
 foreign import javascript unsafe "$1[\"toElement\"]"
-        js_getToElement :: JSRef MouseEvent -> IO (JSRef Node)
+        js_getToElement :: MouseEvent -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent.toElement Mozilla MouseEvent.toElement documentation> 
 getToElement ::
              (MonadIO m, IsMouseEvent self) => self -> m (Maybe Node)
 getToElement self
   = liftIO
-      ((js_getToElement (unMouseEvent (toMouseEvent self))) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_getToElement (toMouseEvent self)))
  
 foreign import javascript unsafe "$1[\"dataTransfer\"]"
-        js_getDataTransfer :: JSRef MouseEvent -> IO (JSRef DataTransfer)
+        js_getDataTransfer :: MouseEvent -> IO (Nullable DataTransfer)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent.dataTransfer Mozilla MouseEvent.dataTransfer documentation> 
 getDataTransfer ::
                 (MonadIO m, IsMouseEvent self) => self -> m (Maybe DataTransfer)
 getDataTransfer self
   = liftIO
-      ((js_getDataTransfer (unMouseEvent (toMouseEvent self))) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_getDataTransfer (toMouseEvent self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/MutationEvent.hs b/src/GHCJS/DOM/JSFFI/Generated/MutationEvent.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/MutationEvent.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/MutationEvent.hs
@@ -9,7 +9,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -25,11 +25,11 @@
 foreign import javascript unsafe
         "$1[\"initMutationEvent\"]($2, $3,\n$4, $5, $6, $7, $8, $9)"
         js_initMutationEvent ::
-        JSRef MutationEvent ->
+        MutationEvent ->
           JSString ->
             Bool ->
               Bool ->
-                JSRef Node -> JSString -> JSString -> JSString -> Word -> IO ()
+                Nullable Node -> JSString -> JSString -> JSString -> Word -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MutationEvent.initMutationEvent Mozilla MutationEvent.initMutationEvent documentation> 
 initMutationEvent ::
@@ -44,10 +44,9 @@
 initMutationEvent self type' canBubble cancelable relatedNode
   prevValue newValue attrName attrChange
   = liftIO
-      (js_initMutationEvent (unMutationEvent self) (toJSString type')
-         canBubble
+      (js_initMutationEvent (self) (toJSString type') canBubble
          cancelable
-         (maybe jsNull (unNode . toNode) relatedNode)
+         (maybeToNullable (fmap toNode relatedNode))
          (toJSString prevValue)
          (toJSString newValue)
          (toJSString attrName)
@@ -57,45 +56,43 @@
 pattern REMOVAL = 3
  
 foreign import javascript unsafe "$1[\"relatedNode\"]"
-        js_getRelatedNode :: JSRef MutationEvent -> IO (JSRef Node)
+        js_getRelatedNode :: MutationEvent -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MutationEvent.relatedNode Mozilla MutationEvent.relatedNode documentation> 
 getRelatedNode :: (MonadIO m) => MutationEvent -> m (Maybe Node)
 getRelatedNode self
-  = liftIO ((js_getRelatedNode (unMutationEvent self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getRelatedNode (self)))
  
 foreign import javascript unsafe "$1[\"prevValue\"]"
-        js_getPrevValue :: JSRef MutationEvent -> IO JSString
+        js_getPrevValue :: MutationEvent -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MutationEvent.prevValue Mozilla MutationEvent.prevValue documentation> 
 getPrevValue ::
              (MonadIO m, FromJSString result) => MutationEvent -> m result
 getPrevValue self
-  = liftIO
-      (fromJSString <$> (js_getPrevValue (unMutationEvent self)))
+  = liftIO (fromJSString <$> (js_getPrevValue (self)))
  
 foreign import javascript unsafe "$1[\"newValue\"]" js_getNewValue
-        :: JSRef MutationEvent -> IO JSString
+        :: MutationEvent -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MutationEvent.newValue Mozilla MutationEvent.newValue documentation> 
 getNewValue ::
             (MonadIO m, FromJSString result) => MutationEvent -> m result
 getNewValue self
-  = liftIO (fromJSString <$> (js_getNewValue (unMutationEvent self)))
+  = liftIO (fromJSString <$> (js_getNewValue (self)))
  
 foreign import javascript unsafe "$1[\"attrName\"]" js_getAttrName
-        :: JSRef MutationEvent -> IO JSString
+        :: MutationEvent -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MutationEvent.attrName Mozilla MutationEvent.attrName documentation> 
 getAttrName ::
             (MonadIO m, FromJSString result) => MutationEvent -> m result
 getAttrName self
-  = liftIO (fromJSString <$> (js_getAttrName (unMutationEvent self)))
+  = liftIO (fromJSString <$> (js_getAttrName (self)))
  
 foreign import javascript unsafe "$1[\"attrChange\"]"
-        js_getAttrChange :: JSRef MutationEvent -> IO Word
+        js_getAttrChange :: MutationEvent -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MutationEvent.attrChange Mozilla MutationEvent.attrChange documentation> 
 getAttrChange :: (MonadIO m) => MutationEvent -> m Word
-getAttrChange self
-  = liftIO (js_getAttrChange (unMutationEvent self))
+getAttrChange self = liftIO (js_getAttrChange (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/MutationObserver.hs b/src/GHCJS/DOM/JSFFI/Generated/MutationObserver.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/MutationObserver.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/MutationObserver.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -21,7 +21,7 @@
  
 foreign import javascript unsafe
         "new window[\"MutationObserver\"]($1)" js_newMutationObserver ::
-        JSRef MutationCallback -> IO (JSRef MutationObserver)
+        Nullable MutationCallback -> IO MutationObserver
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver Mozilla MutationObserver documentation> 
 newMutationObserver ::
@@ -30,12 +30,11 @@
 newMutationObserver callback
   = liftIO
       (js_newMutationObserver
-         (maybe jsNull (unMutationCallback . toMutationCallback) callback)
-         >>= fromJSRefUnchecked)
+         (maybeToNullable (fmap toMutationCallback callback)))
  
 foreign import javascript unsafe "$1[\"observe\"]($2, $3)"
         js_observe ::
-        JSRef MutationObserver -> JSRef Node -> JSRef Dictionary -> IO ()
+        MutationObserver -> Nullable Node -> Nullable Dictionary -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver.observe Mozilla MutationObserver.observe documentation> 
 observe ::
@@ -43,24 +42,21 @@
           MutationObserver -> Maybe target -> Maybe options -> m ()
 observe self target options
   = liftIO
-      (js_observe (unMutationObserver self)
-         (maybe jsNull (unNode . toNode) target)
-         (maybe jsNull (unDictionary . toDictionary) options))
+      (js_observe (self) (maybeToNullable (fmap toNode target))
+         (maybeToNullable (fmap toDictionary options)))
  
 foreign import javascript unsafe "$1[\"takeRecords\"]()"
-        js_takeRecords ::
-        JSRef MutationObserver -> IO (JSRef [Maybe MutationRecord])
+        js_takeRecords :: MutationObserver -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver.takeRecords Mozilla MutationObserver.takeRecords documentation> 
 takeRecords ::
             (MonadIO m) => MutationObserver -> m [Maybe MutationRecord]
 takeRecords self
-  = liftIO
-      ((js_takeRecords (unMutationObserver self)) >>= fromJSRefUnchecked)
+  = liftIO ((js_takeRecords (self)) >>= fromJSRefUnchecked)
  
 foreign import javascript unsafe "$1[\"disconnect\"]()"
-        js_disconnect :: JSRef MutationObserver -> IO ()
+        js_disconnect :: MutationObserver -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver.disconnect Mozilla MutationObserver.disconnect documentation> 
 disconnect :: (MonadIO m) => MutationObserver -> m ()
-disconnect self = liftIO (js_disconnect (unMutationObserver self))
+disconnect self = liftIO (js_disconnect (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/MutationRecord.hs b/src/GHCJS/DOM/JSFFI/Generated/MutationRecord.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/MutationRecord.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/MutationRecord.hs
@@ -10,7 +10,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -24,93 +24,82 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"type\"]" js_getType ::
-        JSRef MutationRecord -> IO JSString
+        MutationRecord -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MutationRecord.type Mozilla MutationRecord.type documentation> 
 getType ::
         (MonadIO m, FromJSString result) => MutationRecord -> m result
-getType self
-  = liftIO (fromJSString <$> (js_getType (unMutationRecord self)))
+getType self = liftIO (fromJSString <$> (js_getType (self)))
  
 foreign import javascript unsafe "$1[\"target\"]" js_getTarget ::
-        JSRef MutationRecord -> IO (JSRef Node)
+        MutationRecord -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MutationRecord.target Mozilla MutationRecord.target documentation> 
 getTarget :: (MonadIO m) => MutationRecord -> m (Maybe Node)
-getTarget self
-  = liftIO ((js_getTarget (unMutationRecord self)) >>= fromJSRef)
+getTarget self = liftIO (nullableToMaybe <$> (js_getTarget (self)))
  
 foreign import javascript unsafe "$1[\"addedNodes\"]"
-        js_getAddedNodes :: JSRef MutationRecord -> IO (JSRef NodeList)
+        js_getAddedNodes :: MutationRecord -> IO (Nullable NodeList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MutationRecord.addedNodes Mozilla MutationRecord.addedNodes documentation> 
 getAddedNodes ::
               (MonadIO m) => MutationRecord -> m (Maybe NodeList)
 getAddedNodes self
-  = liftIO ((js_getAddedNodes (unMutationRecord self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getAddedNodes (self)))
  
 foreign import javascript unsafe "$1[\"removedNodes\"]"
-        js_getRemovedNodes :: JSRef MutationRecord -> IO (JSRef NodeList)
+        js_getRemovedNodes :: MutationRecord -> IO (Nullable NodeList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MutationRecord.removedNodes Mozilla MutationRecord.removedNodes documentation> 
 getRemovedNodes ::
                 (MonadIO m) => MutationRecord -> m (Maybe NodeList)
 getRemovedNodes self
-  = liftIO
-      ((js_getRemovedNodes (unMutationRecord self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getRemovedNodes (self)))
  
 foreign import javascript unsafe "$1[\"previousSibling\"]"
-        js_getPreviousSibling :: JSRef MutationRecord -> IO (JSRef Node)
+        js_getPreviousSibling :: MutationRecord -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MutationRecord.previousSibling Mozilla MutationRecord.previousSibling documentation> 
 getPreviousSibling ::
                    (MonadIO m) => MutationRecord -> m (Maybe Node)
 getPreviousSibling self
-  = liftIO
-      ((js_getPreviousSibling (unMutationRecord self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getPreviousSibling (self)))
  
 foreign import javascript unsafe "$1[\"nextSibling\"]"
-        js_getNextSibling :: JSRef MutationRecord -> IO (JSRef Node)
+        js_getNextSibling :: MutationRecord -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MutationRecord.nextSibling Mozilla MutationRecord.nextSibling documentation> 
 getNextSibling :: (MonadIO m) => MutationRecord -> m (Maybe Node)
 getNextSibling self
-  = liftIO
-      ((js_getNextSibling (unMutationRecord self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getNextSibling (self)))
  
 foreign import javascript unsafe "$1[\"attributeName\"]"
-        js_getAttributeName ::
-        JSRef MutationRecord -> IO (JSRef (Maybe JSString))
+        js_getAttributeName :: MutationRecord -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MutationRecord.attributeName Mozilla MutationRecord.attributeName documentation> 
 getAttributeName ::
                  (MonadIO m, FromJSString result) =>
                    MutationRecord -> m (Maybe result)
 getAttributeName self
-  = liftIO
-      (fromMaybeJSString <$>
-         (js_getAttributeName (unMutationRecord self)))
+  = liftIO (fromMaybeJSString <$> (js_getAttributeName (self)))
  
 foreign import javascript unsafe "$1[\"attributeNamespace\"]"
         js_getAttributeNamespace ::
-        JSRef MutationRecord -> IO (JSRef (Maybe JSString))
+        MutationRecord -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MutationRecord.attributeNamespace Mozilla MutationRecord.attributeNamespace documentation> 
 getAttributeNamespace ::
                       (MonadIO m, FromJSString result) =>
                         MutationRecord -> m (Maybe result)
 getAttributeNamespace self
-  = liftIO
-      (fromMaybeJSString <$>
-         (js_getAttributeNamespace (unMutationRecord self)))
+  = liftIO (fromMaybeJSString <$> (js_getAttributeNamespace (self)))
  
 foreign import javascript unsafe "$1[\"oldValue\"]" js_getOldValue
-        :: JSRef MutationRecord -> IO (JSRef (Maybe JSString))
+        :: MutationRecord -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MutationRecord.oldValue Mozilla MutationRecord.oldValue documentation> 
 getOldValue ::
             (MonadIO m, FromJSString result) =>
               MutationRecord -> m (Maybe result)
 getOldValue self
-  = liftIO
-      (fromMaybeJSString <$> (js_getOldValue (unMutationRecord self)))
+  = liftIO (fromMaybeJSString <$> (js_getOldValue (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/NamedNodeMap.hs b/src/GHCJS/DOM/JSFFI/Generated/NamedNodeMap.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/NamedNodeMap.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/NamedNodeMap.hs
@@ -9,7 +9,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -23,8 +23,7 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"getNamedItem\"]($2)"
-        js_getNamedItem ::
-        JSRef NamedNodeMap -> JSString -> IO (JSRef Node)
+        js_getNamedItem :: NamedNodeMap -> JSString -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/NamedNodeMap.getNamedItem Mozilla NamedNodeMap.getNamedItem documentation> 
 getNamedItem ::
@@ -32,12 +31,11 @@
                NamedNodeMap -> name -> m (Maybe Node)
 getNamedItem self name
   = liftIO
-      ((js_getNamedItem (unNamedNodeMap self) (toJSString name)) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_getNamedItem (self) (toJSString name)))
  
 foreign import javascript unsafe "$1[\"setNamedItem\"]($2)"
         js_setNamedItem ::
-        JSRef NamedNodeMap -> JSRef Node -> IO (JSRef Node)
+        NamedNodeMap -> Nullable Node -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/NamedNodeMap.setNamedItem Mozilla NamedNodeMap.setNamedItem documentation> 
 setNamedItem ::
@@ -45,13 +43,12 @@
                NamedNodeMap -> Maybe node -> m (Maybe Node)
 setNamedItem self node
   = liftIO
-      ((js_setNamedItem (unNamedNodeMap self)
-          (maybe jsNull (unNode . toNode) node))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_setNamedItem (self) (maybeToNullable (fmap toNode node))))
  
 foreign import javascript unsafe "$1[\"removeNamedItem\"]($2)"
         js_removeNamedItem ::
-        JSRef NamedNodeMap -> JSString -> IO (JSRef Node)
+        NamedNodeMap -> JSString -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/NamedNodeMap.removeNamedItem Mozilla NamedNodeMap.removeNamedItem documentation> 
 removeNamedItem ::
@@ -59,21 +56,19 @@
                   NamedNodeMap -> name -> m (Maybe Node)
 removeNamedItem self name
   = liftIO
-      ((js_removeNamedItem (unNamedNodeMap self) (toJSString name)) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_removeNamedItem (self) (toJSString name)))
  
 foreign import javascript unsafe "$1[\"item\"]($2)" js_item ::
-        JSRef NamedNodeMap -> Word -> IO (JSRef Node)
+        NamedNodeMap -> Word -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/NamedNodeMap.item Mozilla NamedNodeMap.item documentation> 
 item :: (MonadIO m) => NamedNodeMap -> Word -> m (Maybe Node)
 item self index
-  = liftIO ((js_item (unNamedNodeMap self) index) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_item (self) index))
  
 foreign import javascript unsafe "$1[\"getNamedItemNS\"]($2, $3)"
         js_getNamedItemNS ::
-        JSRef NamedNodeMap ->
-          JSRef (Maybe JSString) -> JSString -> IO (JSRef Node)
+        NamedNodeMap -> Nullable JSString -> JSString -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/NamedNodeMap.getNamedItemNS Mozilla NamedNodeMap.getNamedItemNS documentation> 
 getNamedItemNS ::
@@ -81,14 +76,13 @@
                  NamedNodeMap -> Maybe namespaceURI -> localName -> m (Maybe Node)
 getNamedItemNS self namespaceURI localName
   = liftIO
-      ((js_getNamedItemNS (unNamedNodeMap self)
-          (toMaybeJSString namespaceURI)
-          (toJSString localName))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_getNamedItemNS (self) (toMaybeJSString namespaceURI)
+            (toJSString localName)))
  
 foreign import javascript unsafe "$1[\"setNamedItemNS\"]($2)"
         js_setNamedItemNS ::
-        JSRef NamedNodeMap -> JSRef Node -> IO (JSRef Node)
+        NamedNodeMap -> Nullable Node -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/NamedNodeMap.setNamedItemNS Mozilla NamedNodeMap.setNamedItemNS documentation> 
 setNamedItemNS ::
@@ -96,14 +90,12 @@
                  NamedNodeMap -> Maybe node -> m (Maybe Node)
 setNamedItemNS self node
   = liftIO
-      ((js_setNamedItemNS (unNamedNodeMap self)
-          (maybe jsNull (unNode . toNode) node))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_setNamedItemNS (self) (maybeToNullable (fmap toNode node))))
  
 foreign import javascript unsafe
         "$1[\"removeNamedItemNS\"]($2, $3)" js_removeNamedItemNS ::
-        JSRef NamedNodeMap ->
-          JSRef (Maybe JSString) -> JSString -> IO (JSRef Node)
+        NamedNodeMap -> Nullable JSString -> JSString -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/NamedNodeMap.removeNamedItemNS Mozilla NamedNodeMap.removeNamedItemNS documentation> 
 removeNamedItemNS ::
@@ -111,14 +103,13 @@
                     NamedNodeMap -> Maybe namespaceURI -> localName -> m (Maybe Node)
 removeNamedItemNS self namespaceURI localName
   = liftIO
-      ((js_removeNamedItemNS (unNamedNodeMap self)
-          (toMaybeJSString namespaceURI)
-          (toJSString localName))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_removeNamedItemNS (self) (toMaybeJSString namespaceURI)
+            (toJSString localName)))
  
 foreign import javascript unsafe "$1[\"length\"]" js_getLength ::
-        JSRef NamedNodeMap -> IO Word
+        NamedNodeMap -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/NamedNodeMap.length Mozilla NamedNodeMap.length documentation> 
 getLength :: (MonadIO m) => NamedNodeMap -> m Word
-getLength self = liftIO (js_getLength (unNamedNodeMap self))
+getLength self = liftIO (js_getLength (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/Navigator.hs b/src/GHCJS/DOM/JSFFI/Generated/Navigator.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/Navigator.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/Navigator.hs
@@ -22,7 +22,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -36,20 +36,19 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"getGamepads\"]()"
-        js_getGamepads :: JSRef Navigator -> IO (JSRef [Maybe Gamepad])
+        js_getGamepads :: Navigator -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Navigator.getGamepads Mozilla Navigator.getGamepads documentation> 
 getGamepads :: (MonadIO m) => Navigator -> m [Maybe Gamepad]
 getGamepads self
-  = liftIO
-      ((js_getGamepads (unNavigator self)) >>= fromJSRefUnchecked)
+  = liftIO ((js_getGamepads (self)) >>= fromJSRefUnchecked)
  
 foreign import javascript unsafe
         "$1[\"webkitGetUserMedia\"]($2, $3,\n$4)" js_webkitGetUserMedia ::
-        JSRef Navigator ->
-          JSRef Dictionary ->
-            JSRef NavigatorUserMediaSuccessCallback ->
-              JSRef NavigatorUserMediaErrorCallback -> IO ()
+        Navigator ->
+          Nullable Dictionary ->
+            Nullable NavigatorUserMediaSuccessCallback ->
+              Nullable NavigatorUserMediaErrorCallback -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Navigator.webkitGetUserMedia Mozilla Navigator.webkitGetUserMedia documentation> 
 webkitGetUserMedia ::
@@ -60,15 +59,15 @@
                            Maybe NavigatorUserMediaErrorCallback -> m ()
 webkitGetUserMedia self options successCallback errorCallback
   = liftIO
-      (js_webkitGetUserMedia (unNavigator self)
-         (maybe jsNull (unDictionary . toDictionary) options)
-         (maybe jsNull pToJSRef successCallback)
-         (maybe jsNull pToJSRef errorCallback))
+      (js_webkitGetUserMedia (self)
+         (maybeToNullable (fmap toDictionary options))
+         (maybeToNullable successCallback)
+         (maybeToNullable errorCallback))
  
 foreign import javascript unsafe
         "$1[\"registerProtocolHandler\"]($2,\n$3, $4)"
         js_registerProtocolHandler ::
-        JSRef Navigator -> JSString -> JSString -> JSString -> IO ()
+        Navigator -> JSString -> JSString -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Navigator.registerProtocolHandler Mozilla Navigator.registerProtocolHandler documentation> 
 registerProtocolHandler ::
@@ -76,14 +75,14 @@
                           Navigator -> scheme -> url -> title -> m ()
 registerProtocolHandler self scheme url title
   = liftIO
-      (js_registerProtocolHandler (unNavigator self) (toJSString scheme)
+      (js_registerProtocolHandler (self) (toJSString scheme)
          (toJSString url)
          (toJSString title))
  
 foreign import javascript unsafe
         "$1[\"isProtocolHandlerRegistered\"]($2,\n$3)"
         js_isProtocolHandlerRegistered ::
-        JSRef Navigator -> JSString -> JSString -> IO JSString
+        Navigator -> JSString -> JSString -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Navigator.isProtocolHandlerRegistered Mozilla Navigator.isProtocolHandlerRegistered documentation> 
 isProtocolHandlerRegistered ::
@@ -93,14 +92,13 @@
 isProtocolHandlerRegistered self scheme url
   = liftIO
       (fromJSString <$>
-         (js_isProtocolHandlerRegistered (unNavigator self)
-            (toJSString scheme)
+         (js_isProtocolHandlerRegistered (self) (toJSString scheme)
             (toJSString url)))
  
 foreign import javascript unsafe
         "$1[\"unregisterProtocolHandler\"]($2,\n$3)"
         js_unregisterProtocolHandler ::
-        JSRef Navigator -> JSString -> JSString -> IO ()
+        Navigator -> JSString -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Navigator.unregisterProtocolHandler Mozilla Navigator.unregisterProtocolHandler documentation> 
 unregisterProtocolHandler ::
@@ -108,206 +106,200 @@
                             Navigator -> scheme -> url -> m ()
 unregisterProtocolHandler self scheme url
   = liftIO
-      (js_unregisterProtocolHandler (unNavigator self)
-         (toJSString scheme)
+      (js_unregisterProtocolHandler (self) (toJSString scheme)
          (toJSString url))
  
 foreign import javascript unsafe "($1[\"vibrate\"]($2) ? 1 : 0)"
-        js_vibratePattern :: JSRef Navigator -> JSRef [Word] -> IO Bool
+        js_vibratePattern :: Navigator -> JSRef -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Navigator.vibrate Mozilla Navigator.vibrate documentation> 
 vibratePattern :: (MonadIO m) => Navigator -> [Word] -> m Bool
 vibratePattern self pattern'
   = liftIO
       (toJSRef pattern' >>=
-         \ pattern'' -> js_vibratePattern (unNavigator self) pattern'')
+         \ pattern'' -> js_vibratePattern (self) pattern'')
  
 foreign import javascript unsafe "($1[\"vibrate\"]($2) ? 1 : 0)"
-        js_vibrate :: JSRef Navigator -> Word -> IO Bool
+        js_vibrate :: Navigator -> Word -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Navigator.vibrate Mozilla Navigator.vibrate documentation> 
 vibrate :: (MonadIO m) => Navigator -> Word -> m Bool
-vibrate self time = liftIO (js_vibrate (unNavigator self) time)
+vibrate self time = liftIO (js_vibrate (self) time)
  
 foreign import javascript unsafe "($1[\"javaEnabled\"]() ? 1 : 0)"
-        js_javaEnabled :: JSRef Navigator -> IO Bool
+        js_javaEnabled :: Navigator -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Navigator.javaEnabled Mozilla Navigator.javaEnabled documentation> 
 javaEnabled :: (MonadIO m) => Navigator -> m Bool
-javaEnabled self = liftIO (js_javaEnabled (unNavigator self))
+javaEnabled self = liftIO (js_javaEnabled (self))
  
 foreign import javascript unsafe "$1[\"getStorageUpdates\"]()"
-        js_getStorageUpdates :: JSRef Navigator -> IO ()
+        js_getStorageUpdates :: Navigator -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Navigator.getStorageUpdates Mozilla Navigator.getStorageUpdates documentation> 
 getStorageUpdates :: (MonadIO m) => Navigator -> m ()
-getStorageUpdates self
-  = liftIO (js_getStorageUpdates (unNavigator self))
+getStorageUpdates self = liftIO (js_getStorageUpdates (self))
  
 foreign import javascript unsafe "$1[\"webkitBattery\"]"
-        js_getWebkitBattery :: JSRef Navigator -> IO (JSRef BatteryManager)
+        js_getWebkitBattery :: Navigator -> IO (Nullable BatteryManager)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Navigator.webkitBattery Mozilla Navigator.webkitBattery documentation> 
 getWebkitBattery ::
                  (MonadIO m) => Navigator -> m (Maybe BatteryManager)
 getWebkitBattery self
-  = liftIO ((js_getWebkitBattery (unNavigator self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getWebkitBattery (self)))
  
 foreign import javascript unsafe "$1[\"geolocation\"]"
-        js_getGeolocation :: JSRef Navigator -> IO (JSRef Geolocation)
+        js_getGeolocation :: Navigator -> IO (Nullable Geolocation)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Navigator.geolocation Mozilla Navigator.geolocation documentation> 
 getGeolocation :: (MonadIO m) => Navigator -> m (Maybe Geolocation)
 getGeolocation self
-  = liftIO ((js_getGeolocation (unNavigator self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getGeolocation (self)))
  
 foreign import javascript unsafe "$1[\"webkitTemporaryStorage\"]"
         js_getWebkitTemporaryStorage ::
-        JSRef Navigator -> IO (JSRef StorageQuota)
+        Navigator -> IO (Nullable StorageQuota)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Navigator.webkitTemporaryStorage Mozilla Navigator.webkitTemporaryStorage documentation> 
 getWebkitTemporaryStorage ::
                           (MonadIO m) => Navigator -> m (Maybe StorageQuota)
 getWebkitTemporaryStorage self
   = liftIO
-      ((js_getWebkitTemporaryStorage (unNavigator self)) >>= fromJSRef)
+      (nullableToMaybe <$> (js_getWebkitTemporaryStorage (self)))
  
 foreign import javascript unsafe "$1[\"webkitPersistentStorage\"]"
         js_getWebkitPersistentStorage ::
-        JSRef Navigator -> IO (JSRef StorageQuota)
+        Navigator -> IO (Nullable StorageQuota)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Navigator.webkitPersistentStorage Mozilla Navigator.webkitPersistentStorage documentation> 
 getWebkitPersistentStorage ::
                            (MonadIO m) => Navigator -> m (Maybe StorageQuota)
 getWebkitPersistentStorage self
   = liftIO
-      ((js_getWebkitPersistentStorage (unNavigator self)) >>= fromJSRef)
+      (nullableToMaybe <$> (js_getWebkitPersistentStorage (self)))
  
 foreign import javascript unsafe "$1[\"appCodeName\"]"
-        js_getAppCodeName :: JSRef Navigator -> IO JSString
+        js_getAppCodeName :: Navigator -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Navigator.appCodeName Mozilla Navigator.appCodeName documentation> 
 getAppCodeName ::
                (MonadIO m, FromJSString result) => Navigator -> m result
 getAppCodeName self
-  = liftIO (fromJSString <$> (js_getAppCodeName (unNavigator self)))
+  = liftIO (fromJSString <$> (js_getAppCodeName (self)))
  
 foreign import javascript unsafe "$1[\"appName\"]" js_getAppName ::
-        JSRef Navigator -> IO JSString
+        Navigator -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Navigator.appName Mozilla Navigator.appName documentation> 
 getAppName ::
            (MonadIO m, FromJSString result) => Navigator -> m result
-getAppName self
-  = liftIO (fromJSString <$> (js_getAppName (unNavigator self)))
+getAppName self = liftIO (fromJSString <$> (js_getAppName (self)))
  
 foreign import javascript unsafe "$1[\"appVersion\"]"
-        js_getAppVersion :: JSRef Navigator -> IO JSString
+        js_getAppVersion :: Navigator -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Navigator.appVersion Mozilla Navigator.appVersion documentation> 
 getAppVersion ::
               (MonadIO m, FromJSString result) => Navigator -> m result
 getAppVersion self
-  = liftIO (fromJSString <$> (js_getAppVersion (unNavigator self)))
+  = liftIO (fromJSString <$> (js_getAppVersion (self)))
  
 foreign import javascript unsafe "$1[\"language\"]" js_getLanguage
-        :: JSRef Navigator -> IO JSString
+        :: Navigator -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Navigator.language Mozilla Navigator.language documentation> 
 getLanguage ::
             (MonadIO m, FromJSString result) => Navigator -> m result
 getLanguage self
-  = liftIO (fromJSString <$> (js_getLanguage (unNavigator self)))
+  = liftIO (fromJSString <$> (js_getLanguage (self)))
  
 foreign import javascript unsafe "$1[\"userAgent\"]"
-        js_getUserAgent :: JSRef Navigator -> IO JSString
+        js_getUserAgent :: Navigator -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Navigator.userAgent Mozilla Navigator.userAgent documentation> 
 getUserAgent ::
              (MonadIO m, FromJSString result) => Navigator -> m result
 getUserAgent self
-  = liftIO (fromJSString <$> (js_getUserAgent (unNavigator self)))
+  = liftIO (fromJSString <$> (js_getUserAgent (self)))
  
 foreign import javascript unsafe "$1[\"platform\"]" js_getPlatform
-        :: JSRef Navigator -> IO JSString
+        :: Navigator -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Navigator.platform Mozilla Navigator.platform documentation> 
 getPlatform ::
             (MonadIO m, FromJSString result) => Navigator -> m result
 getPlatform self
-  = liftIO (fromJSString <$> (js_getPlatform (unNavigator self)))
+  = liftIO (fromJSString <$> (js_getPlatform (self)))
  
 foreign import javascript unsafe "$1[\"plugins\"]" js_getPlugins ::
-        JSRef Navigator -> IO (JSRef PluginArray)
+        Navigator -> IO (Nullable PluginArray)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Navigator.plugins Mozilla Navigator.plugins documentation> 
 getPlugins :: (MonadIO m) => Navigator -> m (Maybe PluginArray)
 getPlugins self
-  = liftIO ((js_getPlugins (unNavigator self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getPlugins (self)))
  
 foreign import javascript unsafe "$1[\"mimeTypes\"]"
-        js_getMimeTypes :: JSRef Navigator -> IO (JSRef MimeTypeArray)
+        js_getMimeTypes :: Navigator -> IO (Nullable MimeTypeArray)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Navigator.mimeTypes Mozilla Navigator.mimeTypes documentation> 
 getMimeTypes :: (MonadIO m) => Navigator -> m (Maybe MimeTypeArray)
 getMimeTypes self
-  = liftIO ((js_getMimeTypes (unNavigator self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getMimeTypes (self)))
  
 foreign import javascript unsafe "$1[\"product\"]" js_getProduct ::
-        JSRef Navigator -> IO JSString
+        Navigator -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Navigator.product Mozilla Navigator.product documentation> 
 getProduct ::
            (MonadIO m, FromJSString result) => Navigator -> m result
-getProduct self
-  = liftIO (fromJSString <$> (js_getProduct (unNavigator self)))
+getProduct self = liftIO (fromJSString <$> (js_getProduct (self)))
  
 foreign import javascript unsafe "$1[\"productSub\"]"
-        js_getProductSub :: JSRef Navigator -> IO JSString
+        js_getProductSub :: Navigator -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Navigator.productSub Mozilla Navigator.productSub documentation> 
 getProductSub ::
               (MonadIO m, FromJSString result) => Navigator -> m result
 getProductSub self
-  = liftIO (fromJSString <$> (js_getProductSub (unNavigator self)))
+  = liftIO (fromJSString <$> (js_getProductSub (self)))
  
 foreign import javascript unsafe "$1[\"vendor\"]" js_getVendor ::
-        JSRef Navigator -> IO JSString
+        Navigator -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Navigator.vendor Mozilla Navigator.vendor documentation> 
 getVendor ::
           (MonadIO m, FromJSString result) => Navigator -> m result
-getVendor self
-  = liftIO (fromJSString <$> (js_getVendor (unNavigator self)))
+getVendor self = liftIO (fromJSString <$> (js_getVendor (self)))
  
 foreign import javascript unsafe "$1[\"vendorSub\"]"
-        js_getVendorSub :: JSRef Navigator -> IO JSString
+        js_getVendorSub :: Navigator -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Navigator.vendorSub Mozilla Navigator.vendorSub documentation> 
 getVendorSub ::
              (MonadIO m, FromJSString result) => Navigator -> m result
 getVendorSub self
-  = liftIO (fromJSString <$> (js_getVendorSub (unNavigator self)))
+  = liftIO (fromJSString <$> (js_getVendorSub (self)))
  
 foreign import javascript unsafe "($1[\"cookieEnabled\"] ? 1 : 0)"
-        js_getCookieEnabled :: JSRef Navigator -> IO Bool
+        js_getCookieEnabled :: Navigator -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Navigator.cookieEnabled Mozilla Navigator.cookieEnabled documentation> 
 getCookieEnabled :: (MonadIO m) => Navigator -> m Bool
-getCookieEnabled self
-  = liftIO (js_getCookieEnabled (unNavigator self))
+getCookieEnabled self = liftIO (js_getCookieEnabled (self))
  
 foreign import javascript unsafe "($1[\"onLine\"] ? 1 : 0)"
-        js_getOnLine :: JSRef Navigator -> IO Bool
+        js_getOnLine :: Navigator -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Navigator.onLine Mozilla Navigator.onLine documentation> 
 getOnLine :: (MonadIO m) => Navigator -> m Bool
-getOnLine self = liftIO (js_getOnLine (unNavigator self))
+getOnLine self = liftIO (js_getOnLine (self))
  
 foreign import javascript unsafe "$1[\"hardwareConcurrency\"]"
-        js_getHardwareConcurrency :: JSRef Navigator -> IO Int
+        js_getHardwareConcurrency :: Navigator -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Navigator.hardwareConcurrency Mozilla Navigator.hardwareConcurrency documentation> 
 getHardwareConcurrency :: (MonadIO m) => Navigator -> m Int
 getHardwareConcurrency self
-  = liftIO (js_getHardwareConcurrency (unNavigator self))
+  = liftIO (js_getHardwareConcurrency (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/NavigatorUserMediaError.hs b/src/GHCJS/DOM/JSFFI/Generated/NavigatorUserMediaError.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/NavigatorUserMediaError.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/NavigatorUserMediaError.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,14 +19,11 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"constraintName\"]"
-        js_getConstraintName ::
-        JSRef NavigatorUserMediaError -> IO JSString
+        js_getConstraintName :: NavigatorUserMediaError -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/NavigatorUserMediaError.constraintName Mozilla NavigatorUserMediaError.constraintName documentation> 
 getConstraintName ::
                   (MonadIO m, FromJSString result) =>
                     NavigatorUserMediaError -> m result
 getConstraintName self
-  = liftIO
-      (fromJSString <$>
-         (js_getConstraintName (unNavigatorUserMediaError self)))
+  = liftIO (fromJSString <$> (js_getConstraintName (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/NavigatorUserMediaErrorCallback.hs b/src/GHCJS/DOM/JSFFI/Generated/NavigatorUserMediaErrorCallback.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/NavigatorUserMediaErrorCallback.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/NavigatorUserMediaErrorCallback.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -27,9 +27,10 @@
                                        m NavigatorUserMediaErrorCallback
 newNavigatorUserMediaErrorCallback callback
   = liftIO
-      (syncCallback1 ThrowWouldBlock
-         (\ error ->
-            fromJSRefUnchecked error >>= \ error' -> callback error'))
+      (NavigatorUserMediaErrorCallback <$>
+         syncCallback1 ThrowWouldBlock
+           (\ error ->
+              fromJSRefUnchecked error >>= \ error' -> callback error'))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/NavigatorUserMediaErrorCallback Mozilla NavigatorUserMediaErrorCallback documentation> 
 newNavigatorUserMediaErrorCallbackSync ::
@@ -38,9 +39,10 @@
                                            m NavigatorUserMediaErrorCallback
 newNavigatorUserMediaErrorCallbackSync callback
   = liftIO
-      (syncCallback1 ContinueAsync
-         (\ error ->
-            fromJSRefUnchecked error >>= \ error' -> callback error'))
+      (NavigatorUserMediaErrorCallback <$>
+         syncCallback1 ContinueAsync
+           (\ error ->
+              fromJSRefUnchecked error >>= \ error' -> callback error'))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/NavigatorUserMediaErrorCallback Mozilla NavigatorUserMediaErrorCallback documentation> 
 newNavigatorUserMediaErrorCallbackAsync ::
@@ -49,6 +51,7 @@
                                             m NavigatorUserMediaErrorCallback
 newNavigatorUserMediaErrorCallbackAsync callback
   = liftIO
-      (asyncCallback1
-         (\ error ->
-            fromJSRefUnchecked error >>= \ error' -> callback error'))
+      (NavigatorUserMediaErrorCallback <$>
+         asyncCallback1
+           (\ error ->
+              fromJSRefUnchecked error >>= \ error' -> callback error'))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/NavigatorUserMediaSuccessCallback.hs b/src/GHCJS/DOM/JSFFI/Generated/NavigatorUserMediaSuccessCallback.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/NavigatorUserMediaSuccessCallback.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/NavigatorUserMediaSuccessCallback.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -27,9 +27,10 @@
                                          m NavigatorUserMediaSuccessCallback
 newNavigatorUserMediaSuccessCallback callback
   = liftIO
-      (syncCallback1 ThrowWouldBlock
-         (\ stream ->
-            fromJSRefUnchecked stream >>= \ stream' -> callback stream'))
+      (NavigatorUserMediaSuccessCallback <$>
+         syncCallback1 ThrowWouldBlock
+           (\ stream ->
+              fromJSRefUnchecked stream >>= \ stream' -> callback stream'))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/NavigatorUserMediaSuccessCallback Mozilla NavigatorUserMediaSuccessCallback documentation> 
 newNavigatorUserMediaSuccessCallbackSync ::
@@ -38,9 +39,10 @@
                                              m NavigatorUserMediaSuccessCallback
 newNavigatorUserMediaSuccessCallbackSync callback
   = liftIO
-      (syncCallback1 ContinueAsync
-         (\ stream ->
-            fromJSRefUnchecked stream >>= \ stream' -> callback stream'))
+      (NavigatorUserMediaSuccessCallback <$>
+         syncCallback1 ContinueAsync
+           (\ stream ->
+              fromJSRefUnchecked stream >>= \ stream' -> callback stream'))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/NavigatorUserMediaSuccessCallback Mozilla NavigatorUserMediaSuccessCallback documentation> 
 newNavigatorUserMediaSuccessCallbackAsync ::
@@ -49,6 +51,7 @@
                                               m NavigatorUserMediaSuccessCallback
 newNavigatorUserMediaSuccessCallbackAsync callback
   = liftIO
-      (asyncCallback1
-         (\ stream ->
-            fromJSRefUnchecked stream >>= \ stream' -> callback stream'))
+      (NavigatorUserMediaSuccessCallback <$>
+         asyncCallback1
+           (\ stream ->
+              fromJSRefUnchecked stream >>= \ stream' -> callback stream'))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/Node.hs b/src/GHCJS/DOM/JSFFI/Generated/Node.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/Node.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/Node.hs
@@ -34,7 +34,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -49,7 +49,7 @@
  
 foreign import javascript unsafe "$1[\"insertBefore\"]($2, $3)"
         js_insertBefore ::
-        JSRef Node -> JSRef Node -> JSRef Node -> IO (JSRef Node)
+        Node -> Nullable Node -> Nullable Node -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Node.insertBefore Mozilla Node.insertBefore documentation> 
 insertBefore ::
@@ -57,14 +57,14 @@
                self -> Maybe newChild -> Maybe refChild -> m (Maybe Node)
 insertBefore self newChild refChild
   = liftIO
-      ((js_insertBefore (unNode (toNode self))
-          (maybe jsNull (unNode . toNode) newChild)
-          (maybe jsNull (unNode . toNode) refChild))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_insertBefore (toNode self)
+            (maybeToNullable (fmap toNode newChild))
+            (maybeToNullable (fmap toNode refChild))))
  
 foreign import javascript unsafe "$1[\"replaceChild\"]($2, $3)"
         js_replaceChild ::
-        JSRef Node -> JSRef Node -> JSRef Node -> IO (JSRef Node)
+        Node -> Nullable Node -> Nullable Node -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Node.replaceChild Mozilla Node.replaceChild documentation> 
 replaceChild ::
@@ -72,13 +72,13 @@
                self -> Maybe newChild -> Maybe oldChild -> m (Maybe Node)
 replaceChild self newChild oldChild
   = liftIO
-      ((js_replaceChild (unNode (toNode self))
-          (maybe jsNull (unNode . toNode) newChild)
-          (maybe jsNull (unNode . toNode) oldChild))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_replaceChild (toNode self)
+            (maybeToNullable (fmap toNode newChild))
+            (maybeToNullable (fmap toNode oldChild))))
  
 foreign import javascript unsafe "$1[\"removeChild\"]($2)"
-        js_removeChild :: JSRef Node -> JSRef Node -> IO (JSRef Node)
+        js_removeChild :: Node -> Nullable Node -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Node.removeChild Mozilla Node.removeChild documentation> 
 removeChild ::
@@ -86,12 +86,12 @@
               self -> Maybe oldChild -> m (Maybe Node)
 removeChild self oldChild
   = liftIO
-      ((js_removeChild (unNode (toNode self))
-          (maybe jsNull (unNode . toNode) oldChild))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_removeChild (toNode self)
+            (maybeToNullable (fmap toNode oldChild))))
  
 foreign import javascript unsafe "$1[\"appendChild\"]($2)"
-        js_appendChild :: JSRef Node -> JSRef Node -> IO (JSRef Node)
+        js_appendChild :: Node -> Nullable Node -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Node.appendChild Mozilla Node.appendChild documentation> 
 appendChild ::
@@ -99,38 +99,37 @@
               self -> Maybe newChild -> m (Maybe Node)
 appendChild self newChild
   = liftIO
-      ((js_appendChild (unNode (toNode self))
-          (maybe jsNull (unNode . toNode) newChild))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_appendChild (toNode self)
+            (maybeToNullable (fmap toNode newChild))))
  
 foreign import javascript unsafe
         "($1[\"hasChildNodes\"]() ? 1 : 0)" js_hasChildNodes ::
-        JSRef Node -> IO Bool
+        Node -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Node.hasChildNodes Mozilla Node.hasChildNodes documentation> 
 hasChildNodes :: (MonadIO m, IsNode self) => self -> m Bool
-hasChildNodes self
-  = liftIO (js_hasChildNodes (unNode (toNode self)))
+hasChildNodes self = liftIO (js_hasChildNodes (toNode self))
  
 foreign import javascript unsafe "$1[\"cloneNode\"]($2)"
-        js_cloneNode :: JSRef Node -> Bool -> IO (JSRef Node)
+        js_cloneNode :: Node -> Bool -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Node.cloneNode Mozilla Node.cloneNode documentation> 
 cloneNode ::
           (MonadIO m, IsNode self) => self -> Bool -> m (Maybe Node)
 cloneNode self deep
-  = liftIO ((js_cloneNode (unNode (toNode self)) deep) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_cloneNode (toNode self) deep))
  
 foreign import javascript unsafe "$1[\"normalize\"]()" js_normalize
-        :: JSRef Node -> IO ()
+        :: Node -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Node.normalize Mozilla Node.normalize documentation> 
 normalize :: (MonadIO m, IsNode self) => self -> m ()
-normalize self = liftIO (js_normalize (unNode (toNode self)))
+normalize self = liftIO (js_normalize (toNode self))
  
 foreign import javascript unsafe
         "($1[\"isSupported\"]($2,\n$3) ? 1 : 0)" js_isSupported ::
-        JSRef Node -> JSString -> JSRef (Maybe JSString) -> IO Bool
+        Node -> JSString -> Nullable JSString -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Node.isSupported Mozilla Node.isSupported documentation> 
 isSupported ::
@@ -138,11 +137,11 @@
               self -> feature -> Maybe version -> m Bool
 isSupported self feature version
   = liftIO
-      (js_isSupported (unNode (toNode self)) (toJSString feature)
+      (js_isSupported (toNode self) (toJSString feature)
          (toMaybeJSString version))
  
 foreign import javascript unsafe "($1[\"isSameNode\"]($2) ? 1 : 0)"
-        js_isSameNode :: JSRef Node -> JSRef Node -> IO Bool
+        js_isSameNode :: Node -> Nullable Node -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Node.isSameNode Mozilla Node.isSameNode documentation> 
 isSameNode ::
@@ -150,12 +149,11 @@
              self -> Maybe other -> m Bool
 isSameNode self other
   = liftIO
-      (js_isSameNode (unNode (toNode self))
-         (maybe jsNull (unNode . toNode) other))
+      (js_isSameNode (toNode self) (maybeToNullable (fmap toNode other)))
  
 foreign import javascript unsafe
         "($1[\"isEqualNode\"]($2) ? 1 : 0)" js_isEqualNode ::
-        JSRef Node -> JSRef Node -> IO Bool
+        Node -> Nullable Node -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Node.isEqualNode Mozilla Node.isEqualNode documentation> 
 isEqualNode ::
@@ -163,12 +161,12 @@
               self -> Maybe other -> m Bool
 isEqualNode self other
   = liftIO
-      (js_isEqualNode (unNode (toNode self))
-         (maybe jsNull (unNode . toNode) other))
+      (js_isEqualNode (toNode self)
+         (maybeToNullable (fmap toNode other)))
  
 foreign import javascript unsafe "$1[\"lookupPrefix\"]($2)"
         js_lookupPrefix ::
-        JSRef Node -> JSRef (Maybe JSString) -> IO (JSRef (Maybe JSString))
+        Node -> Nullable JSString -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Node.lookupPrefix Mozilla Node.lookupPrefix documentation> 
 lookupPrefix ::
@@ -178,12 +176,11 @@
 lookupPrefix self namespaceURI
   = liftIO
       (fromMaybeJSString <$>
-         (js_lookupPrefix (unNode (toNode self))
-            (toMaybeJSString namespaceURI)))
+         (js_lookupPrefix (toNode self) (toMaybeJSString namespaceURI)))
  
 foreign import javascript unsafe
         "($1[\"isDefaultNamespace\"]($2) ? 1 : 0)" js_isDefaultNamespace ::
-        JSRef Node -> JSRef (Maybe JSString) -> IO Bool
+        Node -> Nullable JSString -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Node.isDefaultNamespace Mozilla Node.isDefaultNamespace documentation> 
 isDefaultNamespace ::
@@ -191,12 +188,12 @@
                      self -> Maybe namespaceURI -> m Bool
 isDefaultNamespace self namespaceURI
   = liftIO
-      (js_isDefaultNamespace (unNode (toNode self))
+      (js_isDefaultNamespace (toNode self)
          (toMaybeJSString namespaceURI))
  
 foreign import javascript unsafe "$1[\"lookupNamespaceURI\"]($2)"
         js_lookupNamespaceURI ::
-        JSRef Node -> JSRef (Maybe JSString) -> IO (JSRef (Maybe JSString))
+        Node -> Nullable JSString -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Node.lookupNamespaceURI Mozilla Node.lookupNamespaceURI documentation> 
 lookupNamespaceURI ::
@@ -205,12 +202,11 @@
 lookupNamespaceURI self prefix
   = liftIO
       (fromMaybeJSString <$>
-         (js_lookupNamespaceURI (unNode (toNode self))
-            (toMaybeJSString prefix)))
+         (js_lookupNamespaceURI (toNode self) (toMaybeJSString prefix)))
  
 foreign import javascript unsafe
         "$1[\"compareDocumentPosition\"]($2)" js_compareDocumentPosition ::
-        JSRef Node -> JSRef Node -> IO Word
+        Node -> Nullable Node -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Node.compareDocumentPosition Mozilla Node.compareDocumentPosition documentation> 
 compareDocumentPosition ::
@@ -218,11 +214,11 @@
                           self -> Maybe other -> m Word
 compareDocumentPosition self other
   = liftIO
-      (js_compareDocumentPosition (unNode (toNode self))
-         (maybe jsNull (unNode . toNode) other))
+      (js_compareDocumentPosition (toNode self)
+         (maybeToNullable (fmap toNode other)))
  
 foreign import javascript unsafe "($1[\"contains\"]($2) ? 1 : 0)"
-        js_contains :: JSRef Node -> JSRef Node -> IO Bool
+        js_contains :: Node -> Nullable Node -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Node.contains Mozilla Node.contains documentation> 
 contains ::
@@ -230,8 +226,7 @@
            self -> Maybe other -> m Bool
 contains self other
   = liftIO
-      (js_contains (unNode (toNode self))
-         (maybe jsNull (unNode . toNode) other))
+      (js_contains (toNode self) (maybeToNullable (fmap toNode other)))
 pattern ELEMENT_NODE = 1
 pattern ATTRIBUTE_NODE = 2
 pattern TEXT_NODE = 3
@@ -252,190 +247,178 @@
 pattern DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = 32
  
 foreign import javascript unsafe "$1[\"nodeName\"]" js_getNodeName
-        :: JSRef Node -> IO (JSRef (Maybe JSString))
+        :: Node -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Node.nodeName Mozilla Node.nodeName documentation> 
 getNodeName ::
             (MonadIO m, IsNode self, FromJSString result) =>
               self -> m (Maybe result)
 getNodeName self
-  = liftIO
-      (fromMaybeJSString <$> (js_getNodeName (unNode (toNode self))))
+  = liftIO (fromMaybeJSString <$> (js_getNodeName (toNode self)))
  
 foreign import javascript unsafe "$1[\"nodeValue\"] = $2;"
-        js_setNodeValue :: JSRef Node -> JSRef (Maybe JSString) -> IO ()
+        js_setNodeValue :: Node -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Node.nodeValue Mozilla Node.nodeValue documentation> 
 setNodeValue ::
              (MonadIO m, IsNode self, ToJSString val) =>
                self -> Maybe val -> m ()
 setNodeValue self val
-  = liftIO
-      (js_setNodeValue (unNode (toNode self)) (toMaybeJSString val))
+  = liftIO (js_setNodeValue (toNode self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"nodeValue\"]"
-        js_getNodeValue :: JSRef Node -> IO (JSRef (Maybe JSString))
+        js_getNodeValue :: Node -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Node.nodeValue Mozilla Node.nodeValue documentation> 
 getNodeValue ::
              (MonadIO m, IsNode self, FromJSString result) =>
                self -> m (Maybe result)
 getNodeValue self
-  = liftIO
-      (fromMaybeJSString <$> (js_getNodeValue (unNode (toNode self))))
+  = liftIO (fromMaybeJSString <$> (js_getNodeValue (toNode self)))
  
 foreign import javascript unsafe "$1[\"nodeType\"]" js_getNodeType
-        :: JSRef Node -> IO Word
+        :: Node -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Node.nodeType Mozilla Node.nodeType documentation> 
 getNodeType :: (MonadIO m, IsNode self) => self -> m Word
-getNodeType self = liftIO (js_getNodeType (unNode (toNode self)))
+getNodeType self = liftIO (js_getNodeType (toNode self))
  
 foreign import javascript unsafe "$1[\"parentNode\"]"
-        js_getParentNode :: JSRef Node -> IO (JSRef Node)
+        js_getParentNode :: Node -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Node.parentNode Mozilla Node.parentNode documentation> 
 getParentNode :: (MonadIO m, IsNode self) => self -> m (Maybe Node)
 getParentNode self
-  = liftIO ((js_getParentNode (unNode (toNode self))) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getParentNode (toNode self)))
  
 foreign import javascript unsafe "$1[\"childNodes\"]"
-        js_getChildNodes :: JSRef Node -> IO (JSRef NodeList)
+        js_getChildNodes :: Node -> IO (Nullable NodeList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Node.childNodes Mozilla Node.childNodes documentation> 
 getChildNodes ::
               (MonadIO m, IsNode self) => self -> m (Maybe NodeList)
 getChildNodes self
-  = liftIO ((js_getChildNodes (unNode (toNode self))) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getChildNodes (toNode self)))
  
 foreign import javascript unsafe "$1[\"firstChild\"]"
-        js_getFirstChild :: JSRef Node -> IO (JSRef Node)
+        js_getFirstChild :: Node -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Node.firstChild Mozilla Node.firstChild documentation> 
 getFirstChild :: (MonadIO m, IsNode self) => self -> m (Maybe Node)
 getFirstChild self
-  = liftIO ((js_getFirstChild (unNode (toNode self))) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getFirstChild (toNode self)))
  
 foreign import javascript unsafe "$1[\"lastChild\"]"
-        js_getLastChild :: JSRef Node -> IO (JSRef Node)
+        js_getLastChild :: Node -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Node.lastChild Mozilla Node.lastChild documentation> 
 getLastChild :: (MonadIO m, IsNode self) => self -> m (Maybe Node)
 getLastChild self
-  = liftIO ((js_getLastChild (unNode (toNode self))) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getLastChild (toNode self)))
  
 foreign import javascript unsafe "$1[\"previousSibling\"]"
-        js_getPreviousSibling :: JSRef Node -> IO (JSRef Node)
+        js_getPreviousSibling :: Node -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Node.previousSibling Mozilla Node.previousSibling documentation> 
 getPreviousSibling ::
                    (MonadIO m, IsNode self) => self -> m (Maybe Node)
 getPreviousSibling self
   = liftIO
-      ((js_getPreviousSibling (unNode (toNode self))) >>= fromJSRef)
+      (nullableToMaybe <$> (js_getPreviousSibling (toNode self)))
  
 foreign import javascript unsafe "$1[\"nextSibling\"]"
-        js_getNextSibling :: JSRef Node -> IO (JSRef Node)
+        js_getNextSibling :: Node -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Node.nextSibling Mozilla Node.nextSibling documentation> 
 getNextSibling ::
                (MonadIO m, IsNode self) => self -> m (Maybe Node)
 getNextSibling self
-  = liftIO ((js_getNextSibling (unNode (toNode self))) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getNextSibling (toNode self)))
  
 foreign import javascript unsafe "$1[\"ownerDocument\"]"
-        js_getOwnerDocument :: JSRef Node -> IO (JSRef Document)
+        js_getOwnerDocument :: Node -> IO (Nullable Document)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Node.ownerDocument Mozilla Node.ownerDocument documentation> 
 getOwnerDocument ::
                  (MonadIO m, IsNode self) => self -> m (Maybe Document)
 getOwnerDocument self
-  = liftIO
-      ((js_getOwnerDocument (unNode (toNode self))) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getOwnerDocument (toNode self)))
  
 foreign import javascript unsafe "$1[\"namespaceURI\"]"
-        js_getNamespaceURI :: JSRef Node -> IO (JSRef (Maybe JSString))
+        js_getNamespaceURI :: Node -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Node.namespaceURI Mozilla Node.namespaceURI documentation> 
 getNamespaceURI ::
                 (MonadIO m, IsNode self, FromJSString result) =>
                   self -> m (Maybe result)
 getNamespaceURI self
-  = liftIO
-      (fromMaybeJSString <$> (js_getNamespaceURI (unNode (toNode self))))
+  = liftIO (fromMaybeJSString <$> (js_getNamespaceURI (toNode self)))
  
 foreign import javascript unsafe "$1[\"prefix\"] = $2;"
-        js_setPrefix :: JSRef Node -> JSRef (Maybe JSString) -> IO ()
+        js_setPrefix :: Node -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Node.prefix Mozilla Node.prefix documentation> 
 setPrefix ::
           (MonadIO m, IsNode self, ToJSString val) =>
             self -> Maybe val -> m ()
 setPrefix self val
-  = liftIO
-      (js_setPrefix (unNode (toNode self)) (toMaybeJSString val))
+  = liftIO (js_setPrefix (toNode self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"prefix\"]" js_getPrefix ::
-        JSRef Node -> IO (JSRef (Maybe JSString))
+        Node -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Node.prefix Mozilla Node.prefix documentation> 
 getPrefix ::
           (MonadIO m, IsNode self, FromJSString result) =>
             self -> m (Maybe result)
 getPrefix self
-  = liftIO
-      (fromMaybeJSString <$> (js_getPrefix (unNode (toNode self))))
+  = liftIO (fromMaybeJSString <$> (js_getPrefix (toNode self)))
  
 foreign import javascript unsafe "$1[\"localName\"]"
-        js_getLocalName :: JSRef Node -> IO (JSRef (Maybe JSString))
+        js_getLocalName :: Node -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Node.localName Mozilla Node.localName documentation> 
 getLocalName ::
              (MonadIO m, IsNode self, FromJSString result) =>
                self -> m (Maybe result)
 getLocalName self
-  = liftIO
-      (fromMaybeJSString <$> (js_getLocalName (unNode (toNode self))))
+  = liftIO (fromMaybeJSString <$> (js_getLocalName (toNode self)))
  
 foreign import javascript unsafe "$1[\"baseURI\"]" js_getBaseURI ::
-        JSRef Node -> IO (JSRef (Maybe JSString))
+        Node -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Node.baseURI Mozilla Node.baseURI documentation> 
 getBaseURI ::
            (MonadIO m, IsNode self, FromJSString result) =>
              self -> m (Maybe result)
 getBaseURI self
-  = liftIO
-      (fromMaybeJSString <$> (js_getBaseURI (unNode (toNode self))))
+  = liftIO (fromMaybeJSString <$> (js_getBaseURI (toNode self)))
  
 foreign import javascript unsafe "$1[\"textContent\"] = $2;"
-        js_setTextContent :: JSRef Node -> JSRef (Maybe JSString) -> IO ()
+        js_setTextContent :: Node -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Node.textContent Mozilla Node.textContent documentation> 
 setTextContent ::
                (MonadIO m, IsNode self, ToJSString val) =>
                  self -> Maybe val -> m ()
 setTextContent self val
-  = liftIO
-      (js_setTextContent (unNode (toNode self)) (toMaybeJSString val))
+  = liftIO (js_setTextContent (toNode self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"textContent\"]"
-        js_getTextContent :: JSRef Node -> IO (JSRef (Maybe JSString))
+        js_getTextContent :: Node -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Node.textContent Mozilla Node.textContent documentation> 
 getTextContent ::
                (MonadIO m, IsNode self, FromJSString result) =>
                  self -> m (Maybe result)
 getTextContent self
-  = liftIO
-      (fromMaybeJSString <$> (js_getTextContent (unNode (toNode self))))
+  = liftIO (fromMaybeJSString <$> (js_getTextContent (toNode self)))
  
 foreign import javascript unsafe "$1[\"parentElement\"]"
-        js_getParentElement :: JSRef Node -> IO (JSRef Element)
+        js_getParentElement :: Node -> IO (Nullable Element)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Node.parentElement Mozilla Node.parentElement documentation> 
 getParentElement ::
                  (MonadIO m, IsNode self) => self -> m (Maybe Element)
 getParentElement self
-  = liftIO
-      ((js_getParentElement (unNode (toNode self))) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getParentElement (toNode self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/NodeFilter.hs b/src/GHCJS/DOM/JSFFI/Generated/NodeFilter.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/NodeFilter.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/NodeFilter.hs
@@ -12,7 +12,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -26,15 +26,13 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"acceptNode\"]($2)"
-        js_acceptNode :: JSRef NodeFilter -> JSRef Node -> IO Int
+        js_acceptNode :: NodeFilter -> Nullable Node -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/NodeFilter.acceptNode Mozilla NodeFilter.acceptNode documentation> 
 acceptNode ::
            (MonadIO m, IsNode n) => NodeFilter -> Maybe n -> m Int
 acceptNode self n
-  = liftIO
-      (js_acceptNode (unNodeFilter self)
-         (maybe jsNull (unNode . toNode) n))
+  = liftIO (js_acceptNode (self) (maybeToNullable (fmap toNode n)))
 pattern FILTER_ACCEPT = 1
 pattern FILTER_REJECT = 2
 pattern FILTER_SKIP = 3
diff --git a/src/GHCJS/DOM/JSFFI/Generated/NodeIterator.hs b/src/GHCJS/DOM/JSFFI/Generated/NodeIterator.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/NodeIterator.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/NodeIterator.hs
@@ -9,7 +9,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -23,76 +23,71 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"nextNode\"]()" js_nextNode
-        :: JSRef NodeIterator -> IO (JSRef Node)
+        :: NodeIterator -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/NodeIterator.nextNode Mozilla NodeIterator.nextNode documentation> 
 nextNode :: (MonadIO m) => NodeIterator -> m (Maybe Node)
-nextNode self
-  = liftIO ((js_nextNode (unNodeIterator self)) >>= fromJSRef)
+nextNode self = liftIO (nullableToMaybe <$> (js_nextNode (self)))
  
 foreign import javascript unsafe "$1[\"previousNode\"]()"
-        js_previousNode :: JSRef NodeIterator -> IO (JSRef Node)
+        js_previousNode :: NodeIterator -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/NodeIterator.previousNode Mozilla NodeIterator.previousNode documentation> 
 previousNode :: (MonadIO m) => NodeIterator -> m (Maybe Node)
 previousNode self
-  = liftIO ((js_previousNode (unNodeIterator self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_previousNode (self)))
  
 foreign import javascript unsafe "$1[\"detach\"]()" js_detach ::
-        JSRef NodeIterator -> IO ()
+        NodeIterator -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/NodeIterator.detach Mozilla NodeIterator.detach documentation> 
 detach :: (MonadIO m) => NodeIterator -> m ()
-detach self = liftIO (js_detach (unNodeIterator self))
+detach self = liftIO (js_detach (self))
  
 foreign import javascript unsafe "$1[\"root\"]" js_getRoot ::
-        JSRef NodeIterator -> IO (JSRef Node)
+        NodeIterator -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/NodeIterator.root Mozilla NodeIterator.root documentation> 
 getRoot :: (MonadIO m) => NodeIterator -> m (Maybe Node)
-getRoot self
-  = liftIO ((js_getRoot (unNodeIterator self)) >>= fromJSRef)
+getRoot self = liftIO (nullableToMaybe <$> (js_getRoot (self)))
  
 foreign import javascript unsafe "$1[\"whatToShow\"]"
-        js_getWhatToShow :: JSRef NodeIterator -> IO Word
+        js_getWhatToShow :: NodeIterator -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/NodeIterator.whatToShow Mozilla NodeIterator.whatToShow documentation> 
 getWhatToShow :: (MonadIO m) => NodeIterator -> m Word
-getWhatToShow self
-  = liftIO (js_getWhatToShow (unNodeIterator self))
+getWhatToShow self = liftIO (js_getWhatToShow (self))
  
 foreign import javascript unsafe "$1[\"filter\"]" js_getFilter ::
-        JSRef NodeIterator -> IO (JSRef NodeFilter)
+        NodeIterator -> IO (Nullable NodeFilter)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/NodeIterator.filter Mozilla NodeIterator.filter documentation> 
 getFilter :: (MonadIO m) => NodeIterator -> m (Maybe NodeFilter)
-getFilter self
-  = liftIO ((js_getFilter (unNodeIterator self)) >>= fromJSRef)
+getFilter self = liftIO (nullableToMaybe <$> (js_getFilter (self)))
  
 foreign import javascript unsafe
         "($1[\"expandEntityReferences\"] ? 1 : 0)"
-        js_getExpandEntityReferences :: JSRef NodeIterator -> IO Bool
+        js_getExpandEntityReferences :: NodeIterator -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/NodeIterator.expandEntityReferences Mozilla NodeIterator.expandEntityReferences documentation> 
 getExpandEntityReferences :: (MonadIO m) => NodeIterator -> m Bool
 getExpandEntityReferences self
-  = liftIO (js_getExpandEntityReferences (unNodeIterator self))
+  = liftIO (js_getExpandEntityReferences (self))
  
 foreign import javascript unsafe "$1[\"referenceNode\"]"
-        js_getReferenceNode :: JSRef NodeIterator -> IO (JSRef Node)
+        js_getReferenceNode :: NodeIterator -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/NodeIterator.referenceNode Mozilla NodeIterator.referenceNode documentation> 
 getReferenceNode :: (MonadIO m) => NodeIterator -> m (Maybe Node)
 getReferenceNode self
-  = liftIO
-      ((js_getReferenceNode (unNodeIterator self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getReferenceNode (self)))
  
 foreign import javascript unsafe
         "($1[\"pointerBeforeReferenceNode\"] ? 1 : 0)"
-        js_getPointerBeforeReferenceNode :: JSRef NodeIterator -> IO Bool
+        js_getPointerBeforeReferenceNode :: NodeIterator -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/NodeIterator.pointerBeforeReferenceNode Mozilla NodeIterator.pointerBeforeReferenceNode documentation> 
 getPointerBeforeReferenceNode ::
                               (MonadIO m) => NodeIterator -> m Bool
 getPointerBeforeReferenceNode self
-  = liftIO (js_getPointerBeforeReferenceNode (unNodeIterator self))
+  = liftIO (js_getPointerBeforeReferenceNode (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/NodeList.hs b/src/GHCJS/DOM/JSFFI/Generated/NodeList.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/NodeList.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/NodeList.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,19 +19,17 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"item\"]($2)" js_item ::
-        JSRef NodeList -> Word -> IO (JSRef Node)
+        NodeList -> Word -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/NodeList.item Mozilla NodeList.item documentation> 
 item ::
      (MonadIO m, IsNodeList self) => self -> Word -> m (Maybe Node)
 item self index
-  = liftIO
-      ((js_item (unNodeList (toNodeList self)) index) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_item (toNodeList self) index))
  
 foreign import javascript unsafe "$1[\"length\"]" js_getLength ::
-        JSRef NodeList -> IO Word
+        NodeList -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/NodeList.length Mozilla NodeList.length documentation> 
 getLength :: (MonadIO m, IsNodeList self) => self -> m Word
-getLength self
-  = liftIO (js_getLength (unNodeList (toNodeList self)))
+getLength self = liftIO (js_getLength (toNodeList self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/Notification.hs b/src/GHCJS/DOM/JSFFI/Generated/Notification.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/Notification.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/Notification.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,11 +19,11 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"show\"]()" js_show ::
-        JSRef Notification -> IO ()
+        Notification -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Notification.show Mozilla Notification.show documentation> 
 show :: (MonadIO m) => Notification -> m ()
-show self = liftIO (js_show (unNotification self))
+show self = liftIO (js_show (self))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Notification.onshow Mozilla Notification.onshow documentation> 
 showEvent :: EventName Notification MouseEvent
diff --git a/src/GHCJS/DOM/JSFFI/Generated/NotificationCenter.hs b/src/GHCJS/DOM/JSFFI/Generated/NotificationCenter.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/NotificationCenter.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/NotificationCenter.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -22,8 +22,8 @@
  
 foreign import javascript unsafe
         "$1[\"createNotification\"]($2, $3,\n$4)" js_createNotification ::
-        JSRef NotificationCenter ->
-          JSString -> JSString -> JSString -> IO (JSRef Notification)
+        NotificationCenter ->
+          JSString -> JSString -> JSString -> IO (Nullable Notification)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/NotificationCenter.createNotification Mozilla NotificationCenter.createNotification documentation> 
 createNotification ::
@@ -33,28 +33,24 @@
                        iconUrl -> title -> body -> m (Maybe Notification)
 createNotification self iconUrl title body
   = liftIO
-      ((js_createNotification (unNotificationCenter self)
-          (toJSString iconUrl)
-          (toJSString title)
-          (toJSString body))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createNotification (self) (toJSString iconUrl)
+            (toJSString title)
+            (toJSString body)))
  
 foreign import javascript unsafe "$1[\"checkPermission\"]()"
-        js_checkPermission :: JSRef NotificationCenter -> IO Int
+        js_checkPermission :: NotificationCenter -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/NotificationCenter.checkPermission Mozilla NotificationCenter.checkPermission documentation> 
 checkPermission :: (MonadIO m) => NotificationCenter -> m Int
-checkPermission self
-  = liftIO (js_checkPermission (unNotificationCenter self))
+checkPermission self = liftIO (js_checkPermission (self))
  
 foreign import javascript unsafe "$1[\"requestPermission\"]($2)"
         js_requestPermission ::
-        JSRef NotificationCenter -> JSRef VoidCallback -> IO ()
+        NotificationCenter -> Nullable VoidCallback -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/NotificationCenter.requestPermission Mozilla NotificationCenter.requestPermission documentation> 
 requestPermission ::
                   (MonadIO m) => NotificationCenter -> Maybe VoidCallback -> m ()
 requestPermission self callback
-  = liftIO
-      (js_requestPermission (unNotificationCenter self)
-         (maybe jsNull pToJSRef callback))
+  = liftIO (js_requestPermission (self) (maybeToNullable callback))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/NotificationPermissionCallback.hs b/src/GHCJS/DOM/JSFFI/Generated/NotificationPermissionCallback.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/NotificationPermissionCallback.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/NotificationPermissionCallback.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -27,10 +27,11 @@
                                       m (NotificationPermissionCallback permission)
 newNotificationPermissionCallback callback
   = liftIO
-      (syncCallback1 ThrowWouldBlock
-         (\ permission ->
-            fromJSRefUnchecked permission >>=
-              \ permission' -> callback permission'))
+      (NotificationPermissionCallback <$>
+         syncCallback1 ThrowWouldBlock
+           (\ permission ->
+              fromJSRefUnchecked permission >>=
+                \ permission' -> callback permission'))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/NotificationPermissionCallback Mozilla NotificationPermissionCallback documentation> 
 newNotificationPermissionCallbackSync ::
@@ -39,10 +40,11 @@
                                           m (NotificationPermissionCallback permission)
 newNotificationPermissionCallbackSync callback
   = liftIO
-      (syncCallback1 ContinueAsync
-         (\ permission ->
-            fromJSRefUnchecked permission >>=
-              \ permission' -> callback permission'))
+      (NotificationPermissionCallback <$>
+         syncCallback1 ContinueAsync
+           (\ permission ->
+              fromJSRefUnchecked permission >>=
+                \ permission' -> callback permission'))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/NotificationPermissionCallback Mozilla NotificationPermissionCallback documentation> 
 newNotificationPermissionCallbackAsync ::
@@ -51,7 +53,8 @@
                                            m (NotificationPermissionCallback permission)
 newNotificationPermissionCallbackAsync callback
   = liftIO
-      (asyncCallback1
-         (\ permission ->
-            fromJSRefUnchecked permission >>=
-              \ permission' -> callback permission'))
+      (NotificationPermissionCallback <$>
+         asyncCallback1
+           (\ permission ->
+              fromJSRefUnchecked permission >>=
+                \ permission' -> callback permission'))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/OESStandardDerivatives.hs b/src/GHCJS/DOM/JSFFI/Generated/OESStandardDerivatives.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/OESStandardDerivatives.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/OESStandardDerivatives.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/OESTextureHalfFloat.hs b/src/GHCJS/DOM/JSFFI/Generated/OESTextureHalfFloat.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/OESTextureHalfFloat.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/OESTextureHalfFloat.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/OESVertexArrayObject.hs b/src/GHCJS/DOM/JSFFI/Generated/OESVertexArrayObject.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/OESVertexArrayObject.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/OESVertexArrayObject.hs
@@ -8,7 +8,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -23,21 +23,18 @@
  
 foreign import javascript unsafe "$1[\"createVertexArrayOES\"]()"
         js_createVertexArrayOES ::
-        JSRef OESVertexArrayObject -> IO (JSRef WebGLVertexArrayObjectOES)
+        OESVertexArrayObject -> IO (Nullable WebGLVertexArrayObjectOES)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/OESVertexArrayObject.createVertexArrayOES Mozilla OESVertexArrayObject.createVertexArrayOES documentation> 
 createVertexArrayOES ::
                      (MonadIO m) =>
                        OESVertexArrayObject -> m (Maybe WebGLVertexArrayObjectOES)
 createVertexArrayOES self
-  = liftIO
-      ((js_createVertexArrayOES (unOESVertexArrayObject self)) >>=
-         fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_createVertexArrayOES (self)))
  
 foreign import javascript unsafe "$1[\"deleteVertexArrayOES\"]($2)"
         js_deleteVertexArrayOES ::
-        JSRef OESVertexArrayObject ->
-          JSRef WebGLVertexArrayObjectOES -> IO ()
+        OESVertexArrayObject -> Nullable WebGLVertexArrayObjectOES -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/OESVertexArrayObject.deleteVertexArrayOES Mozilla OESVertexArrayObject.deleteVertexArrayOES documentation> 
 deleteVertexArrayOES ::
@@ -45,27 +42,23 @@
                        OESVertexArrayObject -> Maybe WebGLVertexArrayObjectOES -> m ()
 deleteVertexArrayOES self arrayObject
   = liftIO
-      (js_deleteVertexArrayOES (unOESVertexArrayObject self)
-         (maybe jsNull pToJSRef arrayObject))
+      (js_deleteVertexArrayOES (self) (maybeToNullable arrayObject))
  
 foreign import javascript unsafe
         "($1[\"isVertexArrayOES\"]($2) ? 1 : 0)" js_isVertexArrayOES ::
-        JSRef OESVertexArrayObject ->
-          JSRef WebGLVertexArrayObjectOES -> IO Bool
+        OESVertexArrayObject ->
+          Nullable WebGLVertexArrayObjectOES -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/OESVertexArrayObject.isVertexArrayOES Mozilla OESVertexArrayObject.isVertexArrayOES documentation> 
 isVertexArrayOES ::
                  (MonadIO m) =>
                    OESVertexArrayObject -> Maybe WebGLVertexArrayObjectOES -> m Bool
 isVertexArrayOES self arrayObject
-  = liftIO
-      (js_isVertexArrayOES (unOESVertexArrayObject self)
-         (maybe jsNull pToJSRef arrayObject))
+  = liftIO (js_isVertexArrayOES (self) (maybeToNullable arrayObject))
  
 foreign import javascript unsafe "$1[\"bindVertexArrayOES\"]($2)"
         js_bindVertexArrayOES ::
-        JSRef OESVertexArrayObject ->
-          JSRef WebGLVertexArrayObjectOES -> IO ()
+        OESVertexArrayObject -> Nullable WebGLVertexArrayObjectOES -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/OESVertexArrayObject.bindVertexArrayOES Mozilla OESVertexArrayObject.bindVertexArrayOES documentation> 
 bindVertexArrayOES ::
@@ -73,6 +66,5 @@
                      OESVertexArrayObject -> Maybe WebGLVertexArrayObjectOES -> m ()
 bindVertexArrayOES self arrayObject
   = liftIO
-      (js_bindVertexArrayOES (unOESVertexArrayObject self)
-         (maybe jsNull pToJSRef arrayObject))
+      (js_bindVertexArrayOES (self) (maybeToNullable arrayObject))
 pattern VERTEX_ARRAY_BINDING_OES = 34229
diff --git a/src/GHCJS/DOM/JSFFI/Generated/OfflineAudioCompletionEvent.hs b/src/GHCJS/DOM/JSFFI/Generated/OfflineAudioCompletionEvent.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/OfflineAudioCompletionEvent.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/OfflineAudioCompletionEvent.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -21,12 +21,10 @@
  
 foreign import javascript unsafe "$1[\"renderedBuffer\"]"
         js_getRenderedBuffer ::
-        JSRef OfflineAudioCompletionEvent -> IO (JSRef AudioBuffer)
+        OfflineAudioCompletionEvent -> IO (Nullable AudioBuffer)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/OfflineAudioCompletionEvent.renderedBuffer Mozilla OfflineAudioCompletionEvent.renderedBuffer documentation> 
 getRenderedBuffer ::
                   (MonadIO m) => OfflineAudioCompletionEvent -> m (Maybe AudioBuffer)
 getRenderedBuffer self
-  = liftIO
-      ((js_getRenderedBuffer (unOfflineAudioCompletionEvent self)) >>=
-         fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getRenderedBuffer (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/OfflineAudioContext.hs b/src/GHCJS/DOM/JSFFI/Generated/OfflineAudioContext.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/OfflineAudioContext.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/OfflineAudioContext.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -22,7 +22,7 @@
 foreign import javascript unsafe
         "new window[\"OfflineAudioContext\"]($1,\n$2, $3)"
         js_newOfflineAudioContext ::
-        Word -> Word -> Float -> IO (JSRef OfflineAudioContext)
+        Word -> Word -> Float -> IO OfflineAudioContext
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/OfflineAudioContext Mozilla OfflineAudioContext documentation> 
 newOfflineAudioContext ::
@@ -30,5 +30,4 @@
 newOfflineAudioContext numberOfChannels numberOfFrames sampleRate
   = liftIO
       (js_newOfflineAudioContext numberOfChannels numberOfFrames
-         sampleRate
-         >>= fromJSRefUnchecked)
+         sampleRate)
diff --git a/src/GHCJS/DOM/JSFFI/Generated/OscillatorNode.hs b/src/GHCJS/DOM/JSFFI/Generated/OscillatorNode.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/OscillatorNode.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/OscillatorNode.hs
@@ -11,7 +11,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -25,45 +25,42 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"start\"]($2)" js_start ::
-        JSRef OscillatorNode -> Double -> IO ()
+        OscillatorNode -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/OscillatorNode.start Mozilla OscillatorNode.start documentation> 
 start :: (MonadIO m) => OscillatorNode -> Double -> m ()
-start self when = liftIO (js_start (unOscillatorNode self) when)
+start self when = liftIO (js_start (self) when)
  
 foreign import javascript unsafe "$1[\"stop\"]($2)" js_stop ::
-        JSRef OscillatorNode -> Double -> IO ()
+        OscillatorNode -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/OscillatorNode.stop Mozilla OscillatorNode.stop documentation> 
 stop :: (MonadIO m) => OscillatorNode -> Double -> m ()
-stop self when = liftIO (js_stop (unOscillatorNode self) when)
+stop self when = liftIO (js_stop (self) when)
  
 foreign import javascript unsafe "$1[\"noteOn\"]($2)" js_noteOn ::
-        JSRef OscillatorNode -> Double -> IO ()
+        OscillatorNode -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/OscillatorNode.noteOn Mozilla OscillatorNode.noteOn documentation> 
 noteOn :: (MonadIO m) => OscillatorNode -> Double -> m ()
-noteOn self when = liftIO (js_noteOn (unOscillatorNode self) when)
+noteOn self when = liftIO (js_noteOn (self) when)
  
 foreign import javascript unsafe "$1[\"noteOff\"]($2)" js_noteOff
-        :: JSRef OscillatorNode -> Double -> IO ()
+        :: OscillatorNode -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/OscillatorNode.noteOff Mozilla OscillatorNode.noteOff documentation> 
 noteOff :: (MonadIO m) => OscillatorNode -> Double -> m ()
-noteOff self when
-  = liftIO (js_noteOff (unOscillatorNode self) when)
+noteOff self when = liftIO (js_noteOff (self) when)
  
 foreign import javascript unsafe "$1[\"setPeriodicWave\"]($2)"
         js_setPeriodicWave ::
-        JSRef OscillatorNode -> JSRef PeriodicWave -> IO ()
+        OscillatorNode -> Nullable PeriodicWave -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/OscillatorNode.setPeriodicWave Mozilla OscillatorNode.setPeriodicWave documentation> 
 setPeriodicWave ::
                 (MonadIO m) => OscillatorNode -> Maybe PeriodicWave -> m ()
 setPeriodicWave self wave
-  = liftIO
-      (js_setPeriodicWave (unOscillatorNode self)
-         (maybe jsNull pToJSRef wave))
+  = liftIO (js_setPeriodicWave (self) (maybeToNullable wave))
 pattern SINE = 0
 pattern SQUARE = 1
 pattern SAWTOOTH = 2
@@ -75,47 +72,43 @@
 pattern FINISHED_STATE = 3
  
 foreign import javascript unsafe "$1[\"type\"] = $2;" js_setType ::
-        JSRef OscillatorNode -> JSString -> IO ()
+        OscillatorNode -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/OscillatorNode.type Mozilla OscillatorNode.type documentation> 
 setType ::
         (MonadIO m, ToJSString val) => OscillatorNode -> val -> m ()
-setType self val
-  = liftIO (js_setType (unOscillatorNode self) (toJSString val))
+setType self val = liftIO (js_setType (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"type\"]" js_getType ::
-        JSRef OscillatorNode -> IO JSString
+        OscillatorNode -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/OscillatorNode.type Mozilla OscillatorNode.type documentation> 
 getType ::
         (MonadIO m, FromJSString result) => OscillatorNode -> m result
-getType self
-  = liftIO (fromJSString <$> (js_getType (unOscillatorNode self)))
+getType self = liftIO (fromJSString <$> (js_getType (self)))
  
 foreign import javascript unsafe "$1[\"playbackState\"]"
-        js_getPlaybackState :: JSRef OscillatorNode -> IO Word
+        js_getPlaybackState :: OscillatorNode -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/OscillatorNode.playbackState Mozilla OscillatorNode.playbackState documentation> 
 getPlaybackState :: (MonadIO m) => OscillatorNode -> m Word
-getPlaybackState self
-  = liftIO (js_getPlaybackState (unOscillatorNode self))
+getPlaybackState self = liftIO (js_getPlaybackState (self))
  
 foreign import javascript unsafe "$1[\"frequency\"]"
-        js_getFrequency :: JSRef OscillatorNode -> IO (JSRef AudioParam)
+        js_getFrequency :: OscillatorNode -> IO (Nullable AudioParam)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/OscillatorNode.frequency Mozilla OscillatorNode.frequency documentation> 
 getFrequency ::
              (MonadIO m) => OscillatorNode -> m (Maybe AudioParam)
 getFrequency self
-  = liftIO ((js_getFrequency (unOscillatorNode self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getFrequency (self)))
  
 foreign import javascript unsafe "$1[\"detune\"]" js_getDetune ::
-        JSRef OscillatorNode -> IO (JSRef AudioParam)
+        OscillatorNode -> IO (Nullable AudioParam)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/OscillatorNode.detune Mozilla OscillatorNode.detune documentation> 
 getDetune :: (MonadIO m) => OscillatorNode -> m (Maybe AudioParam)
-getDetune self
-  = liftIO ((js_getDetune (unOscillatorNode self)) >>= fromJSRef)
+getDetune self = liftIO (nullableToMaybe <$> (js_getDetune (self)))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/OscillatorNode.onended Mozilla OscillatorNode.onended documentation> 
 ended :: EventName OscillatorNode Event
diff --git a/src/GHCJS/DOM/JSFFI/Generated/OverflowEvent.hs b/src/GHCJS/DOM/JSFFI/Generated/OverflowEvent.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/OverflowEvent.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/OverflowEvent.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -24,26 +24,25 @@
 pattern BOTH = 2
  
 foreign import javascript unsafe "$1[\"orient\"]" js_getOrient ::
-        JSRef OverflowEvent -> IO Word
+        OverflowEvent -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/OverflowEvent.orient Mozilla OverflowEvent.orient documentation> 
 getOrient :: (MonadIO m) => OverflowEvent -> m Word
-getOrient self = liftIO (js_getOrient (unOverflowEvent self))
+getOrient self = liftIO (js_getOrient (self))
  
 foreign import javascript unsafe
         "($1[\"horizontalOverflow\"] ? 1 : 0)" js_getHorizontalOverflow ::
-        JSRef OverflowEvent -> IO Bool
+        OverflowEvent -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/OverflowEvent.horizontalOverflow Mozilla OverflowEvent.horizontalOverflow documentation> 
 getHorizontalOverflow :: (MonadIO m) => OverflowEvent -> m Bool
 getHorizontalOverflow self
-  = liftIO (js_getHorizontalOverflow (unOverflowEvent self))
+  = liftIO (js_getHorizontalOverflow (self))
  
 foreign import javascript unsafe
         "($1[\"verticalOverflow\"] ? 1 : 0)" js_getVerticalOverflow ::
-        JSRef OverflowEvent -> IO Bool
+        OverflowEvent -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/OverflowEvent.verticalOverflow Mozilla OverflowEvent.verticalOverflow documentation> 
 getVerticalOverflow :: (MonadIO m) => OverflowEvent -> m Bool
-getVerticalOverflow self
-  = liftIO (js_getVerticalOverflow (unOverflowEvent self))
+getVerticalOverflow self = liftIO (js_getVerticalOverflow (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/PageTransitionEvent.hs b/src/GHCJS/DOM/JSFFI/Generated/PageTransitionEvent.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/PageTransitionEvent.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/PageTransitionEvent.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,9 +19,8 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "($1[\"persisted\"] ? 1 : 0)"
-        js_getPersisted :: JSRef PageTransitionEvent -> IO Bool
+        js_getPersisted :: PageTransitionEvent -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/PageTransitionEvent.persisted Mozilla PageTransitionEvent.persisted documentation> 
 getPersisted :: (MonadIO m) => PageTransitionEvent -> m Bool
-getPersisted self
-  = liftIO (js_getPersisted (unPageTransitionEvent self))
+getPersisted self = liftIO (js_getPersisted (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/PannerNode.hs b/src/GHCJS/DOM/JSFFI/Generated/PannerNode.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/PannerNode.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/PannerNode.hs
@@ -19,7 +19,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -33,34 +33,29 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"setPosition\"]($2, $3, $4)"
-        js_setPosition ::
-        JSRef PannerNode -> Float -> Float -> Float -> IO ()
+        js_setPosition :: PannerNode -> Float -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/webkitAudioPannerNode.setPosition Mozilla webkitAudioPannerNode.setPosition documentation> 
 setPosition ::
             (MonadIO m) => PannerNode -> Float -> Float -> Float -> m ()
-setPosition self x y z
-  = liftIO (js_setPosition (unPannerNode self) x y z)
+setPosition self x y z = liftIO (js_setPosition (self) x y z)
  
 foreign import javascript unsafe
         "$1[\"setOrientation\"]($2, $3, $4)" js_setOrientation ::
-        JSRef PannerNode -> Float -> Float -> Float -> IO ()
+        PannerNode -> Float -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/webkitAudioPannerNode.setOrientation Mozilla webkitAudioPannerNode.setOrientation documentation> 
 setOrientation ::
                (MonadIO m) => PannerNode -> Float -> Float -> Float -> m ()
-setOrientation self x y z
-  = liftIO (js_setOrientation (unPannerNode self) x y z)
+setOrientation self x y z = liftIO (js_setOrientation (self) x y z)
  
 foreign import javascript unsafe "$1[\"setVelocity\"]($2, $3, $4)"
-        js_setVelocity ::
-        JSRef PannerNode -> Float -> Float -> Float -> IO ()
+        js_setVelocity :: PannerNode -> Float -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/webkitAudioPannerNode.setVelocity Mozilla webkitAudioPannerNode.setVelocity documentation> 
 setVelocity ::
             (MonadIO m) => PannerNode -> Float -> Float -> Float -> m ()
-setVelocity self x y z
-  = liftIO (js_setVelocity (unPannerNode self) x y z)
+setVelocity self x y z = liftIO (js_setVelocity (self) x y z)
 pattern EQUALPOWER = 0
 pattern HRTF = 1
 pattern SOUNDFIELD = 2
@@ -69,135 +64,123 @@
 pattern EXPONENTIAL_DISTANCE = 2
  
 foreign import javascript unsafe "$1[\"panningModel\"] = $2;"
-        js_setPanningModel :: JSRef PannerNode -> JSString -> IO ()
+        js_setPanningModel :: PannerNode -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/webkitAudioPannerNode.panningModel Mozilla webkitAudioPannerNode.panningModel documentation> 
 setPanningModel ::
                 (MonadIO m, ToJSString val) => PannerNode -> val -> m ()
 setPanningModel self val
-  = liftIO (js_setPanningModel (unPannerNode self) (toJSString val))
+  = liftIO (js_setPanningModel (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"panningModel\"]"
-        js_getPanningModel :: JSRef PannerNode -> IO JSString
+        js_getPanningModel :: PannerNode -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/webkitAudioPannerNode.panningModel Mozilla webkitAudioPannerNode.panningModel documentation> 
 getPanningModel ::
                 (MonadIO m, FromJSString result) => PannerNode -> m result
 getPanningModel self
-  = liftIO
-      (fromJSString <$> (js_getPanningModel (unPannerNode self)))
+  = liftIO (fromJSString <$> (js_getPanningModel (self)))
  
 foreign import javascript unsafe "$1[\"distanceModel\"] = $2;"
-        js_setDistanceModel :: JSRef PannerNode -> JSString -> IO ()
+        js_setDistanceModel :: PannerNode -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/webkitAudioPannerNode.distanceModel Mozilla webkitAudioPannerNode.distanceModel documentation> 
 setDistanceModel ::
                  (MonadIO m, ToJSString val) => PannerNode -> val -> m ()
 setDistanceModel self val
-  = liftIO (js_setDistanceModel (unPannerNode self) (toJSString val))
+  = liftIO (js_setDistanceModel (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"distanceModel\"]"
-        js_getDistanceModel :: JSRef PannerNode -> IO JSString
+        js_getDistanceModel :: PannerNode -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/webkitAudioPannerNode.distanceModel Mozilla webkitAudioPannerNode.distanceModel documentation> 
 getDistanceModel ::
                  (MonadIO m, FromJSString result) => PannerNode -> m result
 getDistanceModel self
-  = liftIO
-      (fromJSString <$> (js_getDistanceModel (unPannerNode self)))
+  = liftIO (fromJSString <$> (js_getDistanceModel (self)))
  
 foreign import javascript unsafe "$1[\"refDistance\"] = $2;"
-        js_setRefDistance :: JSRef PannerNode -> Double -> IO ()
+        js_setRefDistance :: PannerNode -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/webkitAudioPannerNode.refDistance Mozilla webkitAudioPannerNode.refDistance documentation> 
 setRefDistance :: (MonadIO m) => PannerNode -> Double -> m ()
-setRefDistance self val
-  = liftIO (js_setRefDistance (unPannerNode self) val)
+setRefDistance self val = liftIO (js_setRefDistance (self) val)
  
 foreign import javascript unsafe "$1[\"refDistance\"]"
-        js_getRefDistance :: JSRef PannerNode -> IO Double
+        js_getRefDistance :: PannerNode -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/webkitAudioPannerNode.refDistance Mozilla webkitAudioPannerNode.refDistance documentation> 
 getRefDistance :: (MonadIO m) => PannerNode -> m Double
-getRefDistance self
-  = liftIO (js_getRefDistance (unPannerNode self))
+getRefDistance self = liftIO (js_getRefDistance (self))
  
 foreign import javascript unsafe "$1[\"maxDistance\"] = $2;"
-        js_setMaxDistance :: JSRef PannerNode -> Double -> IO ()
+        js_setMaxDistance :: PannerNode -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/webkitAudioPannerNode.maxDistance Mozilla webkitAudioPannerNode.maxDistance documentation> 
 setMaxDistance :: (MonadIO m) => PannerNode -> Double -> m ()
-setMaxDistance self val
-  = liftIO (js_setMaxDistance (unPannerNode self) val)
+setMaxDistance self val = liftIO (js_setMaxDistance (self) val)
  
 foreign import javascript unsafe "$1[\"maxDistance\"]"
-        js_getMaxDistance :: JSRef PannerNode -> IO Double
+        js_getMaxDistance :: PannerNode -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/webkitAudioPannerNode.maxDistance Mozilla webkitAudioPannerNode.maxDistance documentation> 
 getMaxDistance :: (MonadIO m) => PannerNode -> m Double
-getMaxDistance self
-  = liftIO (js_getMaxDistance (unPannerNode self))
+getMaxDistance self = liftIO (js_getMaxDistance (self))
  
 foreign import javascript unsafe "$1[\"rolloffFactor\"] = $2;"
-        js_setRolloffFactor :: JSRef PannerNode -> Double -> IO ()
+        js_setRolloffFactor :: PannerNode -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/webkitAudioPannerNode.rolloffFactor Mozilla webkitAudioPannerNode.rolloffFactor documentation> 
 setRolloffFactor :: (MonadIO m) => PannerNode -> Double -> m ()
-setRolloffFactor self val
-  = liftIO (js_setRolloffFactor (unPannerNode self) val)
+setRolloffFactor self val = liftIO (js_setRolloffFactor (self) val)
  
 foreign import javascript unsafe "$1[\"rolloffFactor\"]"
-        js_getRolloffFactor :: JSRef PannerNode -> IO Double
+        js_getRolloffFactor :: PannerNode -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/webkitAudioPannerNode.rolloffFactor Mozilla webkitAudioPannerNode.rolloffFactor documentation> 
 getRolloffFactor :: (MonadIO m) => PannerNode -> m Double
-getRolloffFactor self
-  = liftIO (js_getRolloffFactor (unPannerNode self))
+getRolloffFactor self = liftIO (js_getRolloffFactor (self))
  
 foreign import javascript unsafe "$1[\"coneInnerAngle\"] = $2;"
-        js_setConeInnerAngle :: JSRef PannerNode -> Double -> IO ()
+        js_setConeInnerAngle :: PannerNode -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/webkitAudioPannerNode.coneInnerAngle Mozilla webkitAudioPannerNode.coneInnerAngle documentation> 
 setConeInnerAngle :: (MonadIO m) => PannerNode -> Double -> m ()
 setConeInnerAngle self val
-  = liftIO (js_setConeInnerAngle (unPannerNode self) val)
+  = liftIO (js_setConeInnerAngle (self) val)
  
 foreign import javascript unsafe "$1[\"coneInnerAngle\"]"
-        js_getConeInnerAngle :: JSRef PannerNode -> IO Double
+        js_getConeInnerAngle :: PannerNode -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/webkitAudioPannerNode.coneInnerAngle Mozilla webkitAudioPannerNode.coneInnerAngle documentation> 
 getConeInnerAngle :: (MonadIO m) => PannerNode -> m Double
-getConeInnerAngle self
-  = liftIO (js_getConeInnerAngle (unPannerNode self))
+getConeInnerAngle self = liftIO (js_getConeInnerAngle (self))
  
 foreign import javascript unsafe "$1[\"coneOuterAngle\"] = $2;"
-        js_setConeOuterAngle :: JSRef PannerNode -> Double -> IO ()
+        js_setConeOuterAngle :: PannerNode -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/webkitAudioPannerNode.coneOuterAngle Mozilla webkitAudioPannerNode.coneOuterAngle documentation> 
 setConeOuterAngle :: (MonadIO m) => PannerNode -> Double -> m ()
 setConeOuterAngle self val
-  = liftIO (js_setConeOuterAngle (unPannerNode self) val)
+  = liftIO (js_setConeOuterAngle (self) val)
  
 foreign import javascript unsafe "$1[\"coneOuterAngle\"]"
-        js_getConeOuterAngle :: JSRef PannerNode -> IO Double
+        js_getConeOuterAngle :: PannerNode -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/webkitAudioPannerNode.coneOuterAngle Mozilla webkitAudioPannerNode.coneOuterAngle documentation> 
 getConeOuterAngle :: (MonadIO m) => PannerNode -> m Double
-getConeOuterAngle self
-  = liftIO (js_getConeOuterAngle (unPannerNode self))
+getConeOuterAngle self = liftIO (js_getConeOuterAngle (self))
  
 foreign import javascript unsafe "$1[\"coneOuterGain\"] = $2;"
-        js_setConeOuterGain :: JSRef PannerNode -> Double -> IO ()
+        js_setConeOuterGain :: PannerNode -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/webkitAudioPannerNode.coneOuterGain Mozilla webkitAudioPannerNode.coneOuterGain documentation> 
 setConeOuterGain :: (MonadIO m) => PannerNode -> Double -> m ()
-setConeOuterGain self val
-  = liftIO (js_setConeOuterGain (unPannerNode self) val)
+setConeOuterGain self val = liftIO (js_setConeOuterGain (self) val)
  
 foreign import javascript unsafe "$1[\"coneOuterGain\"]"
-        js_getConeOuterGain :: JSRef PannerNode -> IO Double
+        js_getConeOuterGain :: PannerNode -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/webkitAudioPannerNode.coneOuterGain Mozilla webkitAudioPannerNode.coneOuterGain documentation> 
 getConeOuterGain :: (MonadIO m) => PannerNode -> m Double
-getConeOuterGain self
-  = liftIO (js_getConeOuterGain (unPannerNode self))
+getConeOuterGain self = liftIO (js_getConeOuterGain (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/Path2D.hs b/src/GHCJS/DOM/JSFFI/Generated/Path2D.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/Path2D.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/Path2D.hs
@@ -9,7 +9,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -23,76 +23,73 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "new window[\"Path2D\"]()"
-        js_newPath2D :: IO (JSRef Path2D)
+        js_newPath2D :: IO Path2D
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Path2D Mozilla Path2D documentation> 
 newPath2D :: (MonadIO m) => m Path2D
-newPath2D = liftIO (js_newPath2D >>= fromJSRefUnchecked)
+newPath2D = liftIO (js_newPath2D)
  
 foreign import javascript unsafe "new window[\"Path2D\"]($1)"
-        js_newPath2D' :: JSRef Path2D -> IO (JSRef Path2D)
+        js_newPath2D' :: Nullable Path2D -> IO Path2D
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Path2D Mozilla Path2D documentation> 
 newPath2D' :: (MonadIO m) => Maybe Path2D -> m Path2D
-newPath2D' path
-  = liftIO
-      (js_newPath2D' (maybe jsNull pToJSRef path) >>= fromJSRefUnchecked)
+newPath2D' path = liftIO (js_newPath2D' (maybeToNullable path))
  
 foreign import javascript unsafe "new window[\"Path2D\"]($1)"
-        js_newPath2D'' :: JSString -> IO (JSRef Path2D)
+        js_newPath2D'' :: JSString -> IO Path2D
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Path2D Mozilla Path2D documentation> 
 newPath2D'' :: (MonadIO m, ToJSString text) => text -> m Path2D
-newPath2D'' text
-  = liftIO (js_newPath2D'' (toJSString text) >>= fromJSRefUnchecked)
+newPath2D'' text = liftIO (js_newPath2D'' (toJSString text))
  
 foreign import javascript unsafe "$1[\"addPath\"]($2, $3)"
         js_addPath ::
-        JSRef Path2D -> JSRef Path2D -> JSRef SVGMatrix -> IO ()
+        Path2D -> Nullable Path2D -> Nullable SVGMatrix -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Path2D.addPath Mozilla Path2D.addPath documentation> 
 addPath ::
         (MonadIO m) => Path2D -> Maybe Path2D -> Maybe SVGMatrix -> m ()
 addPath self path transform
   = liftIO
-      (js_addPath (unPath2D self) (maybe jsNull pToJSRef path)
-         (maybe jsNull pToJSRef transform))
+      (js_addPath (self) (maybeToNullable path)
+         (maybeToNullable transform))
  
 foreign import javascript unsafe "$1[\"closePath\"]()" js_closePath
-        :: JSRef Path2D -> IO ()
+        :: Path2D -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Path2D.closePath Mozilla Path2D.closePath documentation> 
 closePath :: (MonadIO m) => Path2D -> m ()
-closePath self = liftIO (js_closePath (unPath2D self))
+closePath self = liftIO (js_closePath (self))
  
 foreign import javascript unsafe "$1[\"moveTo\"]($2, $3)" js_moveTo
-        :: JSRef Path2D -> Float -> Float -> IO ()
+        :: Path2D -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Path2D.moveTo Mozilla Path2D.moveTo documentation> 
 moveTo :: (MonadIO m) => Path2D -> Float -> Float -> m ()
-moveTo self x y = liftIO (js_moveTo (unPath2D self) x y)
+moveTo self x y = liftIO (js_moveTo (self) x y)
  
 foreign import javascript unsafe "$1[\"lineTo\"]($2, $3)" js_lineTo
-        :: JSRef Path2D -> Float -> Float -> IO ()
+        :: Path2D -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Path2D.lineTo Mozilla Path2D.lineTo documentation> 
 lineTo :: (MonadIO m) => Path2D -> Float -> Float -> m ()
-lineTo self x y = liftIO (js_lineTo (unPath2D self) x y)
+lineTo self x y = liftIO (js_lineTo (self) x y)
  
 foreign import javascript unsafe
         "$1[\"quadraticCurveTo\"]($2, $3,\n$4, $5)" js_quadraticCurveTo ::
-        JSRef Path2D -> Float -> Float -> Float -> Float -> IO ()
+        Path2D -> Float -> Float -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Path2D.quadraticCurveTo Mozilla Path2D.quadraticCurveTo documentation> 
 quadraticCurveTo ::
                  (MonadIO m) => Path2D -> Float -> Float -> Float -> Float -> m ()
 quadraticCurveTo self cpx cpy x y
-  = liftIO (js_quadraticCurveTo (unPath2D self) cpx cpy x y)
+  = liftIO (js_quadraticCurveTo (self) cpx cpy x y)
  
 foreign import javascript unsafe
         "$1[\"bezierCurveTo\"]($2, $3, $4,\n$5, $6, $7)" js_bezierCurveTo
         ::
-        JSRef Path2D ->
+        Path2D ->
           Float -> Float -> Float -> Float -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Path2D.bezierCurveTo Mozilla Path2D.bezierCurveTo documentation> 
@@ -101,32 +98,31 @@
                 Path2D ->
                   Float -> Float -> Float -> Float -> Float -> Float -> m ()
 bezierCurveTo self cp1x cp1y cp2x cp2y x y
-  = liftIO (js_bezierCurveTo (unPath2D self) cp1x cp1y cp2x cp2y x y)
+  = liftIO (js_bezierCurveTo (self) cp1x cp1y cp2x cp2y x y)
  
 foreign import javascript unsafe
         "$1[\"arcTo\"]($2, $3, $4, $5, $6)" js_arcTo ::
-        JSRef Path2D -> Float -> Float -> Float -> Float -> Float -> IO ()
+        Path2D -> Float -> Float -> Float -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Path2D.arcTo Mozilla Path2D.arcTo documentation> 
 arcTo ::
       (MonadIO m) =>
         Path2D -> Float -> Float -> Float -> Float -> Float -> m ()
 arcTo self x1 y1 x2 y2 radius
-  = liftIO (js_arcTo (unPath2D self) x1 y1 x2 y2 radius)
+  = liftIO (js_arcTo (self) x1 y1 x2 y2 radius)
  
 foreign import javascript unsafe "$1[\"rect\"]($2, $3, $4, $5)"
-        js_rect ::
-        JSRef Path2D -> Float -> Float -> Float -> Float -> IO ()
+        js_rect :: Path2D -> Float -> Float -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Path2D.rect Mozilla Path2D.rect documentation> 
 rect ::
      (MonadIO m) => Path2D -> Float -> Float -> Float -> Float -> m ()
 rect self x y width height
-  = liftIO (js_rect (unPath2D self) x y width height)
+  = liftIO (js_rect (self) x y width height)
  
 foreign import javascript unsafe
         "$1[\"arc\"]($2, $3, $4, $5, $6,\n$7)" js_arc ::
-        JSRef Path2D ->
+        Path2D ->
           Float -> Float -> Float -> Float -> Float -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Path2D.arc Mozilla Path2D.arc documentation> 
@@ -135,5 +131,4 @@
       Path2D -> Float -> Float -> Float -> Float -> Float -> Bool -> m ()
 arc self x y radius startAngle endAngle anticlockwise
   = liftIO
-      (js_arc (unPath2D self) x y radius startAngle endAngle
-         anticlockwise)
+      (js_arc (self) x y radius startAngle endAngle anticlockwise)
diff --git a/src/GHCJS/DOM/JSFFI/Generated/Performance.hs b/src/GHCJS/DOM/JSFFI/Generated/Performance.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/Performance.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/Performance.hs
@@ -13,7 +13,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -28,17 +28,17 @@
  
 foreign import javascript unsafe "$1[\"webkitGetEntries\"]()"
         js_webkitGetEntries ::
-        JSRef Performance -> IO (JSRef PerformanceEntryList)
+        Performance -> IO (Nullable PerformanceEntryList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Performance.webkitGetEntries Mozilla Performance.webkitGetEntries documentation> 
 webkitGetEntries ::
                  (MonadIO m) => Performance -> m (Maybe PerformanceEntryList)
 webkitGetEntries self
-  = liftIO ((js_webkitGetEntries (unPerformance self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_webkitGetEntries (self)))
  
 foreign import javascript unsafe
         "$1[\"webkitGetEntriesByType\"]($2)" js_webkitGetEntriesByType ::
-        JSRef Performance -> JSString -> IO (JSRef PerformanceEntryList)
+        Performance -> JSString -> IO (Nullable PerformanceEntryList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Performance.webkitGetEntriesByType Mozilla Performance.webkitGetEntriesByType documentation> 
 webkitGetEntriesByType ::
@@ -46,15 +46,14 @@
                          Performance -> entryType -> m (Maybe PerformanceEntryList)
 webkitGetEntriesByType self entryType
   = liftIO
-      ((js_webkitGetEntriesByType (unPerformance self)
-          (toJSString entryType))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_webkitGetEntriesByType (self) (toJSString entryType)))
  
 foreign import javascript unsafe
         "$1[\"webkitGetEntriesByName\"]($2,\n$3)" js_webkitGetEntriesByName
         ::
-        JSRef Performance ->
-          JSString -> JSString -> IO (JSRef PerformanceEntryList)
+        Performance ->
+          JSString -> JSString -> IO (Nullable PerformanceEntryList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Performance.webkitGetEntriesByName Mozilla Performance.webkitGetEntriesByName documentation> 
 webkitGetEntriesByName ::
@@ -62,53 +61,51 @@
                          Performance -> name -> entryType -> m (Maybe PerformanceEntryList)
 webkitGetEntriesByName self name entryType
   = liftIO
-      ((js_webkitGetEntriesByName (unPerformance self) (toJSString name)
-          (toJSString entryType))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_webkitGetEntriesByName (self) (toJSString name)
+            (toJSString entryType)))
  
 foreign import javascript unsafe
         "$1[\"webkitClearResourceTimings\"]()"
-        js_webkitClearResourceTimings :: JSRef Performance -> IO ()
+        js_webkitClearResourceTimings :: Performance -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Performance.webkitClearResourceTimings Mozilla Performance.webkitClearResourceTimings documentation> 
 webkitClearResourceTimings :: (MonadIO m) => Performance -> m ()
 webkitClearResourceTimings self
-  = liftIO (js_webkitClearResourceTimings (unPerformance self))
+  = liftIO (js_webkitClearResourceTimings (self))
  
 foreign import javascript unsafe
         "$1[\"webkitSetResourceTimingBufferSize\"]($2)"
         js_webkitSetResourceTimingBufferSize ::
-        JSRef Performance -> Word -> IO ()
+        Performance -> Word -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Performance.webkitSetResourceTimingBufferSize Mozilla Performance.webkitSetResourceTimingBufferSize documentation> 
 webkitSetResourceTimingBufferSize ::
                                   (MonadIO m) => Performance -> Word -> m ()
 webkitSetResourceTimingBufferSize self maxSize
-  = liftIO
-      (js_webkitSetResourceTimingBufferSize (unPerformance self) maxSize)
+  = liftIO (js_webkitSetResourceTimingBufferSize (self) maxSize)
  
 foreign import javascript unsafe "$1[\"webkitMark\"]($2)"
-        js_webkitMark :: JSRef Performance -> JSString -> IO ()
+        js_webkitMark :: Performance -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Performance.webkitMark Mozilla Performance.webkitMark documentation> 
 webkitMark ::
            (MonadIO m, ToJSString markName) => Performance -> markName -> m ()
 webkitMark self markName
-  = liftIO (js_webkitMark (unPerformance self) (toJSString markName))
+  = liftIO (js_webkitMark (self) (toJSString markName))
  
 foreign import javascript unsafe "$1[\"webkitClearMarks\"]($2)"
-        js_webkitClearMarks :: JSRef Performance -> JSString -> IO ()
+        js_webkitClearMarks :: Performance -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Performance.webkitClearMarks Mozilla Performance.webkitClearMarks documentation> 
 webkitClearMarks ::
                  (MonadIO m, ToJSString markName) => Performance -> markName -> m ()
 webkitClearMarks self markName
-  = liftIO
-      (js_webkitClearMarks (unPerformance self) (toJSString markName))
+  = liftIO (js_webkitClearMarks (self) (toJSString markName))
  
 foreign import javascript unsafe
         "$1[\"webkitMeasure\"]($2, $3, $4)" js_webkitMeasure ::
-        JSRef Performance -> JSString -> JSString -> JSString -> IO ()
+        Performance -> JSString -> JSString -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Performance.webkitMeasure Mozilla Performance.webkitMeasure documentation> 
 webkitMeasure ::
@@ -117,47 +114,44 @@
                 Performance -> measureName -> startMark -> endMark -> m ()
 webkitMeasure self measureName startMark endMark
   = liftIO
-      (js_webkitMeasure (unPerformance self) (toJSString measureName)
+      (js_webkitMeasure (self) (toJSString measureName)
          (toJSString startMark)
          (toJSString endMark))
  
 foreign import javascript unsafe "$1[\"webkitClearMeasures\"]($2)"
-        js_webkitClearMeasures :: JSRef Performance -> JSString -> IO ()
+        js_webkitClearMeasures :: Performance -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Performance.webkitClearMeasures Mozilla Performance.webkitClearMeasures documentation> 
 webkitClearMeasures ::
                     (MonadIO m, ToJSString measureName) =>
                       Performance -> measureName -> m ()
 webkitClearMeasures self measureName
-  = liftIO
-      (js_webkitClearMeasures (unPerformance self)
-         (toJSString measureName))
+  = liftIO (js_webkitClearMeasures (self) (toJSString measureName))
  
 foreign import javascript unsafe "$1[\"now\"]()" js_now ::
-        JSRef Performance -> IO Double
+        Performance -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Performance.now Mozilla Performance.now documentation> 
 now :: (MonadIO m) => Performance -> m Double
-now self = liftIO (js_now (unPerformance self))
+now self = liftIO (js_now (self))
  
 foreign import javascript unsafe "$1[\"navigation\"]"
         js_getNavigation ::
-        JSRef Performance -> IO (JSRef PerformanceNavigation)
+        Performance -> IO (Nullable PerformanceNavigation)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Performance.navigation Mozilla Performance.navigation documentation> 
 getNavigation ::
               (MonadIO m) => Performance -> m (Maybe PerformanceNavigation)
 getNavigation self
-  = liftIO ((js_getNavigation (unPerformance self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getNavigation (self)))
  
 foreign import javascript unsafe "$1[\"timing\"]" js_getTiming ::
-        JSRef Performance -> IO (JSRef PerformanceTiming)
+        Performance -> IO (Nullable PerformanceTiming)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Performance.timing Mozilla Performance.timing documentation> 
 getTiming ::
           (MonadIO m) => Performance -> m (Maybe PerformanceTiming)
-getTiming self
-  = liftIO ((js_getTiming (unPerformance self)) >>= fromJSRef)
+getTiming self = liftIO (nullableToMaybe <$> (js_getTiming (self)))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Performance.onwebkitresourcetimingbufferfull Mozilla Performance.onwebkitresourcetimingbufferfull documentation> 
 webKitResourceTimingBufferFull :: EventName Performance Event
diff --git a/src/GHCJS/DOM/JSFFI/Generated/PerformanceEntry.hs b/src/GHCJS/DOM/JSFFI/Generated/PerformanceEntry.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/PerformanceEntry.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/PerformanceEntry.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -21,19 +21,17 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"name\"]" js_getName ::
-        JSRef PerformanceEntry -> IO JSString
+        PerformanceEntry -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/PerformanceEntry.name Mozilla PerformanceEntry.name documentation> 
 getName ::
         (MonadIO m, IsPerformanceEntry self, FromJSString result) =>
           self -> m result
 getName self
-  = liftIO
-      (fromJSString <$>
-         (js_getName (unPerformanceEntry (toPerformanceEntry self))))
+  = liftIO (fromJSString <$> (js_getName (toPerformanceEntry self)))
  
 foreign import javascript unsafe "$1[\"entryType\"]"
-        js_getEntryType :: JSRef PerformanceEntry -> IO JSString
+        js_getEntryType :: PerformanceEntry -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/PerformanceEntry.entryType Mozilla PerformanceEntry.entryType documentation> 
 getEntryType ::
@@ -41,25 +39,22 @@
                self -> m result
 getEntryType self
   = liftIO
-      (fromJSString <$>
-         (js_getEntryType (unPerformanceEntry (toPerformanceEntry self))))
+      (fromJSString <$> (js_getEntryType (toPerformanceEntry self)))
  
 foreign import javascript unsafe "$1[\"startTime\"]"
-        js_getStartTime :: JSRef PerformanceEntry -> IO Double
+        js_getStartTime :: PerformanceEntry -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/PerformanceEntry.startTime Mozilla PerformanceEntry.startTime documentation> 
 getStartTime ::
              (MonadIO m, IsPerformanceEntry self) => self -> m Double
 getStartTime self
-  = liftIO
-      (js_getStartTime (unPerformanceEntry (toPerformanceEntry self)))
+  = liftIO (js_getStartTime (toPerformanceEntry self))
  
 foreign import javascript unsafe "$1[\"duration\"]" js_getDuration
-        :: JSRef PerformanceEntry -> IO Double
+        :: PerformanceEntry -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/PerformanceEntry.duration Mozilla PerformanceEntry.duration documentation> 
 getDuration ::
             (MonadIO m, IsPerformanceEntry self) => self -> m Double
 getDuration self
-  = liftIO
-      (js_getDuration (unPerformanceEntry (toPerformanceEntry self)))
+  = liftIO (js_getDuration (toPerformanceEntry self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/PerformanceEntryList.hs b/src/GHCJS/DOM/JSFFI/Generated/PerformanceEntryList.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/PerformanceEntryList.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/PerformanceEntryList.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,20 +19,18 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"item\"]($2)" js_item ::
-        JSRef PerformanceEntryList -> Word -> IO (JSRef PerformanceEntry)
+        PerformanceEntryList -> Word -> IO (Nullable PerformanceEntry)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/PerformanceEntryList.item Mozilla PerformanceEntryList.item documentation> 
 item ::
      (MonadIO m) =>
        PerformanceEntryList -> Word -> m (Maybe PerformanceEntry)
 item self index
-  = liftIO
-      ((js_item (unPerformanceEntryList self) index) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_item (self) index))
  
 foreign import javascript unsafe "$1[\"length\"]" js_getLength ::
-        JSRef PerformanceEntryList -> IO Word
+        PerformanceEntryList -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/PerformanceEntryList.length Mozilla PerformanceEntryList.length documentation> 
 getLength :: (MonadIO m) => PerformanceEntryList -> m Word
-getLength self
-  = liftIO (js_getLength (unPerformanceEntryList self))
+getLength self = liftIO (js_getLength (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/PerformanceNavigation.hs b/src/GHCJS/DOM/JSFFI/Generated/PerformanceNavigation.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/PerformanceNavigation.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/PerformanceNavigation.hs
@@ -8,7 +8,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -26,16 +26,15 @@
 pattern TYPE_RESERVED = 255
  
 foreign import javascript unsafe "$1[\"type\"]" js_getType ::
-        JSRef PerformanceNavigation -> IO Word
+        PerformanceNavigation -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/PerformanceNavigation.type Mozilla PerformanceNavigation.type documentation> 
 getType :: (MonadIO m) => PerformanceNavigation -> m Word
-getType self = liftIO (js_getType (unPerformanceNavigation self))
+getType self = liftIO (js_getType (self))
  
 foreign import javascript unsafe "$1[\"redirectCount\"]"
-        js_getRedirectCount :: JSRef PerformanceNavigation -> IO Word
+        js_getRedirectCount :: PerformanceNavigation -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/PerformanceNavigation.redirectCount Mozilla PerformanceNavigation.redirectCount documentation> 
 getRedirectCount :: (MonadIO m) => PerformanceNavigation -> m Word
-getRedirectCount self
-  = liftIO (js_getRedirectCount (unPerformanceNavigation self))
+getRedirectCount self = liftIO (js_getRedirectCount (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/PerformanceResourceTiming.hs b/src/GHCJS/DOM/JSFFI/Generated/PerformanceResourceTiming.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/PerformanceResourceTiming.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/PerformanceResourceTiming.hs
@@ -12,7 +12,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -26,109 +26,93 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"initiatorType\"]"
-        js_getInitiatorType ::
-        JSRef PerformanceResourceTiming -> IO JSString
+        js_getInitiatorType :: PerformanceResourceTiming -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming.initiatorType Mozilla PerformanceResourceTiming.initiatorType documentation> 
 getInitiatorType ::
                  (MonadIO m, FromJSString result) =>
                    PerformanceResourceTiming -> m result
 getInitiatorType self
-  = liftIO
-      (fromJSString <$>
-         (js_getInitiatorType (unPerformanceResourceTiming self)))
+  = liftIO (fromJSString <$> (js_getInitiatorType (self)))
  
 foreign import javascript unsafe "$1[\"redirectStart\"]"
-        js_getRedirectStart :: JSRef PerformanceResourceTiming -> IO Double
+        js_getRedirectStart :: PerformanceResourceTiming -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming.redirectStart Mozilla PerformanceResourceTiming.redirectStart documentation> 
 getRedirectStart ::
                  (MonadIO m) => PerformanceResourceTiming -> m Double
-getRedirectStart self
-  = liftIO (js_getRedirectStart (unPerformanceResourceTiming self))
+getRedirectStart self = liftIO (js_getRedirectStart (self))
  
 foreign import javascript unsafe "$1[\"redirectEnd\"]"
-        js_getRedirectEnd :: JSRef PerformanceResourceTiming -> IO Double
+        js_getRedirectEnd :: PerformanceResourceTiming -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming.redirectEnd Mozilla PerformanceResourceTiming.redirectEnd documentation> 
 getRedirectEnd ::
                (MonadIO m) => PerformanceResourceTiming -> m Double
-getRedirectEnd self
-  = liftIO (js_getRedirectEnd (unPerformanceResourceTiming self))
+getRedirectEnd self = liftIO (js_getRedirectEnd (self))
  
 foreign import javascript unsafe "$1[\"fetchStart\"]"
-        js_getFetchStart :: JSRef PerformanceResourceTiming -> IO Double
+        js_getFetchStart :: PerformanceResourceTiming -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming.fetchStart Mozilla PerformanceResourceTiming.fetchStart documentation> 
 getFetchStart ::
               (MonadIO m) => PerformanceResourceTiming -> m Double
-getFetchStart self
-  = liftIO (js_getFetchStart (unPerformanceResourceTiming self))
+getFetchStart self = liftIO (js_getFetchStart (self))
  
 foreign import javascript unsafe "$1[\"domainLookupStart\"]"
-        js_getDomainLookupStart ::
-        JSRef PerformanceResourceTiming -> IO Double
+        js_getDomainLookupStart :: PerformanceResourceTiming -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming.domainLookupStart Mozilla PerformanceResourceTiming.domainLookupStart documentation> 
 getDomainLookupStart ::
                      (MonadIO m) => PerformanceResourceTiming -> m Double
-getDomainLookupStart self
-  = liftIO
-      (js_getDomainLookupStart (unPerformanceResourceTiming self))
+getDomainLookupStart self = liftIO (js_getDomainLookupStart (self))
  
 foreign import javascript unsafe "$1[\"domainLookupEnd\"]"
-        js_getDomainLookupEnd ::
-        JSRef PerformanceResourceTiming -> IO Double
+        js_getDomainLookupEnd :: PerformanceResourceTiming -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming.domainLookupEnd Mozilla PerformanceResourceTiming.domainLookupEnd documentation> 
 getDomainLookupEnd ::
                    (MonadIO m) => PerformanceResourceTiming -> m Double
-getDomainLookupEnd self
-  = liftIO (js_getDomainLookupEnd (unPerformanceResourceTiming self))
+getDomainLookupEnd self = liftIO (js_getDomainLookupEnd (self))
  
 foreign import javascript unsafe "$1[\"connectStart\"]"
-        js_getConnectStart :: JSRef PerformanceResourceTiming -> IO Double
+        js_getConnectStart :: PerformanceResourceTiming -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming.connectStart Mozilla PerformanceResourceTiming.connectStart documentation> 
 getConnectStart ::
                 (MonadIO m) => PerformanceResourceTiming -> m Double
-getConnectStart self
-  = liftIO (js_getConnectStart (unPerformanceResourceTiming self))
+getConnectStart self = liftIO (js_getConnectStart (self))
  
 foreign import javascript unsafe "$1[\"connectEnd\"]"
-        js_getConnectEnd :: JSRef PerformanceResourceTiming -> IO Double
+        js_getConnectEnd :: PerformanceResourceTiming -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming.connectEnd Mozilla PerformanceResourceTiming.connectEnd documentation> 
 getConnectEnd ::
               (MonadIO m) => PerformanceResourceTiming -> m Double
-getConnectEnd self
-  = liftIO (js_getConnectEnd (unPerformanceResourceTiming self))
+getConnectEnd self = liftIO (js_getConnectEnd (self))
  
 foreign import javascript unsafe "$1[\"secureConnectionStart\"]"
         js_getSecureConnectionStart ::
-        JSRef PerformanceResourceTiming -> IO Double
+        PerformanceResourceTiming -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming.secureConnectionStart Mozilla PerformanceResourceTiming.secureConnectionStart documentation> 
 getSecureConnectionStart ::
                          (MonadIO m) => PerformanceResourceTiming -> m Double
 getSecureConnectionStart self
-  = liftIO
-      (js_getSecureConnectionStart (unPerformanceResourceTiming self))
+  = liftIO (js_getSecureConnectionStart (self))
  
 foreign import javascript unsafe "$1[\"requestStart\"]"
-        js_getRequestStart :: JSRef PerformanceResourceTiming -> IO Double
+        js_getRequestStart :: PerformanceResourceTiming -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming.requestStart Mozilla PerformanceResourceTiming.requestStart documentation> 
 getRequestStart ::
                 (MonadIO m) => PerformanceResourceTiming -> m Double
-getRequestStart self
-  = liftIO (js_getRequestStart (unPerformanceResourceTiming self))
+getRequestStart self = liftIO (js_getRequestStart (self))
  
 foreign import javascript unsafe "$1[\"responseEnd\"]"
-        js_getResponseEnd :: JSRef PerformanceResourceTiming -> IO Double
+        js_getResponseEnd :: PerformanceResourceTiming -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming.responseEnd Mozilla PerformanceResourceTiming.responseEnd documentation> 
 getResponseEnd ::
                (MonadIO m) => PerformanceResourceTiming -> m Double
-getResponseEnd self
-  = liftIO (js_getResponseEnd (unPerformanceResourceTiming self))
+getResponseEnd self = liftIO (js_getResponseEnd (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/PerformanceTiming.hs b/src/GHCJS/DOM/JSFFI/Generated/PerformanceTiming.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/PerformanceTiming.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/PerformanceTiming.hs
@@ -20,7 +20,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -34,194 +34,168 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"navigationStart\"]"
-        js_getNavigationStart :: JSRef PerformanceTiming -> IO Double
+        js_getNavigationStart :: PerformanceTiming -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/PerformanceTiming.navigationStart Mozilla PerformanceTiming.navigationStart documentation> 
 getNavigationStart :: (MonadIO m) => PerformanceTiming -> m Word64
 getNavigationStart self
-  = liftIO
-      (round <$> (js_getNavigationStart (unPerformanceTiming self)))
+  = liftIO (round <$> (js_getNavigationStart (self)))
  
 foreign import javascript unsafe "$1[\"unloadEventStart\"]"
-        js_getUnloadEventStart :: JSRef PerformanceTiming -> IO Double
+        js_getUnloadEventStart :: PerformanceTiming -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/PerformanceTiming.unloadEventStart Mozilla PerformanceTiming.unloadEventStart documentation> 
 getUnloadEventStart :: (MonadIO m) => PerformanceTiming -> m Word64
 getUnloadEventStart self
-  = liftIO
-      (round <$> (js_getUnloadEventStart (unPerformanceTiming self)))
+  = liftIO (round <$> (js_getUnloadEventStart (self)))
  
 foreign import javascript unsafe "$1[\"unloadEventEnd\"]"
-        js_getUnloadEventEnd :: JSRef PerformanceTiming -> IO Double
+        js_getUnloadEventEnd :: PerformanceTiming -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/PerformanceTiming.unloadEventEnd Mozilla PerformanceTiming.unloadEventEnd documentation> 
 getUnloadEventEnd :: (MonadIO m) => PerformanceTiming -> m Word64
 getUnloadEventEnd self
-  = liftIO
-      (round <$> (js_getUnloadEventEnd (unPerformanceTiming self)))
+  = liftIO (round <$> (js_getUnloadEventEnd (self)))
  
 foreign import javascript unsafe "$1[\"redirectStart\"]"
-        js_getRedirectStart :: JSRef PerformanceTiming -> IO Double
+        js_getRedirectStart :: PerformanceTiming -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/PerformanceTiming.redirectStart Mozilla PerformanceTiming.redirectStart documentation> 
 getRedirectStart :: (MonadIO m) => PerformanceTiming -> m Word64
 getRedirectStart self
-  = liftIO
-      (round <$> (js_getRedirectStart (unPerformanceTiming self)))
+  = liftIO (round <$> (js_getRedirectStart (self)))
  
 foreign import javascript unsafe "$1[\"redirectEnd\"]"
-        js_getRedirectEnd :: JSRef PerformanceTiming -> IO Double
+        js_getRedirectEnd :: PerformanceTiming -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/PerformanceTiming.redirectEnd Mozilla PerformanceTiming.redirectEnd documentation> 
 getRedirectEnd :: (MonadIO m) => PerformanceTiming -> m Word64
-getRedirectEnd self
-  = liftIO (round <$> (js_getRedirectEnd (unPerformanceTiming self)))
+getRedirectEnd self = liftIO (round <$> (js_getRedirectEnd (self)))
  
 foreign import javascript unsafe "$1[\"fetchStart\"]"
-        js_getFetchStart :: JSRef PerformanceTiming -> IO Double
+        js_getFetchStart :: PerformanceTiming -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/PerformanceTiming.fetchStart Mozilla PerformanceTiming.fetchStart documentation> 
 getFetchStart :: (MonadIO m) => PerformanceTiming -> m Word64
-getFetchStart self
-  = liftIO (round <$> (js_getFetchStart (unPerformanceTiming self)))
+getFetchStart self = liftIO (round <$> (js_getFetchStart (self)))
  
 foreign import javascript unsafe "$1[\"domainLookupStart\"]"
-        js_getDomainLookupStart :: JSRef PerformanceTiming -> IO Double
+        js_getDomainLookupStart :: PerformanceTiming -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/PerformanceTiming.domainLookupStart Mozilla PerformanceTiming.domainLookupStart documentation> 
 getDomainLookupStart ::
                      (MonadIO m) => PerformanceTiming -> m Word64
 getDomainLookupStart self
-  = liftIO
-      (round <$> (js_getDomainLookupStart (unPerformanceTiming self)))
+  = liftIO (round <$> (js_getDomainLookupStart (self)))
  
 foreign import javascript unsafe "$1[\"domainLookupEnd\"]"
-        js_getDomainLookupEnd :: JSRef PerformanceTiming -> IO Double
+        js_getDomainLookupEnd :: PerformanceTiming -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/PerformanceTiming.domainLookupEnd Mozilla PerformanceTiming.domainLookupEnd documentation> 
 getDomainLookupEnd :: (MonadIO m) => PerformanceTiming -> m Word64
 getDomainLookupEnd self
-  = liftIO
-      (round <$> (js_getDomainLookupEnd (unPerformanceTiming self)))
+  = liftIO (round <$> (js_getDomainLookupEnd (self)))
  
 foreign import javascript unsafe "$1[\"connectStart\"]"
-        js_getConnectStart :: JSRef PerformanceTiming -> IO Double
+        js_getConnectStart :: PerformanceTiming -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/PerformanceTiming.connectStart Mozilla PerformanceTiming.connectStart documentation> 
 getConnectStart :: (MonadIO m) => PerformanceTiming -> m Word64
 getConnectStart self
-  = liftIO
-      (round <$> (js_getConnectStart (unPerformanceTiming self)))
+  = liftIO (round <$> (js_getConnectStart (self)))
  
 foreign import javascript unsafe "$1[\"connectEnd\"]"
-        js_getConnectEnd :: JSRef PerformanceTiming -> IO Double
+        js_getConnectEnd :: PerformanceTiming -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/PerformanceTiming.connectEnd Mozilla PerformanceTiming.connectEnd documentation> 
 getConnectEnd :: (MonadIO m) => PerformanceTiming -> m Word64
-getConnectEnd self
-  = liftIO (round <$> (js_getConnectEnd (unPerformanceTiming self)))
+getConnectEnd self = liftIO (round <$> (js_getConnectEnd (self)))
  
 foreign import javascript unsafe "$1[\"secureConnectionStart\"]"
-        js_getSecureConnectionStart :: JSRef PerformanceTiming -> IO Double
+        js_getSecureConnectionStart :: PerformanceTiming -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/PerformanceTiming.secureConnectionStart Mozilla PerformanceTiming.secureConnectionStart documentation> 
 getSecureConnectionStart ::
                          (MonadIO m) => PerformanceTiming -> m Word64
 getSecureConnectionStart self
-  = liftIO
-      (round <$>
-         (js_getSecureConnectionStart (unPerformanceTiming self)))
+  = liftIO (round <$> (js_getSecureConnectionStart (self)))
  
 foreign import javascript unsafe "$1[\"requestStart\"]"
-        js_getRequestStart :: JSRef PerformanceTiming -> IO Double
+        js_getRequestStart :: PerformanceTiming -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/PerformanceTiming.requestStart Mozilla PerformanceTiming.requestStart documentation> 
 getRequestStart :: (MonadIO m) => PerformanceTiming -> m Word64
 getRequestStart self
-  = liftIO
-      (round <$> (js_getRequestStart (unPerformanceTiming self)))
+  = liftIO (round <$> (js_getRequestStart (self)))
  
 foreign import javascript unsafe "$1[\"responseStart\"]"
-        js_getResponseStart :: JSRef PerformanceTiming -> IO Double
+        js_getResponseStart :: PerformanceTiming -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/PerformanceTiming.responseStart Mozilla PerformanceTiming.responseStart documentation> 
 getResponseStart :: (MonadIO m) => PerformanceTiming -> m Word64
 getResponseStart self
-  = liftIO
-      (round <$> (js_getResponseStart (unPerformanceTiming self)))
+  = liftIO (round <$> (js_getResponseStart (self)))
  
 foreign import javascript unsafe "$1[\"responseEnd\"]"
-        js_getResponseEnd :: JSRef PerformanceTiming -> IO Double
+        js_getResponseEnd :: PerformanceTiming -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/PerformanceTiming.responseEnd Mozilla PerformanceTiming.responseEnd documentation> 
 getResponseEnd :: (MonadIO m) => PerformanceTiming -> m Word64
-getResponseEnd self
-  = liftIO (round <$> (js_getResponseEnd (unPerformanceTiming self)))
+getResponseEnd self = liftIO (round <$> (js_getResponseEnd (self)))
  
 foreign import javascript unsafe "$1[\"domLoading\"]"
-        js_getDomLoading :: JSRef PerformanceTiming -> IO Double
+        js_getDomLoading :: PerformanceTiming -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/PerformanceTiming.domLoading Mozilla PerformanceTiming.domLoading documentation> 
 getDomLoading :: (MonadIO m) => PerformanceTiming -> m Word64
-getDomLoading self
-  = liftIO (round <$> (js_getDomLoading (unPerformanceTiming self)))
+getDomLoading self = liftIO (round <$> (js_getDomLoading (self)))
  
 foreign import javascript unsafe "$1[\"domInteractive\"]"
-        js_getDomInteractive :: JSRef PerformanceTiming -> IO Double
+        js_getDomInteractive :: PerformanceTiming -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/PerformanceTiming.domInteractive Mozilla PerformanceTiming.domInteractive documentation> 
 getDomInteractive :: (MonadIO m) => PerformanceTiming -> m Word64
 getDomInteractive self
-  = liftIO
-      (round <$> (js_getDomInteractive (unPerformanceTiming self)))
+  = liftIO (round <$> (js_getDomInteractive (self)))
  
 foreign import javascript unsafe
         "$1[\"domContentLoadedEventStart\"]"
-        js_getDomContentLoadedEventStart ::
-        JSRef PerformanceTiming -> IO Double
+        js_getDomContentLoadedEventStart :: PerformanceTiming -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/PerformanceTiming.domContentLoadedEventStart Mozilla PerformanceTiming.domContentLoadedEventStart documentation> 
 getDomContentLoadedEventStart ::
                               (MonadIO m) => PerformanceTiming -> m Word64
 getDomContentLoadedEventStart self
-  = liftIO
-      (round <$>
-         (js_getDomContentLoadedEventStart (unPerformanceTiming self)))
+  = liftIO (round <$> (js_getDomContentLoadedEventStart (self)))
  
 foreign import javascript unsafe "$1[\"domContentLoadedEventEnd\"]"
-        js_getDomContentLoadedEventEnd ::
-        JSRef PerformanceTiming -> IO Double
+        js_getDomContentLoadedEventEnd :: PerformanceTiming -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/PerformanceTiming.domContentLoadedEventEnd Mozilla PerformanceTiming.domContentLoadedEventEnd documentation> 
 getDomContentLoadedEventEnd ::
                             (MonadIO m) => PerformanceTiming -> m Word64
 getDomContentLoadedEventEnd self
-  = liftIO
-      (round <$>
-         (js_getDomContentLoadedEventEnd (unPerformanceTiming self)))
+  = liftIO (round <$> (js_getDomContentLoadedEventEnd (self)))
  
 foreign import javascript unsafe "$1[\"domComplete\"]"
-        js_getDomComplete :: JSRef PerformanceTiming -> IO Double
+        js_getDomComplete :: PerformanceTiming -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/PerformanceTiming.domComplete Mozilla PerformanceTiming.domComplete documentation> 
 getDomComplete :: (MonadIO m) => PerformanceTiming -> m Word64
-getDomComplete self
-  = liftIO (round <$> (js_getDomComplete (unPerformanceTiming self)))
+getDomComplete self = liftIO (round <$> (js_getDomComplete (self)))
  
 foreign import javascript unsafe "$1[\"loadEventStart\"]"
-        js_getLoadEventStart :: JSRef PerformanceTiming -> IO Double
+        js_getLoadEventStart :: PerformanceTiming -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/PerformanceTiming.loadEventStart Mozilla PerformanceTiming.loadEventStart documentation> 
 getLoadEventStart :: (MonadIO m) => PerformanceTiming -> m Word64
 getLoadEventStart self
-  = liftIO
-      (round <$> (js_getLoadEventStart (unPerformanceTiming self)))
+  = liftIO (round <$> (js_getLoadEventStart (self)))
  
 foreign import javascript unsafe "$1[\"loadEventEnd\"]"
-        js_getLoadEventEnd :: JSRef PerformanceTiming -> IO Double
+        js_getLoadEventEnd :: PerformanceTiming -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/PerformanceTiming.loadEventEnd Mozilla PerformanceTiming.loadEventEnd documentation> 
 getLoadEventEnd :: (MonadIO m) => PerformanceTiming -> m Word64
 getLoadEventEnd self
-  = liftIO
-      (round <$> (js_getLoadEventEnd (unPerformanceTiming self)))
+  = liftIO (round <$> (js_getLoadEventEnd (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/Plugin.hs b/src/GHCJS/DOM/JSFFI/Generated/Plugin.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/Plugin.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/Plugin.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,15 +20,15 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"item\"]($2)" js_item ::
-        JSRef Plugin -> Word -> IO (JSRef MimeType)
+        Plugin -> Word -> IO (Nullable MimeType)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Plugin.item Mozilla Plugin.item documentation> 
 item :: (MonadIO m) => Plugin -> Word -> m (Maybe MimeType)
 item self index
-  = liftIO ((js_item (unPlugin self) index) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_item (self) index))
  
 foreign import javascript unsafe "$1[\"namedItem\"]($2)"
-        js_namedItem :: JSRef Plugin -> JSString -> IO (JSRef MimeType)
+        js_namedItem :: Plugin -> JSString -> IO (Nullable MimeType)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Plugin.namedItem Mozilla Plugin.namedItem documentation> 
 namedItem ::
@@ -36,37 +36,36 @@
             Plugin -> name -> m (Maybe MimeType)
 namedItem self name
   = liftIO
-      ((js_namedItem (unPlugin self) (toJSString name)) >>= fromJSRef)
+      (nullableToMaybe <$> (js_namedItem (self) (toJSString name)))
  
 foreign import javascript unsafe "$1[\"name\"]" js_getName ::
-        JSRef Plugin -> IO JSString
+        Plugin -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Plugin.name Mozilla Plugin.name documentation> 
 getName :: (MonadIO m, FromJSString result) => Plugin -> m result
-getName self
-  = liftIO (fromJSString <$> (js_getName (unPlugin self)))
+getName self = liftIO (fromJSString <$> (js_getName (self)))
  
 foreign import javascript unsafe "$1[\"filename\"]" js_getFilename
-        :: JSRef Plugin -> IO JSString
+        :: Plugin -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Plugin.filename Mozilla Plugin.filename documentation> 
 getFilename ::
             (MonadIO m, FromJSString result) => Plugin -> m result
 getFilename self
-  = liftIO (fromJSString <$> (js_getFilename (unPlugin self)))
+  = liftIO (fromJSString <$> (js_getFilename (self)))
  
 foreign import javascript unsafe "$1[\"description\"]"
-        js_getDescription :: JSRef Plugin -> IO JSString
+        js_getDescription :: Plugin -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Plugin.description Mozilla Plugin.description documentation> 
 getDescription ::
                (MonadIO m, FromJSString result) => Plugin -> m result
 getDescription self
-  = liftIO (fromJSString <$> (js_getDescription (unPlugin self)))
+  = liftIO (fromJSString <$> (js_getDescription (self)))
  
 foreign import javascript unsafe "$1[\"length\"]" js_getLength ::
-        JSRef Plugin -> IO Word
+        Plugin -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Plugin.length Mozilla Plugin.length documentation> 
 getLength :: (MonadIO m) => Plugin -> m Word
-getLength self = liftIO (js_getLength (unPlugin self))
+getLength self = liftIO (js_getLength (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/PluginArray.hs b/src/GHCJS/DOM/JSFFI/Generated/PluginArray.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/PluginArray.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/PluginArray.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,15 +20,15 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"item\"]($2)" js_item ::
-        JSRef PluginArray -> Word -> IO (JSRef Plugin)
+        PluginArray -> Word -> IO (Nullable Plugin)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/PluginArray.item Mozilla PluginArray.item documentation> 
 item :: (MonadIO m) => PluginArray -> Word -> m (Maybe Plugin)
 item self index
-  = liftIO ((js_item (unPluginArray self) index) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_item (self) index))
  
 foreign import javascript unsafe "$1[\"namedItem\"]($2)"
-        js_namedItem :: JSRef PluginArray -> JSString -> IO (JSRef Plugin)
+        js_namedItem :: PluginArray -> JSString -> IO (Nullable Plugin)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/PluginArray.namedItem Mozilla PluginArray.namedItem documentation> 
 namedItem ::
@@ -36,20 +36,18 @@
             PluginArray -> name -> m (Maybe Plugin)
 namedItem self name
   = liftIO
-      ((js_namedItem (unPluginArray self) (toJSString name)) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_namedItem (self) (toJSString name)))
  
 foreign import javascript unsafe "$1[\"refresh\"]($2)" js_refresh
-        :: JSRef PluginArray -> Bool -> IO ()
+        :: PluginArray -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/PluginArray.refresh Mozilla PluginArray.refresh documentation> 
 refresh :: (MonadIO m) => PluginArray -> Bool -> m ()
-refresh self reload
-  = liftIO (js_refresh (unPluginArray self) reload)
+refresh self reload = liftIO (js_refresh (self) reload)
  
 foreign import javascript unsafe "$1[\"length\"]" js_getLength ::
-        JSRef PluginArray -> IO Word
+        PluginArray -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/PluginArray.length Mozilla PluginArray.length documentation> 
 getLength :: (MonadIO m) => PluginArray -> m Word
-getLength self = liftIO (js_getLength (unPluginArray self))
+getLength self = liftIO (js_getLength (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/PopStateEvent.hs b/src/GHCJS/DOM/JSFFI/Generated/PopStateEvent.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/PopStateEvent.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/PopStateEvent.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,8 +19,8 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"state\"]" js_getState ::
-        JSRef PopStateEvent -> IO (JSRef a)
+        PopStateEvent -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/PopStateEvent.state Mozilla PopStateEvent.state documentation> 
-getState :: (MonadIO m) => PopStateEvent -> m (JSRef a)
-getState self = liftIO (js_getState (unPopStateEvent self))
+getState :: (MonadIO m) => PopStateEvent -> m JSRef
+getState self = liftIO (js_getState (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/PositionCallback.hs b/src/GHCJS/DOM/JSFFI/Generated/PositionCallback.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/PositionCallback.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/PositionCallback.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -23,24 +23,27 @@
                     (MonadIO m) => (Maybe Geoposition -> IO ()) -> m PositionCallback
 newPositionCallback callback
   = liftIO
-      (syncCallback1 ThrowWouldBlock
-         (\ position ->
-            fromJSRefUnchecked position >>= \ position' -> callback position'))
+      (PositionCallback <$>
+         syncCallback1 ThrowWouldBlock
+           (\ position ->
+              fromJSRefUnchecked position >>= \ position' -> callback position'))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/PositionCallback Mozilla PositionCallback documentation> 
 newPositionCallbackSync ::
                         (MonadIO m) => (Maybe Geoposition -> IO ()) -> m PositionCallback
 newPositionCallbackSync callback
   = liftIO
-      (syncCallback1 ContinueAsync
-         (\ position ->
-            fromJSRefUnchecked position >>= \ position' -> callback position'))
+      (PositionCallback <$>
+         syncCallback1 ContinueAsync
+           (\ position ->
+              fromJSRefUnchecked position >>= \ position' -> callback position'))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/PositionCallback Mozilla PositionCallback documentation> 
 newPositionCallbackAsync ::
                          (MonadIO m) => (Maybe Geoposition -> IO ()) -> m PositionCallback
 newPositionCallbackAsync callback
   = liftIO
-      (asyncCallback1
-         (\ position ->
-            fromJSRefUnchecked position >>= \ position' -> callback position'))
+      (PositionCallback <$>
+         asyncCallback1
+           (\ position ->
+              fromJSRefUnchecked position >>= \ position' -> callback position'))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/PositionError.hs b/src/GHCJS/DOM/JSFFI/Generated/PositionError.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/PositionError.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/PositionError.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -23,17 +23,16 @@
 pattern TIMEOUT = 3
  
 foreign import javascript unsafe "$1[\"code\"]" js_getCode ::
-        JSRef PositionError -> IO Word
+        PositionError -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/PositionError.code Mozilla PositionError.code documentation> 
 getCode :: (MonadIO m) => PositionError -> m Word
-getCode self = liftIO (js_getCode (unPositionError self))
+getCode self = liftIO (js_getCode (self))
  
 foreign import javascript unsafe "$1[\"message\"]" js_getMessage ::
-        JSRef PositionError -> IO JSString
+        PositionError -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/PositionError.message Mozilla PositionError.message documentation> 
 getMessage ::
            (MonadIO m, FromJSString result) => PositionError -> m result
-getMessage self
-  = liftIO (fromJSString <$> (js_getMessage (unPositionError self)))
+getMessage self = liftIO (fromJSString <$> (js_getMessage (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/PositionErrorCallback.hs b/src/GHCJS/DOM/JSFFI/Generated/PositionErrorCallback.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/PositionErrorCallback.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/PositionErrorCallback.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -24,9 +24,10 @@
                            (Maybe PositionError -> IO ()) -> m PositionErrorCallback
 newPositionErrorCallback callback
   = liftIO
-      (syncCallback1 ThrowWouldBlock
-         (\ error ->
-            fromJSRefUnchecked error >>= \ error' -> callback error'))
+      (PositionErrorCallback <$>
+         syncCallback1 ThrowWouldBlock
+           (\ error ->
+              fromJSRefUnchecked error >>= \ error' -> callback error'))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/PositionErrorCallback Mozilla PositionErrorCallback documentation> 
 newPositionErrorCallbackSync ::
@@ -34,9 +35,10 @@
                                (Maybe PositionError -> IO ()) -> m PositionErrorCallback
 newPositionErrorCallbackSync callback
   = liftIO
-      (syncCallback1 ContinueAsync
-         (\ error ->
-            fromJSRefUnchecked error >>= \ error' -> callback error'))
+      (PositionErrorCallback <$>
+         syncCallback1 ContinueAsync
+           (\ error ->
+              fromJSRefUnchecked error >>= \ error' -> callback error'))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/PositionErrorCallback Mozilla PositionErrorCallback documentation> 
 newPositionErrorCallbackAsync ::
@@ -44,6 +46,7 @@
                                 (Maybe PositionError -> IO ()) -> m PositionErrorCallback
 newPositionErrorCallbackAsync callback
   = liftIO
-      (asyncCallback1
-         (\ error ->
-            fromJSRefUnchecked error >>= \ error' -> callback error'))
+      (PositionErrorCallback <$>
+         asyncCallback1
+           (\ error ->
+              fromJSRefUnchecked error >>= \ error' -> callback error'))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/ProcessingInstruction.hs b/src/GHCJS/DOM/JSFFI/Generated/ProcessingInstruction.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/ProcessingInstruction.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/ProcessingInstruction.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,23 +20,19 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"target\"]" js_getTarget ::
-        JSRef ProcessingInstruction -> IO (JSRef (Maybe JSString))
+        ProcessingInstruction -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ProcessingInstruction.target Mozilla ProcessingInstruction.target documentation> 
 getTarget ::
           (MonadIO m, FromJSString result) =>
             ProcessingInstruction -> m (Maybe result)
 getTarget self
-  = liftIO
-      (fromMaybeJSString <$>
-         (js_getTarget (unProcessingInstruction self)))
+  = liftIO (fromMaybeJSString <$> (js_getTarget (self)))
  
 foreign import javascript unsafe "$1[\"sheet\"]" js_getSheet ::
-        JSRef ProcessingInstruction -> IO (JSRef StyleSheet)
+        ProcessingInstruction -> IO (Nullable StyleSheet)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ProcessingInstruction.sheet Mozilla ProcessingInstruction.sheet documentation> 
 getSheet ::
          (MonadIO m) => ProcessingInstruction -> m (Maybe StyleSheet)
-getSheet self
-  = liftIO
-      ((js_getSheet (unProcessingInstruction self)) >>= fromJSRef)
+getSheet self = liftIO (nullableToMaybe <$> (js_getSheet (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/ProgressEvent.hs b/src/GHCJS/DOM/JSFFI/Generated/ProgressEvent.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/ProgressEvent.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/ProgressEvent.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -22,29 +22,26 @@
  
 foreign import javascript unsafe
         "($1[\"lengthComputable\"] ? 1 : 0)" js_getLengthComputable ::
-        JSRef ProgressEvent -> IO Bool
+        ProgressEvent -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ProgressEvent.lengthComputable Mozilla ProgressEvent.lengthComputable documentation> 
 getLengthComputable ::
                     (MonadIO m, IsProgressEvent self) => self -> m Bool
 getLengthComputable self
-  = liftIO
-      (js_getLengthComputable (unProgressEvent (toProgressEvent self)))
+  = liftIO (js_getLengthComputable (toProgressEvent self))
  
 foreign import javascript unsafe "$1[\"loaded\"]" js_getLoaded ::
-        JSRef ProgressEvent -> IO Double
+        ProgressEvent -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ProgressEvent.loaded Mozilla ProgressEvent.loaded documentation> 
 getLoaded :: (MonadIO m, IsProgressEvent self) => self -> m Word64
 getLoaded self
-  = liftIO
-      (round <$> (js_getLoaded (unProgressEvent (toProgressEvent self))))
+  = liftIO (round <$> (js_getLoaded (toProgressEvent self)))
  
 foreign import javascript unsafe "$1[\"total\"]" js_getTotal ::
-        JSRef ProgressEvent -> IO Double
+        ProgressEvent -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ProgressEvent.total Mozilla ProgressEvent.total documentation> 
 getTotal :: (MonadIO m, IsProgressEvent self) => self -> m Word64
 getTotal self
-  = liftIO
-      (round <$> (js_getTotal (unProgressEvent (toProgressEvent self))))
+  = liftIO (round <$> (js_getTotal (toProgressEvent self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/QuickTimePluginReplacement.hs b/src/GHCJS/DOM/JSFFI/Generated/QuickTimePluginReplacement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/QuickTimePluginReplacement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/QuickTimePluginReplacement.hs
@@ -8,7 +8,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -22,52 +22,42 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"postEvent\"]($2)"
-        js_postEvent ::
-        JSRef QuickTimePluginReplacement -> JSString -> IO ()
+        js_postEvent :: QuickTimePluginReplacement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/QuickTimePluginReplacement.postEvent Mozilla QuickTimePluginReplacement.postEvent documentation> 
 postEvent ::
           (MonadIO m, ToJSString eventName) =>
             QuickTimePluginReplacement -> eventName -> m ()
 postEvent self eventName
-  = liftIO
-      (js_postEvent (unQuickTimePluginReplacement self)
-         (toJSString eventName))
+  = liftIO (js_postEvent (self) (toJSString eventName))
  
 foreign import javascript unsafe "$1[\"movieSize\"]"
-        js_getMovieSize :: JSRef QuickTimePluginReplacement -> IO Double
+        js_getMovieSize :: QuickTimePluginReplacement -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/QuickTimePluginReplacement.movieSize Mozilla QuickTimePluginReplacement.movieSize documentation> 
 getMovieSize ::
              (MonadIO m) => QuickTimePluginReplacement -> m Word64
-getMovieSize self
-  = liftIO
-      (round <$> (js_getMovieSize (unQuickTimePluginReplacement self)))
+getMovieSize self = liftIO (round <$> (js_getMovieSize (self)))
  
 foreign import javascript unsafe "$1[\"timedMetaData\"]"
-        js_getTimedMetaData ::
-        JSRef QuickTimePluginReplacement -> IO (JSRef a)
+        js_getTimedMetaData :: QuickTimePluginReplacement -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/QuickTimePluginReplacement.timedMetaData Mozilla QuickTimePluginReplacement.timedMetaData documentation> 
 getTimedMetaData ::
-                 (MonadIO m) => QuickTimePluginReplacement -> m (JSRef a)
-getTimedMetaData self
-  = liftIO (js_getTimedMetaData (unQuickTimePluginReplacement self))
+                 (MonadIO m) => QuickTimePluginReplacement -> m JSRef
+getTimedMetaData self = liftIO (js_getTimedMetaData (self))
  
 foreign import javascript unsafe "$1[\"accessLog\"]"
-        js_getAccessLog :: JSRef QuickTimePluginReplacement -> IO (JSRef a)
+        js_getAccessLog :: QuickTimePluginReplacement -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/QuickTimePluginReplacement.accessLog Mozilla QuickTimePluginReplacement.accessLog documentation> 
 getAccessLog ::
-             (MonadIO m) => QuickTimePluginReplacement -> m (JSRef a)
-getAccessLog self
-  = liftIO (js_getAccessLog (unQuickTimePluginReplacement self))
+             (MonadIO m) => QuickTimePluginReplacement -> m JSRef
+getAccessLog self = liftIO (js_getAccessLog (self))
  
 foreign import javascript unsafe "$1[\"errorLog\"]" js_getErrorLog
-        :: JSRef QuickTimePluginReplacement -> IO (JSRef a)
+        :: QuickTimePluginReplacement -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/QuickTimePluginReplacement.errorLog Mozilla QuickTimePluginReplacement.errorLog documentation> 
-getErrorLog ::
-            (MonadIO m) => QuickTimePluginReplacement -> m (JSRef a)
-getErrorLog self
-  = liftIO (js_getErrorLog (unQuickTimePluginReplacement self))
+getErrorLog :: (MonadIO m) => QuickTimePluginReplacement -> m JSRef
+getErrorLog self = liftIO (js_getErrorLog (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/RGBColor.hs b/src/GHCJS/DOM/JSFFI/Generated/RGBColor.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/RGBColor.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/RGBColor.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,24 +19,22 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"red\"]" js_getRed ::
-        JSRef RGBColor -> IO (JSRef CSSPrimitiveValue)
+        RGBColor -> IO (Nullable CSSPrimitiveValue)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RGBColor.red Mozilla RGBColor.red documentation> 
 getRed :: (MonadIO m) => RGBColor -> m (Maybe CSSPrimitiveValue)
-getRed self = liftIO ((js_getRed (unRGBColor self)) >>= fromJSRef)
+getRed self = liftIO (nullableToMaybe <$> (js_getRed (self)))
  
 foreign import javascript unsafe "$1[\"green\"]" js_getGreen ::
-        JSRef RGBColor -> IO (JSRef CSSPrimitiveValue)
+        RGBColor -> IO (Nullable CSSPrimitiveValue)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RGBColor.green Mozilla RGBColor.green documentation> 
 getGreen :: (MonadIO m) => RGBColor -> m (Maybe CSSPrimitiveValue)
-getGreen self
-  = liftIO ((js_getGreen (unRGBColor self)) >>= fromJSRef)
+getGreen self = liftIO (nullableToMaybe <$> (js_getGreen (self)))
  
 foreign import javascript unsafe "$1[\"blue\"]" js_getBlue ::
-        JSRef RGBColor -> IO (JSRef CSSPrimitiveValue)
+        RGBColor -> IO (Nullable CSSPrimitiveValue)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RGBColor.blue Mozilla RGBColor.blue documentation> 
 getBlue :: (MonadIO m) => RGBColor -> m (Maybe CSSPrimitiveValue)
-getBlue self
-  = liftIO ((js_getBlue (unRGBColor self)) >>= fromJSRef)
+getBlue self = liftIO (nullableToMaybe <$> (js_getBlue (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/RTCConfiguration.hs b/src/GHCJS/DOM/JSFFI/Generated/RTCConfiguration.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/RTCConfiguration.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/RTCConfiguration.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,37 +20,28 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"iceServers\"]"
-        js_getIceServers ::
-        JSRef RTCConfiguration -> IO (JSRef [Maybe RTCIceServer])
+        js_getIceServers :: RTCConfiguration -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCConfiguration.iceServers Mozilla RTCConfiguration.iceServers documentation> 
 getIceServers ::
               (MonadIO m) => RTCConfiguration -> m [Maybe RTCIceServer]
 getIceServers self
-  = liftIO
-      ((js_getIceServers (unRTCConfiguration self)) >>=
-         fromJSRefUnchecked)
+  = liftIO ((js_getIceServers (self)) >>= fromJSRefUnchecked)
  
 foreign import javascript unsafe "$1[\"iceTransports\"]"
-        js_getIceTransports ::
-        JSRef RTCConfiguration -> IO (JSRef RTCIceTransportsEnum)
+        js_getIceTransports :: RTCConfiguration -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCConfiguration.iceTransports Mozilla RTCConfiguration.iceTransports documentation> 
 getIceTransports ::
                  (MonadIO m) => RTCConfiguration -> m RTCIceTransportsEnum
 getIceTransports self
-  = liftIO
-      ((js_getIceTransports (unRTCConfiguration self)) >>=
-         fromJSRefUnchecked)
+  = liftIO ((js_getIceTransports (self)) >>= fromJSRefUnchecked)
  
 foreign import javascript unsafe "$1[\"requestIdentity\"]"
-        js_getRequestIdentity ::
-        JSRef RTCConfiguration -> IO (JSRef RTCIdentityOptionEnum)
+        js_getRequestIdentity :: RTCConfiguration -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCConfiguration.requestIdentity Mozilla RTCConfiguration.requestIdentity documentation> 
 getRequestIdentity ::
                    (MonadIO m) => RTCConfiguration -> m RTCIdentityOptionEnum
 getRequestIdentity self
-  = liftIO
-      ((js_getRequestIdentity (unRTCConfiguration self)) >>=
-         fromJSRefUnchecked)
+  = liftIO ((js_getRequestIdentity (self)) >>= fromJSRefUnchecked)
diff --git a/src/GHCJS/DOM/JSFFI/Generated/RTCDTMFSender.hs b/src/GHCJS/DOM/JSFFI/Generated/RTCDTMFSender.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/RTCDTMFSender.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/RTCDTMFSender.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -21,8 +21,7 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"insertDTMF\"]($2, $3, $4)"
-        js_insertDTMF ::
-        JSRef RTCDTMFSender -> JSString -> Int -> Int -> IO ()
+        js_insertDTMF :: RTCDTMFSender -> JSString -> Int -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCDTMFSender.insertDTMF Mozilla RTCDTMFSender.insertDTMF documentation> 
 insertDTMF ::
@@ -30,50 +29,45 @@
              RTCDTMFSender -> tones -> Int -> Int -> m ()
 insertDTMF self tones duration interToneGap
   = liftIO
-      (js_insertDTMF (unRTCDTMFSender self) (toJSString tones) duration
-         interToneGap)
+      (js_insertDTMF (self) (toJSString tones) duration interToneGap)
  
 foreign import javascript unsafe "($1[\"canInsertDTMF\"] ? 1 : 0)"
-        js_getCanInsertDTMF :: JSRef RTCDTMFSender -> IO Bool
+        js_getCanInsertDTMF :: RTCDTMFSender -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCDTMFSender.canInsertDTMF Mozilla RTCDTMFSender.canInsertDTMF documentation> 
 getCanInsertDTMF :: (MonadIO m) => RTCDTMFSender -> m Bool
-getCanInsertDTMF self
-  = liftIO (js_getCanInsertDTMF (unRTCDTMFSender self))
+getCanInsertDTMF self = liftIO (js_getCanInsertDTMF (self))
  
 foreign import javascript unsafe "$1[\"track\"]" js_getTrack ::
-        JSRef RTCDTMFSender -> IO (JSRef MediaStreamTrack)
+        RTCDTMFSender -> IO (Nullable MediaStreamTrack)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCDTMFSender.track Mozilla RTCDTMFSender.track documentation> 
 getTrack ::
          (MonadIO m) => RTCDTMFSender -> m (Maybe MediaStreamTrack)
-getTrack self
-  = liftIO ((js_getTrack (unRTCDTMFSender self)) >>= fromJSRef)
+getTrack self = liftIO (nullableToMaybe <$> (js_getTrack (self)))
  
 foreign import javascript unsafe "$1[\"toneBuffer\"]"
-        js_getToneBuffer :: JSRef RTCDTMFSender -> IO JSString
+        js_getToneBuffer :: RTCDTMFSender -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCDTMFSender.toneBuffer Mozilla RTCDTMFSender.toneBuffer documentation> 
 getToneBuffer ::
               (MonadIO m, FromJSString result) => RTCDTMFSender -> m result
 getToneBuffer self
-  = liftIO
-      (fromJSString <$> (js_getToneBuffer (unRTCDTMFSender self)))
+  = liftIO (fromJSString <$> (js_getToneBuffer (self)))
  
 foreign import javascript unsafe "$1[\"duration\"]" js_getDuration
-        :: JSRef RTCDTMFSender -> IO Int
+        :: RTCDTMFSender -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCDTMFSender.duration Mozilla RTCDTMFSender.duration documentation> 
 getDuration :: (MonadIO m) => RTCDTMFSender -> m Int
-getDuration self = liftIO (js_getDuration (unRTCDTMFSender self))
+getDuration self = liftIO (js_getDuration (self))
  
 foreign import javascript unsafe "$1[\"interToneGap\"]"
-        js_getInterToneGap :: JSRef RTCDTMFSender -> IO Int
+        js_getInterToneGap :: RTCDTMFSender -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCDTMFSender.interToneGap Mozilla RTCDTMFSender.interToneGap documentation> 
 getInterToneGap :: (MonadIO m) => RTCDTMFSender -> m Int
-getInterToneGap self
-  = liftIO (js_getInterToneGap (unRTCDTMFSender self))
+getInterToneGap self = liftIO (js_getInterToneGap (self))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCDTMFSender.ontonechange Mozilla RTCDTMFSender.ontonechange documentation> 
 toneChange :: EventName RTCDTMFSender Event
diff --git a/src/GHCJS/DOM/JSFFI/Generated/RTCDTMFToneChangeEvent.hs b/src/GHCJS/DOM/JSFFI/Generated/RTCDTMFToneChangeEvent.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/RTCDTMFToneChangeEvent.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/RTCDTMFToneChangeEvent.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,12 +19,10 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"tone\"]" js_getTone ::
-        JSRef RTCDTMFToneChangeEvent -> IO JSString
+        RTCDTMFToneChangeEvent -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCDTMFToneChangeEvent.tone Mozilla RTCDTMFToneChangeEvent.tone documentation> 
 getTone ::
         (MonadIO m, FromJSString result) =>
           RTCDTMFToneChangeEvent -> m result
-getTone self
-  = liftIO
-      (fromJSString <$> (js_getTone (unRTCDTMFToneChangeEvent self)))
+getTone self = liftIO (fromJSString <$> (js_getTone (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/RTCDataChannel.hs b/src/GHCJS/DOM/JSFFI/Generated/RTCDataChannel.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/RTCDataChannel.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/RTCDataChannel.hs
@@ -13,7 +13,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -27,7 +27,7 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"send\"]($2)" js_send ::
-        JSRef RTCDataChannel -> JSRef ArrayBuffer -> IO ()
+        RTCDataChannel -> Nullable ArrayBuffer -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCDataChannel.send Mozilla RTCDataChannel.send documentation> 
 send ::
@@ -35,11 +35,10 @@
        RTCDataChannel -> Maybe data' -> m ()
 send self data'
   = liftIO
-      (js_send (unRTCDataChannel self)
-         (maybe jsNull (unArrayBuffer . toArrayBuffer) data'))
+      (js_send (self) (maybeToNullable (fmap toArrayBuffer data')))
  
 foreign import javascript unsafe "$1[\"send\"]($2)" js_sendView ::
-        JSRef RTCDataChannel -> JSRef ArrayBufferView -> IO ()
+        RTCDataChannel -> Nullable ArrayBufferView -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCDataChannel.send Mozilla RTCDataChannel.send documentation> 
 sendView ::
@@ -47,130 +46,119 @@
            RTCDataChannel -> Maybe data' -> m ()
 sendView self data'
   = liftIO
-      (js_sendView (unRTCDataChannel self)
-         (maybe jsNull (unArrayBufferView . toArrayBufferView) data'))
+      (js_sendView (self)
+         (maybeToNullable (fmap toArrayBufferView data')))
  
 foreign import javascript unsafe "$1[\"send\"]($2)" js_sendBlob ::
-        JSRef RTCDataChannel -> JSRef Blob -> IO ()
+        RTCDataChannel -> Nullable Blob -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCDataChannel.send Mozilla RTCDataChannel.send documentation> 
 sendBlob ::
          (MonadIO m, IsBlob data') => RTCDataChannel -> Maybe data' -> m ()
 sendBlob self data'
-  = liftIO
-      (js_sendBlob (unRTCDataChannel self)
-         (maybe jsNull (unBlob . toBlob) data'))
+  = liftIO (js_sendBlob (self) (maybeToNullable (fmap toBlob data')))
  
 foreign import javascript unsafe "$1[\"send\"]($2)" js_sendString
-        :: JSRef RTCDataChannel -> JSString -> IO ()
+        :: RTCDataChannel -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCDataChannel.send Mozilla RTCDataChannel.send documentation> 
 sendString ::
            (MonadIO m, ToJSString data') => RTCDataChannel -> data' -> m ()
 sendString self data'
-  = liftIO (js_sendString (unRTCDataChannel self) (toJSString data'))
+  = liftIO (js_sendString (self) (toJSString data'))
  
 foreign import javascript unsafe "$1[\"close\"]()" js_close ::
-        JSRef RTCDataChannel -> IO ()
+        RTCDataChannel -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCDataChannel.close Mozilla RTCDataChannel.close documentation> 
 close :: (MonadIO m) => RTCDataChannel -> m ()
-close self = liftIO (js_close (unRTCDataChannel self))
+close self = liftIO (js_close (self))
  
 foreign import javascript unsafe "$1[\"label\"]" js_getLabel ::
-        JSRef RTCDataChannel -> IO JSString
+        RTCDataChannel -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCDataChannel.label Mozilla RTCDataChannel.label documentation> 
 getLabel ::
          (MonadIO m, FromJSString result) => RTCDataChannel -> m result
-getLabel self
-  = liftIO (fromJSString <$> (js_getLabel (unRTCDataChannel self)))
+getLabel self = liftIO (fromJSString <$> (js_getLabel (self)))
  
 foreign import javascript unsafe "($1[\"ordered\"] ? 1 : 0)"
-        js_getOrdered :: JSRef RTCDataChannel -> IO Bool
+        js_getOrdered :: RTCDataChannel -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCDataChannel.ordered Mozilla RTCDataChannel.ordered documentation> 
 getOrdered :: (MonadIO m) => RTCDataChannel -> m Bool
-getOrdered self = liftIO (js_getOrdered (unRTCDataChannel self))
+getOrdered self = liftIO (js_getOrdered (self))
  
 foreign import javascript unsafe "$1[\"maxRetransmitTime\"]"
-        js_getMaxRetransmitTime :: JSRef RTCDataChannel -> IO Word
+        js_getMaxRetransmitTime :: RTCDataChannel -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCDataChannel.maxRetransmitTime Mozilla RTCDataChannel.maxRetransmitTime documentation> 
 getMaxRetransmitTime :: (MonadIO m) => RTCDataChannel -> m Word
-getMaxRetransmitTime self
-  = liftIO (js_getMaxRetransmitTime (unRTCDataChannel self))
+getMaxRetransmitTime self = liftIO (js_getMaxRetransmitTime (self))
  
 foreign import javascript unsafe "$1[\"maxRetransmits\"]"
-        js_getMaxRetransmits :: JSRef RTCDataChannel -> IO Word
+        js_getMaxRetransmits :: RTCDataChannel -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCDataChannel.maxRetransmits Mozilla RTCDataChannel.maxRetransmits documentation> 
 getMaxRetransmits :: (MonadIO m) => RTCDataChannel -> m Word
-getMaxRetransmits self
-  = liftIO (js_getMaxRetransmits (unRTCDataChannel self))
+getMaxRetransmits self = liftIO (js_getMaxRetransmits (self))
  
 foreign import javascript unsafe "$1[\"protocol\"]" js_getProtocol
-        :: JSRef RTCDataChannel -> IO JSString
+        :: RTCDataChannel -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCDataChannel.protocol Mozilla RTCDataChannel.protocol documentation> 
 getProtocol ::
             (MonadIO m, FromJSString result) => RTCDataChannel -> m result
 getProtocol self
-  = liftIO
-      (fromJSString <$> (js_getProtocol (unRTCDataChannel self)))
+  = liftIO (fromJSString <$> (js_getProtocol (self)))
  
 foreign import javascript unsafe "($1[\"negotiated\"] ? 1 : 0)"
-        js_getNegotiated :: JSRef RTCDataChannel -> IO Bool
+        js_getNegotiated :: RTCDataChannel -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCDataChannel.negotiated Mozilla RTCDataChannel.negotiated documentation> 
 getNegotiated :: (MonadIO m) => RTCDataChannel -> m Bool
-getNegotiated self
-  = liftIO (js_getNegotiated (unRTCDataChannel self))
+getNegotiated self = liftIO (js_getNegotiated (self))
  
 foreign import javascript unsafe "$1[\"id\"]" js_getId ::
-        JSRef RTCDataChannel -> IO Word
+        RTCDataChannel -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCDataChannel.id Mozilla RTCDataChannel.id documentation> 
 getId :: (MonadIO m) => RTCDataChannel -> m Word
-getId self = liftIO (js_getId (unRTCDataChannel self))
+getId self = liftIO (js_getId (self))
  
 foreign import javascript unsafe "$1[\"readyState\"]"
-        js_getReadyState :: JSRef RTCDataChannel -> IO JSString
+        js_getReadyState :: RTCDataChannel -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCDataChannel.readyState Mozilla RTCDataChannel.readyState documentation> 
 getReadyState ::
               (MonadIO m, FromJSString result) => RTCDataChannel -> m result
 getReadyState self
-  = liftIO
-      (fromJSString <$> (js_getReadyState (unRTCDataChannel self)))
+  = liftIO (fromJSString <$> (js_getReadyState (self)))
  
 foreign import javascript unsafe "$1[\"bufferedAmount\"]"
-        js_getBufferedAmount :: JSRef RTCDataChannel -> IO Word
+        js_getBufferedAmount :: RTCDataChannel -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCDataChannel.bufferedAmount Mozilla RTCDataChannel.bufferedAmount documentation> 
 getBufferedAmount :: (MonadIO m) => RTCDataChannel -> m Word
-getBufferedAmount self
-  = liftIO (js_getBufferedAmount (unRTCDataChannel self))
+getBufferedAmount self = liftIO (js_getBufferedAmount (self))
  
 foreign import javascript unsafe "$1[\"binaryType\"] = $2;"
-        js_setBinaryType :: JSRef RTCDataChannel -> JSString -> IO ()
+        js_setBinaryType :: RTCDataChannel -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCDataChannel.binaryType Mozilla RTCDataChannel.binaryType documentation> 
 setBinaryType ::
               (MonadIO m, ToJSString val) => RTCDataChannel -> val -> m ()
 setBinaryType self val
-  = liftIO
-      (js_setBinaryType (unRTCDataChannel self) (toJSString val))
+  = liftIO (js_setBinaryType (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"binaryType\"]"
-        js_getBinaryType :: JSRef RTCDataChannel -> IO JSString
+        js_getBinaryType :: RTCDataChannel -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCDataChannel.binaryType Mozilla RTCDataChannel.binaryType documentation> 
 getBinaryType ::
               (MonadIO m, FromJSString result) => RTCDataChannel -> m result
 getBinaryType self
-  = liftIO
-      (fromJSString <$> (js_getBinaryType (unRTCDataChannel self)))
+  = liftIO (fromJSString <$> (js_getBinaryType (self)))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCDataChannel.onopen Mozilla RTCDataChannel.onopen documentation> 
 open :: EventName RTCDataChannel Event
diff --git a/src/GHCJS/DOM/JSFFI/Generated/RTCDataChannelEvent.hs b/src/GHCJS/DOM/JSFFI/Generated/RTCDataChannelEvent.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/RTCDataChannelEvent.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/RTCDataChannelEvent.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,11 +19,10 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"channel\"]" js_getChannel ::
-        JSRef RTCDataChannelEvent -> IO (JSRef RTCDataChannel)
+        RTCDataChannelEvent -> IO (Nullable RTCDataChannel)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCDataChannelEvent.channel Mozilla RTCDataChannelEvent.channel documentation> 
 getChannel ::
            (MonadIO m) => RTCDataChannelEvent -> m (Maybe RTCDataChannel)
 getChannel self
-  = liftIO
-      ((js_getChannel (unRTCDataChannelEvent self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getChannel (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/RTCIceCandidate.hs b/src/GHCJS/DOM/JSFFI/Generated/RTCIceCandidate.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/RTCIceCandidate.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/RTCIceCandidate.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -22,7 +22,7 @@
  
 foreign import javascript unsafe
         "new window[\"RTCIceCandidate\"]($1)" js_newRTCIceCandidate ::
-        JSRef Dictionary -> IO (JSRef RTCIceCandidate)
+        Nullable Dictionary -> IO RTCIceCandidate
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCIceCandidate Mozilla RTCIceCandidate documentation> 
 newRTCIceCandidate ::
@@ -31,32 +31,28 @@
 newRTCIceCandidate dictionary
   = liftIO
       (js_newRTCIceCandidate
-         (maybe jsNull (unDictionary . toDictionary) dictionary)
-         >>= fromJSRefUnchecked)
+         (maybeToNullable (fmap toDictionary dictionary)))
  
 foreign import javascript unsafe "$1[\"candidate\"]"
-        js_getCandidate :: JSRef RTCIceCandidate -> IO JSString
+        js_getCandidate :: RTCIceCandidate -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCIceCandidate.candidate Mozilla RTCIceCandidate.candidate documentation> 
 getCandidate ::
              (MonadIO m, FromJSString result) => RTCIceCandidate -> m result
 getCandidate self
-  = liftIO
-      (fromJSString <$> (js_getCandidate (unRTCIceCandidate self)))
+  = liftIO (fromJSString <$> (js_getCandidate (self)))
  
 foreign import javascript unsafe "$1[\"sdpMid\"]" js_getSdpMid ::
-        JSRef RTCIceCandidate -> IO JSString
+        RTCIceCandidate -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCIceCandidate.sdpMid Mozilla RTCIceCandidate.sdpMid documentation> 
 getSdpMid ::
           (MonadIO m, FromJSString result) => RTCIceCandidate -> m result
-getSdpMid self
-  = liftIO (fromJSString <$> (js_getSdpMid (unRTCIceCandidate self)))
+getSdpMid self = liftIO (fromJSString <$> (js_getSdpMid (self)))
  
 foreign import javascript unsafe "$1[\"sdpMLineIndex\"]"
-        js_getSdpMLineIndex :: JSRef RTCIceCandidate -> IO Word
+        js_getSdpMLineIndex :: RTCIceCandidate -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCIceCandidate.sdpMLineIndex Mozilla RTCIceCandidate.sdpMLineIndex documentation> 
 getSdpMLineIndex :: (MonadIO m) => RTCIceCandidate -> m Word
-getSdpMLineIndex self
-  = liftIO (js_getSdpMLineIndex (unRTCIceCandidate self))
+getSdpMLineIndex self = liftIO (js_getSdpMLineIndex (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/RTCIceCandidateEvent.hs b/src/GHCJS/DOM/JSFFI/Generated/RTCIceCandidateEvent.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/RTCIceCandidateEvent.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/RTCIceCandidateEvent.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,11 +20,10 @@
  
 foreign import javascript unsafe "$1[\"candidate\"]"
         js_getCandidate ::
-        JSRef RTCIceCandidateEvent -> IO (JSRef RTCIceCandidate)
+        RTCIceCandidateEvent -> IO (Nullable RTCIceCandidate)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCIceCandidateEvent.candidate Mozilla RTCIceCandidateEvent.candidate documentation> 
 getCandidate ::
              (MonadIO m) => RTCIceCandidateEvent -> m (Maybe RTCIceCandidate)
 getCandidate self
-  = liftIO
-      ((js_getCandidate (unRTCIceCandidateEvent self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getCandidate (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/RTCIceServer.hs b/src/GHCJS/DOM/JSFFI/Generated/RTCIceServer.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/RTCIceServer.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/RTCIceServer.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,30 +20,27 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"urls\"]" js_getUrls ::
-        JSRef RTCIceServer -> IO (JSRef [result])
+        RTCIceServer -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCIceServer.urls Mozilla RTCIceServer.urls documentation> 
 getUrls ::
         (MonadIO m, FromJSString result) => RTCIceServer -> m [result]
-getUrls self
-  = liftIO
-      ((js_getUrls (unRTCIceServer self)) >>= fromJSRefUnchecked)
+getUrls self = liftIO ((js_getUrls (self)) >>= fromJSRefUnchecked)
  
 foreign import javascript unsafe "$1[\"username\"]" js_getUsername
-        :: JSRef RTCIceServer -> IO JSString
+        :: RTCIceServer -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCIceServer.username Mozilla RTCIceServer.username documentation> 
 getUsername ::
             (MonadIO m, FromJSString result) => RTCIceServer -> m result
 getUsername self
-  = liftIO (fromJSString <$> (js_getUsername (unRTCIceServer self)))
+  = liftIO (fromJSString <$> (js_getUsername (self)))
  
 foreign import javascript unsafe "$1[\"credential\"]"
-        js_getCredential :: JSRef RTCIceServer -> IO JSString
+        js_getCredential :: RTCIceServer -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCIceServer.credential Mozilla RTCIceServer.credential documentation> 
 getCredential ::
               (MonadIO m, FromJSString result) => RTCIceServer -> m result
 getCredential self
-  = liftIO
-      (fromJSString <$> (js_getCredential (unRTCIceServer self)))
+  = liftIO (fromJSString <$> (js_getCredential (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/RTCPeerConnection.hs b/src/GHCJS/DOM/JSFFI/Generated/RTCPeerConnection.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/RTCPeerConnection.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/RTCPeerConnection.hs
@@ -20,7 +20,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -36,7 +36,7 @@
 foreign import javascript unsafe
         "new window[\"webkitRTCPeerConnection\"]($1)"
         js_newRTCPeerConnection ::
-        JSRef Dictionary -> IO (JSRef RTCPeerConnection)
+        Nullable Dictionary -> IO RTCPeerConnection
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/webkitRTCPeerConnection Mozilla webkitRTCPeerConnection documentation> 
 newRTCPeerConnection ::
@@ -45,14 +45,14 @@
 newRTCPeerConnection rtcConfiguration
   = liftIO
       (js_newRTCPeerConnection
-         (maybe jsNull (unDictionary . toDictionary) rtcConfiguration)
-         >>= fromJSRefUnchecked)
+         (maybeToNullable (fmap toDictionary rtcConfiguration)))
  
 foreign import javascript unsafe "$1[\"createOffer\"]($2, $3, $4)"
         js_createOffer ::
-        JSRef RTCPeerConnection ->
-          JSRef RTCSessionDescriptionCallback ->
-            JSRef RTCPeerConnectionErrorCallback -> JSRef Dictionary -> IO ()
+        RTCPeerConnection ->
+          Nullable RTCSessionDescriptionCallback ->
+            Nullable RTCPeerConnectionErrorCallback ->
+              Nullable Dictionary -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/webkitRTCPeerConnection.createOffer Mozilla webkitRTCPeerConnection.createOffer documentation> 
 createOffer ::
@@ -62,16 +62,16 @@
                   Maybe RTCPeerConnectionErrorCallback -> Maybe offerOptions -> m ()
 createOffer self successCallback failureCallback offerOptions
   = liftIO
-      (js_createOffer (unRTCPeerConnection self)
-         (maybe jsNull pToJSRef successCallback)
-         (maybe jsNull pToJSRef failureCallback)
-         (maybe jsNull (unDictionary . toDictionary) offerOptions))
+      (js_createOffer (self) (maybeToNullable successCallback)
+         (maybeToNullable failureCallback)
+         (maybeToNullable (fmap toDictionary offerOptions)))
  
 foreign import javascript unsafe "$1[\"createAnswer\"]($2, $3, $4)"
         js_createAnswer ::
-        JSRef RTCPeerConnection ->
-          JSRef RTCSessionDescriptionCallback ->
-            JSRef RTCPeerConnectionErrorCallback -> JSRef Dictionary -> IO ()
+        RTCPeerConnection ->
+          Nullable RTCSessionDescriptionCallback ->
+            Nullable RTCPeerConnectionErrorCallback ->
+              Nullable Dictionary -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/webkitRTCPeerConnection.createAnswer Mozilla webkitRTCPeerConnection.createAnswer documentation> 
 createAnswer ::
@@ -81,17 +81,17 @@
                    Maybe RTCPeerConnectionErrorCallback -> Maybe answerOptions -> m ()
 createAnswer self successCallback failureCallback answerOptions
   = liftIO
-      (js_createAnswer (unRTCPeerConnection self)
-         (maybe jsNull pToJSRef successCallback)
-         (maybe jsNull pToJSRef failureCallback)
-         (maybe jsNull (unDictionary . toDictionary) answerOptions))
+      (js_createAnswer (self) (maybeToNullable successCallback)
+         (maybeToNullable failureCallback)
+         (maybeToNullable (fmap toDictionary answerOptions)))
  
 foreign import javascript unsafe
         "$1[\"setLocalDescription\"]($2,\n$3, $4)" js_setLocalDescription
         ::
-        JSRef RTCPeerConnection ->
-          JSRef RTCSessionDescription ->
-            JSRef VoidCallback -> JSRef RTCPeerConnectionErrorCallback -> IO ()
+        RTCPeerConnection ->
+          Nullable RTCSessionDescription ->
+            Nullable VoidCallback ->
+              Nullable RTCPeerConnectionErrorCallback -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/webkitRTCPeerConnection.setLocalDescription Mozilla webkitRTCPeerConnection.setLocalDescription documentation> 
 setLocalDescription ::
@@ -102,17 +102,17 @@
 setLocalDescription self description successCallback
   failureCallback
   = liftIO
-      (js_setLocalDescription (unRTCPeerConnection self)
-         (maybe jsNull pToJSRef description)
-         (maybe jsNull pToJSRef successCallback)
-         (maybe jsNull pToJSRef failureCallback))
+      (js_setLocalDescription (self) (maybeToNullable description)
+         (maybeToNullable successCallback)
+         (maybeToNullable failureCallback))
  
 foreign import javascript unsafe
         "$1[\"setRemoteDescription\"]($2,\n$3, $4)" js_setRemoteDescription
         ::
-        JSRef RTCPeerConnection ->
-          JSRef RTCSessionDescription ->
-            JSRef VoidCallback -> JSRef RTCPeerConnectionErrorCallback -> IO ()
+        RTCPeerConnection ->
+          Nullable RTCSessionDescription ->
+            Nullable VoidCallback ->
+              Nullable RTCPeerConnectionErrorCallback -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/webkitRTCPeerConnection.setRemoteDescription Mozilla webkitRTCPeerConnection.setRemoteDescription documentation> 
 setRemoteDescription ::
@@ -123,14 +123,12 @@
 setRemoteDescription self description successCallback
   failureCallback
   = liftIO
-      (js_setRemoteDescription (unRTCPeerConnection self)
-         (maybe jsNull pToJSRef description)
-         (maybe jsNull pToJSRef successCallback)
-         (maybe jsNull pToJSRef failureCallback))
+      (js_setRemoteDescription (self) (maybeToNullable description)
+         (maybeToNullable successCallback)
+         (maybeToNullable failureCallback))
  
 foreign import javascript unsafe "$1[\"updateIce\"]($2)"
-        js_updateIce ::
-        JSRef RTCPeerConnection -> JSRef Dictionary -> IO ()
+        js_updateIce :: RTCPeerConnection -> Nullable Dictionary -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/webkitRTCPeerConnection.updateIce Mozilla webkitRTCPeerConnection.updateIce documentation> 
 updateIce ::
@@ -138,14 +136,15 @@
             RTCPeerConnection -> Maybe configuration -> m ()
 updateIce self configuration
   = liftIO
-      (js_updateIce (unRTCPeerConnection self)
-         (maybe jsNull (unDictionary . toDictionary) configuration))
+      (js_updateIce (self)
+         (maybeToNullable (fmap toDictionary configuration)))
  
 foreign import javascript unsafe
         "$1[\"addIceCandidate\"]($2, $3,\n$4)" js_addIceCandidate ::
-        JSRef RTCPeerConnection ->
-          JSRef RTCIceCandidate ->
-            JSRef VoidCallback -> JSRef RTCPeerConnectionErrorCallback -> IO ()
+        RTCPeerConnection ->
+          Nullable RTCIceCandidate ->
+            Nullable VoidCallback ->
+              Nullable RTCPeerConnectionErrorCallback -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/webkitRTCPeerConnection.addIceCandidate Mozilla webkitRTCPeerConnection.addIceCandidate documentation> 
 addIceCandidate ::
@@ -155,38 +154,31 @@
                       Maybe VoidCallback -> Maybe RTCPeerConnectionErrorCallback -> m ()
 addIceCandidate self candidate successCallback failureCallback
   = liftIO
-      (js_addIceCandidate (unRTCPeerConnection self)
-         (maybe jsNull pToJSRef candidate)
-         (maybe jsNull pToJSRef successCallback)
-         (maybe jsNull pToJSRef failureCallback))
+      (js_addIceCandidate (self) (maybeToNullable candidate)
+         (maybeToNullable successCallback)
+         (maybeToNullable failureCallback))
  
 foreign import javascript unsafe "$1[\"getLocalStreams\"]()"
-        js_getLocalStreams ::
-        JSRef RTCPeerConnection -> IO (JSRef [Maybe MediaStream])
+        js_getLocalStreams :: RTCPeerConnection -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/webkitRTCPeerConnection.getLocalStreams Mozilla webkitRTCPeerConnection.getLocalStreams documentation> 
 getLocalStreams ::
                 (MonadIO m) => RTCPeerConnection -> m [Maybe MediaStream]
 getLocalStreams self
-  = liftIO
-      ((js_getLocalStreams (unRTCPeerConnection self)) >>=
-         fromJSRefUnchecked)
+  = liftIO ((js_getLocalStreams (self)) >>= fromJSRefUnchecked)
  
 foreign import javascript unsafe "$1[\"getRemoteStreams\"]()"
-        js_getRemoteStreams ::
-        JSRef RTCPeerConnection -> IO (JSRef [Maybe MediaStream])
+        js_getRemoteStreams :: RTCPeerConnection -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/webkitRTCPeerConnection.getRemoteStreams Mozilla webkitRTCPeerConnection.getRemoteStreams documentation> 
 getRemoteStreams ::
                  (MonadIO m) => RTCPeerConnection -> m [Maybe MediaStream]
 getRemoteStreams self
-  = liftIO
-      ((js_getRemoteStreams (unRTCPeerConnection self)) >>=
-         fromJSRefUnchecked)
+  = liftIO ((js_getRemoteStreams (self)) >>= fromJSRefUnchecked)
  
 foreign import javascript unsafe "$1[\"getStreamById\"]($2)"
         js_getStreamById ::
-        JSRef RTCPeerConnection -> JSString -> IO (JSRef MediaStream)
+        RTCPeerConnection -> JSString -> IO (Nullable MediaStream)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/webkitRTCPeerConnection.getStreamById Mozilla webkitRTCPeerConnection.getStreamById documentation> 
 getStreamById ::
@@ -194,51 +186,44 @@
                 RTCPeerConnection -> streamId -> m (Maybe MediaStream)
 getStreamById self streamId
   = liftIO
-      ((js_getStreamById (unRTCPeerConnection self)
-          (toJSString streamId))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_getStreamById (self) (toJSString streamId)))
  
 foreign import javascript unsafe "$1[\"getConfiguration\"]()"
         js_getConfiguration ::
-        JSRef RTCPeerConnection -> IO (JSRef RTCConfiguration)
+        RTCPeerConnection -> IO (Nullable RTCConfiguration)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/webkitRTCPeerConnection.getConfiguration Mozilla webkitRTCPeerConnection.getConfiguration documentation> 
 getConfiguration ::
                  (MonadIO m) => RTCPeerConnection -> m (Maybe RTCConfiguration)
 getConfiguration self
-  = liftIO
-      ((js_getConfiguration (unRTCPeerConnection self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getConfiguration (self)))
  
 foreign import javascript unsafe "$1[\"addStream\"]($2)"
-        js_addStream ::
-        JSRef RTCPeerConnection -> JSRef MediaStream -> IO ()
+        js_addStream :: RTCPeerConnection -> Nullable MediaStream -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/webkitRTCPeerConnection.addStream Mozilla webkitRTCPeerConnection.addStream documentation> 
 addStream ::
           (MonadIO m) => RTCPeerConnection -> Maybe MediaStream -> m ()
 addStream self stream
-  = liftIO
-      (js_addStream (unRTCPeerConnection self)
-         (maybe jsNull pToJSRef stream))
+  = liftIO (js_addStream (self) (maybeToNullable stream))
  
 foreign import javascript unsafe "$1[\"removeStream\"]($2)"
         js_removeStream ::
-        JSRef RTCPeerConnection -> JSRef MediaStream -> IO ()
+        RTCPeerConnection -> Nullable MediaStream -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/webkitRTCPeerConnection.removeStream Mozilla webkitRTCPeerConnection.removeStream documentation> 
 removeStream ::
              (MonadIO m) => RTCPeerConnection -> Maybe MediaStream -> m ()
 removeStream self stream
-  = liftIO
-      (js_removeStream (unRTCPeerConnection self)
-         (maybe jsNull pToJSRef stream))
+  = liftIO (js_removeStream (self) (maybeToNullable stream))
  
 foreign import javascript unsafe "$1[\"getStats\"]($2, $3, $4)"
         js_getStats ::
-        JSRef RTCPeerConnection ->
-          JSRef RTCStatsCallback ->
-            JSRef RTCPeerConnectionErrorCallback ->
-              JSRef MediaStreamTrack -> IO ()
+        RTCPeerConnection ->
+          Nullable RTCStatsCallback ->
+            Nullable RTCPeerConnectionErrorCallback ->
+              Nullable MediaStreamTrack -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/webkitRTCPeerConnection.getStats Mozilla webkitRTCPeerConnection.getStats documentation> 
 getStats ::
@@ -248,16 +233,15 @@
                Maybe RTCPeerConnectionErrorCallback -> Maybe selector -> m ()
 getStats self successCallback failureCallback selector
   = liftIO
-      (js_getStats (unRTCPeerConnection self)
-         (maybe jsNull pToJSRef successCallback)
-         (maybe jsNull pToJSRef failureCallback)
-         (maybe jsNull (unMediaStreamTrack . toMediaStreamTrack) selector))
+      (js_getStats (self) (maybeToNullable successCallback)
+         (maybeToNullable failureCallback)
+         (maybeToNullable (fmap toMediaStreamTrack selector)))
  
 foreign import javascript unsafe
         "$1[\"createDataChannel\"]($2, $3)" js_createDataChannel ::
-        JSRef RTCPeerConnection ->
-          JSRef (Maybe JSString) ->
-            JSRef Dictionary -> IO (JSRef RTCDataChannel)
+        RTCPeerConnection ->
+          Nullable JSString ->
+            Nullable Dictionary -> IO (Nullable RTCDataChannel)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/webkitRTCPeerConnection.createDataChannel Mozilla webkitRTCPeerConnection.createDataChannel documentation> 
 createDataChannel ::
@@ -266,15 +250,14 @@
                       Maybe label -> Maybe options -> m (Maybe RTCDataChannel)
 createDataChannel self label options
   = liftIO
-      ((js_createDataChannel (unRTCPeerConnection self)
-          (toMaybeJSString label)
-          (maybe jsNull (unDictionary . toDictionary) options))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createDataChannel (self) (toMaybeJSString label)
+            (maybeToNullable (fmap toDictionary options))))
  
 foreign import javascript unsafe "$1[\"createDTMFSender\"]($2)"
         js_createDTMFSender ::
-        JSRef RTCPeerConnection ->
-          JSRef MediaStreamTrack -> IO (JSRef RTCDTMFSender)
+        RTCPeerConnection ->
+          Nullable MediaStreamTrack -> IO (Nullable RTCDTMFSender)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/webkitRTCPeerConnection.createDTMFSender Mozilla webkitRTCPeerConnection.createDTMFSender documentation> 
 createDTMFSender ::
@@ -282,72 +265,63 @@
                    RTCPeerConnection -> Maybe track -> m (Maybe RTCDTMFSender)
 createDTMFSender self track
   = liftIO
-      ((js_createDTMFSender (unRTCPeerConnection self)
-          (maybe jsNull (unMediaStreamTrack . toMediaStreamTrack) track))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createDTMFSender (self)
+            (maybeToNullable (fmap toMediaStreamTrack track))))
  
 foreign import javascript unsafe "$1[\"close\"]()" js_close ::
-        JSRef RTCPeerConnection -> IO ()
+        RTCPeerConnection -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/webkitRTCPeerConnection.close Mozilla webkitRTCPeerConnection.close documentation> 
 close :: (MonadIO m) => RTCPeerConnection -> m ()
-close self = liftIO (js_close (unRTCPeerConnection self))
+close self = liftIO (js_close (self))
  
 foreign import javascript unsafe "$1[\"localDescription\"]"
         js_getLocalDescription ::
-        JSRef RTCPeerConnection -> IO (JSRef RTCSessionDescription)
+        RTCPeerConnection -> IO (Nullable RTCSessionDescription)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/webkitRTCPeerConnection.localDescription Mozilla webkitRTCPeerConnection.localDescription documentation> 
 getLocalDescription ::
                     (MonadIO m) => RTCPeerConnection -> m (Maybe RTCSessionDescription)
 getLocalDescription self
-  = liftIO
-      ((js_getLocalDescription (unRTCPeerConnection self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getLocalDescription (self)))
  
 foreign import javascript unsafe "$1[\"remoteDescription\"]"
         js_getRemoteDescription ::
-        JSRef RTCPeerConnection -> IO (JSRef RTCSessionDescription)
+        RTCPeerConnection -> IO (Nullable RTCSessionDescription)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/webkitRTCPeerConnection.remoteDescription Mozilla webkitRTCPeerConnection.remoteDescription documentation> 
 getRemoteDescription ::
                      (MonadIO m) => RTCPeerConnection -> m (Maybe RTCSessionDescription)
 getRemoteDescription self
-  = liftIO
-      ((js_getRemoteDescription (unRTCPeerConnection self)) >>=
-         fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getRemoteDescription (self)))
  
 foreign import javascript unsafe "$1[\"signalingState\"]"
-        js_getSignalingState :: JSRef RTCPeerConnection -> IO JSString
+        js_getSignalingState :: RTCPeerConnection -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/webkitRTCPeerConnection.signalingState Mozilla webkitRTCPeerConnection.signalingState documentation> 
 getSignalingState ::
                   (MonadIO m, FromJSString result) => RTCPeerConnection -> m result
 getSignalingState self
-  = liftIO
-      (fromJSString <$>
-         (js_getSignalingState (unRTCPeerConnection self)))
+  = liftIO (fromJSString <$> (js_getSignalingState (self)))
  
 foreign import javascript unsafe "$1[\"iceGatheringState\"]"
-        js_getIceGatheringState :: JSRef RTCPeerConnection -> IO JSString
+        js_getIceGatheringState :: RTCPeerConnection -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/webkitRTCPeerConnection.iceGatheringState Mozilla webkitRTCPeerConnection.iceGatheringState documentation> 
 getIceGatheringState ::
                      (MonadIO m, FromJSString result) => RTCPeerConnection -> m result
 getIceGatheringState self
-  = liftIO
-      (fromJSString <$>
-         (js_getIceGatheringState (unRTCPeerConnection self)))
+  = liftIO (fromJSString <$> (js_getIceGatheringState (self)))
  
 foreign import javascript unsafe "$1[\"iceConnectionState\"]"
-        js_getIceConnectionState :: JSRef RTCPeerConnection -> IO JSString
+        js_getIceConnectionState :: RTCPeerConnection -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/webkitRTCPeerConnection.iceConnectionState Mozilla webkitRTCPeerConnection.iceConnectionState documentation> 
 getIceConnectionState ::
                       (MonadIO m, FromJSString result) => RTCPeerConnection -> m result
 getIceConnectionState self
-  = liftIO
-      (fromJSString <$>
-         (js_getIceConnectionState (unRTCPeerConnection self)))
+  = liftIO (fromJSString <$> (js_getIceConnectionState (self)))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/webkitRTCPeerConnection.onnegotiationneeded Mozilla webkitRTCPeerConnection.onnegotiationneeded documentation> 
 negotiationNeeded :: EventName RTCPeerConnection Event
diff --git a/src/GHCJS/DOM/JSFFI/Generated/RTCPeerConnectionErrorCallback.hs b/src/GHCJS/DOM/JSFFI/Generated/RTCPeerConnectionErrorCallback.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/RTCPeerConnectionErrorCallback.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/RTCPeerConnectionErrorCallback.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -26,9 +26,10 @@
                                     (Maybe DOMError -> IO ()) -> m RTCPeerConnectionErrorCallback
 newRTCPeerConnectionErrorCallback callback
   = liftIO
-      (syncCallback1 ThrowWouldBlock
-         (\ error ->
-            fromJSRefUnchecked error >>= \ error' -> callback error'))
+      (RTCPeerConnectionErrorCallback <$>
+         syncCallback1 ThrowWouldBlock
+           (\ error ->
+              fromJSRefUnchecked error >>= \ error' -> callback error'))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnectionErrorCallback Mozilla RTCPeerConnectionErrorCallback documentation> 
 newRTCPeerConnectionErrorCallbackSync ::
@@ -37,9 +38,10 @@
                                           m RTCPeerConnectionErrorCallback
 newRTCPeerConnectionErrorCallbackSync callback
   = liftIO
-      (syncCallback1 ContinueAsync
-         (\ error ->
-            fromJSRefUnchecked error >>= \ error' -> callback error'))
+      (RTCPeerConnectionErrorCallback <$>
+         syncCallback1 ContinueAsync
+           (\ error ->
+              fromJSRefUnchecked error >>= \ error' -> callback error'))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnectionErrorCallback Mozilla RTCPeerConnectionErrorCallback documentation> 
 newRTCPeerConnectionErrorCallbackAsync ::
@@ -48,6 +50,7 @@
                                            m RTCPeerConnectionErrorCallback
 newRTCPeerConnectionErrorCallbackAsync callback
   = liftIO
-      (asyncCallback1
-         (\ error ->
-            fromJSRefUnchecked error >>= \ error' -> callback error'))
+      (RTCPeerConnectionErrorCallback <$>
+         asyncCallback1
+           (\ error ->
+              fromJSRefUnchecked error >>= \ error' -> callback error'))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/RTCSessionDescription.hs b/src/GHCJS/DOM/JSFFI/Generated/RTCSessionDescription.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/RTCSessionDescription.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/RTCSessionDescription.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -23,7 +23,7 @@
 foreign import javascript unsafe
         "new window[\"RTCSessionDescription\"]($1)"
         js_newRTCSessionDescription ::
-        JSRef Dictionary -> IO (JSRef RTCSessionDescription)
+        Nullable Dictionary -> IO RTCSessionDescription
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCSessionDescription Mozilla RTCSessionDescription documentation> 
 newRTCSessionDescription ::
@@ -32,47 +32,38 @@
 newRTCSessionDescription dictionary
   = liftIO
       (js_newRTCSessionDescription
-         (maybe jsNull (unDictionary . toDictionary) dictionary)
-         >>= fromJSRefUnchecked)
+         (maybeToNullable (fmap toDictionary dictionary)))
  
 foreign import javascript unsafe "$1[\"type\"] = $2;" js_setType ::
-        JSRef RTCSessionDescription -> JSString -> IO ()
+        RTCSessionDescription -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCSessionDescription.type Mozilla RTCSessionDescription.type documentation> 
 setType ::
         (MonadIO m, ToJSString val) => RTCSessionDescription -> val -> m ()
-setType self val
-  = liftIO
-      (js_setType (unRTCSessionDescription self) (toJSString val))
+setType self val = liftIO (js_setType (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"type\"]" js_getType ::
-        JSRef RTCSessionDescription -> IO JSString
+        RTCSessionDescription -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCSessionDescription.type Mozilla RTCSessionDescription.type documentation> 
 getType ::
         (MonadIO m, FromJSString result) =>
           RTCSessionDescription -> m result
-getType self
-  = liftIO
-      (fromJSString <$> (js_getType (unRTCSessionDescription self)))
+getType self = liftIO (fromJSString <$> (js_getType (self)))
  
 foreign import javascript unsafe "$1[\"sdp\"] = $2;" js_setSdp ::
-        JSRef RTCSessionDescription -> JSString -> IO ()
+        RTCSessionDescription -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCSessionDescription.sdp Mozilla RTCSessionDescription.sdp documentation> 
 setSdp ::
        (MonadIO m, ToJSString val) => RTCSessionDescription -> val -> m ()
-setSdp self val
-  = liftIO
-      (js_setSdp (unRTCSessionDescription self) (toJSString val))
+setSdp self val = liftIO (js_setSdp (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"sdp\"]" js_getSdp ::
-        JSRef RTCSessionDescription -> IO JSString
+        RTCSessionDescription -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCSessionDescription.sdp Mozilla RTCSessionDescription.sdp documentation> 
 getSdp ::
        (MonadIO m, FromJSString result) =>
          RTCSessionDescription -> m result
-getSdp self
-  = liftIO
-      (fromJSString <$> (js_getSdp (unRTCSessionDescription self)))
+getSdp self = liftIO (fromJSString <$> (js_getSdp (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/RTCSessionDescriptionCallback.hs b/src/GHCJS/DOM/JSFFI/Generated/RTCSessionDescriptionCallback.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/RTCSessionDescriptionCallback.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/RTCSessionDescriptionCallback.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -27,8 +27,9 @@
                                      m RTCSessionDescriptionCallback
 newRTCSessionDescriptionCallback callback
   = liftIO
-      (syncCallback1 ThrowWouldBlock
-         (\ sdp -> fromJSRefUnchecked sdp >>= \ sdp' -> callback sdp'))
+      (RTCSessionDescriptionCallback <$>
+         syncCallback1 ThrowWouldBlock
+           (\ sdp -> fromJSRefUnchecked sdp >>= \ sdp' -> callback sdp'))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCSessionDescriptionCallback Mozilla RTCSessionDescriptionCallback documentation> 
 newRTCSessionDescriptionCallbackSync ::
@@ -37,8 +38,9 @@
                                          m RTCSessionDescriptionCallback
 newRTCSessionDescriptionCallbackSync callback
   = liftIO
-      (syncCallback1 ContinueAsync
-         (\ sdp -> fromJSRefUnchecked sdp >>= \ sdp' -> callback sdp'))
+      (RTCSessionDescriptionCallback <$>
+         syncCallback1 ContinueAsync
+           (\ sdp -> fromJSRefUnchecked sdp >>= \ sdp' -> callback sdp'))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCSessionDescriptionCallback Mozilla RTCSessionDescriptionCallback documentation> 
 newRTCSessionDescriptionCallbackAsync ::
@@ -47,5 +49,6 @@
                                           m RTCSessionDescriptionCallback
 newRTCSessionDescriptionCallbackAsync callback
   = liftIO
-      (asyncCallback1
-         (\ sdp -> fromJSRefUnchecked sdp >>= \ sdp' -> callback sdp'))
+      (RTCSessionDescriptionCallback <$>
+         asyncCallback1
+           (\ sdp -> fromJSRefUnchecked sdp >>= \ sdp' -> callback sdp'))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/RTCStatsCallback.hs b/src/GHCJS/DOM/JSFFI/Generated/RTCStatsCallback.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/RTCStatsCallback.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/RTCStatsCallback.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -24,9 +24,10 @@
                       (Maybe RTCStatsResponse -> IO ()) -> m RTCStatsCallback
 newRTCStatsCallback callback
   = liftIO
-      (syncCallback1 ThrowWouldBlock
-         (\ response ->
-            fromJSRefUnchecked response >>= \ response' -> callback response'))
+      (RTCStatsCallback <$>
+         syncCallback1 ThrowWouldBlock
+           (\ response ->
+              fromJSRefUnchecked response >>= \ response' -> callback response'))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCStatsCallback Mozilla RTCStatsCallback documentation> 
 newRTCStatsCallbackSync ::
@@ -34,9 +35,10 @@
                           (Maybe RTCStatsResponse -> IO ()) -> m RTCStatsCallback
 newRTCStatsCallbackSync callback
   = liftIO
-      (syncCallback1 ContinueAsync
-         (\ response ->
-            fromJSRefUnchecked response >>= \ response' -> callback response'))
+      (RTCStatsCallback <$>
+         syncCallback1 ContinueAsync
+           (\ response ->
+              fromJSRefUnchecked response >>= \ response' -> callback response'))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCStatsCallback Mozilla RTCStatsCallback documentation> 
 newRTCStatsCallbackAsync ::
@@ -44,6 +46,7 @@
                            (Maybe RTCStatsResponse -> IO ()) -> m RTCStatsCallback
 newRTCStatsCallbackAsync callback
   = liftIO
-      (asyncCallback1
-         (\ response ->
-            fromJSRefUnchecked response >>= \ response' -> callback response'))
+      (RTCStatsCallback <$>
+         asyncCallback1
+           (\ response ->
+              fromJSRefUnchecked response >>= \ response' -> callback response'))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/RTCStatsReport.hs b/src/GHCJS/DOM/JSFFI/Generated/RTCStatsReport.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/RTCStatsReport.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/RTCStatsReport.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -21,67 +21,59 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"stat\"]($2)" js_stat ::
-        JSRef RTCStatsReport -> JSString -> IO JSString
+        RTCStatsReport -> JSString -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCStatsReport.stat Mozilla RTCStatsReport.stat documentation> 
 stat ::
      (MonadIO m, ToJSString name, FromJSString result) =>
        RTCStatsReport -> name -> m result
 stat self name
-  = liftIO
-      (fromJSString <$>
-         (js_stat (unRTCStatsReport self) (toJSString name)))
+  = liftIO (fromJSString <$> (js_stat (self) (toJSString name)))
  
 foreign import javascript unsafe "$1[\"names\"]()" js_names ::
-        JSRef RTCStatsReport -> IO (JSRef [result])
+        RTCStatsReport -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCStatsReport.names Mozilla RTCStatsReport.names documentation> 
 names ::
       (MonadIO m, FromJSString result) => RTCStatsReport -> m [result]
-names self
-  = liftIO
-      ((js_names (unRTCStatsReport self)) >>= fromJSRefUnchecked)
+names self = liftIO ((js_names (self)) >>= fromJSRefUnchecked)
  
 foreign import javascript unsafe "$1[\"timestamp\"]"
-        js_getTimestamp :: JSRef RTCStatsReport -> IO (JSRef Date)
+        js_getTimestamp :: RTCStatsReport -> IO (Nullable Date)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCStatsReport.timestamp Mozilla RTCStatsReport.timestamp documentation> 
 getTimestamp :: (MonadIO m) => RTCStatsReport -> m (Maybe Date)
 getTimestamp self
-  = liftIO ((js_getTimestamp (unRTCStatsReport self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getTimestamp (self)))
  
 foreign import javascript unsafe "$1[\"id\"]" js_getId ::
-        JSRef RTCStatsReport -> IO JSString
+        RTCStatsReport -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCStatsReport.id Mozilla RTCStatsReport.id documentation> 
 getId ::
       (MonadIO m, FromJSString result) => RTCStatsReport -> m result
-getId self
-  = liftIO (fromJSString <$> (js_getId (unRTCStatsReport self)))
+getId self = liftIO (fromJSString <$> (js_getId (self)))
  
 foreign import javascript unsafe "$1[\"type\"]" js_getType ::
-        JSRef RTCStatsReport -> IO JSString
+        RTCStatsReport -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCStatsReport.type Mozilla RTCStatsReport.type documentation> 
 getType ::
         (MonadIO m, FromJSString result) => RTCStatsReport -> m result
-getType self
-  = liftIO (fromJSString <$> (js_getType (unRTCStatsReport self)))
+getType self = liftIO (fromJSString <$> (js_getType (self)))
  
 foreign import javascript unsafe "$1[\"local\"]" js_getLocal ::
-        JSRef RTCStatsReport -> IO (JSRef RTCStatsReport)
+        RTCStatsReport -> IO (Nullable RTCStatsReport)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCStatsReport.local Mozilla RTCStatsReport.local documentation> 
 getLocal ::
          (MonadIO m) => RTCStatsReport -> m (Maybe RTCStatsReport)
-getLocal self
-  = liftIO ((js_getLocal (unRTCStatsReport self)) >>= fromJSRef)
+getLocal self = liftIO (nullableToMaybe <$> (js_getLocal (self)))
  
 foreign import javascript unsafe "$1[\"remote\"]" js_getRemote ::
-        JSRef RTCStatsReport -> IO (JSRef RTCStatsReport)
+        RTCStatsReport -> IO (Nullable RTCStatsReport)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCStatsReport.remote Mozilla RTCStatsReport.remote documentation> 
 getRemote ::
           (MonadIO m) => RTCStatsReport -> m (Maybe RTCStatsReport)
-getRemote self
-  = liftIO ((js_getRemote (unRTCStatsReport self)) >>= fromJSRef)
+getRemote self = liftIO (nullableToMaybe <$> (js_getRemote (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/RTCStatsResponse.hs b/src/GHCJS/DOM/JSFFI/Generated/RTCStatsResponse.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/RTCStatsResponse.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/RTCStatsResponse.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,18 +19,16 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"result\"]()" js_result ::
-        JSRef RTCStatsResponse -> IO (JSRef [Maybe RTCStatsReport])
+        RTCStatsResponse -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCStatsResponse.result Mozilla RTCStatsResponse.result documentation> 
 result ::
        (MonadIO m) => RTCStatsResponse -> m [Maybe RTCStatsReport]
-result self
-  = liftIO
-      ((js_result (unRTCStatsResponse self)) >>= fromJSRefUnchecked)
+result self = liftIO ((js_result (self)) >>= fromJSRefUnchecked)
  
 foreign import javascript unsafe "$1[\"namedItem\"]($2)"
         js_namedItem ::
-        JSRef RTCStatsResponse -> JSString -> IO (JSRef RTCStatsReport)
+        RTCStatsResponse -> JSString -> IO (Nullable RTCStatsReport)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCStatsResponse.namedItem Mozilla RTCStatsResponse.namedItem documentation> 
 namedItem ::
@@ -38,5 +36,4 @@
             RTCStatsResponse -> name -> m (Maybe RTCStatsReport)
 namedItem self name
   = liftIO
-      ((js_namedItem (unRTCStatsResponse self) (toJSString name)) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_namedItem (self) (toJSString name)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/RadioNodeList.hs b/src/GHCJS/DOM/JSFFI/Generated/RadioNodeList.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/RadioNodeList.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/RadioNodeList.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,27 +19,25 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"_get\"]($2)" js__get ::
-        JSRef RadioNodeList -> Word -> IO (JSRef Node)
+        RadioNodeList -> Word -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RadioNodeList._get Mozilla RadioNodeList._get documentation> 
 _get :: (MonadIO m) => RadioNodeList -> Word -> m (Maybe Node)
 _get self index
-  = liftIO ((js__get (unRadioNodeList self) index) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js__get (self) index))
  
 foreign import javascript unsafe "$1[\"value\"] = $2;" js_setValue
-        :: JSRef RadioNodeList -> JSString -> IO ()
+        :: RadioNodeList -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RadioNodeList.value Mozilla RadioNodeList.value documentation> 
 setValue ::
          (MonadIO m, ToJSString val) => RadioNodeList -> val -> m ()
-setValue self val
-  = liftIO (js_setValue (unRadioNodeList self) (toJSString val))
+setValue self val = liftIO (js_setValue (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"value\"]" js_getValue ::
-        JSRef RadioNodeList -> IO JSString
+        RadioNodeList -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RadioNodeList.value Mozilla RadioNodeList.value documentation> 
 getValue ::
          (MonadIO m, FromJSString result) => RadioNodeList -> m result
-getValue self
-  = liftIO (fromJSString <$> (js_getValue (unRadioNodeList self)))
+getValue self = liftIO (fromJSString <$> (js_getValue (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/Range.hs b/src/GHCJS/DOM/JSFFI/Generated/Range.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/Range.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/Range.hs
@@ -25,7 +25,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -39,14 +39,14 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "new window[\"Range\"]()"
-        js_newRange :: IO (JSRef Range)
+        js_newRange :: IO Range
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Range Mozilla Range documentation> 
 newRange :: (MonadIO m) => m Range
-newRange = liftIO (js_newRange >>= fromJSRefUnchecked)
+newRange = liftIO (js_newRange)
  
 foreign import javascript unsafe "$1[\"setStart\"]($2, $3)"
-        js_setStart :: JSRef Range -> JSRef Node -> Int -> IO ()
+        js_setStart :: Range -> Nullable Node -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Range.setStart Mozilla Range.setStart documentation> 
 setStart ::
@@ -54,12 +54,10 @@
            Range -> Maybe refNode -> Int -> m ()
 setStart self refNode offset
   = liftIO
-      (js_setStart (unRange self)
-         (maybe jsNull (unNode . toNode) refNode)
-         offset)
+      (js_setStart (self) (maybeToNullable (fmap toNode refNode)) offset)
  
 foreign import javascript unsafe "$1[\"setEnd\"]($2, $3)" js_setEnd
-        :: JSRef Range -> JSRef Node -> Int -> IO ()
+        :: Range -> Nullable Node -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Range.setEnd Mozilla Range.setEnd documentation> 
 setEnd ::
@@ -67,183 +65,174 @@
          Range -> Maybe refNode -> Int -> m ()
 setEnd self refNode offset
   = liftIO
-      (js_setEnd (unRange self) (maybe jsNull (unNode . toNode) refNode)
-         offset)
+      (js_setEnd (self) (maybeToNullable (fmap toNode refNode)) offset)
  
 foreign import javascript unsafe "$1[\"setStartBefore\"]($2)"
-        js_setStartBefore :: JSRef Range -> JSRef Node -> IO ()
+        js_setStartBefore :: Range -> Nullable Node -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Range.setStartBefore Mozilla Range.setStartBefore documentation> 
 setStartBefore ::
                (MonadIO m, IsNode refNode) => Range -> Maybe refNode -> m ()
 setStartBefore self refNode
   = liftIO
-      (js_setStartBefore (unRange self)
-         (maybe jsNull (unNode . toNode) refNode))
+      (js_setStartBefore (self) (maybeToNullable (fmap toNode refNode)))
  
 foreign import javascript unsafe "$1[\"setStartAfter\"]($2)"
-        js_setStartAfter :: JSRef Range -> JSRef Node -> IO ()
+        js_setStartAfter :: Range -> Nullable Node -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Range.setStartAfter Mozilla Range.setStartAfter documentation> 
 setStartAfter ::
               (MonadIO m, IsNode refNode) => Range -> Maybe refNode -> m ()
 setStartAfter self refNode
   = liftIO
-      (js_setStartAfter (unRange self)
-         (maybe jsNull (unNode . toNode) refNode))
+      (js_setStartAfter (self) (maybeToNullable (fmap toNode refNode)))
  
 foreign import javascript unsafe "$1[\"setEndBefore\"]($2)"
-        js_setEndBefore :: JSRef Range -> JSRef Node -> IO ()
+        js_setEndBefore :: Range -> Nullable Node -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Range.setEndBefore Mozilla Range.setEndBefore documentation> 
 setEndBefore ::
              (MonadIO m, IsNode refNode) => Range -> Maybe refNode -> m ()
 setEndBefore self refNode
   = liftIO
-      (js_setEndBefore (unRange self)
-         (maybe jsNull (unNode . toNode) refNode))
+      (js_setEndBefore (self) (maybeToNullable (fmap toNode refNode)))
  
 foreign import javascript unsafe "$1[\"setEndAfter\"]($2)"
-        js_setEndAfter :: JSRef Range -> JSRef Node -> IO ()
+        js_setEndAfter :: Range -> Nullable Node -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Range.setEndAfter Mozilla Range.setEndAfter documentation> 
 setEndAfter ::
             (MonadIO m, IsNode refNode) => Range -> Maybe refNode -> m ()
 setEndAfter self refNode
   = liftIO
-      (js_setEndAfter (unRange self)
-         (maybe jsNull (unNode . toNode) refNode))
+      (js_setEndAfter (self) (maybeToNullable (fmap toNode refNode)))
  
 foreign import javascript unsafe "$1[\"collapse\"]($2)" js_collapse
-        :: JSRef Range -> Bool -> IO ()
+        :: Range -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Range.collapse Mozilla Range.collapse documentation> 
 collapse :: (MonadIO m) => Range -> Bool -> m ()
-collapse self toStart = liftIO (js_collapse (unRange self) toStart)
+collapse self toStart = liftIO (js_collapse (self) toStart)
  
 foreign import javascript unsafe "$1[\"selectNode\"]($2)"
-        js_selectNode :: JSRef Range -> JSRef Node -> IO ()
+        js_selectNode :: Range -> Nullable Node -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Range.selectNode Mozilla Range.selectNode documentation> 
 selectNode ::
            (MonadIO m, IsNode refNode) => Range -> Maybe refNode -> m ()
 selectNode self refNode
   = liftIO
-      (js_selectNode (unRange self)
-         (maybe jsNull (unNode . toNode) refNode))
+      (js_selectNode (self) (maybeToNullable (fmap toNode refNode)))
  
 foreign import javascript unsafe "$1[\"selectNodeContents\"]($2)"
-        js_selectNodeContents :: JSRef Range -> JSRef Node -> IO ()
+        js_selectNodeContents :: Range -> Nullable Node -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Range.selectNodeContents Mozilla Range.selectNodeContents documentation> 
 selectNodeContents ::
                    (MonadIO m, IsNode refNode) => Range -> Maybe refNode -> m ()
 selectNodeContents self refNode
   = liftIO
-      (js_selectNodeContents (unRange self)
-         (maybe jsNull (unNode . toNode) refNode))
+      (js_selectNodeContents (self)
+         (maybeToNullable (fmap toNode refNode)))
  
 foreign import javascript unsafe
         "$1[\"compareBoundaryPoints\"]($2,\n$3)" js_compareBoundaryPoints
-        :: JSRef Range -> Word -> JSRef Range -> IO Int
+        :: Range -> Word -> Nullable Range -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Range.compareBoundaryPoints Mozilla Range.compareBoundaryPoints documentation> 
 compareBoundaryPoints ::
                       (MonadIO m) => Range -> Word -> Maybe Range -> m Int
 compareBoundaryPoints self how sourceRange
   = liftIO
-      (js_compareBoundaryPoints (unRange self) how
-         (maybe jsNull pToJSRef sourceRange))
+      (js_compareBoundaryPoints (self) how (maybeToNullable sourceRange))
  
 foreign import javascript unsafe "$1[\"deleteContents\"]()"
-        js_deleteContents :: JSRef Range -> IO ()
+        js_deleteContents :: Range -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Range.deleteContents Mozilla Range.deleteContents documentation> 
 deleteContents :: (MonadIO m) => Range -> m ()
-deleteContents self = liftIO (js_deleteContents (unRange self))
+deleteContents self = liftIO (js_deleteContents (self))
  
 foreign import javascript unsafe "$1[\"extractContents\"]()"
-        js_extractContents :: JSRef Range -> IO (JSRef DocumentFragment)
+        js_extractContents :: Range -> IO (Nullable DocumentFragment)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Range.extractContents Mozilla Range.extractContents documentation> 
 extractContents ::
                 (MonadIO m) => Range -> m (Maybe DocumentFragment)
 extractContents self
-  = liftIO ((js_extractContents (unRange self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_extractContents (self)))
  
 foreign import javascript unsafe "$1[\"cloneContents\"]()"
-        js_cloneContents :: JSRef Range -> IO (JSRef DocumentFragment)
+        js_cloneContents :: Range -> IO (Nullable DocumentFragment)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Range.cloneContents Mozilla Range.cloneContents documentation> 
 cloneContents :: (MonadIO m) => Range -> m (Maybe DocumentFragment)
 cloneContents self
-  = liftIO ((js_cloneContents (unRange self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_cloneContents (self)))
  
 foreign import javascript unsafe "$1[\"insertNode\"]($2)"
-        js_insertNode :: JSRef Range -> JSRef Node -> IO ()
+        js_insertNode :: Range -> Nullable Node -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Range.insertNode Mozilla Range.insertNode documentation> 
 insertNode ::
            (MonadIO m, IsNode newNode) => Range -> Maybe newNode -> m ()
 insertNode self newNode
   = liftIO
-      (js_insertNode (unRange self)
-         (maybe jsNull (unNode . toNode) newNode))
+      (js_insertNode (self) (maybeToNullable (fmap toNode newNode)))
  
 foreign import javascript unsafe "$1[\"surroundContents\"]($2)"
-        js_surroundContents :: JSRef Range -> JSRef Node -> IO ()
+        js_surroundContents :: Range -> Nullable Node -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Range.surroundContents Mozilla Range.surroundContents documentation> 
 surroundContents ::
                  (MonadIO m, IsNode newParent) => Range -> Maybe newParent -> m ()
 surroundContents self newParent
   = liftIO
-      (js_surroundContents (unRange self)
-         (maybe jsNull (unNode . toNode) newParent))
+      (js_surroundContents (self)
+         (maybeToNullable (fmap toNode newParent)))
  
 foreign import javascript unsafe "$1[\"cloneRange\"]()"
-        js_cloneRange :: JSRef Range -> IO (JSRef Range)
+        js_cloneRange :: Range -> IO (Nullable Range)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Range.cloneRange Mozilla Range.cloneRange documentation> 
 cloneRange :: (MonadIO m) => Range -> m (Maybe Range)
 cloneRange self
-  = liftIO ((js_cloneRange (unRange self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_cloneRange (self)))
  
 foreign import javascript unsafe "$1[\"toString\"]()" js_toString
-        :: JSRef Range -> IO JSString
+        :: Range -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Range.toString Mozilla Range.toString documentation> 
 toString :: (MonadIO m, FromJSString result) => Range -> m result
-toString self
-  = liftIO (fromJSString <$> (js_toString (unRange self)))
+toString self = liftIO (fromJSString <$> (js_toString (self)))
  
 foreign import javascript unsafe "$1[\"detach\"]()" js_detach ::
-        JSRef Range -> IO ()
+        Range -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Range.detach Mozilla Range.detach documentation> 
 detach :: (MonadIO m) => Range -> m ()
-detach self = liftIO (js_detach (unRange self))
+detach self = liftIO (js_detach (self))
  
 foreign import javascript unsafe "$1[\"getClientRects\"]()"
-        js_getClientRects :: JSRef Range -> IO (JSRef ClientRectList)
+        js_getClientRects :: Range -> IO (Nullable ClientRectList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Range.getClientRects Mozilla Range.getClientRects documentation> 
 getClientRects :: (MonadIO m) => Range -> m (Maybe ClientRectList)
 getClientRects self
-  = liftIO ((js_getClientRects (unRange self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getClientRects (self)))
  
 foreign import javascript unsafe "$1[\"getBoundingClientRect\"]()"
-        js_getBoundingClientRect :: JSRef Range -> IO (JSRef ClientRect)
+        js_getBoundingClientRect :: Range -> IO (Nullable ClientRect)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Range.getBoundingClientRect Mozilla Range.getBoundingClientRect documentation> 
 getBoundingClientRect ::
                       (MonadIO m) => Range -> m (Maybe ClientRect)
 getBoundingClientRect self
-  = liftIO ((js_getBoundingClientRect (unRange self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getBoundingClientRect (self)))
  
 foreign import javascript unsafe
         "$1[\"createContextualFragment\"]($2)" js_createContextualFragment
-        :: JSRef Range -> JSString -> IO (JSRef DocumentFragment)
+        :: Range -> JSString -> IO (Nullable DocumentFragment)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Range.createContextualFragment Mozilla Range.createContextualFragment documentation> 
 createContextualFragment ::
@@ -251,34 +240,32 @@
                            Range -> html -> m (Maybe DocumentFragment)
 createContextualFragment self html
   = liftIO
-      ((js_createContextualFragment (unRange self) (toJSString html)) >>=
-         fromJSRef)
+      (nullableToMaybe <$>
+         (js_createContextualFragment (self) (toJSString html)))
  
 foreign import javascript unsafe
         "($1[\"intersectsNode\"]($2) ? 1 : 0)" js_intersectsNode ::
-        JSRef Range -> JSRef Node -> IO Bool
+        Range -> Nullable Node -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Range.intersectsNode Mozilla Range.intersectsNode documentation> 
 intersectsNode ::
                (MonadIO m, IsNode refNode) => Range -> Maybe refNode -> m Bool
 intersectsNode self refNode
   = liftIO
-      (js_intersectsNode (unRange self)
-         (maybe jsNull (unNode . toNode) refNode))
+      (js_intersectsNode (self) (maybeToNullable (fmap toNode refNode)))
  
 foreign import javascript unsafe "$1[\"compareNode\"]($2)"
-        js_compareNode :: JSRef Range -> JSRef Node -> IO Int
+        js_compareNode :: Range -> Nullable Node -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Range.compareNode Mozilla Range.compareNode documentation> 
 compareNode ::
             (MonadIO m, IsNode refNode) => Range -> Maybe refNode -> m Int
 compareNode self refNode
   = liftIO
-      (js_compareNode (unRange self)
-         (maybe jsNull (unNode . toNode) refNode))
+      (js_compareNode (self) (maybeToNullable (fmap toNode refNode)))
  
 foreign import javascript unsafe "$1[\"comparePoint\"]($2, $3)"
-        js_comparePoint :: JSRef Range -> JSRef Node -> Int -> IO Int
+        js_comparePoint :: Range -> Nullable Node -> Int -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Range.comparePoint Mozilla Range.comparePoint documentation> 
 comparePoint ::
@@ -286,13 +273,12 @@
                Range -> Maybe refNode -> Int -> m Int
 comparePoint self refNode offset
   = liftIO
-      (js_comparePoint (unRange self)
-         (maybe jsNull (unNode . toNode) refNode)
+      (js_comparePoint (self) (maybeToNullable (fmap toNode refNode))
          offset)
  
 foreign import javascript unsafe
         "($1[\"isPointInRange\"]($2,\n$3) ? 1 : 0)" js_isPointInRange ::
-        JSRef Range -> JSRef Node -> Int -> IO Bool
+        Range -> Nullable Node -> Int -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Range.isPointInRange Mozilla Range.isPointInRange documentation> 
 isPointInRange ::
@@ -300,17 +286,15 @@
                  Range -> Maybe refNode -> Int -> m Bool
 isPointInRange self refNode offset
   = liftIO
-      (js_isPointInRange (unRange self)
-         (maybe jsNull (unNode . toNode) refNode)
+      (js_isPointInRange (self) (maybeToNullable (fmap toNode refNode))
          offset)
  
 foreign import javascript unsafe "$1[\"expand\"]($2)" js_expand ::
-        JSRef Range -> JSString -> IO ()
+        Range -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Range.expand Mozilla Range.expand documentation> 
 expand :: (MonadIO m, ToJSString unit) => Range -> unit -> m ()
-expand self unit
-  = liftIO (js_expand (unRange self) (toJSString unit))
+expand self unit = liftIO (js_expand (self) (toJSString unit))
 pattern START_TO_START = 0
 pattern START_TO_END = 1
 pattern END_TO_END = 2
@@ -321,48 +305,48 @@
 pattern NODE_INSIDE = 3
  
 foreign import javascript unsafe "$1[\"startContainer\"]"
-        js_getStartContainer :: JSRef Range -> IO (JSRef Node)
+        js_getStartContainer :: Range -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Range.startContainer Mozilla Range.startContainer documentation> 
 getStartContainer :: (MonadIO m) => Range -> m (Maybe Node)
 getStartContainer self
-  = liftIO ((js_getStartContainer (unRange self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getStartContainer (self)))
  
 foreign import javascript unsafe "$1[\"startOffset\"]"
-        js_getStartOffset :: JSRef Range -> IO Int
+        js_getStartOffset :: Range -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Range.startOffset Mozilla Range.startOffset documentation> 
 getStartOffset :: (MonadIO m) => Range -> m Int
-getStartOffset self = liftIO (js_getStartOffset (unRange self))
+getStartOffset self = liftIO (js_getStartOffset (self))
  
 foreign import javascript unsafe "$1[\"endContainer\"]"
-        js_getEndContainer :: JSRef Range -> IO (JSRef Node)
+        js_getEndContainer :: Range -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Range.endContainer Mozilla Range.endContainer documentation> 
 getEndContainer :: (MonadIO m) => Range -> m (Maybe Node)
 getEndContainer self
-  = liftIO ((js_getEndContainer (unRange self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getEndContainer (self)))
  
 foreign import javascript unsafe "$1[\"endOffset\"]"
-        js_getEndOffset :: JSRef Range -> IO Int
+        js_getEndOffset :: Range -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Range.endOffset Mozilla Range.endOffset documentation> 
 getEndOffset :: (MonadIO m) => Range -> m Int
-getEndOffset self = liftIO (js_getEndOffset (unRange self))
+getEndOffset self = liftIO (js_getEndOffset (self))
  
 foreign import javascript unsafe "($1[\"collapsed\"] ? 1 : 0)"
-        js_getCollapsed :: JSRef Range -> IO Bool
+        js_getCollapsed :: Range -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Range.collapsed Mozilla Range.collapsed documentation> 
 getCollapsed :: (MonadIO m) => Range -> m Bool
-getCollapsed self = liftIO (js_getCollapsed (unRange self))
+getCollapsed self = liftIO (js_getCollapsed (self))
  
 foreign import javascript unsafe "$1[\"commonAncestorContainer\"]"
-        js_getCommonAncestorContainer :: JSRef Range -> IO (JSRef Node)
+        js_getCommonAncestorContainer :: Range -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Range.commonAncestorContainer Mozilla Range.commonAncestorContainer documentation> 
 getCommonAncestorContainer ::
                            (MonadIO m) => Range -> m (Maybe Node)
 getCommonAncestorContainer self
   = liftIO
-      ((js_getCommonAncestorContainer (unRange self)) >>= fromJSRef)
+      (nullableToMaybe <$> (js_getCommonAncestorContainer (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/ReadableStream.hs b/src/GHCJS/DOM/JSFFI/Generated/ReadableStream.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/ReadableStream.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/ReadableStream.hs
@@ -8,7 +8,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -23,23 +23,22 @@
  
 foreign import javascript unsafe
         "new window[\"ReadableStream\"]($1)" js_newReadableStream ::
-        JSRef a -> IO (JSRef ReadableStream)
+        JSRef -> IO ReadableStream
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream Mozilla ReadableStream documentation> 
-newReadableStream :: (MonadIO m) => JSRef a -> m ReadableStream
+newReadableStream :: (MonadIO m) => JSRef -> m ReadableStream
 newReadableStream properties
-  = liftIO (js_newReadableStream properties >>= fromJSRefUnchecked)
+  = liftIO (js_newReadableStream properties)
  
 foreign import javascript unsafe "$1[\"read\"]()" js_read ::
-        JSRef ReadableStream -> IO (JSRef GObject)
+        ReadableStream -> IO (Nullable GObject)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream.read Mozilla ReadableStream.read documentation> 
 read :: (MonadIO m) => ReadableStream -> m (Maybe GObject)
-read self
-  = liftIO ((js_read (unReadableStream self)) >>= fromJSRef)
+read self = liftIO (nullableToMaybe <$> (js_read (self)))
  
 foreign import javascript unsafe "$1[\"cancel\"]($2)" js_cancel ::
-        JSRef ReadableStream -> JSString -> IO (JSRef Promise)
+        ReadableStream -> JSString -> IO (Nullable Promise)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream.cancel Mozilla ReadableStream.cancel documentation> 
 cancel ::
@@ -47,55 +46,48 @@
          ReadableStream -> reason -> m (Maybe Promise)
 cancel self reason
   = liftIO
-      ((js_cancel (unReadableStream self) (toJSString reason)) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_cancel (self) (toJSString reason)))
  
 foreign import javascript unsafe "$1[\"pipeTo\"]($2, $3)" js_pipeTo
-        :: JSRef ReadableStream -> JSRef a -> JSRef a -> IO (JSRef Promise)
+        :: ReadableStream -> JSRef -> JSRef -> IO (Nullable Promise)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream.pipeTo Mozilla ReadableStream.pipeTo documentation> 
 pipeTo ::
        (MonadIO m) =>
-         ReadableStream -> JSRef a -> JSRef a -> m (Maybe Promise)
+         ReadableStream -> JSRef -> JSRef -> m (Maybe Promise)
 pipeTo self streams options
-  = liftIO
-      ((js_pipeTo (unReadableStream self) streams options) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_pipeTo (self) streams options))
  
 foreign import javascript unsafe "$1[\"pipeThrough\"]($2, $3)"
         js_pipeThrough ::
-        JSRef ReadableStream -> JSRef a -> JSRef a -> IO (JSRef GObject)
+        ReadableStream -> JSRef -> JSRef -> IO (Nullable GObject)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream.pipeThrough Mozilla ReadableStream.pipeThrough documentation> 
 pipeThrough ::
             (MonadIO m) =>
-              ReadableStream -> JSRef a -> JSRef a -> m (Maybe GObject)
+              ReadableStream -> JSRef -> JSRef -> m (Maybe GObject)
 pipeThrough self dest options
-  = liftIO
-      ((js_pipeThrough (unReadableStream self) dest options) >>=
-         fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_pipeThrough (self) dest options))
  
 foreign import javascript unsafe "$1[\"state\"]" js_getState ::
-        JSRef ReadableStream -> IO (JSRef ReadableStreamStateType)
+        ReadableStream -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream.state Mozilla ReadableStream.state documentation> 
 getState ::
          (MonadIO m) => ReadableStream -> m ReadableStreamStateType
 getState self
-  = liftIO
-      ((js_getState (unReadableStream self)) >>= fromJSRefUnchecked)
+  = liftIO ((js_getState (self)) >>= fromJSRefUnchecked)
  
 foreign import javascript unsafe "$1[\"closed\"]" js_getClosed ::
-        JSRef ReadableStream -> IO (JSRef Promise)
+        ReadableStream -> IO (Nullable Promise)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream.closed Mozilla ReadableStream.closed documentation> 
 getClosed :: (MonadIO m) => ReadableStream -> m (Maybe Promise)
-getClosed self
-  = liftIO ((js_getClosed (unReadableStream self)) >>= fromJSRef)
+getClosed self = liftIO (nullableToMaybe <$> (js_getClosed (self)))
  
 foreign import javascript unsafe "$1[\"ready\"]" js_getReady ::
-        JSRef ReadableStream -> IO (JSRef Promise)
+        ReadableStream -> IO (Nullable Promise)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream.ready Mozilla ReadableStream.ready documentation> 
 getReady :: (MonadIO m) => ReadableStream -> m (Maybe Promise)
-getReady self
-  = liftIO ((js_getReady (unReadableStream self)) >>= fromJSRef)
+getReady self = liftIO (nullableToMaybe <$> (js_getReady (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/Rect.hs b/src/GHCJS/DOM/JSFFI/Generated/Rect.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/Rect.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/Rect.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,30 +19,29 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"top\"]" js_getTop ::
-        JSRef Rect -> IO (JSRef CSSPrimitiveValue)
+        Rect -> IO (Nullable CSSPrimitiveValue)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Rect.top Mozilla Rect.top documentation> 
 getTop :: (MonadIO m) => Rect -> m (Maybe CSSPrimitiveValue)
-getTop self = liftIO ((js_getTop (unRect self)) >>= fromJSRef)
+getTop self = liftIO (nullableToMaybe <$> (js_getTop (self)))
  
 foreign import javascript unsafe "$1[\"right\"]" js_getRight ::
-        JSRef Rect -> IO (JSRef CSSPrimitiveValue)
+        Rect -> IO (Nullable CSSPrimitiveValue)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Rect.right Mozilla Rect.right documentation> 
 getRight :: (MonadIO m) => Rect -> m (Maybe CSSPrimitiveValue)
-getRight self = liftIO ((js_getRight (unRect self)) >>= fromJSRef)
+getRight self = liftIO (nullableToMaybe <$> (js_getRight (self)))
  
 foreign import javascript unsafe "$1[\"bottom\"]" js_getBottom ::
-        JSRef Rect -> IO (JSRef CSSPrimitiveValue)
+        Rect -> IO (Nullable CSSPrimitiveValue)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Rect.bottom Mozilla Rect.bottom documentation> 
 getBottom :: (MonadIO m) => Rect -> m (Maybe CSSPrimitiveValue)
-getBottom self
-  = liftIO ((js_getBottom (unRect self)) >>= fromJSRef)
+getBottom self = liftIO (nullableToMaybe <$> (js_getBottom (self)))
  
 foreign import javascript unsafe "$1[\"left\"]" js_getLeft ::
-        JSRef Rect -> IO (JSRef CSSPrimitiveValue)
+        Rect -> IO (Nullable CSSPrimitiveValue)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Rect.left Mozilla Rect.left documentation> 
 getLeft :: (MonadIO m) => Rect -> m (Maybe CSSPrimitiveValue)
-getLeft self = liftIO ((js_getLeft (unRect self)) >>= fromJSRef)
+getLeft self = liftIO (nullableToMaybe <$> (js_getLeft (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/RequestAnimationFrameCallback.hs b/src/GHCJS/DOM/JSFFI/Generated/RequestAnimationFrameCallback.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/RequestAnimationFrameCallback.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/RequestAnimationFrameCallback.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -25,10 +25,11 @@
                                  (MonadIO m) => (Double -> IO ()) -> m RequestAnimationFrameCallback
 newRequestAnimationFrameCallback callback
   = liftIO
-      (syncCallback1 ThrowWouldBlock
-         (\ highResTime ->
-            fromJSRefUnchecked highResTime >>=
-              \ highResTime' -> callback highResTime'))
+      (RequestAnimationFrameCallback <$>
+         syncCallback1 ThrowWouldBlock
+           (\ highResTime ->
+              fromJSRefUnchecked highResTime >>=
+                \ highResTime' -> callback highResTime'))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RequestAnimationFrameCallback Mozilla RequestAnimationFrameCallback documentation> 
 newRequestAnimationFrameCallbackSync ::
@@ -36,10 +37,11 @@
                                        (Double -> IO ()) -> m RequestAnimationFrameCallback
 newRequestAnimationFrameCallbackSync callback
   = liftIO
-      (syncCallback1 ContinueAsync
-         (\ highResTime ->
-            fromJSRefUnchecked highResTime >>=
-              \ highResTime' -> callback highResTime'))
+      (RequestAnimationFrameCallback <$>
+         syncCallback1 ContinueAsync
+           (\ highResTime ->
+              fromJSRefUnchecked highResTime >>=
+                \ highResTime' -> callback highResTime'))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RequestAnimationFrameCallback Mozilla RequestAnimationFrameCallback documentation> 
 newRequestAnimationFrameCallbackAsync ::
@@ -47,7 +49,8 @@
                                         (Double -> IO ()) -> m RequestAnimationFrameCallback
 newRequestAnimationFrameCallbackAsync callback
   = liftIO
-      (asyncCallback1
-         (\ highResTime ->
-            fromJSRefUnchecked highResTime >>=
-              \ highResTime' -> callback highResTime'))
+      (RequestAnimationFrameCallback <$>
+         asyncCallback1
+           (\ highResTime ->
+              fromJSRefUnchecked highResTime >>=
+                \ highResTime' -> callback highResTime'))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SQLError.hs b/src/GHCJS/DOM/JSFFI/Generated/SQLError.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SQLError.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SQLError.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -29,17 +29,16 @@
 pattern TIMEOUT_ERR = 7
  
 foreign import javascript unsafe "$1[\"code\"]" js_getCode ::
-        JSRef SQLError -> IO Word
+        SQLError -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SQLError.code Mozilla SQLError.code documentation> 
 getCode :: (MonadIO m) => SQLError -> m Word
-getCode self = liftIO (js_getCode (unSQLError self))
+getCode self = liftIO (js_getCode (self))
  
 foreign import javascript unsafe "$1[\"message\"]" js_getMessage ::
-        JSRef SQLError -> IO JSString
+        SQLError -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SQLError.message Mozilla SQLError.message documentation> 
 getMessage ::
            (MonadIO m, FromJSString result) => SQLError -> m result
-getMessage self
-  = liftIO (fromJSString <$> (js_getMessage (unSQLError self)))
+getMessage self = liftIO (fromJSString <$> (js_getMessage (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SQLResultSet.hs b/src/GHCJS/DOM/JSFFI/Generated/SQLResultSet.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SQLResultSet.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SQLResultSet.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,25 +20,23 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"rows\"]" js_getRows ::
-        JSRef SQLResultSet -> IO (JSRef SQLResultSetRowList)
+        SQLResultSet -> IO (Nullable SQLResultSetRowList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SQLResultSet.rows Mozilla SQLResultSet.rows documentation> 
 getRows ::
         (MonadIO m) => SQLResultSet -> m (Maybe SQLResultSetRowList)
-getRows self
-  = liftIO ((js_getRows (unSQLResultSet self)) >>= fromJSRef)
+getRows self = liftIO (nullableToMaybe <$> (js_getRows (self)))
  
 foreign import javascript unsafe "$1[\"insertId\"]" js_getInsertId
-        :: JSRef SQLResultSet -> IO Int
+        :: SQLResultSet -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SQLResultSet.insertId Mozilla SQLResultSet.insertId documentation> 
 getInsertId :: (MonadIO m) => SQLResultSet -> m Int
-getInsertId self = liftIO (js_getInsertId (unSQLResultSet self))
+getInsertId self = liftIO (js_getInsertId (self))
  
 foreign import javascript unsafe "$1[\"rowsAffected\"]"
-        js_getRowsAffected :: JSRef SQLResultSet -> IO Int
+        js_getRowsAffected :: SQLResultSet -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SQLResultSet.rowsAffected Mozilla SQLResultSet.rowsAffected documentation> 
 getRowsAffected :: (MonadIO m) => SQLResultSet -> m Int
-getRowsAffected self
-  = liftIO (js_getRowsAffected (unSQLResultSet self))
+getRowsAffected self = liftIO (js_getRowsAffected (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SQLResultSetRowList.hs b/src/GHCJS/DOM/JSFFI/Generated/SQLResultSetRowList.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SQLResultSetRowList.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SQLResultSetRowList.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,16 +19,15 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"item\"]($2)" js_item ::
-        JSRef SQLResultSetRowList -> Word -> IO (JSRef a)
+        SQLResultSetRowList -> Word -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SQLResultSetRowList.item Mozilla SQLResultSetRowList.item documentation> 
-item :: (MonadIO m) => SQLResultSetRowList -> Word -> m (JSRef a)
-item self index
-  = liftIO (js_item (unSQLResultSetRowList self) index)
+item :: (MonadIO m) => SQLResultSetRowList -> Word -> m JSRef
+item self index = liftIO (js_item (self) index)
  
 foreign import javascript unsafe "$1[\"length\"]" js_getLength ::
-        JSRef SQLResultSetRowList -> IO Word
+        SQLResultSetRowList -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SQLResultSetRowList.length Mozilla SQLResultSetRowList.length documentation> 
 getLength :: (MonadIO m) => SQLResultSetRowList -> m Word
-getLength self = liftIO (js_getLength (unSQLResultSetRowList self))
+getLength self = liftIO (js_getLength (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SQLStatementCallback.hs b/src/GHCJS/DOM/JSFFI/Generated/SQLStatementCallback.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SQLStatementCallback.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SQLStatementCallback.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -25,13 +25,14 @@
                             m SQLStatementCallback
 newSQLStatementCallback callback
   = liftIO
-      (syncCallback2 ThrowWouldBlock
-         (\ transaction resultSet ->
-            fromJSRefUnchecked resultSet >>=
-              \ resultSet' ->
-                fromJSRefUnchecked transaction >>=
-                  \ transaction' -> callback transaction'
-                  resultSet'))
+      (SQLStatementCallback <$>
+         syncCallback2 ThrowWouldBlock
+           (\ transaction resultSet ->
+              fromJSRefUnchecked resultSet >>=
+                \ resultSet' ->
+                  fromJSRefUnchecked transaction >>=
+                    \ transaction' -> callback transaction'
+                    resultSet'))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SQLStatementCallback Mozilla SQLStatementCallback documentation> 
 newSQLStatementCallbackSync ::
@@ -40,13 +41,14 @@
                                 m SQLStatementCallback
 newSQLStatementCallbackSync callback
   = liftIO
-      (syncCallback2 ContinueAsync
-         (\ transaction resultSet ->
-            fromJSRefUnchecked resultSet >>=
-              \ resultSet' ->
-                fromJSRefUnchecked transaction >>=
-                  \ transaction' -> callback transaction'
-                  resultSet'))
+      (SQLStatementCallback <$>
+         syncCallback2 ContinueAsync
+           (\ transaction resultSet ->
+              fromJSRefUnchecked resultSet >>=
+                \ resultSet' ->
+                  fromJSRefUnchecked transaction >>=
+                    \ transaction' -> callback transaction'
+                    resultSet'))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SQLStatementCallback Mozilla SQLStatementCallback documentation> 
 newSQLStatementCallbackAsync ::
@@ -55,10 +57,11 @@
                                  m SQLStatementCallback
 newSQLStatementCallbackAsync callback
   = liftIO
-      (asyncCallback2
-         (\ transaction resultSet ->
-            fromJSRefUnchecked resultSet >>=
-              \ resultSet' ->
-                fromJSRefUnchecked transaction >>=
-                  \ transaction' -> callback transaction'
-                  resultSet'))
+      (SQLStatementCallback <$>
+         asyncCallback2
+           (\ transaction resultSet ->
+              fromJSRefUnchecked resultSet >>=
+                \ resultSet' ->
+                  fromJSRefUnchecked transaction >>=
+                    \ transaction' -> callback transaction'
+                    resultSet'))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SQLStatementErrorCallback.hs b/src/GHCJS/DOM/JSFFI/Generated/SQLStatementErrorCallback.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SQLStatementErrorCallback.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SQLStatementErrorCallback.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -25,13 +25,14 @@
                                  m SQLStatementErrorCallback
 newSQLStatementErrorCallback callback
   = liftIO
-      (syncCallback2 ThrowWouldBlock
-         (\ transaction error ->
-            fromJSRefUnchecked error >>=
-              \ error' ->
-                fromJSRefUnchecked transaction >>=
-                  \ transaction' -> callback transaction'
-                  error'))
+      (SQLStatementErrorCallback <$>
+         syncCallback2 ThrowWouldBlock
+           (\ transaction error ->
+              fromJSRefUnchecked error >>=
+                \ error' ->
+                  fromJSRefUnchecked transaction >>=
+                    \ transaction' -> callback transaction'
+                    error'))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SQLStatementErrorCallback Mozilla SQLStatementErrorCallback documentation> 
 newSQLStatementErrorCallbackSync ::
@@ -40,13 +41,14 @@
                                      m SQLStatementErrorCallback
 newSQLStatementErrorCallbackSync callback
   = liftIO
-      (syncCallback2 ContinueAsync
-         (\ transaction error ->
-            fromJSRefUnchecked error >>=
-              \ error' ->
-                fromJSRefUnchecked transaction >>=
-                  \ transaction' -> callback transaction'
-                  error'))
+      (SQLStatementErrorCallback <$>
+         syncCallback2 ContinueAsync
+           (\ transaction error ->
+              fromJSRefUnchecked error >>=
+                \ error' ->
+                  fromJSRefUnchecked transaction >>=
+                    \ transaction' -> callback transaction'
+                    error'))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SQLStatementErrorCallback Mozilla SQLStatementErrorCallback documentation> 
 newSQLStatementErrorCallbackAsync ::
@@ -55,10 +57,11 @@
                                       m SQLStatementErrorCallback
 newSQLStatementErrorCallbackAsync callback
   = liftIO
-      (asyncCallback2
-         (\ transaction error ->
-            fromJSRefUnchecked error >>=
-              \ error' ->
-                fromJSRefUnchecked transaction >>=
-                  \ transaction' -> callback transaction'
-                  error'))
+      (SQLStatementErrorCallback <$>
+         asyncCallback2
+           (\ transaction error ->
+              fromJSRefUnchecked error >>=
+                \ error' ->
+                  fromJSRefUnchecked transaction >>=
+                    \ transaction' -> callback transaction'
+                    error'))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SQLTransaction.hs b/src/GHCJS/DOM/JSFFI/Generated/SQLTransaction.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SQLTransaction.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SQLTransaction.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,11 +20,11 @@
  
 foreign import javascript unsafe
         "$1[\"executeSql\"]($2, $3, $4, $5)" js_executeSql ::
-        JSRef SQLTransaction ->
+        SQLTransaction ->
           JSString ->
-            JSRef ObjectArray ->
-              JSRef SQLStatementCallback ->
-                JSRef SQLStatementErrorCallback -> IO ()
+            Nullable ObjectArray ->
+              Nullable SQLStatementCallback ->
+                Nullable SQLStatementErrorCallback -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SQLTransaction.executeSql Mozilla SQLTransaction.executeSql documentation> 
 executeSql ::
@@ -36,7 +36,7 @@
                      Maybe SQLStatementErrorCallback -> m ()
 executeSql self sqlStatement arguments callback errorCallback
   = liftIO
-      (js_executeSql (unSQLTransaction self) (toJSString sqlStatement)
-         (maybe jsNull (unObjectArray . toObjectArray) arguments)
-         (maybe jsNull pToJSRef callback)
-         (maybe jsNull pToJSRef errorCallback))
+      (js_executeSql (self) (toJSString sqlStatement)
+         (maybeToNullable (fmap toObjectArray arguments))
+         (maybeToNullable callback)
+         (maybeToNullable errorCallback))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SQLTransactionCallback.hs b/src/GHCJS/DOM/JSFFI/Generated/SQLTransactionCallback.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SQLTransactionCallback.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SQLTransactionCallback.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -24,10 +24,11 @@
                             (Maybe SQLTransaction -> IO ()) -> m SQLTransactionCallback
 newSQLTransactionCallback callback
   = liftIO
-      (syncCallback1 ThrowWouldBlock
-         (\ transaction ->
-            fromJSRefUnchecked transaction >>=
-              \ transaction' -> callback transaction'))
+      (SQLTransactionCallback <$>
+         syncCallback1 ThrowWouldBlock
+           (\ transaction ->
+              fromJSRefUnchecked transaction >>=
+                \ transaction' -> callback transaction'))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SQLTransactionCallback Mozilla SQLTransactionCallback documentation> 
 newSQLTransactionCallbackSync ::
@@ -35,10 +36,11 @@
                                 (Maybe SQLTransaction -> IO ()) -> m SQLTransactionCallback
 newSQLTransactionCallbackSync callback
   = liftIO
-      (syncCallback1 ContinueAsync
-         (\ transaction ->
-            fromJSRefUnchecked transaction >>=
-              \ transaction' -> callback transaction'))
+      (SQLTransactionCallback <$>
+         syncCallback1 ContinueAsync
+           (\ transaction ->
+              fromJSRefUnchecked transaction >>=
+                \ transaction' -> callback transaction'))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SQLTransactionCallback Mozilla SQLTransactionCallback documentation> 
 newSQLTransactionCallbackAsync ::
@@ -46,7 +48,8 @@
                                  (Maybe SQLTransaction -> IO ()) -> m SQLTransactionCallback
 newSQLTransactionCallbackAsync callback
   = liftIO
-      (asyncCallback1
-         (\ transaction ->
-            fromJSRefUnchecked transaction >>=
-              \ transaction' -> callback transaction'))
+      (SQLTransactionCallback <$>
+         asyncCallback1
+           (\ transaction ->
+              fromJSRefUnchecked transaction >>=
+                \ transaction' -> callback transaction'))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SQLTransactionErrorCallback.hs b/src/GHCJS/DOM/JSFFI/Generated/SQLTransactionErrorCallback.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SQLTransactionErrorCallback.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SQLTransactionErrorCallback.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -25,9 +25,10 @@
                                  (Maybe SQLError -> IO ()) -> m SQLTransactionErrorCallback
 newSQLTransactionErrorCallback callback
   = liftIO
-      (syncCallback1 ThrowWouldBlock
-         (\ error ->
-            fromJSRefUnchecked error >>= \ error' -> callback error'))
+      (SQLTransactionErrorCallback <$>
+         syncCallback1 ThrowWouldBlock
+           (\ error ->
+              fromJSRefUnchecked error >>= \ error' -> callback error'))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SQLTransactionErrorCallback Mozilla SQLTransactionErrorCallback documentation> 
 newSQLTransactionErrorCallbackSync ::
@@ -35,9 +36,10 @@
                                      (Maybe SQLError -> IO ()) -> m SQLTransactionErrorCallback
 newSQLTransactionErrorCallbackSync callback
   = liftIO
-      (syncCallback1 ContinueAsync
-         (\ error ->
-            fromJSRefUnchecked error >>= \ error' -> callback error'))
+      (SQLTransactionErrorCallback <$>
+         syncCallback1 ContinueAsync
+           (\ error ->
+              fromJSRefUnchecked error >>= \ error' -> callback error'))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SQLTransactionErrorCallback Mozilla SQLTransactionErrorCallback documentation> 
 newSQLTransactionErrorCallbackAsync ::
@@ -45,6 +47,7 @@
                                       (Maybe SQLError -> IO ()) -> m SQLTransactionErrorCallback
 newSQLTransactionErrorCallbackAsync callback
   = liftIO
-      (asyncCallback1
-         (\ error ->
-            fromJSRefUnchecked error >>= \ error' -> callback error'))
+      (SQLTransactionErrorCallback <$>
+         asyncCallback1
+           (\ error ->
+              fromJSRefUnchecked error >>= \ error' -> callback error'))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGAElement.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGAElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGAElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGAElement.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,10 +19,9 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"target\"]" js_getTarget ::
-        JSRef SVGAElement -> IO (JSRef SVGAnimatedString)
+        SVGAElement -> IO (Nullable SVGAnimatedString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGAElement.target Mozilla SVGAElement.target documentation> 
 getTarget ::
           (MonadIO m) => SVGAElement -> m (Maybe SVGAnimatedString)
-getTarget self
-  = liftIO ((js_getTarget (unSVGAElement self)) >>= fromJSRef)
+getTarget self = liftIO (nullableToMaybe <$> (js_getTarget (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGAltGlyphElement.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGAltGlyphElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGAltGlyphElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGAltGlyphElement.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -21,41 +21,35 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"glyphRef\"] = $2;"
-        js_setGlyphRef :: JSRef SVGAltGlyphElement -> JSString -> IO ()
+        js_setGlyphRef :: SVGAltGlyphElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGAltGlyphElement.glyphRef Mozilla SVGAltGlyphElement.glyphRef documentation> 
 setGlyphRef ::
             (MonadIO m, ToJSString val) => SVGAltGlyphElement -> val -> m ()
 setGlyphRef self val
-  = liftIO
-      (js_setGlyphRef (unSVGAltGlyphElement self) (toJSString val))
+  = liftIO (js_setGlyphRef (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"glyphRef\"]" js_getGlyphRef
-        :: JSRef SVGAltGlyphElement -> IO JSString
+        :: SVGAltGlyphElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGAltGlyphElement.glyphRef Mozilla SVGAltGlyphElement.glyphRef documentation> 
 getGlyphRef ::
             (MonadIO m, FromJSString result) => SVGAltGlyphElement -> m result
 getGlyphRef self
-  = liftIO
-      (fromJSString <$> (js_getGlyphRef (unSVGAltGlyphElement self)))
+  = liftIO (fromJSString <$> (js_getGlyphRef (self)))
  
 foreign import javascript unsafe "$1[\"format\"] = $2;"
-        js_setFormat :: JSRef SVGAltGlyphElement -> JSString -> IO ()
+        js_setFormat :: SVGAltGlyphElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGAltGlyphElement.format Mozilla SVGAltGlyphElement.format documentation> 
 setFormat ::
           (MonadIO m, ToJSString val) => SVGAltGlyphElement -> val -> m ()
-setFormat self val
-  = liftIO
-      (js_setFormat (unSVGAltGlyphElement self) (toJSString val))
+setFormat self val = liftIO (js_setFormat (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"format\"]" js_getFormat ::
-        JSRef SVGAltGlyphElement -> IO JSString
+        SVGAltGlyphElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGAltGlyphElement.format Mozilla SVGAltGlyphElement.format documentation> 
 getFormat ::
           (MonadIO m, FromJSString result) => SVGAltGlyphElement -> m result
-getFormat self
-  = liftIO
-      (fromJSString <$> (js_getFormat (unSVGAltGlyphElement self)))
+getFormat self = liftIO (fromJSString <$> (js_getFormat (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGAngle.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGAngle.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGAngle.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGAngle.hs
@@ -13,7 +13,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -28,24 +28,23 @@
  
 foreign import javascript unsafe
         "$1[\"newValueSpecifiedUnits\"]($2,\n$3)" js_newValueSpecifiedUnits
-        :: JSRef SVGAngle -> Word -> Float -> IO ()
+        :: SVGAngle -> Word -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGAngle.newValueSpecifiedUnits Mozilla SVGAngle.newValueSpecifiedUnits documentation> 
 newValueSpecifiedUnits ::
                        (MonadIO m) => SVGAngle -> Word -> Float -> m ()
 newValueSpecifiedUnits self unitType valueInSpecifiedUnits
   = liftIO
-      (js_newValueSpecifiedUnits (unSVGAngle self) unitType
-         valueInSpecifiedUnits)
+      (js_newValueSpecifiedUnits (self) unitType valueInSpecifiedUnits)
  
 foreign import javascript unsafe
         "$1[\"convertToSpecifiedUnits\"]($2)" js_convertToSpecifiedUnits ::
-        JSRef SVGAngle -> Word -> IO ()
+        SVGAngle -> Word -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGAngle.convertToSpecifiedUnits Mozilla SVGAngle.convertToSpecifiedUnits documentation> 
 convertToSpecifiedUnits :: (MonadIO m) => SVGAngle -> Word -> m ()
 convertToSpecifiedUnits self unitType
-  = liftIO (js_convertToSpecifiedUnits (unSVGAngle self) unitType)
+  = liftIO (js_convertToSpecifiedUnits (self) unitType)
 pattern SVG_ANGLETYPE_UNKNOWN = 0
 pattern SVG_ANGLETYPE_UNSPECIFIED = 1
 pattern SVG_ANGLETYPE_DEG = 2
@@ -53,62 +52,58 @@
 pattern SVG_ANGLETYPE_GRAD = 4
  
 foreign import javascript unsafe "$1[\"unitType\"]" js_getUnitType
-        :: JSRef SVGAngle -> IO Word
+        :: SVGAngle -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGAngle.unitType Mozilla SVGAngle.unitType documentation> 
 getUnitType :: (MonadIO m) => SVGAngle -> m Word
-getUnitType self = liftIO (js_getUnitType (unSVGAngle self))
+getUnitType self = liftIO (js_getUnitType (self))
  
 foreign import javascript unsafe "$1[\"value\"] = $2;" js_setValue
-        :: JSRef SVGAngle -> Float -> IO ()
+        :: SVGAngle -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGAngle.value Mozilla SVGAngle.value documentation> 
 setValue :: (MonadIO m) => SVGAngle -> Float -> m ()
-setValue self val = liftIO (js_setValue (unSVGAngle self) val)
+setValue self val = liftIO (js_setValue (self) val)
  
 foreign import javascript unsafe "$1[\"value\"]" js_getValue ::
-        JSRef SVGAngle -> IO Float
+        SVGAngle -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGAngle.value Mozilla SVGAngle.value documentation> 
 getValue :: (MonadIO m) => SVGAngle -> m Float
-getValue self = liftIO (js_getValue (unSVGAngle self))
+getValue self = liftIO (js_getValue (self))
  
 foreign import javascript unsafe
         "$1[\"valueInSpecifiedUnits\"] = $2;" js_setValueInSpecifiedUnits
-        :: JSRef SVGAngle -> Float -> IO ()
+        :: SVGAngle -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGAngle.valueInSpecifiedUnits Mozilla SVGAngle.valueInSpecifiedUnits documentation> 
 setValueInSpecifiedUnits ::
                          (MonadIO m) => SVGAngle -> Float -> m ()
 setValueInSpecifiedUnits self val
-  = liftIO (js_setValueInSpecifiedUnits (unSVGAngle self) val)
+  = liftIO (js_setValueInSpecifiedUnits (self) val)
  
 foreign import javascript unsafe "$1[\"valueInSpecifiedUnits\"]"
-        js_getValueInSpecifiedUnits :: JSRef SVGAngle -> IO Float
+        js_getValueInSpecifiedUnits :: SVGAngle -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGAngle.valueInSpecifiedUnits Mozilla SVGAngle.valueInSpecifiedUnits documentation> 
 getValueInSpecifiedUnits :: (MonadIO m) => SVGAngle -> m Float
 getValueInSpecifiedUnits self
-  = liftIO (js_getValueInSpecifiedUnits (unSVGAngle self))
+  = liftIO (js_getValueInSpecifiedUnits (self))
  
 foreign import javascript unsafe "$1[\"valueAsString\"] = $2;"
-        js_setValueAsString ::
-        JSRef SVGAngle -> JSRef (Maybe JSString) -> IO ()
+        js_setValueAsString :: SVGAngle -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGAngle.valueAsString Mozilla SVGAngle.valueAsString documentation> 
 setValueAsString ::
                  (MonadIO m, ToJSString val) => SVGAngle -> Maybe val -> m ()
 setValueAsString self val
-  = liftIO
-      (js_setValueAsString (unSVGAngle self) (toMaybeJSString val))
+  = liftIO (js_setValueAsString (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"valueAsString\"]"
-        js_getValueAsString ::
-        JSRef SVGAngle -> IO (JSRef (Maybe JSString))
+        js_getValueAsString :: SVGAngle -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGAngle.valueAsString Mozilla SVGAngle.valueAsString documentation> 
 getValueAsString ::
                  (MonadIO m, FromJSString result) => SVGAngle -> m (Maybe result)
 getValueAsString self
-  = liftIO
-      (fromMaybeJSString <$> (js_getValueAsString (unSVGAngle self)))
+  = liftIO (fromMaybeJSString <$> (js_getValueAsString (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGAnimatedAngle.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGAnimatedAngle.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGAnimatedAngle.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGAnimatedAngle.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,17 +19,17 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"baseVal\"]" js_getBaseVal ::
-        JSRef SVGAnimatedAngle -> IO (JSRef SVGAngle)
+        SVGAnimatedAngle -> IO (Nullable SVGAngle)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimatedAngle.baseVal Mozilla SVGAnimatedAngle.baseVal documentation> 
 getBaseVal :: (MonadIO m) => SVGAnimatedAngle -> m (Maybe SVGAngle)
 getBaseVal self
-  = liftIO ((js_getBaseVal (unSVGAnimatedAngle self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getBaseVal (self)))
  
 foreign import javascript unsafe "$1[\"animVal\"]" js_getAnimVal ::
-        JSRef SVGAnimatedAngle -> IO (JSRef SVGAngle)
+        SVGAnimatedAngle -> IO (Nullable SVGAngle)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimatedAngle.animVal Mozilla SVGAnimatedAngle.animVal documentation> 
 getAnimVal :: (MonadIO m) => SVGAnimatedAngle -> m (Maybe SVGAngle)
 getAnimVal self
-  = liftIO ((js_getAnimVal (unSVGAnimatedAngle self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getAnimVal (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGAnimatedBoolean.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGAnimatedBoolean.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGAnimatedBoolean.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGAnimatedBoolean.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,25 +20,22 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"baseVal\"] = $2;"
-        js_setBaseVal :: JSRef SVGAnimatedBoolean -> Bool -> IO ()
+        js_setBaseVal :: SVGAnimatedBoolean -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimatedBoolean.baseVal Mozilla SVGAnimatedBoolean.baseVal documentation> 
 setBaseVal :: (MonadIO m) => SVGAnimatedBoolean -> Bool -> m ()
-setBaseVal self val
-  = liftIO (js_setBaseVal (unSVGAnimatedBoolean self) val)
+setBaseVal self val = liftIO (js_setBaseVal (self) val)
  
 foreign import javascript unsafe "($1[\"baseVal\"] ? 1 : 0)"
-        js_getBaseVal :: JSRef SVGAnimatedBoolean -> IO Bool
+        js_getBaseVal :: SVGAnimatedBoolean -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimatedBoolean.baseVal Mozilla SVGAnimatedBoolean.baseVal documentation> 
 getBaseVal :: (MonadIO m) => SVGAnimatedBoolean -> m Bool
-getBaseVal self
-  = liftIO (js_getBaseVal (unSVGAnimatedBoolean self))
+getBaseVal self = liftIO (js_getBaseVal (self))
  
 foreign import javascript unsafe "($1[\"animVal\"] ? 1 : 0)"
-        js_getAnimVal :: JSRef SVGAnimatedBoolean -> IO Bool
+        js_getAnimVal :: SVGAnimatedBoolean -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimatedBoolean.animVal Mozilla SVGAnimatedBoolean.animVal documentation> 
 getAnimVal :: (MonadIO m) => SVGAnimatedBoolean -> m Bool
-getAnimVal self
-  = liftIO (js_getAnimVal (unSVGAnimatedBoolean self))
+getAnimVal self = liftIO (js_getAnimVal (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGAnimatedEnumeration.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGAnimatedEnumeration.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGAnimatedEnumeration.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGAnimatedEnumeration.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,25 +20,22 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"baseVal\"] = $2;"
-        js_setBaseVal :: JSRef SVGAnimatedEnumeration -> Word -> IO ()
+        js_setBaseVal :: SVGAnimatedEnumeration -> Word -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimatedEnumeration.baseVal Mozilla SVGAnimatedEnumeration.baseVal documentation> 
 setBaseVal :: (MonadIO m) => SVGAnimatedEnumeration -> Word -> m ()
-setBaseVal self val
-  = liftIO (js_setBaseVal (unSVGAnimatedEnumeration self) val)
+setBaseVal self val = liftIO (js_setBaseVal (self) val)
  
 foreign import javascript unsafe "$1[\"baseVal\"]" js_getBaseVal ::
-        JSRef SVGAnimatedEnumeration -> IO Word
+        SVGAnimatedEnumeration -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimatedEnumeration.baseVal Mozilla SVGAnimatedEnumeration.baseVal documentation> 
 getBaseVal :: (MonadIO m) => SVGAnimatedEnumeration -> m Word
-getBaseVal self
-  = liftIO (js_getBaseVal (unSVGAnimatedEnumeration self))
+getBaseVal self = liftIO (js_getBaseVal (self))
  
 foreign import javascript unsafe "$1[\"animVal\"]" js_getAnimVal ::
-        JSRef SVGAnimatedEnumeration -> IO Word
+        SVGAnimatedEnumeration -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimatedEnumeration.animVal Mozilla SVGAnimatedEnumeration.animVal documentation> 
 getAnimVal :: (MonadIO m) => SVGAnimatedEnumeration -> m Word
-getAnimVal self
-  = liftIO (js_getAnimVal (unSVGAnimatedEnumeration self))
+getAnimVal self = liftIO (js_getAnimVal (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGAnimatedInteger.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGAnimatedInteger.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGAnimatedInteger.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGAnimatedInteger.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,25 +20,22 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"baseVal\"] = $2;"
-        js_setBaseVal :: JSRef SVGAnimatedInteger -> Int -> IO ()
+        js_setBaseVal :: SVGAnimatedInteger -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimatedInteger.baseVal Mozilla SVGAnimatedInteger.baseVal documentation> 
 setBaseVal :: (MonadIO m) => SVGAnimatedInteger -> Int -> m ()
-setBaseVal self val
-  = liftIO (js_setBaseVal (unSVGAnimatedInteger self) val)
+setBaseVal self val = liftIO (js_setBaseVal (self) val)
  
 foreign import javascript unsafe "$1[\"baseVal\"]" js_getBaseVal ::
-        JSRef SVGAnimatedInteger -> IO Int
+        SVGAnimatedInteger -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimatedInteger.baseVal Mozilla SVGAnimatedInteger.baseVal documentation> 
 getBaseVal :: (MonadIO m) => SVGAnimatedInteger -> m Int
-getBaseVal self
-  = liftIO (js_getBaseVal (unSVGAnimatedInteger self))
+getBaseVal self = liftIO (js_getBaseVal (self))
  
 foreign import javascript unsafe "$1[\"animVal\"]" js_getAnimVal ::
-        JSRef SVGAnimatedInteger -> IO Int
+        SVGAnimatedInteger -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimatedInteger.animVal Mozilla SVGAnimatedInteger.animVal documentation> 
 getAnimVal :: (MonadIO m) => SVGAnimatedInteger -> m Int
-getAnimVal self
-  = liftIO (js_getAnimVal (unSVGAnimatedInteger self))
+getAnimVal self = liftIO (js_getAnimVal (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGAnimatedLength.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGAnimatedLength.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGAnimatedLength.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGAnimatedLength.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,19 +19,19 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"baseVal\"]" js_getBaseVal ::
-        JSRef SVGAnimatedLength -> IO (JSRef SVGLength)
+        SVGAnimatedLength -> IO (Nullable SVGLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimatedLength.baseVal Mozilla SVGAnimatedLength.baseVal documentation> 
 getBaseVal ::
            (MonadIO m) => SVGAnimatedLength -> m (Maybe SVGLength)
 getBaseVal self
-  = liftIO ((js_getBaseVal (unSVGAnimatedLength self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getBaseVal (self)))
  
 foreign import javascript unsafe "$1[\"animVal\"]" js_getAnimVal ::
-        JSRef SVGAnimatedLength -> IO (JSRef SVGLength)
+        SVGAnimatedLength -> IO (Nullable SVGLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimatedLength.animVal Mozilla SVGAnimatedLength.animVal documentation> 
 getAnimVal ::
            (MonadIO m) => SVGAnimatedLength -> m (Maybe SVGLength)
 getAnimVal self
-  = liftIO ((js_getAnimVal (unSVGAnimatedLength self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getAnimVal (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGAnimatedLengthList.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGAnimatedLengthList.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGAnimatedLengthList.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGAnimatedLengthList.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,21 +20,19 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"baseVal\"]" js_getBaseVal ::
-        JSRef SVGAnimatedLengthList -> IO (JSRef SVGLengthList)
+        SVGAnimatedLengthList -> IO (Nullable SVGLengthList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimatedLengthList.baseVal Mozilla SVGAnimatedLengthList.baseVal documentation> 
 getBaseVal ::
            (MonadIO m) => SVGAnimatedLengthList -> m (Maybe SVGLengthList)
 getBaseVal self
-  = liftIO
-      ((js_getBaseVal (unSVGAnimatedLengthList self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getBaseVal (self)))
  
 foreign import javascript unsafe "$1[\"animVal\"]" js_getAnimVal ::
-        JSRef SVGAnimatedLengthList -> IO (JSRef SVGLengthList)
+        SVGAnimatedLengthList -> IO (Nullable SVGLengthList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimatedLengthList.animVal Mozilla SVGAnimatedLengthList.animVal documentation> 
 getAnimVal ::
            (MonadIO m) => SVGAnimatedLengthList -> m (Maybe SVGLengthList)
 getAnimVal self
-  = liftIO
-      ((js_getAnimVal (unSVGAnimatedLengthList self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getAnimVal (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGAnimatedNumber.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGAnimatedNumber.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGAnimatedNumber.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGAnimatedNumber.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,23 +20,22 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"baseVal\"] = $2;"
-        js_setBaseVal :: JSRef SVGAnimatedNumber -> Float -> IO ()
+        js_setBaseVal :: SVGAnimatedNumber -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimatedNumber.baseVal Mozilla SVGAnimatedNumber.baseVal documentation> 
 setBaseVal :: (MonadIO m) => SVGAnimatedNumber -> Float -> m ()
-setBaseVal self val
-  = liftIO (js_setBaseVal (unSVGAnimatedNumber self) val)
+setBaseVal self val = liftIO (js_setBaseVal (self) val)
  
 foreign import javascript unsafe "$1[\"baseVal\"]" js_getBaseVal ::
-        JSRef SVGAnimatedNumber -> IO Float
+        SVGAnimatedNumber -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimatedNumber.baseVal Mozilla SVGAnimatedNumber.baseVal documentation> 
 getBaseVal :: (MonadIO m) => SVGAnimatedNumber -> m Float
-getBaseVal self = liftIO (js_getBaseVal (unSVGAnimatedNumber self))
+getBaseVal self = liftIO (js_getBaseVal (self))
  
 foreign import javascript unsafe "$1[\"animVal\"]" js_getAnimVal ::
-        JSRef SVGAnimatedNumber -> IO Float
+        SVGAnimatedNumber -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimatedNumber.animVal Mozilla SVGAnimatedNumber.animVal documentation> 
 getAnimVal :: (MonadIO m) => SVGAnimatedNumber -> m Float
-getAnimVal self = liftIO (js_getAnimVal (unSVGAnimatedNumber self))
+getAnimVal self = liftIO (js_getAnimVal (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGAnimatedNumberList.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGAnimatedNumberList.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGAnimatedNumberList.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGAnimatedNumberList.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,21 +20,19 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"baseVal\"]" js_getBaseVal ::
-        JSRef SVGAnimatedNumberList -> IO (JSRef SVGNumberList)
+        SVGAnimatedNumberList -> IO (Nullable SVGNumberList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimatedNumberList.baseVal Mozilla SVGAnimatedNumberList.baseVal documentation> 
 getBaseVal ::
            (MonadIO m) => SVGAnimatedNumberList -> m (Maybe SVGNumberList)
 getBaseVal self
-  = liftIO
-      ((js_getBaseVal (unSVGAnimatedNumberList self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getBaseVal (self)))
  
 foreign import javascript unsafe "$1[\"animVal\"]" js_getAnimVal ::
-        JSRef SVGAnimatedNumberList -> IO (JSRef SVGNumberList)
+        SVGAnimatedNumberList -> IO (Nullable SVGNumberList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimatedNumberList.animVal Mozilla SVGAnimatedNumberList.animVal documentation> 
 getAnimVal ::
            (MonadIO m) => SVGAnimatedNumberList -> m (Maybe SVGNumberList)
 getAnimVal self
-  = liftIO
-      ((js_getAnimVal (unSVGAnimatedNumberList self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getAnimVal (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGAnimatedPreserveAspectRatio.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGAnimatedPreserveAspectRatio.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGAnimatedPreserveAspectRatio.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGAnimatedPreserveAspectRatio.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -21,27 +21,23 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"baseVal\"]" js_getBaseVal ::
-        JSRef SVGAnimatedPreserveAspectRatio ->
-          IO (JSRef SVGPreserveAspectRatio)
+        SVGAnimatedPreserveAspectRatio ->
+          IO (Nullable SVGPreserveAspectRatio)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimatedPreserveAspectRatio.baseVal Mozilla SVGAnimatedPreserveAspectRatio.baseVal documentation> 
 getBaseVal ::
            (MonadIO m) =>
              SVGAnimatedPreserveAspectRatio -> m (Maybe SVGPreserveAspectRatio)
 getBaseVal self
-  = liftIO
-      ((js_getBaseVal (unSVGAnimatedPreserveAspectRatio self)) >>=
-         fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getBaseVal (self)))
  
 foreign import javascript unsafe "$1[\"animVal\"]" js_getAnimVal ::
-        JSRef SVGAnimatedPreserveAspectRatio ->
-          IO (JSRef SVGPreserveAspectRatio)
+        SVGAnimatedPreserveAspectRatio ->
+          IO (Nullable SVGPreserveAspectRatio)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimatedPreserveAspectRatio.animVal Mozilla SVGAnimatedPreserveAspectRatio.animVal documentation> 
 getAnimVal ::
            (MonadIO m) =>
              SVGAnimatedPreserveAspectRatio -> m (Maybe SVGPreserveAspectRatio)
 getAnimVal self
-  = liftIO
-      ((js_getAnimVal (unSVGAnimatedPreserveAspectRatio self)) >>=
-         fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getAnimVal (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGAnimatedRect.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGAnimatedRect.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGAnimatedRect.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGAnimatedRect.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,17 +19,17 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"baseVal\"]" js_getBaseVal ::
-        JSRef SVGAnimatedRect -> IO (JSRef SVGRect)
+        SVGAnimatedRect -> IO (Nullable SVGRect)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimatedRect.baseVal Mozilla SVGAnimatedRect.baseVal documentation> 
 getBaseVal :: (MonadIO m) => SVGAnimatedRect -> m (Maybe SVGRect)
 getBaseVal self
-  = liftIO ((js_getBaseVal (unSVGAnimatedRect self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getBaseVal (self)))
  
 foreign import javascript unsafe "$1[\"animVal\"]" js_getAnimVal ::
-        JSRef SVGAnimatedRect -> IO (JSRef SVGRect)
+        SVGAnimatedRect -> IO (Nullable SVGRect)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimatedRect.animVal Mozilla SVGAnimatedRect.animVal documentation> 
 getAnimVal :: (MonadIO m) => SVGAnimatedRect -> m (Maybe SVGRect)
 getAnimVal self
-  = liftIO ((js_getAnimVal (unSVGAnimatedRect self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getAnimVal (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGAnimatedString.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGAnimatedString.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGAnimatedString.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGAnimatedString.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,31 +20,26 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"baseVal\"] = $2;"
-        js_setBaseVal :: JSRef SVGAnimatedString -> JSString -> IO ()
+        js_setBaseVal :: SVGAnimatedString -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimatedString.baseVal Mozilla SVGAnimatedString.baseVal documentation> 
 setBaseVal ::
            (MonadIO m, ToJSString val) => SVGAnimatedString -> val -> m ()
 setBaseVal self val
-  = liftIO
-      (js_setBaseVal (unSVGAnimatedString self) (toJSString val))
+  = liftIO (js_setBaseVal (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"baseVal\"]" js_getBaseVal ::
-        JSRef SVGAnimatedString -> IO JSString
+        SVGAnimatedString -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimatedString.baseVal Mozilla SVGAnimatedString.baseVal documentation> 
 getBaseVal ::
            (MonadIO m, FromJSString result) => SVGAnimatedString -> m result
-getBaseVal self
-  = liftIO
-      (fromJSString <$> (js_getBaseVal (unSVGAnimatedString self)))
+getBaseVal self = liftIO (fromJSString <$> (js_getBaseVal (self)))
  
 foreign import javascript unsafe "$1[\"animVal\"]" js_getAnimVal ::
-        JSRef SVGAnimatedString -> IO JSString
+        SVGAnimatedString -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimatedString.animVal Mozilla SVGAnimatedString.animVal documentation> 
 getAnimVal ::
            (MonadIO m, FromJSString result) => SVGAnimatedString -> m result
-getAnimVal self
-  = liftIO
-      (fromJSString <$> (js_getAnimVal (unSVGAnimatedString self)))
+getAnimVal self = liftIO (fromJSString <$> (js_getAnimVal (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGAnimatedTransformList.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGAnimatedTransformList.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGAnimatedTransformList.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGAnimatedTransformList.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,23 +20,21 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"baseVal\"]" js_getBaseVal ::
-        JSRef SVGAnimatedTransformList -> IO (JSRef SVGTransformList)
+        SVGAnimatedTransformList -> IO (Nullable SVGTransformList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimatedTransformList.baseVal Mozilla SVGAnimatedTransformList.baseVal documentation> 
 getBaseVal ::
            (MonadIO m) =>
              SVGAnimatedTransformList -> m (Maybe SVGTransformList)
 getBaseVal self
-  = liftIO
-      ((js_getBaseVal (unSVGAnimatedTransformList self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getBaseVal (self)))
  
 foreign import javascript unsafe "$1[\"animVal\"]" js_getAnimVal ::
-        JSRef SVGAnimatedTransformList -> IO (JSRef SVGTransformList)
+        SVGAnimatedTransformList -> IO (Nullable SVGTransformList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimatedTransformList.animVal Mozilla SVGAnimatedTransformList.animVal documentation> 
 getAnimVal ::
            (MonadIO m) =>
              SVGAnimatedTransformList -> m (Maybe SVGTransformList)
 getAnimVal self
-  = liftIO
-      ((js_getAnimVal (unSVGAnimatedTransformList self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getAnimVal (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGAnimationElement.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGAnimationElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGAnimationElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGAnimationElement.hs
@@ -10,7 +10,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -24,87 +24,71 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"getStartTime\"]()"
-        js_getStartTime :: JSRef SVGAnimationElement -> IO Float
+        js_getStartTime :: SVGAnimationElement -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimationElement.getStartTime Mozilla SVGAnimationElement.getStartTime documentation> 
 getStartTime ::
              (MonadIO m, IsSVGAnimationElement self) => self -> m Float
 getStartTime self
-  = liftIO
-      (js_getStartTime
-         (unSVGAnimationElement (toSVGAnimationElement self)))
+  = liftIO (js_getStartTime (toSVGAnimationElement self))
  
 foreign import javascript unsafe "$1[\"getCurrentTime\"]()"
-        js_getCurrentTime :: JSRef SVGAnimationElement -> IO Float
+        js_getCurrentTime :: SVGAnimationElement -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimationElement.getCurrentTime Mozilla SVGAnimationElement.getCurrentTime documentation> 
 getCurrentTime ::
                (MonadIO m, IsSVGAnimationElement self) => self -> m Float
 getCurrentTime self
-  = liftIO
-      (js_getCurrentTime
-         (unSVGAnimationElement (toSVGAnimationElement self)))
+  = liftIO (js_getCurrentTime (toSVGAnimationElement self))
  
 foreign import javascript unsafe "$1[\"getSimpleDuration\"]()"
-        js_getSimpleDuration :: JSRef SVGAnimationElement -> IO Float
+        js_getSimpleDuration :: SVGAnimationElement -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimationElement.getSimpleDuration Mozilla SVGAnimationElement.getSimpleDuration documentation> 
 getSimpleDuration ::
                   (MonadIO m, IsSVGAnimationElement self) => self -> m Float
 getSimpleDuration self
-  = liftIO
-      (js_getSimpleDuration
-         (unSVGAnimationElement (toSVGAnimationElement self)))
+  = liftIO (js_getSimpleDuration (toSVGAnimationElement self))
  
 foreign import javascript unsafe "$1[\"beginElement\"]()"
-        js_beginElement :: JSRef SVGAnimationElement -> IO ()
+        js_beginElement :: SVGAnimationElement -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimationElement.beginElement Mozilla SVGAnimationElement.beginElement documentation> 
 beginElement ::
              (MonadIO m, IsSVGAnimationElement self) => self -> m ()
 beginElement self
-  = liftIO
-      (js_beginElement
-         (unSVGAnimationElement (toSVGAnimationElement self)))
+  = liftIO (js_beginElement (toSVGAnimationElement self))
  
 foreign import javascript unsafe "$1[\"beginElementAt\"]($2)"
-        js_beginElementAt :: JSRef SVGAnimationElement -> Float -> IO ()
+        js_beginElementAt :: SVGAnimationElement -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimationElement.beginElementAt Mozilla SVGAnimationElement.beginElementAt documentation> 
 beginElementAt ::
                (MonadIO m, IsSVGAnimationElement self) => self -> Float -> m ()
 beginElementAt self offset
-  = liftIO
-      (js_beginElementAt
-         (unSVGAnimationElement (toSVGAnimationElement self))
-         offset)
+  = liftIO (js_beginElementAt (toSVGAnimationElement self) offset)
  
 foreign import javascript unsafe "$1[\"endElement\"]()"
-        js_endElement :: JSRef SVGAnimationElement -> IO ()
+        js_endElement :: SVGAnimationElement -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimationElement.endElement Mozilla SVGAnimationElement.endElement documentation> 
 endElement ::
            (MonadIO m, IsSVGAnimationElement self) => self -> m ()
 endElement self
-  = liftIO
-      (js_endElement
-         (unSVGAnimationElement (toSVGAnimationElement self)))
+  = liftIO (js_endElement (toSVGAnimationElement self))
  
 foreign import javascript unsafe "$1[\"endElementAt\"]($2)"
-        js_endElementAt :: JSRef SVGAnimationElement -> Float -> IO ()
+        js_endElementAt :: SVGAnimationElement -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimationElement.endElementAt Mozilla SVGAnimationElement.endElementAt documentation> 
 endElementAt ::
              (MonadIO m, IsSVGAnimationElement self) => self -> Float -> m ()
 endElementAt self offset
-  = liftIO
-      (js_endElementAt
-         (unSVGAnimationElement (toSVGAnimationElement self))
-         offset)
+  = liftIO (js_endElementAt (toSVGAnimationElement self) offset)
  
 foreign import javascript unsafe "$1[\"targetElement\"]"
         js_getTargetElement ::
-        JSRef SVGAnimationElement -> IO (JSRef SVGElement)
+        SVGAnimationElement -> IO (Nullable SVGElement)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimationElement.targetElement Mozilla SVGAnimationElement.targetElement documentation> 
 getTargetElement ::
@@ -112,6 +96,5 @@
                    self -> m (Maybe SVGElement)
 getTargetElement self
   = liftIO
-      ((js_getTargetElement
-          (unSVGAnimationElement (toSVGAnimationElement self)))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_getTargetElement (toSVGAnimationElement self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGCircleElement.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGCircleElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGCircleElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGCircleElement.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,28 +19,25 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"cx\"]" js_getCx ::
-        JSRef SVGCircleElement -> IO (JSRef SVGAnimatedLength)
+        SVGCircleElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGCircleElement.cx Mozilla SVGCircleElement.cx documentation> 
 getCx ::
       (MonadIO m) => SVGCircleElement -> m (Maybe SVGAnimatedLength)
-getCx self
-  = liftIO ((js_getCx (unSVGCircleElement self)) >>= fromJSRef)
+getCx self = liftIO (nullableToMaybe <$> (js_getCx (self)))
  
 foreign import javascript unsafe "$1[\"cy\"]" js_getCy ::
-        JSRef SVGCircleElement -> IO (JSRef SVGAnimatedLength)
+        SVGCircleElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGCircleElement.cy Mozilla SVGCircleElement.cy documentation> 
 getCy ::
       (MonadIO m) => SVGCircleElement -> m (Maybe SVGAnimatedLength)
-getCy self
-  = liftIO ((js_getCy (unSVGCircleElement self)) >>= fromJSRef)
+getCy self = liftIO (nullableToMaybe <$> (js_getCy (self)))
  
 foreign import javascript unsafe "$1[\"r\"]" js_getR ::
-        JSRef SVGCircleElement -> IO (JSRef SVGAnimatedLength)
+        SVGCircleElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGCircleElement.r Mozilla SVGCircleElement.r documentation> 
 getR ::
      (MonadIO m) => SVGCircleElement -> m (Maybe SVGAnimatedLength)
-getR self
-  = liftIO ((js_getR (unSVGCircleElement self)) >>= fromJSRef)
+getR self = liftIO (nullableToMaybe <$> (js_getR (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGClipPathElement.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGClipPathElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGClipPathElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGClipPathElement.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,12 +20,11 @@
  
 foreign import javascript unsafe "$1[\"clipPathUnits\"]"
         js_getClipPathUnits ::
-        JSRef SVGClipPathElement -> IO (JSRef SVGAnimatedEnumeration)
+        SVGClipPathElement -> IO (Nullable SVGAnimatedEnumeration)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGClipPathElement.clipPathUnits Mozilla SVGClipPathElement.clipPathUnits documentation> 
 getClipPathUnits ::
                  (MonadIO m) =>
                    SVGClipPathElement -> m (Maybe SVGAnimatedEnumeration)
 getClipPathUnits self
-  = liftIO
-      ((js_getClipPathUnits (unSVGClipPathElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getClipPathUnits (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGColor.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGColor.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGColor.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGColor.hs
@@ -10,7 +10,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -24,20 +24,18 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"setRGBColor\"]($2)"
-        js_setRGBColor :: JSRef SVGColor -> JSString -> IO ()
+        js_setRGBColor :: SVGColor -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGColor.setRGBColor Mozilla SVGColor.setRGBColor documentation> 
 setRGBColor ::
             (MonadIO m, IsSVGColor self, ToJSString rgbColor) =>
               self -> rgbColor -> m ()
 setRGBColor self rgbColor
-  = liftIO
-      (js_setRGBColor (unSVGColor (toSVGColor self))
-         (toJSString rgbColor))
+  = liftIO (js_setRGBColor (toSVGColor self) (toJSString rgbColor))
  
 foreign import javascript unsafe
         "$1[\"setRGBColorICCColor\"]($2,\n$3)" js_setRGBColorICCColor ::
-        JSRef SVGColor -> JSString -> JSString -> IO ()
+        SVGColor -> JSString -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGColor.setRGBColorICCColor Mozilla SVGColor.setRGBColorICCColor documentation> 
 setRGBColorICCColor ::
@@ -46,13 +44,11 @@
                       self -> rgbColor -> iccColor -> m ()
 setRGBColorICCColor self rgbColor iccColor
   = liftIO
-      (js_setRGBColorICCColor (unSVGColor (toSVGColor self))
-         (toJSString rgbColor)
+      (js_setRGBColorICCColor (toSVGColor self) (toJSString rgbColor)
          (toJSString iccColor))
  
 foreign import javascript unsafe "$1[\"setColor\"]($2, $3, $4)"
-        js_setColor ::
-        JSRef SVGColor -> Word -> JSString -> JSString -> IO ()
+        js_setColor :: SVGColor -> Word -> JSString -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGColor.setColor Mozilla SVGColor.setColor documentation> 
 setColor ::
@@ -61,8 +57,7 @@
            self -> Word -> rgbColor -> iccColor -> m ()
 setColor self colorType rgbColor iccColor
   = liftIO
-      (js_setColor (unSVGColor (toSVGColor self)) colorType
-         (toJSString rgbColor)
+      (js_setColor (toSVGColor self) colorType (toJSString rgbColor)
          (toJSString iccColor))
 pattern SVG_COLORTYPE_UNKNOWN = 0
 pattern SVG_COLORTYPE_RGBCOLOR = 1
@@ -70,19 +65,17 @@
 pattern SVG_COLORTYPE_CURRENTCOLOR = 3
  
 foreign import javascript unsafe "$1[\"colorType\"]"
-        js_getColorType :: JSRef SVGColor -> IO Word
+        js_getColorType :: SVGColor -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGColor.colorType Mozilla SVGColor.colorType documentation> 
 getColorType :: (MonadIO m, IsSVGColor self) => self -> m Word
-getColorType self
-  = liftIO (js_getColorType (unSVGColor (toSVGColor self)))
+getColorType self = liftIO (js_getColorType (toSVGColor self))
  
 foreign import javascript unsafe "$1[\"rgbColor\"]" js_getRgbColor
-        :: JSRef SVGColor -> IO (JSRef RGBColor)
+        :: SVGColor -> IO (Nullable RGBColor)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGColor.rgbColor Mozilla SVGColor.rgbColor documentation> 
 getRgbColor ::
             (MonadIO m, IsSVGColor self) => self -> m (Maybe RGBColor)
 getRgbColor self
-  = liftIO
-      ((js_getRgbColor (unSVGColor (toSVGColor self))) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getRgbColor (toSVGColor self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGComponentTransferFunctionElement.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGComponentTransferFunctionElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGComponentTransferFunctionElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGComponentTransferFunctionElement.hs
@@ -17,7 +17,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -37,8 +37,8 @@
 pattern SVG_FECOMPONENTTRANSFER_TYPE_GAMMA = 5
  
 foreign import javascript unsafe "$1[\"type\"]" js_getType ::
-        JSRef SVGComponentTransferFunctionElement ->
-          IO (JSRef SVGAnimatedEnumeration)
+        SVGComponentTransferFunctionElement ->
+          IO (Nullable SVGAnimatedEnumeration)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGComponentTransferFunctionElement.type Mozilla SVGComponentTransferFunctionElement.type documentation> 
 getType ::
@@ -46,15 +46,13 @@
           self -> m (Maybe SVGAnimatedEnumeration)
 getType self
   = liftIO
-      ((js_getType
-          (unSVGComponentTransferFunctionElement
-             (toSVGComponentTransferFunctionElement self)))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_getType (toSVGComponentTransferFunctionElement self)))
  
 foreign import javascript unsafe "$1[\"tableValues\"]"
         js_getTableValues ::
-        JSRef SVGComponentTransferFunctionElement ->
-          IO (JSRef SVGAnimatedNumberList)
+        SVGComponentTransferFunctionElement ->
+          IO (Nullable SVGAnimatedNumberList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGComponentTransferFunctionElement.tableValues Mozilla SVGComponentTransferFunctionElement.tableValues documentation> 
 getTableValues ::
@@ -62,14 +60,12 @@
                  self -> m (Maybe SVGAnimatedNumberList)
 getTableValues self
   = liftIO
-      ((js_getTableValues
-          (unSVGComponentTransferFunctionElement
-             (toSVGComponentTransferFunctionElement self)))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_getTableValues (toSVGComponentTransferFunctionElement self)))
  
 foreign import javascript unsafe "$1[\"slope\"]" js_getSlope ::
-        JSRef SVGComponentTransferFunctionElement ->
-          IO (JSRef SVGAnimatedNumber)
+        SVGComponentTransferFunctionElement ->
+          IO (Nullable SVGAnimatedNumber)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGComponentTransferFunctionElement.slope Mozilla SVGComponentTransferFunctionElement.slope documentation> 
 getSlope ::
@@ -77,15 +73,13 @@
            self -> m (Maybe SVGAnimatedNumber)
 getSlope self
   = liftIO
-      ((js_getSlope
-          (unSVGComponentTransferFunctionElement
-             (toSVGComponentTransferFunctionElement self)))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_getSlope (toSVGComponentTransferFunctionElement self)))
  
 foreign import javascript unsafe "$1[\"intercept\"]"
         js_getIntercept ::
-        JSRef SVGComponentTransferFunctionElement ->
-          IO (JSRef SVGAnimatedNumber)
+        SVGComponentTransferFunctionElement ->
+          IO (Nullable SVGAnimatedNumber)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGComponentTransferFunctionElement.intercept Mozilla SVGComponentTransferFunctionElement.intercept documentation> 
 getIntercept ::
@@ -93,15 +87,13 @@
                self -> m (Maybe SVGAnimatedNumber)
 getIntercept self
   = liftIO
-      ((js_getIntercept
-          (unSVGComponentTransferFunctionElement
-             (toSVGComponentTransferFunctionElement self)))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_getIntercept (toSVGComponentTransferFunctionElement self)))
  
 foreign import javascript unsafe "$1[\"amplitude\"]"
         js_getAmplitude ::
-        JSRef SVGComponentTransferFunctionElement ->
-          IO (JSRef SVGAnimatedNumber)
+        SVGComponentTransferFunctionElement ->
+          IO (Nullable SVGAnimatedNumber)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGComponentTransferFunctionElement.amplitude Mozilla SVGComponentTransferFunctionElement.amplitude documentation> 
 getAmplitude ::
@@ -109,15 +101,13 @@
                self -> m (Maybe SVGAnimatedNumber)
 getAmplitude self
   = liftIO
-      ((js_getAmplitude
-          (unSVGComponentTransferFunctionElement
-             (toSVGComponentTransferFunctionElement self)))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_getAmplitude (toSVGComponentTransferFunctionElement self)))
  
 foreign import javascript unsafe "$1[\"exponent\"]" js_getExponent
         ::
-        JSRef SVGComponentTransferFunctionElement ->
-          IO (JSRef SVGAnimatedNumber)
+        SVGComponentTransferFunctionElement ->
+          IO (Nullable SVGAnimatedNumber)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGComponentTransferFunctionElement.exponent Mozilla SVGComponentTransferFunctionElement.exponent documentation> 
 getExponent ::
@@ -125,14 +115,12 @@
               self -> m (Maybe SVGAnimatedNumber)
 getExponent self
   = liftIO
-      ((js_getExponent
-          (unSVGComponentTransferFunctionElement
-             (toSVGComponentTransferFunctionElement self)))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_getExponent (toSVGComponentTransferFunctionElement self)))
  
 foreign import javascript unsafe "$1[\"offset\"]" js_getOffset ::
-        JSRef SVGComponentTransferFunctionElement ->
-          IO (JSRef SVGAnimatedNumber)
+        SVGComponentTransferFunctionElement ->
+          IO (Nullable SVGAnimatedNumber)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGComponentTransferFunctionElement.offset Mozilla SVGComponentTransferFunctionElement.offset documentation> 
 getOffset ::
@@ -140,7 +128,5 @@
             self -> m (Maybe SVGAnimatedNumber)
 getOffset self
   = liftIO
-      ((js_getOffset
-          (unSVGComponentTransferFunctionElement
-             (toSVGComponentTransferFunctionElement self)))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_getOffset (toSVGComponentTransferFunctionElement self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGCursorElement.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGCursorElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGCursorElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGCursorElement.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,19 +19,17 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"x\"]" js_getX ::
-        JSRef SVGCursorElement -> IO (JSRef SVGAnimatedLength)
+        SVGCursorElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGCursorElement.x Mozilla SVGCursorElement.x documentation> 
 getX ::
      (MonadIO m) => SVGCursorElement -> m (Maybe SVGAnimatedLength)
-getX self
-  = liftIO ((js_getX (unSVGCursorElement self)) >>= fromJSRef)
+getX self = liftIO (nullableToMaybe <$> (js_getX (self)))
  
 foreign import javascript unsafe "$1[\"y\"]" js_getY ::
-        JSRef SVGCursorElement -> IO (JSRef SVGAnimatedLength)
+        SVGCursorElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGCursorElement.y Mozilla SVGCursorElement.y documentation> 
 getY ::
      (MonadIO m) => SVGCursorElement -> m (Maybe SVGAnimatedLength)
-getY self
-  = liftIO ((js_getY (unSVGCursorElement self)) >>= fromJSRef)
+getY self = liftIO (nullableToMaybe <$> (js_getY (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGDocument.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGDocument.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGDocument.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGDocument.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,7 +19,7 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"createEvent\"]($2)"
-        js_createEvent :: JSRef SVGDocument -> JSString -> IO (JSRef Event)
+        js_createEvent :: SVGDocument -> JSString -> IO (Nullable Event)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGDocument.createEvent Mozilla SVGDocument.createEvent documentation> 
 createEvent ::
@@ -27,14 +27,14 @@
               SVGDocument -> eventType -> m (Maybe Event)
 createEvent self eventType
   = liftIO
-      ((js_createEvent (unSVGDocument self) (toJSString eventType)) >>=
-         fromJSRef)
+      (nullableToMaybe <$>
+         (js_createEvent (self) (toJSString eventType)))
  
 foreign import javascript unsafe "$1[\"rootElement\"]"
-        js_getRootElement :: JSRef SVGDocument -> IO (JSRef SVGSVGElement)
+        js_getRootElement :: SVGDocument -> IO (Nullable SVGSVGElement)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGDocument.rootElement Mozilla SVGDocument.rootElement documentation> 
 getRootElement ::
                (MonadIO m) => SVGDocument -> m (Maybe SVGSVGElement)
 getRootElement self
-  = liftIO ((js_getRootElement (unSVGDocument self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getRootElement (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGElement.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGElement.hs
@@ -12,7 +12,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -27,7 +27,7 @@
  
 foreign import javascript unsafe
         "$1[\"getPresentationAttribute\"]($2)" js_getPresentationAttribute
-        :: JSRef SVGElement -> JSString -> IO (JSRef CSSValue)
+        :: SVGElement -> JSString -> IO (Nullable CSSValue)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGElement.getPresentationAttribute Mozilla SVGElement.getPresentationAttribute documentation> 
 getPresentationAttribute ::
@@ -35,25 +35,22 @@
                            self -> name -> m (Maybe CSSValue)
 getPresentationAttribute self name
   = liftIO
-      ((js_getPresentationAttribute (unSVGElement (toSVGElement self))
-          (toJSString name))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_getPresentationAttribute (toSVGElement self)
+            (toJSString name)))
  
 foreign import javascript unsafe "$1[\"xmlbase\"] = $2;"
-        js_setXmlbase ::
-        JSRef SVGElement -> JSRef (Maybe JSString) -> IO ()
+        js_setXmlbase :: SVGElement -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGElement.xmlbase Mozilla SVGElement.xmlbase documentation> 
 setXmlbase ::
            (MonadIO m, IsSVGElement self, ToJSString val) =>
              self -> Maybe val -> m ()
 setXmlbase self val
-  = liftIO
-      (js_setXmlbase (unSVGElement (toSVGElement self))
-         (toMaybeJSString val))
+  = liftIO (js_setXmlbase (toSVGElement self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"xmlbase\"]" js_getXmlbase ::
-        JSRef SVGElement -> IO (JSRef (Maybe JSString))
+        SVGElement -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGElement.xmlbase Mozilla SVGElement.xmlbase documentation> 
 getXmlbase ::
@@ -61,81 +58,70 @@
              self -> m (Maybe result)
 getXmlbase self
   = liftIO
-      (fromMaybeJSString <$>
-         (js_getXmlbase (unSVGElement (toSVGElement self))))
+      (fromMaybeJSString <$> (js_getXmlbase (toSVGElement self)))
  
 foreign import javascript unsafe "$1[\"ownerSVGElement\"]"
-        js_getOwnerSVGElement ::
-        JSRef SVGElement -> IO (JSRef SVGSVGElement)
+        js_getOwnerSVGElement :: SVGElement -> IO (Nullable SVGSVGElement)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGElement.ownerSVGElement Mozilla SVGElement.ownerSVGElement documentation> 
 getOwnerSVGElement ::
                    (MonadIO m, IsSVGElement self) => self -> m (Maybe SVGSVGElement)
 getOwnerSVGElement self
   = liftIO
-      ((js_getOwnerSVGElement (unSVGElement (toSVGElement self))) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_getOwnerSVGElement (toSVGElement self)))
  
 foreign import javascript unsafe "$1[\"viewportElement\"]"
-        js_getViewportElement :: JSRef SVGElement -> IO (JSRef SVGElement)
+        js_getViewportElement :: SVGElement -> IO (Nullable SVGElement)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGElement.viewportElement Mozilla SVGElement.viewportElement documentation> 
 getViewportElement ::
                    (MonadIO m, IsSVGElement self) => self -> m (Maybe SVGElement)
 getViewportElement self
   = liftIO
-      ((js_getViewportElement (unSVGElement (toSVGElement self))) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_getViewportElement (toSVGElement self)))
  
 foreign import javascript unsafe "$1[\"xmllang\"] = $2;"
-        js_setXmllang :: JSRef SVGElement -> JSString -> IO ()
+        js_setXmllang :: SVGElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGElement.xmllang Mozilla SVGElement.xmllang documentation> 
 setXmllang ::
            (MonadIO m, IsSVGElement self, ToJSString val) =>
              self -> val -> m ()
 setXmllang self val
-  = liftIO
-      (js_setXmllang (unSVGElement (toSVGElement self)) (toJSString val))
+  = liftIO (js_setXmllang (toSVGElement self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"xmllang\"]" js_getXmllang ::
-        JSRef SVGElement -> IO JSString
+        SVGElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGElement.xmllang Mozilla SVGElement.xmllang documentation> 
 getXmllang ::
            (MonadIO m, IsSVGElement self, FromJSString result) =>
              self -> m result
 getXmllang self
-  = liftIO
-      (fromJSString <$>
-         (js_getXmllang (unSVGElement (toSVGElement self))))
+  = liftIO (fromJSString <$> (js_getXmllang (toSVGElement self)))
  
 foreign import javascript unsafe "$1[\"xmlspace\"] = $2;"
-        js_setXmlspace :: JSRef SVGElement -> JSString -> IO ()
+        js_setXmlspace :: SVGElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGElement.xmlspace Mozilla SVGElement.xmlspace documentation> 
 setXmlspace ::
             (MonadIO m, IsSVGElement self, ToJSString val) =>
               self -> val -> m ()
 setXmlspace self val
-  = liftIO
-      (js_setXmlspace (unSVGElement (toSVGElement self))
-         (toJSString val))
+  = liftIO (js_setXmlspace (toSVGElement self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"xmlspace\"]" js_getXmlspace
-        :: JSRef SVGElement -> IO JSString
+        :: SVGElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGElement.xmlspace Mozilla SVGElement.xmlspace documentation> 
 getXmlspace ::
             (MonadIO m, IsSVGElement self, FromJSString result) =>
               self -> m result
 getXmlspace self
-  = liftIO
-      (fromJSString <$>
-         (js_getXmlspace (unSVGElement (toSVGElement self))))
+  = liftIO (fromJSString <$> (js_getXmlspace (toSVGElement self)))
  
 foreign import javascript unsafe "$1[\"className\"]"
-        js_getClassName :: JSRef SVGElement -> IO (JSRef SVGAnimatedString)
+        js_getClassName :: SVGElement -> IO (Nullable SVGAnimatedString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGElement.className Mozilla SVGElement.className documentation> 
 getClassName ::
@@ -143,33 +129,30 @@
                self -> m (Maybe SVGAnimatedString)
 getClassName self
   = liftIO
-      ((js_getClassName (unSVGElement (toSVGElement self))) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_getClassName (toSVGElement self)))
  
 foreign import javascript unsafe "$1[\"style\"]" js_getStyle ::
-        JSRef SVGElement -> IO (JSRef CSSStyleDeclaration)
+        SVGElement -> IO (Nullable CSSStyleDeclaration)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGElement.style Mozilla SVGElement.style documentation> 
 getStyle ::
          (MonadIO m, IsSVGElement self) =>
            self -> m (Maybe CSSStyleDeclaration)
 getStyle self
-  = liftIO
-      ((js_getStyle (unSVGElement (toSVGElement self))) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getStyle (toSVGElement self)))
  
 foreign import javascript unsafe "$1[\"tabIndex\"] = $2;"
-        js_setTabIndex :: JSRef SVGElement -> Int -> IO ()
+        js_setTabIndex :: SVGElement -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGElement.tabIndex Mozilla SVGElement.tabIndex documentation> 
 setTabIndex ::
             (MonadIO m, IsSVGElement self) => self -> Int -> m ()
 setTabIndex self val
-  = liftIO (js_setTabIndex (unSVGElement (toSVGElement self)) val)
+  = liftIO (js_setTabIndex (toSVGElement self) val)
  
 foreign import javascript unsafe "$1[\"tabIndex\"]" js_getTabIndex
-        :: JSRef SVGElement -> IO Int
+        :: SVGElement -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGElement.tabIndex Mozilla SVGElement.tabIndex documentation> 
 getTabIndex :: (MonadIO m, IsSVGElement self) => self -> m Int
-getTabIndex self
-  = liftIO (js_getTabIndex (unSVGElement (toSVGElement self)))
+getTabIndex self = liftIO (js_getTabIndex (toSVGElement self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGEllipseElement.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGEllipseElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGEllipseElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGEllipseElement.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,37 +20,33 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"cx\"]" js_getCx ::
-        JSRef SVGEllipseElement -> IO (JSRef SVGAnimatedLength)
+        SVGEllipseElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGEllipseElement.cx Mozilla SVGEllipseElement.cx documentation> 
 getCx ::
       (MonadIO m) => SVGEllipseElement -> m (Maybe SVGAnimatedLength)
-getCx self
-  = liftIO ((js_getCx (unSVGEllipseElement self)) >>= fromJSRef)
+getCx self = liftIO (nullableToMaybe <$> (js_getCx (self)))
  
 foreign import javascript unsafe "$1[\"cy\"]" js_getCy ::
-        JSRef SVGEllipseElement -> IO (JSRef SVGAnimatedLength)
+        SVGEllipseElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGEllipseElement.cy Mozilla SVGEllipseElement.cy documentation> 
 getCy ::
       (MonadIO m) => SVGEllipseElement -> m (Maybe SVGAnimatedLength)
-getCy self
-  = liftIO ((js_getCy (unSVGEllipseElement self)) >>= fromJSRef)
+getCy self = liftIO (nullableToMaybe <$> (js_getCy (self)))
  
 foreign import javascript unsafe "$1[\"rx\"]" js_getRx ::
-        JSRef SVGEllipseElement -> IO (JSRef SVGAnimatedLength)
+        SVGEllipseElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGEllipseElement.rx Mozilla SVGEllipseElement.rx documentation> 
 getRx ::
       (MonadIO m) => SVGEllipseElement -> m (Maybe SVGAnimatedLength)
-getRx self
-  = liftIO ((js_getRx (unSVGEllipseElement self)) >>= fromJSRef)
+getRx self = liftIO (nullableToMaybe <$> (js_getRx (self)))
  
 foreign import javascript unsafe "$1[\"ry\"]" js_getRy ::
-        JSRef SVGEllipseElement -> IO (JSRef SVGAnimatedLength)
+        SVGEllipseElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGEllipseElement.ry Mozilla SVGEllipseElement.ry documentation> 
 getRy ::
       (MonadIO m) => SVGEllipseElement -> m (Maybe SVGAnimatedLength)
-getRy self
-  = liftIO ((js_getRy (unSVGEllipseElement self)) >>= fromJSRef)
+getRy self = liftIO (nullableToMaybe <$> (js_getRy (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGExternalResourcesRequired.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGExternalResourcesRequired.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGExternalResourcesRequired.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGExternalResourcesRequired.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -21,8 +21,7 @@
  
 foreign import javascript unsafe
         "$1[\"externalResourcesRequired\"]" js_getExternalResourcesRequired
-        ::
-        JSRef SVGExternalResourcesRequired -> IO (JSRef SVGAnimatedBoolean)
+        :: SVGExternalResourcesRequired -> IO (Nullable SVGAnimatedBoolean)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGExternalResourcesRequired.externalResourcesRequired Mozilla SVGExternalResourcesRequired.externalResourcesRequired documentation> 
 getExternalResourcesRequired ::
@@ -30,6 +29,4 @@
                                SVGExternalResourcesRequired -> m (Maybe SVGAnimatedBoolean)
 getExternalResourcesRequired self
   = liftIO
-      ((js_getExternalResourcesRequired
-          (unSVGExternalResourcesRequired self))
-         >>= fromJSRef)
+      (nullableToMaybe <$> (js_getExternalResourcesRequired (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGFEBlendElement.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGFEBlendElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGFEBlendElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGFEBlendElement.hs
@@ -8,7 +8,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -28,29 +28,26 @@
 pattern SVG_FEBLEND_MODE_LIGHTEN = 5
  
 foreign import javascript unsafe "$1[\"in1\"]" js_getIn1 ::
-        JSRef SVGFEBlendElement -> IO (JSRef SVGAnimatedString)
+        SVGFEBlendElement -> IO (Nullable SVGAnimatedString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEBlendElement.in1 Mozilla SVGFEBlendElement.in1 documentation> 
 getIn1 ::
        (MonadIO m) => SVGFEBlendElement -> m (Maybe SVGAnimatedString)
-getIn1 self
-  = liftIO ((js_getIn1 (unSVGFEBlendElement self)) >>= fromJSRef)
+getIn1 self = liftIO (nullableToMaybe <$> (js_getIn1 (self)))
  
 foreign import javascript unsafe "$1[\"in2\"]" js_getIn2 ::
-        JSRef SVGFEBlendElement -> IO (JSRef SVGAnimatedString)
+        SVGFEBlendElement -> IO (Nullable SVGAnimatedString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEBlendElement.in2 Mozilla SVGFEBlendElement.in2 documentation> 
 getIn2 ::
        (MonadIO m) => SVGFEBlendElement -> m (Maybe SVGAnimatedString)
-getIn2 self
-  = liftIO ((js_getIn2 (unSVGFEBlendElement self)) >>= fromJSRef)
+getIn2 self = liftIO (nullableToMaybe <$> (js_getIn2 (self)))
  
 foreign import javascript unsafe "$1[\"mode\"]" js_getMode ::
-        JSRef SVGFEBlendElement -> IO (JSRef SVGAnimatedEnumeration)
+        SVGFEBlendElement -> IO (Nullable SVGAnimatedEnumeration)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEBlendElement.mode Mozilla SVGFEBlendElement.mode documentation> 
 getMode ::
         (MonadIO m) =>
           SVGFEBlendElement -> m (Maybe SVGAnimatedEnumeration)
-getMode self
-  = liftIO ((js_getMode (unSVGFEBlendElement self)) >>= fromJSRef)
+getMode self = liftIO (nullableToMaybe <$> (js_getMode (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGFEColorMatrixElement.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGFEColorMatrixElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGFEColorMatrixElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGFEColorMatrixElement.hs
@@ -11,7 +11,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -30,34 +30,28 @@
 pattern SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA = 4
  
 foreign import javascript unsafe "$1[\"in1\"]" js_getIn1 ::
-        JSRef SVGFEColorMatrixElement -> IO (JSRef SVGAnimatedString)
+        SVGFEColorMatrixElement -> IO (Nullable SVGAnimatedString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEColorMatrixElement.in1 Mozilla SVGFEColorMatrixElement.in1 documentation> 
 getIn1 ::
        (MonadIO m) =>
          SVGFEColorMatrixElement -> m (Maybe SVGAnimatedString)
-getIn1 self
-  = liftIO
-      ((js_getIn1 (unSVGFEColorMatrixElement self)) >>= fromJSRef)
+getIn1 self = liftIO (nullableToMaybe <$> (js_getIn1 (self)))
  
 foreign import javascript unsafe "$1[\"type\"]" js_getType ::
-        JSRef SVGFEColorMatrixElement -> IO (JSRef SVGAnimatedEnumeration)
+        SVGFEColorMatrixElement -> IO (Nullable SVGAnimatedEnumeration)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEColorMatrixElement.type Mozilla SVGFEColorMatrixElement.type documentation> 
 getType ::
         (MonadIO m) =>
           SVGFEColorMatrixElement -> m (Maybe SVGAnimatedEnumeration)
-getType self
-  = liftIO
-      ((js_getType (unSVGFEColorMatrixElement self)) >>= fromJSRef)
+getType self = liftIO (nullableToMaybe <$> (js_getType (self)))
  
 foreign import javascript unsafe "$1[\"values\"]" js_getValues ::
-        JSRef SVGFEColorMatrixElement -> IO (JSRef SVGAnimatedNumberList)
+        SVGFEColorMatrixElement -> IO (Nullable SVGAnimatedNumberList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEColorMatrixElement.values Mozilla SVGFEColorMatrixElement.values documentation> 
 getValues ::
           (MonadIO m) =>
             SVGFEColorMatrixElement -> m (Maybe SVGAnimatedNumberList)
-getValues self
-  = liftIO
-      ((js_getValues (unSVGFEColorMatrixElement self)) >>= fromJSRef)
+getValues self = liftIO (nullableToMaybe <$> (js_getValues (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGFEComponentTransferElement.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGFEComponentTransferElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGFEComponentTransferElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGFEComponentTransferElement.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,12 +20,10 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"in1\"]" js_getIn1 ::
-        JSRef SVGFEComponentTransferElement -> IO (JSRef SVGAnimatedString)
+        SVGFEComponentTransferElement -> IO (Nullable SVGAnimatedString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEComponentTransferElement.in1 Mozilla SVGFEComponentTransferElement.in1 documentation> 
 getIn1 ::
        (MonadIO m) =>
          SVGFEComponentTransferElement -> m (Maybe SVGAnimatedString)
-getIn1 self
-  = liftIO
-      ((js_getIn1 (unSVGFEComponentTransferElement self)) >>= fromJSRef)
+getIn1 self = liftIO (nullableToMaybe <$> (js_getIn1 (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGFECompositeElement.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGFECompositeElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGFECompositeElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGFECompositeElement.hs
@@ -14,7 +14,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -35,66 +35,59 @@
 pattern SVG_FECOMPOSITE_OPERATOR_ARITHMETIC = 6
  
 foreign import javascript unsafe "$1[\"in1\"]" js_getIn1 ::
-        JSRef SVGFECompositeElement -> IO (JSRef SVGAnimatedString)
+        SVGFECompositeElement -> IO (Nullable SVGAnimatedString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFECompositeElement.in1 Mozilla SVGFECompositeElement.in1 documentation> 
 getIn1 ::
        (MonadIO m) => SVGFECompositeElement -> m (Maybe SVGAnimatedString)
-getIn1 self
-  = liftIO ((js_getIn1 (unSVGFECompositeElement self)) >>= fromJSRef)
+getIn1 self = liftIO (nullableToMaybe <$> (js_getIn1 (self)))
  
 foreign import javascript unsafe "$1[\"in2\"]" js_getIn2 ::
-        JSRef SVGFECompositeElement -> IO (JSRef SVGAnimatedString)
+        SVGFECompositeElement -> IO (Nullable SVGAnimatedString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFECompositeElement.in2 Mozilla SVGFECompositeElement.in2 documentation> 
 getIn2 ::
        (MonadIO m) => SVGFECompositeElement -> m (Maybe SVGAnimatedString)
-getIn2 self
-  = liftIO ((js_getIn2 (unSVGFECompositeElement self)) >>= fromJSRef)
+getIn2 self = liftIO (nullableToMaybe <$> (js_getIn2 (self)))
  
 foreign import javascript unsafe "$1[\"operator\"]" js_getOperator
-        :: JSRef SVGFECompositeElement -> IO (JSRef SVGAnimatedEnumeration)
+        :: SVGFECompositeElement -> IO (Nullable SVGAnimatedEnumeration)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFECompositeElement.operator Mozilla SVGFECompositeElement.operator documentation> 
 getOperator ::
             (MonadIO m) =>
               SVGFECompositeElement -> m (Maybe SVGAnimatedEnumeration)
 getOperator self
-  = liftIO
-      ((js_getOperator (unSVGFECompositeElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getOperator (self)))
  
 foreign import javascript unsafe "$1[\"k1\"]" js_getK1 ::
-        JSRef SVGFECompositeElement -> IO (JSRef SVGAnimatedNumber)
+        SVGFECompositeElement -> IO (Nullable SVGAnimatedNumber)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFECompositeElement.k1 Mozilla SVGFECompositeElement.k1 documentation> 
 getK1 ::
       (MonadIO m) => SVGFECompositeElement -> m (Maybe SVGAnimatedNumber)
-getK1 self
-  = liftIO ((js_getK1 (unSVGFECompositeElement self)) >>= fromJSRef)
+getK1 self = liftIO (nullableToMaybe <$> (js_getK1 (self)))
  
 foreign import javascript unsafe "$1[\"k2\"]" js_getK2 ::
-        JSRef SVGFECompositeElement -> IO (JSRef SVGAnimatedNumber)
+        SVGFECompositeElement -> IO (Nullable SVGAnimatedNumber)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFECompositeElement.k2 Mozilla SVGFECompositeElement.k2 documentation> 
 getK2 ::
       (MonadIO m) => SVGFECompositeElement -> m (Maybe SVGAnimatedNumber)
-getK2 self
-  = liftIO ((js_getK2 (unSVGFECompositeElement self)) >>= fromJSRef)
+getK2 self = liftIO (nullableToMaybe <$> (js_getK2 (self)))
  
 foreign import javascript unsafe "$1[\"k3\"]" js_getK3 ::
-        JSRef SVGFECompositeElement -> IO (JSRef SVGAnimatedNumber)
+        SVGFECompositeElement -> IO (Nullable SVGAnimatedNumber)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFECompositeElement.k3 Mozilla SVGFECompositeElement.k3 documentation> 
 getK3 ::
       (MonadIO m) => SVGFECompositeElement -> m (Maybe SVGAnimatedNumber)
-getK3 self
-  = liftIO ((js_getK3 (unSVGFECompositeElement self)) >>= fromJSRef)
+getK3 self = liftIO (nullableToMaybe <$> (js_getK3 (self)))
  
 foreign import javascript unsafe "$1[\"k4\"]" js_getK4 ::
-        JSRef SVGFECompositeElement -> IO (JSRef SVGAnimatedNumber)
+        SVGFECompositeElement -> IO (Nullable SVGAnimatedNumber)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFECompositeElement.k4 Mozilla SVGFECompositeElement.k4 documentation> 
 getK4 ::
       (MonadIO m) => SVGFECompositeElement -> m (Maybe SVGAnimatedNumber)
-getK4 self
-  = liftIO ((js_getK4 (unSVGFECompositeElement self)) >>= fromJSRef)
+getK4 self = liftIO (nullableToMaybe <$> (js_getK4 (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGFEConvolveMatrixElement.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGFEConvolveMatrixElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGFEConvolveMatrixElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGFEConvolveMatrixElement.hs
@@ -13,7 +13,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -31,145 +31,122 @@
 pattern SVG_EDGEMODE_NONE = 3
  
 foreign import javascript unsafe "$1[\"in1\"]" js_getIn1 ::
-        JSRef SVGFEConvolveMatrixElement -> IO (JSRef SVGAnimatedString)
+        SVGFEConvolveMatrixElement -> IO (Nullable SVGAnimatedString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEConvolveMatrixElement.in1 Mozilla SVGFEConvolveMatrixElement.in1 documentation> 
 getIn1 ::
        (MonadIO m) =>
          SVGFEConvolveMatrixElement -> m (Maybe SVGAnimatedString)
-getIn1 self
-  = liftIO
-      ((js_getIn1 (unSVGFEConvolveMatrixElement self)) >>= fromJSRef)
+getIn1 self = liftIO (nullableToMaybe <$> (js_getIn1 (self)))
  
 foreign import javascript unsafe "$1[\"orderX\"]" js_getOrderX ::
-        JSRef SVGFEConvolveMatrixElement -> IO (JSRef SVGAnimatedInteger)
+        SVGFEConvolveMatrixElement -> IO (Nullable SVGAnimatedInteger)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEConvolveMatrixElement.orderX Mozilla SVGFEConvolveMatrixElement.orderX documentation> 
 getOrderX ::
           (MonadIO m) =>
             SVGFEConvolveMatrixElement -> m (Maybe SVGAnimatedInteger)
-getOrderX self
-  = liftIO
-      ((js_getOrderX (unSVGFEConvolveMatrixElement self)) >>= fromJSRef)
+getOrderX self = liftIO (nullableToMaybe <$> (js_getOrderX (self)))
  
 foreign import javascript unsafe "$1[\"orderY\"]" js_getOrderY ::
-        JSRef SVGFEConvolveMatrixElement -> IO (JSRef SVGAnimatedInteger)
+        SVGFEConvolveMatrixElement -> IO (Nullable SVGAnimatedInteger)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEConvolveMatrixElement.orderY Mozilla SVGFEConvolveMatrixElement.orderY documentation> 
 getOrderY ::
           (MonadIO m) =>
             SVGFEConvolveMatrixElement -> m (Maybe SVGAnimatedInteger)
-getOrderY self
-  = liftIO
-      ((js_getOrderY (unSVGFEConvolveMatrixElement self)) >>= fromJSRef)
+getOrderY self = liftIO (nullableToMaybe <$> (js_getOrderY (self)))
  
 foreign import javascript unsafe "$1[\"kernelMatrix\"]"
         js_getKernelMatrix ::
-        JSRef SVGFEConvolveMatrixElement ->
-          IO (JSRef SVGAnimatedNumberList)
+        SVGFEConvolveMatrixElement -> IO (Nullable SVGAnimatedNumberList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEConvolveMatrixElement.kernelMatrix Mozilla SVGFEConvolveMatrixElement.kernelMatrix documentation> 
 getKernelMatrix ::
                 (MonadIO m) =>
                   SVGFEConvolveMatrixElement -> m (Maybe SVGAnimatedNumberList)
 getKernelMatrix self
-  = liftIO
-      ((js_getKernelMatrix (unSVGFEConvolveMatrixElement self)) >>=
-         fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getKernelMatrix (self)))
  
 foreign import javascript unsafe "$1[\"divisor\"]" js_getDivisor ::
-        JSRef SVGFEConvolveMatrixElement -> IO (JSRef SVGAnimatedNumber)
+        SVGFEConvolveMatrixElement -> IO (Nullable SVGAnimatedNumber)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEConvolveMatrixElement.divisor Mozilla SVGFEConvolveMatrixElement.divisor documentation> 
 getDivisor ::
            (MonadIO m) =>
              SVGFEConvolveMatrixElement -> m (Maybe SVGAnimatedNumber)
 getDivisor self
-  = liftIO
-      ((js_getDivisor (unSVGFEConvolveMatrixElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getDivisor (self)))
  
 foreign import javascript unsafe "$1[\"bias\"]" js_getBias ::
-        JSRef SVGFEConvolveMatrixElement -> IO (JSRef SVGAnimatedNumber)
+        SVGFEConvolveMatrixElement -> IO (Nullable SVGAnimatedNumber)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEConvolveMatrixElement.bias Mozilla SVGFEConvolveMatrixElement.bias documentation> 
 getBias ::
         (MonadIO m) =>
           SVGFEConvolveMatrixElement -> m (Maybe SVGAnimatedNumber)
-getBias self
-  = liftIO
-      ((js_getBias (unSVGFEConvolveMatrixElement self)) >>= fromJSRef)
+getBias self = liftIO (nullableToMaybe <$> (js_getBias (self)))
  
 foreign import javascript unsafe "$1[\"targetX\"]" js_getTargetX ::
-        JSRef SVGFEConvolveMatrixElement -> IO (JSRef SVGAnimatedInteger)
+        SVGFEConvolveMatrixElement -> IO (Nullable SVGAnimatedInteger)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEConvolveMatrixElement.targetX Mozilla SVGFEConvolveMatrixElement.targetX documentation> 
 getTargetX ::
            (MonadIO m) =>
              SVGFEConvolveMatrixElement -> m (Maybe SVGAnimatedInteger)
 getTargetX self
-  = liftIO
-      ((js_getTargetX (unSVGFEConvolveMatrixElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getTargetX (self)))
  
 foreign import javascript unsafe "$1[\"targetY\"]" js_getTargetY ::
-        JSRef SVGFEConvolveMatrixElement -> IO (JSRef SVGAnimatedInteger)
+        SVGFEConvolveMatrixElement -> IO (Nullable SVGAnimatedInteger)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEConvolveMatrixElement.targetY Mozilla SVGFEConvolveMatrixElement.targetY documentation> 
 getTargetY ::
            (MonadIO m) =>
              SVGFEConvolveMatrixElement -> m (Maybe SVGAnimatedInteger)
 getTargetY self
-  = liftIO
-      ((js_getTargetY (unSVGFEConvolveMatrixElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getTargetY (self)))
  
 foreign import javascript unsafe "$1[\"edgeMode\"]" js_getEdgeMode
         ::
-        JSRef SVGFEConvolveMatrixElement ->
-          IO (JSRef SVGAnimatedEnumeration)
+        SVGFEConvolveMatrixElement -> IO (Nullable SVGAnimatedEnumeration)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEConvolveMatrixElement.edgeMode Mozilla SVGFEConvolveMatrixElement.edgeMode documentation> 
 getEdgeMode ::
             (MonadIO m) =>
               SVGFEConvolveMatrixElement -> m (Maybe SVGAnimatedEnumeration)
 getEdgeMode self
-  = liftIO
-      ((js_getEdgeMode (unSVGFEConvolveMatrixElement self)) >>=
-         fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getEdgeMode (self)))
  
 foreign import javascript unsafe "$1[\"kernelUnitLengthX\"]"
         js_getKernelUnitLengthX ::
-        JSRef SVGFEConvolveMatrixElement -> IO (JSRef SVGAnimatedNumber)
+        SVGFEConvolveMatrixElement -> IO (Nullable SVGAnimatedNumber)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEConvolveMatrixElement.kernelUnitLengthX Mozilla SVGFEConvolveMatrixElement.kernelUnitLengthX documentation> 
 getKernelUnitLengthX ::
                      (MonadIO m) =>
                        SVGFEConvolveMatrixElement -> m (Maybe SVGAnimatedNumber)
 getKernelUnitLengthX self
-  = liftIO
-      ((js_getKernelUnitLengthX (unSVGFEConvolveMatrixElement self)) >>=
-         fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getKernelUnitLengthX (self)))
  
 foreign import javascript unsafe "$1[\"kernelUnitLengthY\"]"
         js_getKernelUnitLengthY ::
-        JSRef SVGFEConvolveMatrixElement -> IO (JSRef SVGAnimatedNumber)
+        SVGFEConvolveMatrixElement -> IO (Nullable SVGAnimatedNumber)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEConvolveMatrixElement.kernelUnitLengthY Mozilla SVGFEConvolveMatrixElement.kernelUnitLengthY documentation> 
 getKernelUnitLengthY ::
                      (MonadIO m) =>
                        SVGFEConvolveMatrixElement -> m (Maybe SVGAnimatedNumber)
 getKernelUnitLengthY self
-  = liftIO
-      ((js_getKernelUnitLengthY (unSVGFEConvolveMatrixElement self)) >>=
-         fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getKernelUnitLengthY (self)))
  
 foreign import javascript unsafe "$1[\"preserveAlpha\"]"
         js_getPreserveAlpha ::
-        JSRef SVGFEConvolveMatrixElement -> IO (JSRef SVGAnimatedBoolean)
+        SVGFEConvolveMatrixElement -> IO (Nullable SVGAnimatedBoolean)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEConvolveMatrixElement.preserveAlpha Mozilla SVGFEConvolveMatrixElement.preserveAlpha documentation> 
 getPreserveAlpha ::
                  (MonadIO m) =>
                    SVGFEConvolveMatrixElement -> m (Maybe SVGAnimatedBoolean)
 getPreserveAlpha self
-  = liftIO
-      ((js_getPreserveAlpha (unSVGFEConvolveMatrixElement self)) >>=
-         fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getPreserveAlpha (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGFEDiffuseLightingElement.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGFEDiffuseLightingElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGFEDiffuseLightingElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGFEDiffuseLightingElement.hs
@@ -9,7 +9,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -23,64 +23,54 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"in1\"]" js_getIn1 ::
-        JSRef SVGFEDiffuseLightingElement -> IO (JSRef SVGAnimatedString)
+        SVGFEDiffuseLightingElement -> IO (Nullable SVGAnimatedString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEDiffuseLightingElement.in1 Mozilla SVGFEDiffuseLightingElement.in1 documentation> 
 getIn1 ::
        (MonadIO m) =>
          SVGFEDiffuseLightingElement -> m (Maybe SVGAnimatedString)
-getIn1 self
-  = liftIO
-      ((js_getIn1 (unSVGFEDiffuseLightingElement self)) >>= fromJSRef)
+getIn1 self = liftIO (nullableToMaybe <$> (js_getIn1 (self)))
  
 foreign import javascript unsafe "$1[\"surfaceScale\"]"
         js_getSurfaceScale ::
-        JSRef SVGFEDiffuseLightingElement -> IO (JSRef SVGAnimatedNumber)
+        SVGFEDiffuseLightingElement -> IO (Nullable SVGAnimatedNumber)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEDiffuseLightingElement.surfaceScale Mozilla SVGFEDiffuseLightingElement.surfaceScale documentation> 
 getSurfaceScale ::
                 (MonadIO m) =>
                   SVGFEDiffuseLightingElement -> m (Maybe SVGAnimatedNumber)
 getSurfaceScale self
-  = liftIO
-      ((js_getSurfaceScale (unSVGFEDiffuseLightingElement self)) >>=
-         fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getSurfaceScale (self)))
  
 foreign import javascript unsafe "$1[\"diffuseConstant\"]"
         js_getDiffuseConstant ::
-        JSRef SVGFEDiffuseLightingElement -> IO (JSRef SVGAnimatedNumber)
+        SVGFEDiffuseLightingElement -> IO (Nullable SVGAnimatedNumber)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEDiffuseLightingElement.diffuseConstant Mozilla SVGFEDiffuseLightingElement.diffuseConstant documentation> 
 getDiffuseConstant ::
                    (MonadIO m) =>
                      SVGFEDiffuseLightingElement -> m (Maybe SVGAnimatedNumber)
 getDiffuseConstant self
-  = liftIO
-      ((js_getDiffuseConstant (unSVGFEDiffuseLightingElement self)) >>=
-         fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getDiffuseConstant (self)))
  
 foreign import javascript unsafe "$1[\"kernelUnitLengthX\"]"
         js_getKernelUnitLengthX ::
-        JSRef SVGFEDiffuseLightingElement -> IO (JSRef SVGAnimatedNumber)
+        SVGFEDiffuseLightingElement -> IO (Nullable SVGAnimatedNumber)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEDiffuseLightingElement.kernelUnitLengthX Mozilla SVGFEDiffuseLightingElement.kernelUnitLengthX documentation> 
 getKernelUnitLengthX ::
                      (MonadIO m) =>
                        SVGFEDiffuseLightingElement -> m (Maybe SVGAnimatedNumber)
 getKernelUnitLengthX self
-  = liftIO
-      ((js_getKernelUnitLengthX (unSVGFEDiffuseLightingElement self)) >>=
-         fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getKernelUnitLengthX (self)))
  
 foreign import javascript unsafe "$1[\"kernelUnitLengthY\"]"
         js_getKernelUnitLengthY ::
-        JSRef SVGFEDiffuseLightingElement -> IO (JSRef SVGAnimatedNumber)
+        SVGFEDiffuseLightingElement -> IO (Nullable SVGAnimatedNumber)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEDiffuseLightingElement.kernelUnitLengthY Mozilla SVGFEDiffuseLightingElement.kernelUnitLengthY documentation> 
 getKernelUnitLengthY ::
                      (MonadIO m) =>
                        SVGFEDiffuseLightingElement -> m (Maybe SVGAnimatedNumber)
 getKernelUnitLengthY self
-  = liftIO
-      ((js_getKernelUnitLengthY (unSVGFEDiffuseLightingElement self)) >>=
-         fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getKernelUnitLengthY (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGFEDisplacementMapElement.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGFEDisplacementMapElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGFEDisplacementMapElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGFEDisplacementMapElement.hs
@@ -10,7 +10,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -29,62 +29,50 @@
 pattern SVG_CHANNEL_A = 4
  
 foreign import javascript unsafe "$1[\"in1\"]" js_getIn1 ::
-        JSRef SVGFEDisplacementMapElement -> IO (JSRef SVGAnimatedString)
+        SVGFEDisplacementMapElement -> IO (Nullable SVGAnimatedString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEDisplacementMapElement.in1 Mozilla SVGFEDisplacementMapElement.in1 documentation> 
 getIn1 ::
        (MonadIO m) =>
          SVGFEDisplacementMapElement -> m (Maybe SVGAnimatedString)
-getIn1 self
-  = liftIO
-      ((js_getIn1 (unSVGFEDisplacementMapElement self)) >>= fromJSRef)
+getIn1 self = liftIO (nullableToMaybe <$> (js_getIn1 (self)))
  
 foreign import javascript unsafe "$1[\"in2\"]" js_getIn2 ::
-        JSRef SVGFEDisplacementMapElement -> IO (JSRef SVGAnimatedString)
+        SVGFEDisplacementMapElement -> IO (Nullable SVGAnimatedString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEDisplacementMapElement.in2 Mozilla SVGFEDisplacementMapElement.in2 documentation> 
 getIn2 ::
        (MonadIO m) =>
          SVGFEDisplacementMapElement -> m (Maybe SVGAnimatedString)
-getIn2 self
-  = liftIO
-      ((js_getIn2 (unSVGFEDisplacementMapElement self)) >>= fromJSRef)
+getIn2 self = liftIO (nullableToMaybe <$> (js_getIn2 (self)))
  
 foreign import javascript unsafe "$1[\"scale\"]" js_getScale ::
-        JSRef SVGFEDisplacementMapElement -> IO (JSRef SVGAnimatedNumber)
+        SVGFEDisplacementMapElement -> IO (Nullable SVGAnimatedNumber)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEDisplacementMapElement.scale Mozilla SVGFEDisplacementMapElement.scale documentation> 
 getScale ::
          (MonadIO m) =>
            SVGFEDisplacementMapElement -> m (Maybe SVGAnimatedNumber)
-getScale self
-  = liftIO
-      ((js_getScale (unSVGFEDisplacementMapElement self)) >>= fromJSRef)
+getScale self = liftIO (nullableToMaybe <$> (js_getScale (self)))
  
 foreign import javascript unsafe "$1[\"xChannelSelector\"]"
         js_getXChannelSelector ::
-        JSRef SVGFEDisplacementMapElement ->
-          IO (JSRef SVGAnimatedEnumeration)
+        SVGFEDisplacementMapElement -> IO (Nullable SVGAnimatedEnumeration)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEDisplacementMapElement.xChannelSelector Mozilla SVGFEDisplacementMapElement.xChannelSelector documentation> 
 getXChannelSelector ::
                     (MonadIO m) =>
                       SVGFEDisplacementMapElement -> m (Maybe SVGAnimatedEnumeration)
 getXChannelSelector self
-  = liftIO
-      ((js_getXChannelSelector (unSVGFEDisplacementMapElement self)) >>=
-         fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getXChannelSelector (self)))
  
 foreign import javascript unsafe "$1[\"yChannelSelector\"]"
         js_getYChannelSelector ::
-        JSRef SVGFEDisplacementMapElement ->
-          IO (JSRef SVGAnimatedEnumeration)
+        SVGFEDisplacementMapElement -> IO (Nullable SVGAnimatedEnumeration)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEDisplacementMapElement.yChannelSelector Mozilla SVGFEDisplacementMapElement.yChannelSelector documentation> 
 getYChannelSelector ::
                     (MonadIO m) =>
                       SVGFEDisplacementMapElement -> m (Maybe SVGAnimatedEnumeration)
 getYChannelSelector self
-  = liftIO
-      ((js_getYChannelSelector (unSVGFEDisplacementMapElement self)) >>=
-         fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getYChannelSelector (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGFEDistantLightElement.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGFEDistantLightElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGFEDistantLightElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGFEDistantLightElement.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,24 +20,22 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"azimuth\"]" js_getAzimuth ::
-        JSRef SVGFEDistantLightElement -> IO (JSRef SVGAnimatedNumber)
+        SVGFEDistantLightElement -> IO (Nullable SVGAnimatedNumber)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEDistantLightElement.azimuth Mozilla SVGFEDistantLightElement.azimuth documentation> 
 getAzimuth ::
            (MonadIO m) =>
              SVGFEDistantLightElement -> m (Maybe SVGAnimatedNumber)
 getAzimuth self
-  = liftIO
-      ((js_getAzimuth (unSVGFEDistantLightElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getAzimuth (self)))
  
 foreign import javascript unsafe "$1[\"elevation\"]"
         js_getElevation ::
-        JSRef SVGFEDistantLightElement -> IO (JSRef SVGAnimatedNumber)
+        SVGFEDistantLightElement -> IO (Nullable SVGAnimatedNumber)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEDistantLightElement.elevation Mozilla SVGFEDistantLightElement.elevation documentation> 
 getElevation ::
              (MonadIO m) =>
                SVGFEDistantLightElement -> m (Maybe SVGAnimatedNumber)
 getElevation self
-  = liftIO
-      ((js_getElevation (unSVGFEDistantLightElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getElevation (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGFEDropShadowElement.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGFEDropShadowElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGFEDropShadowElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGFEDropShadowElement.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -22,69 +22,59 @@
  
 foreign import javascript unsafe "$1[\"setStdDeviation\"]($2, $3)"
         js_setStdDeviation ::
-        JSRef SVGFEDropShadowElement -> Float -> Float -> IO ()
+        SVGFEDropShadowElement -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEDropShadowElement.setStdDeviation Mozilla SVGFEDropShadowElement.setStdDeviation documentation> 
 setStdDeviation ::
                 (MonadIO m) => SVGFEDropShadowElement -> Float -> Float -> m ()
 setStdDeviation self stdDeviationX stdDeviationY
-  = liftIO
-      (js_setStdDeviation (unSVGFEDropShadowElement self) stdDeviationX
-         stdDeviationY)
+  = liftIO (js_setStdDeviation (self) stdDeviationX stdDeviationY)
  
 foreign import javascript unsafe "$1[\"in1\"]" js_getIn1 ::
-        JSRef SVGFEDropShadowElement -> IO (JSRef SVGAnimatedString)
+        SVGFEDropShadowElement -> IO (Nullable SVGAnimatedString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEDropShadowElement.in1 Mozilla SVGFEDropShadowElement.in1 documentation> 
 getIn1 ::
        (MonadIO m) =>
          SVGFEDropShadowElement -> m (Maybe SVGAnimatedString)
-getIn1 self
-  = liftIO
-      ((js_getIn1 (unSVGFEDropShadowElement self)) >>= fromJSRef)
+getIn1 self = liftIO (nullableToMaybe <$> (js_getIn1 (self)))
  
 foreign import javascript unsafe "$1[\"dx\"]" js_getDx ::
-        JSRef SVGFEDropShadowElement -> IO (JSRef SVGAnimatedNumber)
+        SVGFEDropShadowElement -> IO (Nullable SVGAnimatedNumber)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEDropShadowElement.dx Mozilla SVGFEDropShadowElement.dx documentation> 
 getDx ::
       (MonadIO m) =>
         SVGFEDropShadowElement -> m (Maybe SVGAnimatedNumber)
-getDx self
-  = liftIO ((js_getDx (unSVGFEDropShadowElement self)) >>= fromJSRef)
+getDx self = liftIO (nullableToMaybe <$> (js_getDx (self)))
  
 foreign import javascript unsafe "$1[\"dy\"]" js_getDy ::
-        JSRef SVGFEDropShadowElement -> IO (JSRef SVGAnimatedNumber)
+        SVGFEDropShadowElement -> IO (Nullable SVGAnimatedNumber)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEDropShadowElement.dy Mozilla SVGFEDropShadowElement.dy documentation> 
 getDy ::
       (MonadIO m) =>
         SVGFEDropShadowElement -> m (Maybe SVGAnimatedNumber)
-getDy self
-  = liftIO ((js_getDy (unSVGFEDropShadowElement self)) >>= fromJSRef)
+getDy self = liftIO (nullableToMaybe <$> (js_getDy (self)))
  
 foreign import javascript unsafe "$1[\"stdDeviationX\"]"
         js_getStdDeviationX ::
-        JSRef SVGFEDropShadowElement -> IO (JSRef SVGAnimatedNumber)
+        SVGFEDropShadowElement -> IO (Nullable SVGAnimatedNumber)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEDropShadowElement.stdDeviationX Mozilla SVGFEDropShadowElement.stdDeviationX documentation> 
 getStdDeviationX ::
                  (MonadIO m) =>
                    SVGFEDropShadowElement -> m (Maybe SVGAnimatedNumber)
 getStdDeviationX self
-  = liftIO
-      ((js_getStdDeviationX (unSVGFEDropShadowElement self)) >>=
-         fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getStdDeviationX (self)))
  
 foreign import javascript unsafe "$1[\"stdDeviationY\"]"
         js_getStdDeviationY ::
-        JSRef SVGFEDropShadowElement -> IO (JSRef SVGAnimatedNumber)
+        SVGFEDropShadowElement -> IO (Nullable SVGAnimatedNumber)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEDropShadowElement.stdDeviationY Mozilla SVGFEDropShadowElement.stdDeviationY documentation> 
 getStdDeviationY ::
                  (MonadIO m) =>
                    SVGFEDropShadowElement -> m (Maybe SVGAnimatedNumber)
 getStdDeviationY self
-  = liftIO
-      ((js_getStdDeviationY (unSVGFEDropShadowElement self)) >>=
-         fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getStdDeviationY (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGFEGaussianBlurElement.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGFEGaussianBlurElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGFEGaussianBlurElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGFEGaussianBlurElement.hs
@@ -9,7 +9,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -24,65 +24,55 @@
  
 foreign import javascript unsafe "$1[\"setStdDeviation\"]($2, $3)"
         js_setStdDeviation ::
-        JSRef SVGFEGaussianBlurElement -> Float -> Float -> IO ()
+        SVGFEGaussianBlurElement -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEGaussianBlurElement.setStdDeviation Mozilla SVGFEGaussianBlurElement.setStdDeviation documentation> 
 setStdDeviation ::
                 (MonadIO m) => SVGFEGaussianBlurElement -> Float -> Float -> m ()
 setStdDeviation self stdDeviationX stdDeviationY
-  = liftIO
-      (js_setStdDeviation (unSVGFEGaussianBlurElement self) stdDeviationX
-         stdDeviationY)
+  = liftIO (js_setStdDeviation (self) stdDeviationX stdDeviationY)
 pattern SVG_EDGEMODE_UNKNOWN = 0
 pattern SVG_EDGEMODE_DUPLICATE = 1
 pattern SVG_EDGEMODE_WRAP = 2
 pattern SVG_EDGEMODE_NONE = 3
  
 foreign import javascript unsafe "$1[\"in1\"]" js_getIn1 ::
-        JSRef SVGFEGaussianBlurElement -> IO (JSRef SVGAnimatedString)
+        SVGFEGaussianBlurElement -> IO (Nullable SVGAnimatedString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEGaussianBlurElement.in1 Mozilla SVGFEGaussianBlurElement.in1 documentation> 
 getIn1 ::
        (MonadIO m) =>
          SVGFEGaussianBlurElement -> m (Maybe SVGAnimatedString)
-getIn1 self
-  = liftIO
-      ((js_getIn1 (unSVGFEGaussianBlurElement self)) >>= fromJSRef)
+getIn1 self = liftIO (nullableToMaybe <$> (js_getIn1 (self)))
  
 foreign import javascript unsafe "$1[\"stdDeviationX\"]"
         js_getStdDeviationX ::
-        JSRef SVGFEGaussianBlurElement -> IO (JSRef SVGAnimatedNumber)
+        SVGFEGaussianBlurElement -> IO (Nullable SVGAnimatedNumber)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEGaussianBlurElement.stdDeviationX Mozilla SVGFEGaussianBlurElement.stdDeviationX documentation> 
 getStdDeviationX ::
                  (MonadIO m) =>
                    SVGFEGaussianBlurElement -> m (Maybe SVGAnimatedNumber)
 getStdDeviationX self
-  = liftIO
-      ((js_getStdDeviationX (unSVGFEGaussianBlurElement self)) >>=
-         fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getStdDeviationX (self)))
  
 foreign import javascript unsafe "$1[\"stdDeviationY\"]"
         js_getStdDeviationY ::
-        JSRef SVGFEGaussianBlurElement -> IO (JSRef SVGAnimatedNumber)
+        SVGFEGaussianBlurElement -> IO (Nullable SVGAnimatedNumber)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEGaussianBlurElement.stdDeviationY Mozilla SVGFEGaussianBlurElement.stdDeviationY documentation> 
 getStdDeviationY ::
                  (MonadIO m) =>
                    SVGFEGaussianBlurElement -> m (Maybe SVGAnimatedNumber)
 getStdDeviationY self
-  = liftIO
-      ((js_getStdDeviationY (unSVGFEGaussianBlurElement self)) >>=
-         fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getStdDeviationY (self)))
  
 foreign import javascript unsafe "$1[\"edgeMode\"]" js_getEdgeMode
-        ::
-        JSRef SVGFEGaussianBlurElement -> IO (JSRef SVGAnimatedEnumeration)
+        :: SVGFEGaussianBlurElement -> IO (Nullable SVGAnimatedEnumeration)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEGaussianBlurElement.edgeMode Mozilla SVGFEGaussianBlurElement.edgeMode documentation> 
 getEdgeMode ::
             (MonadIO m) =>
               SVGFEGaussianBlurElement -> m (Maybe SVGAnimatedEnumeration)
 getEdgeMode self
-  = liftIO
-      ((js_getEdgeMode (unSVGFEGaussianBlurElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getEdgeMode (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGFEImageElement.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGFEImageElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGFEImageElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGFEImageElement.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,14 +20,11 @@
  
 foreign import javascript unsafe "$1[\"preserveAspectRatio\"]"
         js_getPreserveAspectRatio ::
-        JSRef SVGFEImageElement ->
-          IO (JSRef SVGAnimatedPreserveAspectRatio)
+        SVGFEImageElement -> IO (Nullable SVGAnimatedPreserveAspectRatio)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEImageElement.preserveAspectRatio Mozilla SVGFEImageElement.preserveAspectRatio documentation> 
 getPreserveAspectRatio ::
                        (MonadIO m) =>
                          SVGFEImageElement -> m (Maybe SVGAnimatedPreserveAspectRatio)
 getPreserveAspectRatio self
-  = liftIO
-      ((js_getPreserveAspectRatio (unSVGFEImageElement self)) >>=
-         fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getPreserveAspectRatio (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGFEMergeNodeElement.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGFEMergeNodeElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGFEMergeNodeElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGFEMergeNodeElement.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,10 +19,9 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"in1\"]" js_getIn1 ::
-        JSRef SVGFEMergeNodeElement -> IO (JSRef SVGAnimatedString)
+        SVGFEMergeNodeElement -> IO (Nullable SVGAnimatedString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEMergeNodeElement.in1 Mozilla SVGFEMergeNodeElement.in1 documentation> 
 getIn1 ::
        (MonadIO m) => SVGFEMergeNodeElement -> m (Maybe SVGAnimatedString)
-getIn1 self
-  = liftIO ((js_getIn1 (unSVGFEMergeNodeElement self)) >>= fromJSRef)
+getIn1 self = liftIO (nullableToMaybe <$> (js_getIn1 (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGFEMorphologyElement.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGFEMorphologyElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGFEMorphologyElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGFEMorphologyElement.hs
@@ -9,7 +9,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -23,60 +23,52 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"setRadius\"]($2, $3)"
-        js_setRadius ::
-        JSRef SVGFEMorphologyElement -> Float -> Float -> IO ()
+        js_setRadius :: SVGFEMorphologyElement -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEMorphologyElement.setRadius Mozilla SVGFEMorphologyElement.setRadius documentation> 
 setRadius ::
           (MonadIO m) => SVGFEMorphologyElement -> Float -> Float -> m ()
 setRadius self radiusX radiusY
-  = liftIO
-      (js_setRadius (unSVGFEMorphologyElement self) radiusX radiusY)
+  = liftIO (js_setRadius (self) radiusX radiusY)
 pattern SVG_MORPHOLOGY_OPERATOR_UNKNOWN = 0
 pattern SVG_MORPHOLOGY_OPERATOR_ERODE = 1
 pattern SVG_MORPHOLOGY_OPERATOR_DILATE = 2
  
 foreign import javascript unsafe "$1[\"in1\"]" js_getIn1 ::
-        JSRef SVGFEMorphologyElement -> IO (JSRef SVGAnimatedString)
+        SVGFEMorphologyElement -> IO (Nullable SVGAnimatedString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEMorphologyElement.in1 Mozilla SVGFEMorphologyElement.in1 documentation> 
 getIn1 ::
        (MonadIO m) =>
          SVGFEMorphologyElement -> m (Maybe SVGAnimatedString)
-getIn1 self
-  = liftIO
-      ((js_getIn1 (unSVGFEMorphologyElement self)) >>= fromJSRef)
+getIn1 self = liftIO (nullableToMaybe <$> (js_getIn1 (self)))
  
 foreign import javascript unsafe "$1[\"operator\"]" js_getOperator
-        ::
-        JSRef SVGFEMorphologyElement -> IO (JSRef SVGAnimatedEnumeration)
+        :: SVGFEMorphologyElement -> IO (Nullable SVGAnimatedEnumeration)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEMorphologyElement.operator Mozilla SVGFEMorphologyElement.operator documentation> 
 getOperator ::
             (MonadIO m) =>
               SVGFEMorphologyElement -> m (Maybe SVGAnimatedEnumeration)
 getOperator self
-  = liftIO
-      ((js_getOperator (unSVGFEMorphologyElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getOperator (self)))
  
 foreign import javascript unsafe "$1[\"radiusX\"]" js_getRadiusX ::
-        JSRef SVGFEMorphologyElement -> IO (JSRef SVGAnimatedNumber)
+        SVGFEMorphologyElement -> IO (Nullable SVGAnimatedNumber)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEMorphologyElement.radiusX Mozilla SVGFEMorphologyElement.radiusX documentation> 
 getRadiusX ::
            (MonadIO m) =>
              SVGFEMorphologyElement -> m (Maybe SVGAnimatedNumber)
 getRadiusX self
-  = liftIO
-      ((js_getRadiusX (unSVGFEMorphologyElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getRadiusX (self)))
  
 foreign import javascript unsafe "$1[\"radiusY\"]" js_getRadiusY ::
-        JSRef SVGFEMorphologyElement -> IO (JSRef SVGAnimatedNumber)
+        SVGFEMorphologyElement -> IO (Nullable SVGAnimatedNumber)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEMorphologyElement.radiusY Mozilla SVGFEMorphologyElement.radiusY documentation> 
 getRadiusY ::
            (MonadIO m) =>
              SVGFEMorphologyElement -> m (Maybe SVGAnimatedNumber)
 getRadiusY self
-  = liftIO
-      ((js_getRadiusY (unSVGFEMorphologyElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getRadiusY (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGFEOffsetElement.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGFEOffsetElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGFEOffsetElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGFEOffsetElement.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,28 +20,25 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"in1\"]" js_getIn1 ::
-        JSRef SVGFEOffsetElement -> IO (JSRef SVGAnimatedString)
+        SVGFEOffsetElement -> IO (Nullable SVGAnimatedString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEOffsetElement.in1 Mozilla SVGFEOffsetElement.in1 documentation> 
 getIn1 ::
        (MonadIO m) => SVGFEOffsetElement -> m (Maybe SVGAnimatedString)
-getIn1 self
-  = liftIO ((js_getIn1 (unSVGFEOffsetElement self)) >>= fromJSRef)
+getIn1 self = liftIO (nullableToMaybe <$> (js_getIn1 (self)))
  
 foreign import javascript unsafe "$1[\"dx\"]" js_getDx ::
-        JSRef SVGFEOffsetElement -> IO (JSRef SVGAnimatedNumber)
+        SVGFEOffsetElement -> IO (Nullable SVGAnimatedNumber)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEOffsetElement.dx Mozilla SVGFEOffsetElement.dx documentation> 
 getDx ::
       (MonadIO m) => SVGFEOffsetElement -> m (Maybe SVGAnimatedNumber)
-getDx self
-  = liftIO ((js_getDx (unSVGFEOffsetElement self)) >>= fromJSRef)
+getDx self = liftIO (nullableToMaybe <$> (js_getDx (self)))
  
 foreign import javascript unsafe "$1[\"dy\"]" js_getDy ::
-        JSRef SVGFEOffsetElement -> IO (JSRef SVGAnimatedNumber)
+        SVGFEOffsetElement -> IO (Nullable SVGAnimatedNumber)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEOffsetElement.dy Mozilla SVGFEOffsetElement.dy documentation> 
 getDy ::
       (MonadIO m) => SVGFEOffsetElement -> m (Maybe SVGAnimatedNumber)
-getDy self
-  = liftIO ((js_getDy (unSVGFEOffsetElement self)) >>= fromJSRef)
+getDy self = liftIO (nullableToMaybe <$> (js_getDy (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGFEPointLightElement.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGFEPointLightElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGFEPointLightElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGFEPointLightElement.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,31 +20,28 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"x\"]" js_getX ::
-        JSRef SVGFEPointLightElement -> IO (JSRef SVGAnimatedNumber)
+        SVGFEPointLightElement -> IO (Nullable SVGAnimatedNumber)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEPointLightElement.x Mozilla SVGFEPointLightElement.x documentation> 
 getX ::
      (MonadIO m) =>
        SVGFEPointLightElement -> m (Maybe SVGAnimatedNumber)
-getX self
-  = liftIO ((js_getX (unSVGFEPointLightElement self)) >>= fromJSRef)
+getX self = liftIO (nullableToMaybe <$> (js_getX (self)))
  
 foreign import javascript unsafe "$1[\"y\"]" js_getY ::
-        JSRef SVGFEPointLightElement -> IO (JSRef SVGAnimatedNumber)
+        SVGFEPointLightElement -> IO (Nullable SVGAnimatedNumber)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEPointLightElement.y Mozilla SVGFEPointLightElement.y documentation> 
 getY ::
      (MonadIO m) =>
        SVGFEPointLightElement -> m (Maybe SVGAnimatedNumber)
-getY self
-  = liftIO ((js_getY (unSVGFEPointLightElement self)) >>= fromJSRef)
+getY self = liftIO (nullableToMaybe <$> (js_getY (self)))
  
 foreign import javascript unsafe "$1[\"z\"]" js_getZ ::
-        JSRef SVGFEPointLightElement -> IO (JSRef SVGAnimatedNumber)
+        SVGFEPointLightElement -> IO (Nullable SVGAnimatedNumber)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEPointLightElement.z Mozilla SVGFEPointLightElement.z documentation> 
 getZ ::
      (MonadIO m) =>
        SVGFEPointLightElement -> m (Maybe SVGAnimatedNumber)
-getZ self
-  = liftIO ((js_getZ (unSVGFEPointLightElement self)) >>= fromJSRef)
+getZ self = liftIO (nullableToMaybe <$> (js_getZ (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGFESpecularLightingElement.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGFESpecularLightingElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGFESpecularLightingElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGFESpecularLightingElement.hs
@@ -8,7 +8,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -22,51 +22,43 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"in1\"]" js_getIn1 ::
-        JSRef SVGFESpecularLightingElement -> IO (JSRef SVGAnimatedString)
+        SVGFESpecularLightingElement -> IO (Nullable SVGAnimatedString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFESpecularLightingElement.in1 Mozilla SVGFESpecularLightingElement.in1 documentation> 
 getIn1 ::
        (MonadIO m) =>
          SVGFESpecularLightingElement -> m (Maybe SVGAnimatedString)
-getIn1 self
-  = liftIO
-      ((js_getIn1 (unSVGFESpecularLightingElement self)) >>= fromJSRef)
+getIn1 self = liftIO (nullableToMaybe <$> (js_getIn1 (self)))
  
 foreign import javascript unsafe "$1[\"surfaceScale\"]"
         js_getSurfaceScale ::
-        JSRef SVGFESpecularLightingElement -> IO (JSRef SVGAnimatedNumber)
+        SVGFESpecularLightingElement -> IO (Nullable SVGAnimatedNumber)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFESpecularLightingElement.surfaceScale Mozilla SVGFESpecularLightingElement.surfaceScale documentation> 
 getSurfaceScale ::
                 (MonadIO m) =>
                   SVGFESpecularLightingElement -> m (Maybe SVGAnimatedNumber)
 getSurfaceScale self
-  = liftIO
-      ((js_getSurfaceScale (unSVGFESpecularLightingElement self)) >>=
-         fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getSurfaceScale (self)))
  
 foreign import javascript unsafe "$1[\"specularConstant\"]"
         js_getSpecularConstant ::
-        JSRef SVGFESpecularLightingElement -> IO (JSRef SVGAnimatedNumber)
+        SVGFESpecularLightingElement -> IO (Nullable SVGAnimatedNumber)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFESpecularLightingElement.specularConstant Mozilla SVGFESpecularLightingElement.specularConstant documentation> 
 getSpecularConstant ::
                     (MonadIO m) =>
                       SVGFESpecularLightingElement -> m (Maybe SVGAnimatedNumber)
 getSpecularConstant self
-  = liftIO
-      ((js_getSpecularConstant (unSVGFESpecularLightingElement self)) >>=
-         fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getSpecularConstant (self)))
  
 foreign import javascript unsafe "$1[\"specularExponent\"]"
         js_getSpecularExponent ::
-        JSRef SVGFESpecularLightingElement -> IO (JSRef SVGAnimatedNumber)
+        SVGFESpecularLightingElement -> IO (Nullable SVGAnimatedNumber)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFESpecularLightingElement.specularExponent Mozilla SVGFESpecularLightingElement.specularExponent documentation> 
 getSpecularExponent ::
                     (MonadIO m) =>
                       SVGFESpecularLightingElement -> m (Maybe SVGAnimatedNumber)
 getSpecularExponent self
-  = liftIO
-      ((js_getSpecularExponent (unSVGFESpecularLightingElement self)) >>=
-         fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getSpecularExponent (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGFESpotLightElement.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGFESpotLightElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGFESpotLightElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGFESpotLightElement.hs
@@ -9,7 +9,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -23,85 +23,75 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"x\"]" js_getX ::
-        JSRef SVGFESpotLightElement -> IO (JSRef SVGAnimatedNumber)
+        SVGFESpotLightElement -> IO (Nullable SVGAnimatedNumber)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFESpotLightElement.x Mozilla SVGFESpotLightElement.x documentation> 
 getX ::
      (MonadIO m) => SVGFESpotLightElement -> m (Maybe SVGAnimatedNumber)
-getX self
-  = liftIO ((js_getX (unSVGFESpotLightElement self)) >>= fromJSRef)
+getX self = liftIO (nullableToMaybe <$> (js_getX (self)))
  
 foreign import javascript unsafe "$1[\"y\"]" js_getY ::
-        JSRef SVGFESpotLightElement -> IO (JSRef SVGAnimatedNumber)
+        SVGFESpotLightElement -> IO (Nullable SVGAnimatedNumber)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFESpotLightElement.y Mozilla SVGFESpotLightElement.y documentation> 
 getY ::
      (MonadIO m) => SVGFESpotLightElement -> m (Maybe SVGAnimatedNumber)
-getY self
-  = liftIO ((js_getY (unSVGFESpotLightElement self)) >>= fromJSRef)
+getY self = liftIO (nullableToMaybe <$> (js_getY (self)))
  
 foreign import javascript unsafe "$1[\"z\"]" js_getZ ::
-        JSRef SVGFESpotLightElement -> IO (JSRef SVGAnimatedNumber)
+        SVGFESpotLightElement -> IO (Nullable SVGAnimatedNumber)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFESpotLightElement.z Mozilla SVGFESpotLightElement.z documentation> 
 getZ ::
      (MonadIO m) => SVGFESpotLightElement -> m (Maybe SVGAnimatedNumber)
-getZ self
-  = liftIO ((js_getZ (unSVGFESpotLightElement self)) >>= fromJSRef)
+getZ self = liftIO (nullableToMaybe <$> (js_getZ (self)))
  
 foreign import javascript unsafe "$1[\"pointsAtX\"]"
         js_getPointsAtX ::
-        JSRef SVGFESpotLightElement -> IO (JSRef SVGAnimatedNumber)
+        SVGFESpotLightElement -> IO (Nullable SVGAnimatedNumber)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFESpotLightElement.pointsAtX Mozilla SVGFESpotLightElement.pointsAtX documentation> 
 getPointsAtX ::
              (MonadIO m) => SVGFESpotLightElement -> m (Maybe SVGAnimatedNumber)
 getPointsAtX self
-  = liftIO
-      ((js_getPointsAtX (unSVGFESpotLightElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getPointsAtX (self)))
  
 foreign import javascript unsafe "$1[\"pointsAtY\"]"
         js_getPointsAtY ::
-        JSRef SVGFESpotLightElement -> IO (JSRef SVGAnimatedNumber)
+        SVGFESpotLightElement -> IO (Nullable SVGAnimatedNumber)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFESpotLightElement.pointsAtY Mozilla SVGFESpotLightElement.pointsAtY documentation> 
 getPointsAtY ::
              (MonadIO m) => SVGFESpotLightElement -> m (Maybe SVGAnimatedNumber)
 getPointsAtY self
-  = liftIO
-      ((js_getPointsAtY (unSVGFESpotLightElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getPointsAtY (self)))
  
 foreign import javascript unsafe "$1[\"pointsAtZ\"]"
         js_getPointsAtZ ::
-        JSRef SVGFESpotLightElement -> IO (JSRef SVGAnimatedNumber)
+        SVGFESpotLightElement -> IO (Nullable SVGAnimatedNumber)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFESpotLightElement.pointsAtZ Mozilla SVGFESpotLightElement.pointsAtZ documentation> 
 getPointsAtZ ::
              (MonadIO m) => SVGFESpotLightElement -> m (Maybe SVGAnimatedNumber)
 getPointsAtZ self
-  = liftIO
-      ((js_getPointsAtZ (unSVGFESpotLightElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getPointsAtZ (self)))
  
 foreign import javascript unsafe "$1[\"specularExponent\"]"
         js_getSpecularExponent ::
-        JSRef SVGFESpotLightElement -> IO (JSRef SVGAnimatedNumber)
+        SVGFESpotLightElement -> IO (Nullable SVGAnimatedNumber)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFESpotLightElement.specularExponent Mozilla SVGFESpotLightElement.specularExponent documentation> 
 getSpecularExponent ::
                     (MonadIO m) => SVGFESpotLightElement -> m (Maybe SVGAnimatedNumber)
 getSpecularExponent self
-  = liftIO
-      ((js_getSpecularExponent (unSVGFESpotLightElement self)) >>=
-         fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getSpecularExponent (self)))
  
 foreign import javascript unsafe "$1[\"limitingConeAngle\"]"
         js_getLimitingConeAngle ::
-        JSRef SVGFESpotLightElement -> IO (JSRef SVGAnimatedNumber)
+        SVGFESpotLightElement -> IO (Nullable SVGAnimatedNumber)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFESpotLightElement.limitingConeAngle Mozilla SVGFESpotLightElement.limitingConeAngle documentation> 
 getLimitingConeAngle ::
                      (MonadIO m) => SVGFESpotLightElement -> m (Maybe SVGAnimatedNumber)
 getLimitingConeAngle self
-  = liftIO
-      ((js_getLimitingConeAngle (unSVGFESpotLightElement self)) >>=
-         fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getLimitingConeAngle (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGFETileElement.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGFETileElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGFETileElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGFETileElement.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,10 +19,9 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"in1\"]" js_getIn1 ::
-        JSRef SVGFETileElement -> IO (JSRef SVGAnimatedString)
+        SVGFETileElement -> IO (Nullable SVGAnimatedString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFETileElement.in1 Mozilla SVGFETileElement.in1 documentation> 
 getIn1 ::
        (MonadIO m) => SVGFETileElement -> m (Maybe SVGAnimatedString)
-getIn1 self
-  = liftIO ((js_getIn1 (unSVGFETileElement self)) >>= fromJSRef)
+getIn1 self = liftIO (nullableToMaybe <$> (js_getIn1 (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGFETurbulenceElement.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGFETurbulenceElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGFETurbulenceElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGFETurbulenceElement.hs
@@ -13,7 +13,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -34,72 +34,62 @@
  
 foreign import javascript unsafe "$1[\"baseFrequencyX\"]"
         js_getBaseFrequencyX ::
-        JSRef SVGFETurbulenceElement -> IO (JSRef SVGAnimatedNumber)
+        SVGFETurbulenceElement -> IO (Nullable SVGAnimatedNumber)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFETurbulenceElement.baseFrequencyX Mozilla SVGFETurbulenceElement.baseFrequencyX documentation> 
 getBaseFrequencyX ::
                   (MonadIO m) =>
                     SVGFETurbulenceElement -> m (Maybe SVGAnimatedNumber)
 getBaseFrequencyX self
-  = liftIO
-      ((js_getBaseFrequencyX (unSVGFETurbulenceElement self)) >>=
-         fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getBaseFrequencyX (self)))
  
 foreign import javascript unsafe "$1[\"baseFrequencyY\"]"
         js_getBaseFrequencyY ::
-        JSRef SVGFETurbulenceElement -> IO (JSRef SVGAnimatedNumber)
+        SVGFETurbulenceElement -> IO (Nullable SVGAnimatedNumber)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFETurbulenceElement.baseFrequencyY Mozilla SVGFETurbulenceElement.baseFrequencyY documentation> 
 getBaseFrequencyY ::
                   (MonadIO m) =>
                     SVGFETurbulenceElement -> m (Maybe SVGAnimatedNumber)
 getBaseFrequencyY self
-  = liftIO
-      ((js_getBaseFrequencyY (unSVGFETurbulenceElement self)) >>=
-         fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getBaseFrequencyY (self)))
  
 foreign import javascript unsafe "$1[\"numOctaves\"]"
         js_getNumOctaves ::
-        JSRef SVGFETurbulenceElement -> IO (JSRef SVGAnimatedInteger)
+        SVGFETurbulenceElement -> IO (Nullable SVGAnimatedInteger)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFETurbulenceElement.numOctaves Mozilla SVGFETurbulenceElement.numOctaves documentation> 
 getNumOctaves ::
               (MonadIO m) =>
                 SVGFETurbulenceElement -> m (Maybe SVGAnimatedInteger)
 getNumOctaves self
-  = liftIO
-      ((js_getNumOctaves (unSVGFETurbulenceElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getNumOctaves (self)))
  
 foreign import javascript unsafe "$1[\"seed\"]" js_getSeed ::
-        JSRef SVGFETurbulenceElement -> IO (JSRef SVGAnimatedNumber)
+        SVGFETurbulenceElement -> IO (Nullable SVGAnimatedNumber)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFETurbulenceElement.seed Mozilla SVGFETurbulenceElement.seed documentation> 
 getSeed ::
         (MonadIO m) =>
           SVGFETurbulenceElement -> m (Maybe SVGAnimatedNumber)
-getSeed self
-  = liftIO
-      ((js_getSeed (unSVGFETurbulenceElement self)) >>= fromJSRef)
+getSeed self = liftIO (nullableToMaybe <$> (js_getSeed (self)))
  
 foreign import javascript unsafe "$1[\"stitchTiles\"]"
         js_getStitchTiles ::
-        JSRef SVGFETurbulenceElement -> IO (JSRef SVGAnimatedEnumeration)
+        SVGFETurbulenceElement -> IO (Nullable SVGAnimatedEnumeration)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFETurbulenceElement.stitchTiles Mozilla SVGFETurbulenceElement.stitchTiles documentation> 
 getStitchTiles ::
                (MonadIO m) =>
                  SVGFETurbulenceElement -> m (Maybe SVGAnimatedEnumeration)
 getStitchTiles self
-  = liftIO
-      ((js_getStitchTiles (unSVGFETurbulenceElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getStitchTiles (self)))
  
 foreign import javascript unsafe "$1[\"type\"]" js_getType ::
-        JSRef SVGFETurbulenceElement -> IO (JSRef SVGAnimatedEnumeration)
+        SVGFETurbulenceElement -> IO (Nullable SVGAnimatedEnumeration)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFETurbulenceElement.type Mozilla SVGFETurbulenceElement.type documentation> 
 getType ::
         (MonadIO m) =>
           SVGFETurbulenceElement -> m (Maybe SVGAnimatedEnumeration)
-getType self
-  = liftIO
-      ((js_getType (unSVGFETurbulenceElement self)) >>= fromJSRef)
+getType self = liftIO (nullableToMaybe <$> (js_getType (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGFilterElement.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGFilterElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGFilterElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGFilterElement.hs
@@ -8,7 +8,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -22,91 +22,82 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"setFilterRes\"]($2, $3)"
-        js_setFilterRes :: JSRef SVGFilterElement -> Word -> Word -> IO ()
+        js_setFilterRes :: SVGFilterElement -> Word -> Word -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFilterElement.setFilterRes Mozilla SVGFilterElement.setFilterRes documentation> 
 setFilterRes ::
              (MonadIO m) => SVGFilterElement -> Word -> Word -> m ()
 setFilterRes self filterResX filterResY
-  = liftIO
-      (js_setFilterRes (unSVGFilterElement self) filterResX filterResY)
+  = liftIO (js_setFilterRes (self) filterResX filterResY)
  
 foreign import javascript unsafe "$1[\"filterUnits\"]"
         js_getFilterUnits ::
-        JSRef SVGFilterElement -> IO (JSRef SVGAnimatedEnumeration)
+        SVGFilterElement -> IO (Nullable SVGAnimatedEnumeration)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFilterElement.filterUnits Mozilla SVGFilterElement.filterUnits documentation> 
 getFilterUnits ::
                (MonadIO m) => SVGFilterElement -> m (Maybe SVGAnimatedEnumeration)
 getFilterUnits self
-  = liftIO
-      ((js_getFilterUnits (unSVGFilterElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getFilterUnits (self)))
  
 foreign import javascript unsafe "$1[\"primitiveUnits\"]"
         js_getPrimitiveUnits ::
-        JSRef SVGFilterElement -> IO (JSRef SVGAnimatedEnumeration)
+        SVGFilterElement -> IO (Nullable SVGAnimatedEnumeration)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFilterElement.primitiveUnits Mozilla SVGFilterElement.primitiveUnits documentation> 
 getPrimitiveUnits ::
                   (MonadIO m) => SVGFilterElement -> m (Maybe SVGAnimatedEnumeration)
 getPrimitiveUnits self
-  = liftIO
-      ((js_getPrimitiveUnits (unSVGFilterElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getPrimitiveUnits (self)))
  
 foreign import javascript unsafe "$1[\"x\"]" js_getX ::
-        JSRef SVGFilterElement -> IO (JSRef SVGAnimatedLength)
+        SVGFilterElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFilterElement.x Mozilla SVGFilterElement.x documentation> 
 getX ::
      (MonadIO m) => SVGFilterElement -> m (Maybe SVGAnimatedLength)
-getX self
-  = liftIO ((js_getX (unSVGFilterElement self)) >>= fromJSRef)
+getX self = liftIO (nullableToMaybe <$> (js_getX (self)))
  
 foreign import javascript unsafe "$1[\"y\"]" js_getY ::
-        JSRef SVGFilterElement -> IO (JSRef SVGAnimatedLength)
+        SVGFilterElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFilterElement.y Mozilla SVGFilterElement.y documentation> 
 getY ::
      (MonadIO m) => SVGFilterElement -> m (Maybe SVGAnimatedLength)
-getY self
-  = liftIO ((js_getY (unSVGFilterElement self)) >>= fromJSRef)
+getY self = liftIO (nullableToMaybe <$> (js_getY (self)))
  
 foreign import javascript unsafe "$1[\"width\"]" js_getWidth ::
-        JSRef SVGFilterElement -> IO (JSRef SVGAnimatedLength)
+        SVGFilterElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFilterElement.width Mozilla SVGFilterElement.width documentation> 
 getWidth ::
          (MonadIO m) => SVGFilterElement -> m (Maybe SVGAnimatedLength)
-getWidth self
-  = liftIO ((js_getWidth (unSVGFilterElement self)) >>= fromJSRef)
+getWidth self = liftIO (nullableToMaybe <$> (js_getWidth (self)))
  
 foreign import javascript unsafe "$1[\"height\"]" js_getHeight ::
-        JSRef SVGFilterElement -> IO (JSRef SVGAnimatedLength)
+        SVGFilterElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFilterElement.height Mozilla SVGFilterElement.height documentation> 
 getHeight ::
           (MonadIO m) => SVGFilterElement -> m (Maybe SVGAnimatedLength)
-getHeight self
-  = liftIO ((js_getHeight (unSVGFilterElement self)) >>= fromJSRef)
+getHeight self = liftIO (nullableToMaybe <$> (js_getHeight (self)))
  
 foreign import javascript unsafe "$1[\"filterResX\"]"
         js_getFilterResX ::
-        JSRef SVGFilterElement -> IO (JSRef SVGAnimatedInteger)
+        SVGFilterElement -> IO (Nullable SVGAnimatedInteger)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFilterElement.filterResX Mozilla SVGFilterElement.filterResX documentation> 
 getFilterResX ::
               (MonadIO m) => SVGFilterElement -> m (Maybe SVGAnimatedInteger)
 getFilterResX self
-  = liftIO
-      ((js_getFilterResX (unSVGFilterElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getFilterResX (self)))
  
 foreign import javascript unsafe "$1[\"filterResY\"]"
         js_getFilterResY ::
-        JSRef SVGFilterElement -> IO (JSRef SVGAnimatedInteger)
+        SVGFilterElement -> IO (Nullable SVGAnimatedInteger)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFilterElement.filterResY Mozilla SVGFilterElement.filterResY documentation> 
 getFilterResY ::
               (MonadIO m) => SVGFilterElement -> m (Maybe SVGAnimatedInteger)
 getFilterResY self
-  = liftIO
-      ((js_getFilterResY (unSVGFilterElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getFilterResY (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGFilterPrimitiveStandardAttributes.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGFilterPrimitiveStandardAttributes.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGFilterPrimitiveStandardAttributes.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGFilterPrimitiveStandardAttributes.hs
@@ -8,7 +8,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -22,66 +22,51 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"x\"]" js_getX ::
-        JSRef SVGFilterPrimitiveStandardAttributes ->
-          IO (JSRef SVGAnimatedLength)
+        SVGFilterPrimitiveStandardAttributes ->
+          IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFilterPrimitiveStandardAttributes.x Mozilla SVGFilterPrimitiveStandardAttributes.x documentation> 
 getX ::
      (MonadIO m) =>
        SVGFilterPrimitiveStandardAttributes -> m (Maybe SVGAnimatedLength)
-getX self
-  = liftIO
-      ((js_getX (unSVGFilterPrimitiveStandardAttributes self)) >>=
-         fromJSRef)
+getX self = liftIO (nullableToMaybe <$> (js_getX (self)))
  
 foreign import javascript unsafe "$1[\"y\"]" js_getY ::
-        JSRef SVGFilterPrimitiveStandardAttributes ->
-          IO (JSRef SVGAnimatedLength)
+        SVGFilterPrimitiveStandardAttributes ->
+          IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFilterPrimitiveStandardAttributes.y Mozilla SVGFilterPrimitiveStandardAttributes.y documentation> 
 getY ::
      (MonadIO m) =>
        SVGFilterPrimitiveStandardAttributes -> m (Maybe SVGAnimatedLength)
-getY self
-  = liftIO
-      ((js_getY (unSVGFilterPrimitiveStandardAttributes self)) >>=
-         fromJSRef)
+getY self = liftIO (nullableToMaybe <$> (js_getY (self)))
  
 foreign import javascript unsafe "$1[\"width\"]" js_getWidth ::
-        JSRef SVGFilterPrimitiveStandardAttributes ->
-          IO (JSRef SVGAnimatedLength)
+        SVGFilterPrimitiveStandardAttributes ->
+          IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFilterPrimitiveStandardAttributes.width Mozilla SVGFilterPrimitiveStandardAttributes.width documentation> 
 getWidth ::
          (MonadIO m) =>
            SVGFilterPrimitiveStandardAttributes -> m (Maybe SVGAnimatedLength)
-getWidth self
-  = liftIO
-      ((js_getWidth (unSVGFilterPrimitiveStandardAttributes self)) >>=
-         fromJSRef)
+getWidth self = liftIO (nullableToMaybe <$> (js_getWidth (self)))
  
 foreign import javascript unsafe "$1[\"height\"]" js_getHeight ::
-        JSRef SVGFilterPrimitiveStandardAttributes ->
-          IO (JSRef SVGAnimatedLength)
+        SVGFilterPrimitiveStandardAttributes ->
+          IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFilterPrimitiveStandardAttributes.height Mozilla SVGFilterPrimitiveStandardAttributes.height documentation> 
 getHeight ::
           (MonadIO m) =>
             SVGFilterPrimitiveStandardAttributes -> m (Maybe SVGAnimatedLength)
-getHeight self
-  = liftIO
-      ((js_getHeight (unSVGFilterPrimitiveStandardAttributes self)) >>=
-         fromJSRef)
+getHeight self = liftIO (nullableToMaybe <$> (js_getHeight (self)))
  
 foreign import javascript unsafe "$1[\"result\"]" js_getResult ::
-        JSRef SVGFilterPrimitiveStandardAttributes ->
-          IO (JSRef SVGAnimatedString)
+        SVGFilterPrimitiveStandardAttributes ->
+          IO (Nullable SVGAnimatedString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFilterPrimitiveStandardAttributes.result Mozilla SVGFilterPrimitiveStandardAttributes.result documentation> 
 getResult ::
           (MonadIO m) =>
             SVGFilterPrimitiveStandardAttributes -> m (Maybe SVGAnimatedString)
-getResult self
-  = liftIO
-      ((js_getResult (unSVGFilterPrimitiveStandardAttributes self)) >>=
-         fromJSRef)
+getResult self = liftIO (nullableToMaybe <$> (js_getResult (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGFitToViewBox.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGFitToViewBox.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGFitToViewBox.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGFitToViewBox.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,23 +20,21 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"viewBox\"]" js_getViewBox ::
-        JSRef SVGFitToViewBox -> IO (JSRef SVGAnimatedRect)
+        SVGFitToViewBox -> IO (Nullable SVGAnimatedRect)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFitToViewBox.viewBox Mozilla SVGFitToViewBox.viewBox documentation> 
 getViewBox ::
            (MonadIO m) => SVGFitToViewBox -> m (Maybe SVGAnimatedRect)
 getViewBox self
-  = liftIO ((js_getViewBox (unSVGFitToViewBox self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getViewBox (self)))
  
 foreign import javascript unsafe "$1[\"preserveAspectRatio\"]"
         js_getPreserveAspectRatio ::
-        JSRef SVGFitToViewBox -> IO (JSRef SVGAnimatedPreserveAspectRatio)
+        SVGFitToViewBox -> IO (Nullable SVGAnimatedPreserveAspectRatio)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGFitToViewBox.preserveAspectRatio Mozilla SVGFitToViewBox.preserveAspectRatio documentation> 
 getPreserveAspectRatio ::
                        (MonadIO m) =>
                          SVGFitToViewBox -> m (Maybe SVGAnimatedPreserveAspectRatio)
 getPreserveAspectRatio self
-  = liftIO
-      ((js_getPreserveAspectRatio (unSVGFitToViewBox self)) >>=
-         fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getPreserveAspectRatio (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGForeignObjectElement.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGForeignObjectElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGForeignObjectElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGForeignObjectElement.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,43 +20,37 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"x\"]" js_getX ::
-        JSRef SVGForeignObjectElement -> IO (JSRef SVGAnimatedLength)
+        SVGForeignObjectElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGForeignObjectElement.x Mozilla SVGForeignObjectElement.x documentation> 
 getX ::
      (MonadIO m) =>
        SVGForeignObjectElement -> m (Maybe SVGAnimatedLength)
-getX self
-  = liftIO ((js_getX (unSVGForeignObjectElement self)) >>= fromJSRef)
+getX self = liftIO (nullableToMaybe <$> (js_getX (self)))
  
 foreign import javascript unsafe "$1[\"y\"]" js_getY ::
-        JSRef SVGForeignObjectElement -> IO (JSRef SVGAnimatedLength)
+        SVGForeignObjectElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGForeignObjectElement.y Mozilla SVGForeignObjectElement.y documentation> 
 getY ::
      (MonadIO m) =>
        SVGForeignObjectElement -> m (Maybe SVGAnimatedLength)
-getY self
-  = liftIO ((js_getY (unSVGForeignObjectElement self)) >>= fromJSRef)
+getY self = liftIO (nullableToMaybe <$> (js_getY (self)))
  
 foreign import javascript unsafe "$1[\"width\"]" js_getWidth ::
-        JSRef SVGForeignObjectElement -> IO (JSRef SVGAnimatedLength)
+        SVGForeignObjectElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGForeignObjectElement.width Mozilla SVGForeignObjectElement.width documentation> 
 getWidth ::
          (MonadIO m) =>
            SVGForeignObjectElement -> m (Maybe SVGAnimatedLength)
-getWidth self
-  = liftIO
-      ((js_getWidth (unSVGForeignObjectElement self)) >>= fromJSRef)
+getWidth self = liftIO (nullableToMaybe <$> (js_getWidth (self)))
  
 foreign import javascript unsafe "$1[\"height\"]" js_getHeight ::
-        JSRef SVGForeignObjectElement -> IO (JSRef SVGAnimatedLength)
+        SVGForeignObjectElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGForeignObjectElement.height Mozilla SVGForeignObjectElement.height documentation> 
 getHeight ::
           (MonadIO m) =>
             SVGForeignObjectElement -> m (Maybe SVGAnimatedLength)
-getHeight self
-  = liftIO
-      ((js_getHeight (unSVGForeignObjectElement self)) >>= fromJSRef)
+getHeight self = liftIO (nullableToMaybe <$> (js_getHeight (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGGlyphRefElement.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGGlyphRefElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGGlyphRefElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGGlyphRefElement.hs
@@ -9,7 +9,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -23,97 +23,91 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"glyphRef\"] = $2;"
-        js_setGlyphRef :: JSRef SVGGlyphRefElement -> JSString -> IO ()
+        js_setGlyphRef :: SVGGlyphRefElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGGlyphRefElement.glyphRef Mozilla SVGGlyphRefElement.glyphRef documentation> 
 setGlyphRef ::
             (MonadIO m, ToJSString val) => SVGGlyphRefElement -> val -> m ()
 setGlyphRef self val
-  = liftIO
-      (js_setGlyphRef (unSVGGlyphRefElement self) (toJSString val))
+  = liftIO (js_setGlyphRef (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"glyphRef\"]" js_getGlyphRef
-        :: JSRef SVGGlyphRefElement -> IO JSString
+        :: SVGGlyphRefElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGGlyphRefElement.glyphRef Mozilla SVGGlyphRefElement.glyphRef documentation> 
 getGlyphRef ::
             (MonadIO m, FromJSString result) => SVGGlyphRefElement -> m result
 getGlyphRef self
-  = liftIO
-      (fromJSString <$> (js_getGlyphRef (unSVGGlyphRefElement self)))
+  = liftIO (fromJSString <$> (js_getGlyphRef (self)))
  
 foreign import javascript unsafe "$1[\"format\"] = $2;"
-        js_setFormat :: JSRef SVGGlyphRefElement -> JSString -> IO ()
+        js_setFormat :: SVGGlyphRefElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGGlyphRefElement.format Mozilla SVGGlyphRefElement.format documentation> 
 setFormat ::
           (MonadIO m, ToJSString val) => SVGGlyphRefElement -> val -> m ()
-setFormat self val
-  = liftIO
-      (js_setFormat (unSVGGlyphRefElement self) (toJSString val))
+setFormat self val = liftIO (js_setFormat (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"format\"]" js_getFormat ::
-        JSRef SVGGlyphRefElement -> IO JSString
+        SVGGlyphRefElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGGlyphRefElement.format Mozilla SVGGlyphRefElement.format documentation> 
 getFormat ::
           (MonadIO m, FromJSString result) => SVGGlyphRefElement -> m result
-getFormat self
-  = liftIO
-      (fromJSString <$> (js_getFormat (unSVGGlyphRefElement self)))
+getFormat self = liftIO (fromJSString <$> (js_getFormat (self)))
  
 foreign import javascript unsafe "$1[\"x\"] = $2;" js_setX ::
-        JSRef SVGGlyphRefElement -> Float -> IO ()
+        SVGGlyphRefElement -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGGlyphRefElement.x Mozilla SVGGlyphRefElement.x documentation> 
 setX :: (MonadIO m) => SVGGlyphRefElement -> Float -> m ()
-setX self val = liftIO (js_setX (unSVGGlyphRefElement self) val)
+setX self val = liftIO (js_setX (self) val)
  
 foreign import javascript unsafe "$1[\"x\"]" js_getX ::
-        JSRef SVGGlyphRefElement -> IO Float
+        SVGGlyphRefElement -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGGlyphRefElement.x Mozilla SVGGlyphRefElement.x documentation> 
 getX :: (MonadIO m) => SVGGlyphRefElement -> m Float
-getX self = liftIO (js_getX (unSVGGlyphRefElement self))
+getX self = liftIO (js_getX (self))
  
 foreign import javascript unsafe "$1[\"y\"] = $2;" js_setY ::
-        JSRef SVGGlyphRefElement -> Float -> IO ()
+        SVGGlyphRefElement -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGGlyphRefElement.y Mozilla SVGGlyphRefElement.y documentation> 
 setY :: (MonadIO m) => SVGGlyphRefElement -> Float -> m ()
-setY self val = liftIO (js_setY (unSVGGlyphRefElement self) val)
+setY self val = liftIO (js_setY (self) val)
  
 foreign import javascript unsafe "$1[\"y\"]" js_getY ::
-        JSRef SVGGlyphRefElement -> IO Float
+        SVGGlyphRefElement -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGGlyphRefElement.y Mozilla SVGGlyphRefElement.y documentation> 
 getY :: (MonadIO m) => SVGGlyphRefElement -> m Float
-getY self = liftIO (js_getY (unSVGGlyphRefElement self))
+getY self = liftIO (js_getY (self))
  
 foreign import javascript unsafe "$1[\"dx\"] = $2;" js_setDx ::
-        JSRef SVGGlyphRefElement -> Float -> IO ()
+        SVGGlyphRefElement -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGGlyphRefElement.dx Mozilla SVGGlyphRefElement.dx documentation> 
 setDx :: (MonadIO m) => SVGGlyphRefElement -> Float -> m ()
-setDx self val = liftIO (js_setDx (unSVGGlyphRefElement self) val)
+setDx self val = liftIO (js_setDx (self) val)
  
 foreign import javascript unsafe "$1[\"dx\"]" js_getDx ::
-        JSRef SVGGlyphRefElement -> IO Float
+        SVGGlyphRefElement -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGGlyphRefElement.dx Mozilla SVGGlyphRefElement.dx documentation> 
 getDx :: (MonadIO m) => SVGGlyphRefElement -> m Float
-getDx self = liftIO (js_getDx (unSVGGlyphRefElement self))
+getDx self = liftIO (js_getDx (self))
  
 foreign import javascript unsafe "$1[\"dy\"] = $2;" js_setDy ::
-        JSRef SVGGlyphRefElement -> Float -> IO ()
+        SVGGlyphRefElement -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGGlyphRefElement.dy Mozilla SVGGlyphRefElement.dy documentation> 
 setDy :: (MonadIO m) => SVGGlyphRefElement -> Float -> m ()
-setDy self val = liftIO (js_setDy (unSVGGlyphRefElement self) val)
+setDy self val = liftIO (js_setDy (self) val)
  
 foreign import javascript unsafe "$1[\"dy\"]" js_getDy ::
-        JSRef SVGGlyphRefElement -> IO Float
+        SVGGlyphRefElement -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGGlyphRefElement.dy Mozilla SVGGlyphRefElement.dy documentation> 
 getDy :: (MonadIO m) => SVGGlyphRefElement -> m Float
-getDy self = liftIO (js_getDy (unSVGGlyphRefElement self))
+getDy self = liftIO (js_getDy (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGGradientElement.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGGradientElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGGradientElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGGradientElement.hs
@@ -10,7 +10,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -29,7 +29,7 @@
  
 foreign import javascript unsafe "$1[\"gradientUnits\"]"
         js_getGradientUnits ::
-        JSRef SVGGradientElement -> IO (JSRef SVGAnimatedEnumeration)
+        SVGGradientElement -> IO (Nullable SVGAnimatedEnumeration)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGGradientElement.gradientUnits Mozilla SVGGradientElement.gradientUnits documentation> 
 getGradientUnits ::
@@ -37,13 +37,12 @@
                    self -> m (Maybe SVGAnimatedEnumeration)
 getGradientUnits self
   = liftIO
-      ((js_getGradientUnits
-          (unSVGGradientElement (toSVGGradientElement self)))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_getGradientUnits (toSVGGradientElement self)))
  
 foreign import javascript unsafe "$1[\"gradientTransform\"]"
         js_getGradientTransform ::
-        JSRef SVGGradientElement -> IO (JSRef SVGAnimatedTransformList)
+        SVGGradientElement -> IO (Nullable SVGAnimatedTransformList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGGradientElement.gradientTransform Mozilla SVGGradientElement.gradientTransform documentation> 
 getGradientTransform ::
@@ -51,13 +50,12 @@
                        self -> m (Maybe SVGAnimatedTransformList)
 getGradientTransform self
   = liftIO
-      ((js_getGradientTransform
-          (unSVGGradientElement (toSVGGradientElement self)))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_getGradientTransform (toSVGGradientElement self)))
  
 foreign import javascript unsafe "$1[\"spreadMethod\"]"
         js_getSpreadMethod ::
-        JSRef SVGGradientElement -> IO (JSRef SVGAnimatedEnumeration)
+        SVGGradientElement -> IO (Nullable SVGAnimatedEnumeration)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGGradientElement.spreadMethod Mozilla SVGGradientElement.spreadMethod documentation> 
 getSpreadMethod ::
@@ -65,6 +63,5 @@
                   self -> m (Maybe SVGAnimatedEnumeration)
 getSpreadMethod self
   = liftIO
-      ((js_getSpreadMethod
-          (unSVGGradientElement (toSVGGradientElement self)))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_getSpreadMethod (toSVGGradientElement self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGGraphicsElement.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGGraphicsElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGGraphicsElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGGraphicsElement.hs
@@ -10,7 +10,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -24,18 +24,17 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"getBBox\"]()" js_getBBox ::
-        JSRef SVGGraphicsElement -> IO (JSRef SVGRect)
+        SVGGraphicsElement -> IO (Nullable SVGRect)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGGraphicsElement.getBBox Mozilla SVGGraphicsElement.getBBox documentation> 
 getBBox ::
         (MonadIO m, IsSVGGraphicsElement self) => self -> m (Maybe SVGRect)
 getBBox self
   = liftIO
-      ((js_getBBox (unSVGGraphicsElement (toSVGGraphicsElement self)))
-         >>= fromJSRef)
+      (nullableToMaybe <$> (js_getBBox (toSVGGraphicsElement self)))
  
 foreign import javascript unsafe "$1[\"getCTM\"]()" js_getCTM ::
-        JSRef SVGGraphicsElement -> IO (JSRef SVGMatrix)
+        SVGGraphicsElement -> IO (Nullable SVGMatrix)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGGraphicsElement.getCTM Mozilla SVGGraphicsElement.getCTM documentation> 
 getCTM ::
@@ -43,11 +42,10 @@
          self -> m (Maybe SVGMatrix)
 getCTM self
   = liftIO
-      ((js_getCTM (unSVGGraphicsElement (toSVGGraphicsElement self))) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_getCTM (toSVGGraphicsElement self)))
  
 foreign import javascript unsafe "$1[\"getScreenCTM\"]()"
-        js_getScreenCTM :: JSRef SVGGraphicsElement -> IO (JSRef SVGMatrix)
+        js_getScreenCTM :: SVGGraphicsElement -> IO (Nullable SVGMatrix)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGGraphicsElement.getScreenCTM Mozilla SVGGraphicsElement.getScreenCTM documentation> 
 getScreenCTM ::
@@ -55,14 +53,12 @@
                self -> m (Maybe SVGMatrix)
 getScreenCTM self
   = liftIO
-      ((js_getScreenCTM
-          (unSVGGraphicsElement (toSVGGraphicsElement self)))
-         >>= fromJSRef)
+      (nullableToMaybe <$> (js_getScreenCTM (toSVGGraphicsElement self)))
  
 foreign import javascript unsafe
         "$1[\"getTransformToElement\"]($2)" js_getTransformToElement ::
-        JSRef SVGGraphicsElement ->
-          JSRef SVGElement -> IO (JSRef SVGMatrix)
+        SVGGraphicsElement ->
+          Nullable SVGElement -> IO (Nullable SVGMatrix)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGGraphicsElement.getTransformToElement Mozilla SVGGraphicsElement.getTransformToElement documentation> 
 getTransformToElement ::
@@ -70,14 +66,13 @@
                         self -> Maybe element -> m (Maybe SVGMatrix)
 getTransformToElement self element
   = liftIO
-      ((js_getTransformToElement
-          (unSVGGraphicsElement (toSVGGraphicsElement self))
-          (maybe jsNull (unSVGElement . toSVGElement) element))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_getTransformToElement (toSVGGraphicsElement self)
+            (maybeToNullable (fmap toSVGElement element))))
  
 foreign import javascript unsafe "$1[\"transform\"]"
         js_getTransform ::
-        JSRef SVGGraphicsElement -> IO (JSRef SVGAnimatedTransformList)
+        SVGGraphicsElement -> IO (Nullable SVGAnimatedTransformList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGGraphicsElement.transform Mozilla SVGGraphicsElement.transform documentation> 
 getTransform ::
@@ -85,13 +80,11 @@
                self -> m (Maybe SVGAnimatedTransformList)
 getTransform self
   = liftIO
-      ((js_getTransform
-          (unSVGGraphicsElement (toSVGGraphicsElement self)))
-         >>= fromJSRef)
+      (nullableToMaybe <$> (js_getTransform (toSVGGraphicsElement self)))
  
 foreign import javascript unsafe "$1[\"nearestViewportElement\"]"
         js_getNearestViewportElement ::
-        JSRef SVGGraphicsElement -> IO (JSRef SVGElement)
+        SVGGraphicsElement -> IO (Nullable SVGElement)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGGraphicsElement.nearestViewportElement Mozilla SVGGraphicsElement.nearestViewportElement documentation> 
 getNearestViewportElement ::
@@ -99,13 +92,12 @@
                             self -> m (Maybe SVGElement)
 getNearestViewportElement self
   = liftIO
-      ((js_getNearestViewportElement
-          (unSVGGraphicsElement (toSVGGraphicsElement self)))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_getNearestViewportElement (toSVGGraphicsElement self)))
  
 foreign import javascript unsafe "$1[\"farthestViewportElement\"]"
         js_getFarthestViewportElement ::
-        JSRef SVGGraphicsElement -> IO (JSRef SVGElement)
+        SVGGraphicsElement -> IO (Nullable SVGElement)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGGraphicsElement.farthestViewportElement Mozilla SVGGraphicsElement.farthestViewportElement documentation> 
 getFarthestViewportElement ::
@@ -113,6 +105,5 @@
                              self -> m (Maybe SVGElement)
 getFarthestViewportElement self
   = liftIO
-      ((js_getFarthestViewportElement
-          (unSVGGraphicsElement (toSVGGraphicsElement self)))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_getFarthestViewportElement (toSVGGraphicsElement self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGImageElement.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGImageElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGImageElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGImageElement.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,50 +20,44 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"x\"]" js_getX ::
-        JSRef SVGImageElement -> IO (JSRef SVGAnimatedLength)
+        SVGImageElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGImageElement.x Mozilla SVGImageElement.x documentation> 
 getX ::
      (MonadIO m) => SVGImageElement -> m (Maybe SVGAnimatedLength)
-getX self
-  = liftIO ((js_getX (unSVGImageElement self)) >>= fromJSRef)
+getX self = liftIO (nullableToMaybe <$> (js_getX (self)))
  
 foreign import javascript unsafe "$1[\"y\"]" js_getY ::
-        JSRef SVGImageElement -> IO (JSRef SVGAnimatedLength)
+        SVGImageElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGImageElement.y Mozilla SVGImageElement.y documentation> 
 getY ::
      (MonadIO m) => SVGImageElement -> m (Maybe SVGAnimatedLength)
-getY self
-  = liftIO ((js_getY (unSVGImageElement self)) >>= fromJSRef)
+getY self = liftIO (nullableToMaybe <$> (js_getY (self)))
  
 foreign import javascript unsafe "$1[\"width\"]" js_getWidth ::
-        JSRef SVGImageElement -> IO (JSRef SVGAnimatedLength)
+        SVGImageElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGImageElement.width Mozilla SVGImageElement.width documentation> 
 getWidth ::
          (MonadIO m) => SVGImageElement -> m (Maybe SVGAnimatedLength)
-getWidth self
-  = liftIO ((js_getWidth (unSVGImageElement self)) >>= fromJSRef)
+getWidth self = liftIO (nullableToMaybe <$> (js_getWidth (self)))
  
 foreign import javascript unsafe "$1[\"height\"]" js_getHeight ::
-        JSRef SVGImageElement -> IO (JSRef SVGAnimatedLength)
+        SVGImageElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGImageElement.height Mozilla SVGImageElement.height documentation> 
 getHeight ::
           (MonadIO m) => SVGImageElement -> m (Maybe SVGAnimatedLength)
-getHeight self
-  = liftIO ((js_getHeight (unSVGImageElement self)) >>= fromJSRef)
+getHeight self = liftIO (nullableToMaybe <$> (js_getHeight (self)))
  
 foreign import javascript unsafe "$1[\"preserveAspectRatio\"]"
         js_getPreserveAspectRatio ::
-        JSRef SVGImageElement -> IO (JSRef SVGAnimatedPreserveAspectRatio)
+        SVGImageElement -> IO (Nullable SVGAnimatedPreserveAspectRatio)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGImageElement.preserveAspectRatio Mozilla SVGImageElement.preserveAspectRatio documentation> 
 getPreserveAspectRatio ::
                        (MonadIO m) =>
                          SVGImageElement -> m (Maybe SVGAnimatedPreserveAspectRatio)
 getPreserveAspectRatio self
-  = liftIO
-      ((js_getPreserveAspectRatio (unSVGImageElement self)) >>=
-         fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getPreserveAspectRatio (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGLength.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGLength.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGLength.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGLength.hs
@@ -16,7 +16,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -31,24 +31,23 @@
  
 foreign import javascript unsafe
         "$1[\"newValueSpecifiedUnits\"]($2,\n$3)" js_newValueSpecifiedUnits
-        :: JSRef SVGLength -> Word -> Float -> IO ()
+        :: SVGLength -> Word -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGLength.newValueSpecifiedUnits Mozilla SVGLength.newValueSpecifiedUnits documentation> 
 newValueSpecifiedUnits ::
                        (MonadIO m) => SVGLength -> Word -> Float -> m ()
 newValueSpecifiedUnits self unitType valueInSpecifiedUnits
   = liftIO
-      (js_newValueSpecifiedUnits (unSVGLength self) unitType
-         valueInSpecifiedUnits)
+      (js_newValueSpecifiedUnits (self) unitType valueInSpecifiedUnits)
  
 foreign import javascript unsafe
         "$1[\"convertToSpecifiedUnits\"]($2)" js_convertToSpecifiedUnits ::
-        JSRef SVGLength -> Word -> IO ()
+        SVGLength -> Word -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGLength.convertToSpecifiedUnits Mozilla SVGLength.convertToSpecifiedUnits documentation> 
 convertToSpecifiedUnits :: (MonadIO m) => SVGLength -> Word -> m ()
 convertToSpecifiedUnits self unitType
-  = liftIO (js_convertToSpecifiedUnits (unSVGLength self) unitType)
+  = liftIO (js_convertToSpecifiedUnits (self) unitType)
 pattern SVG_LENGTHTYPE_UNKNOWN = 0
 pattern SVG_LENGTHTYPE_NUMBER = 1
 pattern SVG_LENGTHTYPE_PERCENTAGE = 2
@@ -62,62 +61,58 @@
 pattern SVG_LENGTHTYPE_PC = 10
  
 foreign import javascript unsafe "$1[\"unitType\"]" js_getUnitType
-        :: JSRef SVGLength -> IO Word
+        :: SVGLength -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGLength.unitType Mozilla SVGLength.unitType documentation> 
 getUnitType :: (MonadIO m) => SVGLength -> m Word
-getUnitType self = liftIO (js_getUnitType (unSVGLength self))
+getUnitType self = liftIO (js_getUnitType (self))
  
 foreign import javascript unsafe "$1[\"value\"] = $2;" js_setValue
-        :: JSRef SVGLength -> Float -> IO ()
+        :: SVGLength -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGLength.value Mozilla SVGLength.value documentation> 
 setValue :: (MonadIO m) => SVGLength -> Float -> m ()
-setValue self val = liftIO (js_setValue (unSVGLength self) val)
+setValue self val = liftIO (js_setValue (self) val)
  
 foreign import javascript unsafe "$1[\"value\"]" js_getValue ::
-        JSRef SVGLength -> IO Float
+        SVGLength -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGLength.value Mozilla SVGLength.value documentation> 
 getValue :: (MonadIO m) => SVGLength -> m Float
-getValue self = liftIO (js_getValue (unSVGLength self))
+getValue self = liftIO (js_getValue (self))
  
 foreign import javascript unsafe
         "$1[\"valueInSpecifiedUnits\"] = $2;" js_setValueInSpecifiedUnits
-        :: JSRef SVGLength -> Float -> IO ()
+        :: SVGLength -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGLength.valueInSpecifiedUnits Mozilla SVGLength.valueInSpecifiedUnits documentation> 
 setValueInSpecifiedUnits ::
                          (MonadIO m) => SVGLength -> Float -> m ()
 setValueInSpecifiedUnits self val
-  = liftIO (js_setValueInSpecifiedUnits (unSVGLength self) val)
+  = liftIO (js_setValueInSpecifiedUnits (self) val)
  
 foreign import javascript unsafe "$1[\"valueInSpecifiedUnits\"]"
-        js_getValueInSpecifiedUnits :: JSRef SVGLength -> IO Float
+        js_getValueInSpecifiedUnits :: SVGLength -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGLength.valueInSpecifiedUnits Mozilla SVGLength.valueInSpecifiedUnits documentation> 
 getValueInSpecifiedUnits :: (MonadIO m) => SVGLength -> m Float
 getValueInSpecifiedUnits self
-  = liftIO (js_getValueInSpecifiedUnits (unSVGLength self))
+  = liftIO (js_getValueInSpecifiedUnits (self))
  
 foreign import javascript unsafe "$1[\"valueAsString\"] = $2;"
-        js_setValueAsString ::
-        JSRef SVGLength -> JSRef (Maybe JSString) -> IO ()
+        js_setValueAsString :: SVGLength -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGLength.valueAsString Mozilla SVGLength.valueAsString documentation> 
 setValueAsString ::
                  (MonadIO m, ToJSString val) => SVGLength -> Maybe val -> m ()
 setValueAsString self val
-  = liftIO
-      (js_setValueAsString (unSVGLength self) (toMaybeJSString val))
+  = liftIO (js_setValueAsString (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"valueAsString\"]"
-        js_getValueAsString ::
-        JSRef SVGLength -> IO (JSRef (Maybe JSString))
+        js_getValueAsString :: SVGLength -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGLength.valueAsString Mozilla SVGLength.valueAsString documentation> 
 getValueAsString ::
                  (MonadIO m, FromJSString result) => SVGLength -> m (Maybe result)
 getValueAsString self
-  = liftIO
-      (fromMaybeJSString <$> (js_getValueAsString (unSVGLength self)))
+  = liftIO (fromMaybeJSString <$> (js_getValueAsString (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGLengthList.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGLengthList.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGLengthList.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGLengthList.hs
@@ -8,7 +8,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -22,15 +22,15 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"clear\"]()" js_clear ::
-        JSRef SVGLengthList -> IO ()
+        SVGLengthList -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGLengthList.clear Mozilla SVGLengthList.clear documentation> 
 clear :: (MonadIO m) => SVGLengthList -> m ()
-clear self = liftIO (js_clear (unSVGLengthList self))
+clear self = liftIO (js_clear (self))
  
 foreign import javascript unsafe "$1[\"initialize\"]($2)"
         js_initialize ::
-        JSRef SVGLengthList -> JSRef SVGLength -> IO (JSRef SVGLength)
+        SVGLengthList -> Nullable SVGLength -> IO (Nullable SVGLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGLengthList.initialize Mozilla SVGLengthList.initialize documentation> 
 initialize ::
@@ -38,23 +38,21 @@
              SVGLengthList -> Maybe SVGLength -> m (Maybe SVGLength)
 initialize self item
   = liftIO
-      ((js_initialize (unSVGLengthList self)
-          (maybe jsNull pToJSRef item))
-         >>= fromJSRef)
+      (nullableToMaybe <$> (js_initialize (self) (maybeToNullable item)))
  
 foreign import javascript unsafe "$1[\"getItem\"]($2)" js_getItem
-        :: JSRef SVGLengthList -> Word -> IO (JSRef SVGLength)
+        :: SVGLengthList -> Word -> IO (Nullable SVGLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGLengthList.getItem Mozilla SVGLengthList.getItem documentation> 
 getItem ::
         (MonadIO m) => SVGLengthList -> Word -> m (Maybe SVGLength)
 getItem self index
-  = liftIO ((js_getItem (unSVGLengthList self) index) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getItem (self) index))
  
 foreign import javascript unsafe "$1[\"insertItemBefore\"]($2, $3)"
         js_insertItemBefore ::
-        JSRef SVGLengthList ->
-          JSRef SVGLength -> Word -> IO (JSRef SVGLength)
+        SVGLengthList ->
+          Nullable SVGLength -> Word -> IO (Nullable SVGLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGLengthList.insertItemBefore Mozilla SVGLengthList.insertItemBefore documentation> 
 insertItemBefore ::
@@ -62,15 +60,13 @@
                    SVGLengthList -> Maybe SVGLength -> Word -> m (Maybe SVGLength)
 insertItemBefore self item index
   = liftIO
-      ((js_insertItemBefore (unSVGLengthList self)
-          (maybe jsNull pToJSRef item)
-          index)
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_insertItemBefore (self) (maybeToNullable item) index))
  
 foreign import javascript unsafe "$1[\"replaceItem\"]($2, $3)"
         js_replaceItem ::
-        JSRef SVGLengthList ->
-          JSRef SVGLength -> Word -> IO (JSRef SVGLength)
+        SVGLengthList ->
+          Nullable SVGLength -> Word -> IO (Nullable SVGLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGLengthList.replaceItem Mozilla SVGLengthList.replaceItem documentation> 
 replaceItem ::
@@ -78,25 +74,21 @@
               SVGLengthList -> Maybe SVGLength -> Word -> m (Maybe SVGLength)
 replaceItem self item index
   = liftIO
-      ((js_replaceItem (unSVGLengthList self)
-          (maybe jsNull pToJSRef item)
-          index)
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_replaceItem (self) (maybeToNullable item) index))
  
 foreign import javascript unsafe "$1[\"removeItem\"]($2)"
-        js_removeItem ::
-        JSRef SVGLengthList -> Word -> IO (JSRef SVGLength)
+        js_removeItem :: SVGLengthList -> Word -> IO (Nullable SVGLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGLengthList.removeItem Mozilla SVGLengthList.removeItem documentation> 
 removeItem ::
            (MonadIO m) => SVGLengthList -> Word -> m (Maybe SVGLength)
 removeItem self index
-  = liftIO
-      ((js_removeItem (unSVGLengthList self) index) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_removeItem (self) index))
  
 foreign import javascript unsafe "$1[\"appendItem\"]($2)"
         js_appendItem ::
-        JSRef SVGLengthList -> JSRef SVGLength -> IO (JSRef SVGLength)
+        SVGLengthList -> Nullable SVGLength -> IO (Nullable SVGLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGLengthList.appendItem Mozilla SVGLengthList.appendItem documentation> 
 appendItem ::
@@ -104,14 +96,11 @@
              SVGLengthList -> Maybe SVGLength -> m (Maybe SVGLength)
 appendItem self item
   = liftIO
-      ((js_appendItem (unSVGLengthList self)
-          (maybe jsNull pToJSRef item))
-         >>= fromJSRef)
+      (nullableToMaybe <$> (js_appendItem (self) (maybeToNullable item)))
  
 foreign import javascript unsafe "$1[\"numberOfItems\"]"
-        js_getNumberOfItems :: JSRef SVGLengthList -> IO Word
+        js_getNumberOfItems :: SVGLengthList -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGLengthList.numberOfItems Mozilla SVGLengthList.numberOfItems documentation> 
 getNumberOfItems :: (MonadIO m) => SVGLengthList -> m Word
-getNumberOfItems self
-  = liftIO (js_getNumberOfItems (unSVGLengthList self))
+getNumberOfItems self = liftIO (js_getNumberOfItems (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGLineElement.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGLineElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGLineElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGLineElement.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,37 +19,33 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"x1\"]" js_getX1 ::
-        JSRef SVGLineElement -> IO (JSRef SVGAnimatedLength)
+        SVGLineElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGLineElement.x1 Mozilla SVGLineElement.x1 documentation> 
 getX1 ::
       (MonadIO m) => SVGLineElement -> m (Maybe SVGAnimatedLength)
-getX1 self
-  = liftIO ((js_getX1 (unSVGLineElement self)) >>= fromJSRef)
+getX1 self = liftIO (nullableToMaybe <$> (js_getX1 (self)))
  
 foreign import javascript unsafe "$1[\"y1\"]" js_getY1 ::
-        JSRef SVGLineElement -> IO (JSRef SVGAnimatedLength)
+        SVGLineElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGLineElement.y1 Mozilla SVGLineElement.y1 documentation> 
 getY1 ::
       (MonadIO m) => SVGLineElement -> m (Maybe SVGAnimatedLength)
-getY1 self
-  = liftIO ((js_getY1 (unSVGLineElement self)) >>= fromJSRef)
+getY1 self = liftIO (nullableToMaybe <$> (js_getY1 (self)))
  
 foreign import javascript unsafe "$1[\"x2\"]" js_getX2 ::
-        JSRef SVGLineElement -> IO (JSRef SVGAnimatedLength)
+        SVGLineElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGLineElement.x2 Mozilla SVGLineElement.x2 documentation> 
 getX2 ::
       (MonadIO m) => SVGLineElement -> m (Maybe SVGAnimatedLength)
-getX2 self
-  = liftIO ((js_getX2 (unSVGLineElement self)) >>= fromJSRef)
+getX2 self = liftIO (nullableToMaybe <$> (js_getX2 (self)))
  
 foreign import javascript unsafe "$1[\"y2\"]" js_getY2 ::
-        JSRef SVGLineElement -> IO (JSRef SVGAnimatedLength)
+        SVGLineElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGLineElement.y2 Mozilla SVGLineElement.y2 documentation> 
 getY2 ::
       (MonadIO m) => SVGLineElement -> m (Maybe SVGAnimatedLength)
-getY2 self
-  = liftIO ((js_getY2 (unSVGLineElement self)) >>= fromJSRef)
+getY2 self = liftIO (nullableToMaybe <$> (js_getY2 (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGLinearGradientElement.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGLinearGradientElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGLinearGradientElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGLinearGradientElement.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,45 +20,37 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"x1\"]" js_getX1 ::
-        JSRef SVGLinearGradientElement -> IO (JSRef SVGAnimatedLength)
+        SVGLinearGradientElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGLinearGradientElement.x1 Mozilla SVGLinearGradientElement.x1 documentation> 
 getX1 ::
       (MonadIO m) =>
         SVGLinearGradientElement -> m (Maybe SVGAnimatedLength)
-getX1 self
-  = liftIO
-      ((js_getX1 (unSVGLinearGradientElement self)) >>= fromJSRef)
+getX1 self = liftIO (nullableToMaybe <$> (js_getX1 (self)))
  
 foreign import javascript unsafe "$1[\"y1\"]" js_getY1 ::
-        JSRef SVGLinearGradientElement -> IO (JSRef SVGAnimatedLength)
+        SVGLinearGradientElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGLinearGradientElement.y1 Mozilla SVGLinearGradientElement.y1 documentation> 
 getY1 ::
       (MonadIO m) =>
         SVGLinearGradientElement -> m (Maybe SVGAnimatedLength)
-getY1 self
-  = liftIO
-      ((js_getY1 (unSVGLinearGradientElement self)) >>= fromJSRef)
+getY1 self = liftIO (nullableToMaybe <$> (js_getY1 (self)))
  
 foreign import javascript unsafe "$1[\"x2\"]" js_getX2 ::
-        JSRef SVGLinearGradientElement -> IO (JSRef SVGAnimatedLength)
+        SVGLinearGradientElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGLinearGradientElement.x2 Mozilla SVGLinearGradientElement.x2 documentation> 
 getX2 ::
       (MonadIO m) =>
         SVGLinearGradientElement -> m (Maybe SVGAnimatedLength)
-getX2 self
-  = liftIO
-      ((js_getX2 (unSVGLinearGradientElement self)) >>= fromJSRef)
+getX2 self = liftIO (nullableToMaybe <$> (js_getX2 (self)))
  
 foreign import javascript unsafe "$1[\"y2\"]" js_getY2 ::
-        JSRef SVGLinearGradientElement -> IO (JSRef SVGAnimatedLength)
+        SVGLinearGradientElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGLinearGradientElement.y2 Mozilla SVGLinearGradientElement.y2 documentation> 
 getY2 ::
       (MonadIO m) =>
         SVGLinearGradientElement -> m (Maybe SVGAnimatedLength)
-getY2 self
-  = liftIO
-      ((js_getY2 (unSVGLinearGradientElement self)) >>= fromJSRef)
+getY2 self = liftIO (nullableToMaybe <$> (js_getY2 (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGMarkerElement.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGMarkerElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGMarkerElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGMarkerElement.hs
@@ -13,7 +13,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -27,24 +27,21 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"setOrientToAuto\"]()"
-        js_setOrientToAuto :: JSRef SVGMarkerElement -> IO ()
+        js_setOrientToAuto :: SVGMarkerElement -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGMarkerElement.setOrientToAuto Mozilla SVGMarkerElement.setOrientToAuto documentation> 
 setOrientToAuto :: (MonadIO m) => SVGMarkerElement -> m ()
-setOrientToAuto self
-  = liftIO (js_setOrientToAuto (unSVGMarkerElement self))
+setOrientToAuto self = liftIO (js_setOrientToAuto (self))
  
 foreign import javascript unsafe "$1[\"setOrientToAngle\"]($2)"
         js_setOrientToAngle ::
-        JSRef SVGMarkerElement -> JSRef SVGAngle -> IO ()
+        SVGMarkerElement -> Nullable SVGAngle -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGMarkerElement.setOrientToAngle Mozilla SVGMarkerElement.setOrientToAngle documentation> 
 setOrientToAngle ::
                  (MonadIO m) => SVGMarkerElement -> Maybe SVGAngle -> m ()
 setOrientToAngle self angle
-  = liftIO
-      (js_setOrientToAngle (unSVGMarkerElement self)
-         (maybe jsNull pToJSRef angle))
+  = liftIO (js_setOrientToAngle (self) (maybeToNullable angle))
 pattern SVG_MARKERUNITS_UNKNOWN = 0
 pattern SVG_MARKERUNITS_USERSPACEONUSE = 1
 pattern SVG_MARKERUNITS_STROKEWIDTH = 2
@@ -53,74 +50,67 @@
 pattern SVG_MARKER_ORIENT_ANGLE = 2
  
 foreign import javascript unsafe "$1[\"refX\"]" js_getRefX ::
-        JSRef SVGMarkerElement -> IO (JSRef SVGAnimatedLength)
+        SVGMarkerElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGMarkerElement.refX Mozilla SVGMarkerElement.refX documentation> 
 getRefX ::
         (MonadIO m) => SVGMarkerElement -> m (Maybe SVGAnimatedLength)
-getRefX self
-  = liftIO ((js_getRefX (unSVGMarkerElement self)) >>= fromJSRef)
+getRefX self = liftIO (nullableToMaybe <$> (js_getRefX (self)))
  
 foreign import javascript unsafe "$1[\"refY\"]" js_getRefY ::
-        JSRef SVGMarkerElement -> IO (JSRef SVGAnimatedLength)
+        SVGMarkerElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGMarkerElement.refY Mozilla SVGMarkerElement.refY documentation> 
 getRefY ::
         (MonadIO m) => SVGMarkerElement -> m (Maybe SVGAnimatedLength)
-getRefY self
-  = liftIO ((js_getRefY (unSVGMarkerElement self)) >>= fromJSRef)
+getRefY self = liftIO (nullableToMaybe <$> (js_getRefY (self)))
  
 foreign import javascript unsafe "$1[\"markerUnits\"]"
         js_getMarkerUnits ::
-        JSRef SVGMarkerElement -> IO (JSRef SVGAnimatedEnumeration)
+        SVGMarkerElement -> IO (Nullable SVGAnimatedEnumeration)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGMarkerElement.markerUnits Mozilla SVGMarkerElement.markerUnits documentation> 
 getMarkerUnits ::
                (MonadIO m) => SVGMarkerElement -> m (Maybe SVGAnimatedEnumeration)
 getMarkerUnits self
-  = liftIO
-      ((js_getMarkerUnits (unSVGMarkerElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getMarkerUnits (self)))
  
 foreign import javascript unsafe "$1[\"markerWidth\"]"
         js_getMarkerWidth ::
-        JSRef SVGMarkerElement -> IO (JSRef SVGAnimatedLength)
+        SVGMarkerElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGMarkerElement.markerWidth Mozilla SVGMarkerElement.markerWidth documentation> 
 getMarkerWidth ::
                (MonadIO m) => SVGMarkerElement -> m (Maybe SVGAnimatedLength)
 getMarkerWidth self
-  = liftIO
-      ((js_getMarkerWidth (unSVGMarkerElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getMarkerWidth (self)))
  
 foreign import javascript unsafe "$1[\"markerHeight\"]"
         js_getMarkerHeight ::
-        JSRef SVGMarkerElement -> IO (JSRef SVGAnimatedLength)
+        SVGMarkerElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGMarkerElement.markerHeight Mozilla SVGMarkerElement.markerHeight documentation> 
 getMarkerHeight ::
                 (MonadIO m) => SVGMarkerElement -> m (Maybe SVGAnimatedLength)
 getMarkerHeight self
-  = liftIO
-      ((js_getMarkerHeight (unSVGMarkerElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getMarkerHeight (self)))
  
 foreign import javascript unsafe "$1[\"orientType\"]"
         js_getOrientType ::
-        JSRef SVGMarkerElement -> IO (JSRef SVGAnimatedEnumeration)
+        SVGMarkerElement -> IO (Nullable SVGAnimatedEnumeration)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGMarkerElement.orientType Mozilla SVGMarkerElement.orientType documentation> 
 getOrientType ::
               (MonadIO m) => SVGMarkerElement -> m (Maybe SVGAnimatedEnumeration)
 getOrientType self
-  = liftIO
-      ((js_getOrientType (unSVGMarkerElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getOrientType (self)))
  
 foreign import javascript unsafe "$1[\"orientAngle\"]"
         js_getOrientAngle ::
-        JSRef SVGMarkerElement -> IO (JSRef SVGAnimatedAngle)
+        SVGMarkerElement -> IO (Nullable SVGAnimatedAngle)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGMarkerElement.orientAngle Mozilla SVGMarkerElement.orientAngle documentation> 
 getOrientAngle ::
                (MonadIO m) => SVGMarkerElement -> m (Maybe SVGAnimatedAngle)
 getOrientAngle self
-  = liftIO
-      ((js_getOrientAngle (unSVGMarkerElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getOrientAngle (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGMaskElement.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGMaskElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGMaskElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGMaskElement.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -22,57 +22,52 @@
  
 foreign import javascript unsafe "$1[\"maskUnits\"]"
         js_getMaskUnits ::
-        JSRef SVGMaskElement -> IO (JSRef SVGAnimatedEnumeration)
+        SVGMaskElement -> IO (Nullable SVGAnimatedEnumeration)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGMaskElement.maskUnits Mozilla SVGMaskElement.maskUnits documentation> 
 getMaskUnits ::
              (MonadIO m) => SVGMaskElement -> m (Maybe SVGAnimatedEnumeration)
 getMaskUnits self
-  = liftIO ((js_getMaskUnits (unSVGMaskElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getMaskUnits (self)))
  
 foreign import javascript unsafe "$1[\"maskContentUnits\"]"
         js_getMaskContentUnits ::
-        JSRef SVGMaskElement -> IO (JSRef SVGAnimatedEnumeration)
+        SVGMaskElement -> IO (Nullable SVGAnimatedEnumeration)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGMaskElement.maskContentUnits Mozilla SVGMaskElement.maskContentUnits documentation> 
 getMaskContentUnits ::
                     (MonadIO m) => SVGMaskElement -> m (Maybe SVGAnimatedEnumeration)
 getMaskContentUnits self
-  = liftIO
-      ((js_getMaskContentUnits (unSVGMaskElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getMaskContentUnits (self)))
  
 foreign import javascript unsafe "$1[\"x\"]" js_getX ::
-        JSRef SVGMaskElement -> IO (JSRef SVGAnimatedLength)
+        SVGMaskElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGMaskElement.x Mozilla SVGMaskElement.x documentation> 
 getX ::
      (MonadIO m) => SVGMaskElement -> m (Maybe SVGAnimatedLength)
-getX self
-  = liftIO ((js_getX (unSVGMaskElement self)) >>= fromJSRef)
+getX self = liftIO (nullableToMaybe <$> (js_getX (self)))
  
 foreign import javascript unsafe "$1[\"y\"]" js_getY ::
-        JSRef SVGMaskElement -> IO (JSRef SVGAnimatedLength)
+        SVGMaskElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGMaskElement.y Mozilla SVGMaskElement.y documentation> 
 getY ::
      (MonadIO m) => SVGMaskElement -> m (Maybe SVGAnimatedLength)
-getY self
-  = liftIO ((js_getY (unSVGMaskElement self)) >>= fromJSRef)
+getY self = liftIO (nullableToMaybe <$> (js_getY (self)))
  
 foreign import javascript unsafe "$1[\"width\"]" js_getWidth ::
-        JSRef SVGMaskElement -> IO (JSRef SVGAnimatedLength)
+        SVGMaskElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGMaskElement.width Mozilla SVGMaskElement.width documentation> 
 getWidth ::
          (MonadIO m) => SVGMaskElement -> m (Maybe SVGAnimatedLength)
-getWidth self
-  = liftIO ((js_getWidth (unSVGMaskElement self)) >>= fromJSRef)
+getWidth self = liftIO (nullableToMaybe <$> (js_getWidth (self)))
  
 foreign import javascript unsafe "$1[\"height\"]" js_getHeight ::
-        JSRef SVGMaskElement -> IO (JSRef SVGAnimatedLength)
+        SVGMaskElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGMaskElement.height Mozilla SVGMaskElement.height documentation> 
 getHeight ::
           (MonadIO m) => SVGMaskElement -> m (Maybe SVGAnimatedLength)
-getHeight self
-  = liftIO ((js_getHeight (unSVGMaskElement self)) >>= fromJSRef)
+getHeight self = liftIO (nullableToMaybe <$> (js_getHeight (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGMatrix.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGMatrix.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGMatrix.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGMatrix.hs
@@ -11,7 +11,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -25,184 +25,181 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"multiply\"]($2)" js_multiply
-        :: JSRef SVGMatrix -> JSRef SVGMatrix -> IO (JSRef SVGMatrix)
+        :: SVGMatrix -> Nullable SVGMatrix -> IO (Nullable SVGMatrix)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGMatrix.multiply Mozilla SVGMatrix.multiply documentation> 
 multiply ::
          (MonadIO m) => SVGMatrix -> Maybe SVGMatrix -> m (Maybe SVGMatrix)
 multiply self secondMatrix
   = liftIO
-      ((js_multiply (unSVGMatrix self)
-          (maybe jsNull pToJSRef secondMatrix))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_multiply (self) (maybeToNullable secondMatrix)))
  
 foreign import javascript unsafe "$1[\"inverse\"]()" js_inverse ::
-        JSRef SVGMatrix -> IO (JSRef SVGMatrix)
+        SVGMatrix -> IO (Nullable SVGMatrix)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGMatrix.inverse Mozilla SVGMatrix.inverse documentation> 
 inverse :: (MonadIO m) => SVGMatrix -> m (Maybe SVGMatrix)
-inverse self
-  = liftIO ((js_inverse (unSVGMatrix self)) >>= fromJSRef)
+inverse self = liftIO (nullableToMaybe <$> (js_inverse (self)))
  
 foreign import javascript unsafe "$1[\"translate\"]($2, $3)"
         js_translate ::
-        JSRef SVGMatrix -> Float -> Float -> IO (JSRef SVGMatrix)
+        SVGMatrix -> Float -> Float -> IO (Nullable SVGMatrix)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGMatrix.translate Mozilla SVGMatrix.translate documentation> 
 translate ::
           (MonadIO m) => SVGMatrix -> Float -> Float -> m (Maybe SVGMatrix)
 translate self x y
-  = liftIO ((js_translate (unSVGMatrix self) x y) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_translate (self) x y))
  
 foreign import javascript unsafe "$1[\"scale\"]($2)" js_scale ::
-        JSRef SVGMatrix -> Float -> IO (JSRef SVGMatrix)
+        SVGMatrix -> Float -> IO (Nullable SVGMatrix)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGMatrix.scale Mozilla SVGMatrix.scale documentation> 
 scale :: (MonadIO m) => SVGMatrix -> Float -> m (Maybe SVGMatrix)
 scale self scaleFactor
-  = liftIO ((js_scale (unSVGMatrix self) scaleFactor) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_scale (self) scaleFactor))
  
 foreign import javascript unsafe "$1[\"scaleNonUniform\"]($2, $3)"
         js_scaleNonUniform ::
-        JSRef SVGMatrix -> Float -> Float -> IO (JSRef SVGMatrix)
+        SVGMatrix -> Float -> Float -> IO (Nullable SVGMatrix)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGMatrix.scaleNonUniform Mozilla SVGMatrix.scaleNonUniform documentation> 
 scaleNonUniform ::
                 (MonadIO m) => SVGMatrix -> Float -> Float -> m (Maybe SVGMatrix)
 scaleNonUniform self scaleFactorX scaleFactorY
   = liftIO
-      ((js_scaleNonUniform (unSVGMatrix self) scaleFactorX scaleFactorY)
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_scaleNonUniform (self) scaleFactorX scaleFactorY))
  
 foreign import javascript unsafe "$1[\"rotate\"]($2)" js_rotate ::
-        JSRef SVGMatrix -> Float -> IO (JSRef SVGMatrix)
+        SVGMatrix -> Float -> IO (Nullable SVGMatrix)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGMatrix.rotate Mozilla SVGMatrix.rotate documentation> 
 rotate :: (MonadIO m) => SVGMatrix -> Float -> m (Maybe SVGMatrix)
 rotate self angle
-  = liftIO ((js_rotate (unSVGMatrix self) angle) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_rotate (self) angle))
  
 foreign import javascript unsafe "$1[\"rotateFromVector\"]($2, $3)"
         js_rotateFromVector ::
-        JSRef SVGMatrix -> Float -> Float -> IO (JSRef SVGMatrix)
+        SVGMatrix -> Float -> Float -> IO (Nullable SVGMatrix)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGMatrix.rotateFromVector Mozilla SVGMatrix.rotateFromVector documentation> 
 rotateFromVector ::
                  (MonadIO m) => SVGMatrix -> Float -> Float -> m (Maybe SVGMatrix)
 rotateFromVector self x y
-  = liftIO
-      ((js_rotateFromVector (unSVGMatrix self) x y) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_rotateFromVector (self) x y))
  
 foreign import javascript unsafe "$1[\"flipX\"]()" js_flipX ::
-        JSRef SVGMatrix -> IO (JSRef SVGMatrix)
+        SVGMatrix -> IO (Nullable SVGMatrix)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGMatrix.flipX Mozilla SVGMatrix.flipX documentation> 
 flipX :: (MonadIO m) => SVGMatrix -> m (Maybe SVGMatrix)
-flipX self = liftIO ((js_flipX (unSVGMatrix self)) >>= fromJSRef)
+flipX self = liftIO (nullableToMaybe <$> (js_flipX (self)))
  
 foreign import javascript unsafe "$1[\"flipY\"]()" js_flipY ::
-        JSRef SVGMatrix -> IO (JSRef SVGMatrix)
+        SVGMatrix -> IO (Nullable SVGMatrix)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGMatrix.flipY Mozilla SVGMatrix.flipY documentation> 
 flipY :: (MonadIO m) => SVGMatrix -> m (Maybe SVGMatrix)
-flipY self = liftIO ((js_flipY (unSVGMatrix self)) >>= fromJSRef)
+flipY self = liftIO (nullableToMaybe <$> (js_flipY (self)))
  
 foreign import javascript unsafe "$1[\"skewX\"]($2)" js_skewX ::
-        JSRef SVGMatrix -> Float -> IO (JSRef SVGMatrix)
+        SVGMatrix -> Float -> IO (Nullable SVGMatrix)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGMatrix.skewX Mozilla SVGMatrix.skewX documentation> 
 skewX :: (MonadIO m) => SVGMatrix -> Float -> m (Maybe SVGMatrix)
 skewX self angle
-  = liftIO ((js_skewX (unSVGMatrix self) angle) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_skewX (self) angle))
  
 foreign import javascript unsafe "$1[\"skewY\"]($2)" js_skewY ::
-        JSRef SVGMatrix -> Float -> IO (JSRef SVGMatrix)
+        SVGMatrix -> Float -> IO (Nullable SVGMatrix)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGMatrix.skewY Mozilla SVGMatrix.skewY documentation> 
 skewY :: (MonadIO m) => SVGMatrix -> Float -> m (Maybe SVGMatrix)
 skewY self angle
-  = liftIO ((js_skewY (unSVGMatrix self) angle) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_skewY (self) angle))
  
 foreign import javascript unsafe "$1[\"a\"] = $2;" js_setA ::
-        JSRef SVGMatrix -> Double -> IO ()
+        SVGMatrix -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGMatrix.a Mozilla SVGMatrix.a documentation> 
 setA :: (MonadIO m) => SVGMatrix -> Double -> m ()
-setA self val = liftIO (js_setA (unSVGMatrix self) val)
+setA self val = liftIO (js_setA (self) val)
  
 foreign import javascript unsafe "$1[\"a\"]" js_getA ::
-        JSRef SVGMatrix -> IO Double
+        SVGMatrix -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGMatrix.a Mozilla SVGMatrix.a documentation> 
 getA :: (MonadIO m) => SVGMatrix -> m Double
-getA self = liftIO (js_getA (unSVGMatrix self))
+getA self = liftIO (js_getA (self))
  
 foreign import javascript unsafe "$1[\"b\"] = $2;" js_setB ::
-        JSRef SVGMatrix -> Double -> IO ()
+        SVGMatrix -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGMatrix.b Mozilla SVGMatrix.b documentation> 
 setB :: (MonadIO m) => SVGMatrix -> Double -> m ()
-setB self val = liftIO (js_setB (unSVGMatrix self) val)
+setB self val = liftIO (js_setB (self) val)
  
 foreign import javascript unsafe "$1[\"b\"]" js_getB ::
-        JSRef SVGMatrix -> IO Double
+        SVGMatrix -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGMatrix.b Mozilla SVGMatrix.b documentation> 
 getB :: (MonadIO m) => SVGMatrix -> m Double
-getB self = liftIO (js_getB (unSVGMatrix self))
+getB self = liftIO (js_getB (self))
  
 foreign import javascript unsafe "$1[\"c\"] = $2;" js_setC ::
-        JSRef SVGMatrix -> Double -> IO ()
+        SVGMatrix -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGMatrix.c Mozilla SVGMatrix.c documentation> 
 setC :: (MonadIO m) => SVGMatrix -> Double -> m ()
-setC self val = liftIO (js_setC (unSVGMatrix self) val)
+setC self val = liftIO (js_setC (self) val)
  
 foreign import javascript unsafe "$1[\"c\"]" js_getC ::
-        JSRef SVGMatrix -> IO Double
+        SVGMatrix -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGMatrix.c Mozilla SVGMatrix.c documentation> 
 getC :: (MonadIO m) => SVGMatrix -> m Double
-getC self = liftIO (js_getC (unSVGMatrix self))
+getC self = liftIO (js_getC (self))
  
 foreign import javascript unsafe "$1[\"d\"] = $2;" js_setD ::
-        JSRef SVGMatrix -> Double -> IO ()
+        SVGMatrix -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGMatrix.d Mozilla SVGMatrix.d documentation> 
 setD :: (MonadIO m) => SVGMatrix -> Double -> m ()
-setD self val = liftIO (js_setD (unSVGMatrix self) val)
+setD self val = liftIO (js_setD (self) val)
  
 foreign import javascript unsafe "$1[\"d\"]" js_getD ::
-        JSRef SVGMatrix -> IO Double
+        SVGMatrix -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGMatrix.d Mozilla SVGMatrix.d documentation> 
 getD :: (MonadIO m) => SVGMatrix -> m Double
-getD self = liftIO (js_getD (unSVGMatrix self))
+getD self = liftIO (js_getD (self))
  
 foreign import javascript unsafe "$1[\"e\"] = $2;" js_setE ::
-        JSRef SVGMatrix -> Double -> IO ()
+        SVGMatrix -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGMatrix.e Mozilla SVGMatrix.e documentation> 
 setE :: (MonadIO m) => SVGMatrix -> Double -> m ()
-setE self val = liftIO (js_setE (unSVGMatrix self) val)
+setE self val = liftIO (js_setE (self) val)
  
 foreign import javascript unsafe "$1[\"e\"]" js_getE ::
-        JSRef SVGMatrix -> IO Double
+        SVGMatrix -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGMatrix.e Mozilla SVGMatrix.e documentation> 
 getE :: (MonadIO m) => SVGMatrix -> m Double
-getE self = liftIO (js_getE (unSVGMatrix self))
+getE self = liftIO (js_getE (self))
  
 foreign import javascript unsafe "$1[\"f\"] = $2;" js_setF ::
-        JSRef SVGMatrix -> Double -> IO ()
+        SVGMatrix -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGMatrix.f Mozilla SVGMatrix.f documentation> 
 setF :: (MonadIO m) => SVGMatrix -> Double -> m ()
-setF self val = liftIO (js_setF (unSVGMatrix self) val)
+setF self val = liftIO (js_setF (self) val)
  
 foreign import javascript unsafe "$1[\"f\"]" js_getF ::
-        JSRef SVGMatrix -> IO Double
+        SVGMatrix -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGMatrix.f Mozilla SVGMatrix.f documentation> 
 getF :: (MonadIO m) => SVGMatrix -> m Double
-getF self = liftIO (js_getF (unSVGMatrix self))
+getF self = liftIO (js_getF (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGNumber.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGNumber.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGNumber.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGNumber.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,15 +19,15 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"value\"] = $2;" js_setValue
-        :: JSRef SVGNumber -> Float -> IO ()
+        :: SVGNumber -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGNumber.value Mozilla SVGNumber.value documentation> 
 setValue :: (MonadIO m) => SVGNumber -> Float -> m ()
-setValue self val = liftIO (js_setValue (unSVGNumber self) val)
+setValue self val = liftIO (js_setValue (self) val)
  
 foreign import javascript unsafe "$1[\"value\"]" js_getValue ::
-        JSRef SVGNumber -> IO Float
+        SVGNumber -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGNumber.value Mozilla SVGNumber.value documentation> 
 getValue :: (MonadIO m) => SVGNumber -> m Float
-getValue self = liftIO (js_getValue (unSVGNumber self))
+getValue self = liftIO (js_getValue (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGNumberList.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGNumberList.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGNumberList.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGNumberList.hs
@@ -8,7 +8,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -22,15 +22,15 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"clear\"]()" js_clear ::
-        JSRef SVGNumberList -> IO ()
+        SVGNumberList -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGNumberList.clear Mozilla SVGNumberList.clear documentation> 
 clear :: (MonadIO m) => SVGNumberList -> m ()
-clear self = liftIO (js_clear (unSVGNumberList self))
+clear self = liftIO (js_clear (self))
  
 foreign import javascript unsafe "$1[\"initialize\"]($2)"
         js_initialize ::
-        JSRef SVGNumberList -> JSRef SVGNumber -> IO (JSRef SVGNumber)
+        SVGNumberList -> Nullable SVGNumber -> IO (Nullable SVGNumber)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGNumberList.initialize Mozilla SVGNumberList.initialize documentation> 
 initialize ::
@@ -38,23 +38,21 @@
              SVGNumberList -> Maybe SVGNumber -> m (Maybe SVGNumber)
 initialize self item
   = liftIO
-      ((js_initialize (unSVGNumberList self)
-          (maybe jsNull pToJSRef item))
-         >>= fromJSRef)
+      (nullableToMaybe <$> (js_initialize (self) (maybeToNullable item)))
  
 foreign import javascript unsafe "$1[\"getItem\"]($2)" js_getItem
-        :: JSRef SVGNumberList -> Word -> IO (JSRef SVGNumber)
+        :: SVGNumberList -> Word -> IO (Nullable SVGNumber)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGNumberList.getItem Mozilla SVGNumberList.getItem documentation> 
 getItem ::
         (MonadIO m) => SVGNumberList -> Word -> m (Maybe SVGNumber)
 getItem self index
-  = liftIO ((js_getItem (unSVGNumberList self) index) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getItem (self) index))
  
 foreign import javascript unsafe "$1[\"insertItemBefore\"]($2, $3)"
         js_insertItemBefore ::
-        JSRef SVGNumberList ->
-          JSRef SVGNumber -> Word -> IO (JSRef SVGNumber)
+        SVGNumberList ->
+          Nullable SVGNumber -> Word -> IO (Nullable SVGNumber)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGNumberList.insertItemBefore Mozilla SVGNumberList.insertItemBefore documentation> 
 insertItemBefore ::
@@ -62,15 +60,13 @@
                    SVGNumberList -> Maybe SVGNumber -> Word -> m (Maybe SVGNumber)
 insertItemBefore self item index
   = liftIO
-      ((js_insertItemBefore (unSVGNumberList self)
-          (maybe jsNull pToJSRef item)
-          index)
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_insertItemBefore (self) (maybeToNullable item) index))
  
 foreign import javascript unsafe "$1[\"replaceItem\"]($2, $3)"
         js_replaceItem ::
-        JSRef SVGNumberList ->
-          JSRef SVGNumber -> Word -> IO (JSRef SVGNumber)
+        SVGNumberList ->
+          Nullable SVGNumber -> Word -> IO (Nullable SVGNumber)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGNumberList.replaceItem Mozilla SVGNumberList.replaceItem documentation> 
 replaceItem ::
@@ -78,25 +74,21 @@
               SVGNumberList -> Maybe SVGNumber -> Word -> m (Maybe SVGNumber)
 replaceItem self item index
   = liftIO
-      ((js_replaceItem (unSVGNumberList self)
-          (maybe jsNull pToJSRef item)
-          index)
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_replaceItem (self) (maybeToNullable item) index))
  
 foreign import javascript unsafe "$1[\"removeItem\"]($2)"
-        js_removeItem ::
-        JSRef SVGNumberList -> Word -> IO (JSRef SVGNumber)
+        js_removeItem :: SVGNumberList -> Word -> IO (Nullable SVGNumber)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGNumberList.removeItem Mozilla SVGNumberList.removeItem documentation> 
 removeItem ::
            (MonadIO m) => SVGNumberList -> Word -> m (Maybe SVGNumber)
 removeItem self index
-  = liftIO
-      ((js_removeItem (unSVGNumberList self) index) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_removeItem (self) index))
  
 foreign import javascript unsafe "$1[\"appendItem\"]($2)"
         js_appendItem ::
-        JSRef SVGNumberList -> JSRef SVGNumber -> IO (JSRef SVGNumber)
+        SVGNumberList -> Nullable SVGNumber -> IO (Nullable SVGNumber)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGNumberList.appendItem Mozilla SVGNumberList.appendItem documentation> 
 appendItem ::
@@ -104,14 +96,11 @@
              SVGNumberList -> Maybe SVGNumber -> m (Maybe SVGNumber)
 appendItem self item
   = liftIO
-      ((js_appendItem (unSVGNumberList self)
-          (maybe jsNull pToJSRef item))
-         >>= fromJSRef)
+      (nullableToMaybe <$> (js_appendItem (self) (maybeToNullable item)))
  
 foreign import javascript unsafe "$1[\"numberOfItems\"]"
-        js_getNumberOfItems :: JSRef SVGNumberList -> IO Word
+        js_getNumberOfItems :: SVGNumberList -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGNumberList.numberOfItems Mozilla SVGNumberList.numberOfItems documentation> 
 getNumberOfItems :: (MonadIO m) => SVGNumberList -> m Word
-getNumberOfItems self
-  = liftIO (js_getNumberOfItems (unSVGNumberList self))
+getNumberOfItems self = liftIO (js_getNumberOfItems (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGPaint.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGPaint.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGPaint.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGPaint.hs
@@ -13,7 +13,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -27,16 +27,15 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"setUri\"]($2)" js_setUri ::
-        JSRef SVGPaint -> JSString -> IO ()
+        SVGPaint -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPaint.setUri Mozilla SVGPaint.setUri documentation> 
 setUri :: (MonadIO m, ToJSString uri) => SVGPaint -> uri -> m ()
-setUri self uri
-  = liftIO (js_setUri (unSVGPaint self) (toJSString uri))
+setUri self uri = liftIO (js_setUri (self) (toJSString uri))
  
 foreign import javascript unsafe "$1[\"setPaint\"]($2, $3, $4, $5)"
         js_setPaint ::
-        JSRef SVGPaint -> Word -> JSString -> JSString -> JSString -> IO ()
+        SVGPaint -> Word -> JSString -> JSString -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPaint.setPaint Mozilla SVGPaint.setPaint documentation> 
 setPaint ::
@@ -45,7 +44,7 @@
            SVGPaint -> Word -> uri -> rgbColor -> iccColor -> m ()
 setPaint self paintType uri rgbColor iccColor
   = liftIO
-      (js_setPaint (unSVGPaint self) paintType (toJSString uri)
+      (js_setPaint (self) paintType (toJSString uri)
          (toJSString rgbColor)
          (toJSString iccColor))
 pattern SVG_PAINTTYPE_UNKNOWN = 0
@@ -60,16 +59,15 @@
 pattern SVG_PAINTTYPE_URI = 107
  
 foreign import javascript unsafe "$1[\"paintType\"]"
-        js_getPaintType :: JSRef SVGPaint -> IO Word
+        js_getPaintType :: SVGPaint -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPaint.paintType Mozilla SVGPaint.paintType documentation> 
 getPaintType :: (MonadIO m) => SVGPaint -> m Word
-getPaintType self = liftIO (js_getPaintType (unSVGPaint self))
+getPaintType self = liftIO (js_getPaintType (self))
  
 foreign import javascript unsafe "$1[\"uri\"]" js_getUri ::
-        JSRef SVGPaint -> IO JSString
+        SVGPaint -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPaint.uri Mozilla SVGPaint.uri documentation> 
 getUri :: (MonadIO m, FromJSString result) => SVGPaint -> m result
-getUri self
-  = liftIO (fromJSString <$> (js_getUri (unSVGPaint self)))
+getUri self = liftIO (fromJSString <$> (js_getUri (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGPathElement.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGPathElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGPathElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGPathElement.hs
@@ -41,7 +41,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -55,51 +55,48 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"getTotalLength\"]()"
-        js_getTotalLength :: JSRef SVGPathElement -> IO Float
+        js_getTotalLength :: SVGPathElement -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathElement.getTotalLength Mozilla SVGPathElement.getTotalLength documentation> 
 getTotalLength :: (MonadIO m) => SVGPathElement -> m Float
-getTotalLength self
-  = liftIO (js_getTotalLength (unSVGPathElement self))
+getTotalLength self = liftIO (js_getTotalLength (self))
  
 foreign import javascript unsafe "$1[\"getPointAtLength\"]($2)"
         js_getPointAtLength ::
-        JSRef SVGPathElement -> Float -> IO (JSRef SVGPoint)
+        SVGPathElement -> Float -> IO (Nullable SVGPoint)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathElement.getPointAtLength Mozilla SVGPathElement.getPointAtLength documentation> 
 getPointAtLength ::
                  (MonadIO m) => SVGPathElement -> Float -> m (Maybe SVGPoint)
 getPointAtLength self distance
   = liftIO
-      ((js_getPointAtLength (unSVGPathElement self) distance) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_getPointAtLength (self) distance))
  
 foreign import javascript unsafe "$1[\"getPathSegAtLength\"]($2)"
-        js_getPathSegAtLength :: JSRef SVGPathElement -> Float -> IO Word
+        js_getPathSegAtLength :: SVGPathElement -> Float -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathElement.getPathSegAtLength Mozilla SVGPathElement.getPathSegAtLength documentation> 
 getPathSegAtLength ::
                    (MonadIO m) => SVGPathElement -> Float -> m Word
 getPathSegAtLength self distance
-  = liftIO (js_getPathSegAtLength (unSVGPathElement self) distance)
+  = liftIO (js_getPathSegAtLength (self) distance)
  
 foreign import javascript unsafe
         "$1[\"createSVGPathSegClosePath\"]()" js_createSVGPathSegClosePath
-        :: JSRef SVGPathElement -> IO (JSRef SVGPathSegClosePath)
+        :: SVGPathElement -> IO (Nullable SVGPathSegClosePath)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathElement.createSVGPathSegClosePath Mozilla SVGPathElement.createSVGPathSegClosePath documentation> 
 createSVGPathSegClosePath ::
                           (MonadIO m) => SVGPathElement -> m (Maybe SVGPathSegClosePath)
 createSVGPathSegClosePath self
   = liftIO
-      ((js_createSVGPathSegClosePath (unSVGPathElement self)) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_createSVGPathSegClosePath (self)))
  
 foreign import javascript unsafe
         "$1[\"createSVGPathSegMovetoAbs\"]($2,\n$3)"
         js_createSVGPathSegMovetoAbs ::
-        JSRef SVGPathElement ->
-          Float -> Float -> IO (JSRef SVGPathSegMovetoAbs)
+        SVGPathElement ->
+          Float -> Float -> IO (Nullable SVGPathSegMovetoAbs)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathElement.createSVGPathSegMovetoAbs Mozilla SVGPathElement.createSVGPathSegMovetoAbs documentation> 
 createSVGPathSegMovetoAbs ::
@@ -107,14 +104,13 @@
                             SVGPathElement -> Float -> Float -> m (Maybe SVGPathSegMovetoAbs)
 createSVGPathSegMovetoAbs self x y
   = liftIO
-      ((js_createSVGPathSegMovetoAbs (unSVGPathElement self) x y) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_createSVGPathSegMovetoAbs (self) x y))
  
 foreign import javascript unsafe
         "$1[\"createSVGPathSegMovetoRel\"]($2,\n$3)"
         js_createSVGPathSegMovetoRel ::
-        JSRef SVGPathElement ->
-          Float -> Float -> IO (JSRef SVGPathSegMovetoRel)
+        SVGPathElement ->
+          Float -> Float -> IO (Nullable SVGPathSegMovetoRel)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathElement.createSVGPathSegMovetoRel Mozilla SVGPathElement.createSVGPathSegMovetoRel documentation> 
 createSVGPathSegMovetoRel ::
@@ -122,14 +118,13 @@
                             SVGPathElement -> Float -> Float -> m (Maybe SVGPathSegMovetoRel)
 createSVGPathSegMovetoRel self x y
   = liftIO
-      ((js_createSVGPathSegMovetoRel (unSVGPathElement self) x y) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_createSVGPathSegMovetoRel (self) x y))
  
 foreign import javascript unsafe
         "$1[\"createSVGPathSegLinetoAbs\"]($2,\n$3)"
         js_createSVGPathSegLinetoAbs ::
-        JSRef SVGPathElement ->
-          Float -> Float -> IO (JSRef SVGPathSegLinetoAbs)
+        SVGPathElement ->
+          Float -> Float -> IO (Nullable SVGPathSegLinetoAbs)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathElement.createSVGPathSegLinetoAbs Mozilla SVGPathElement.createSVGPathSegLinetoAbs documentation> 
 createSVGPathSegLinetoAbs ::
@@ -137,14 +132,13 @@
                             SVGPathElement -> Float -> Float -> m (Maybe SVGPathSegLinetoAbs)
 createSVGPathSegLinetoAbs self x y
   = liftIO
-      ((js_createSVGPathSegLinetoAbs (unSVGPathElement self) x y) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_createSVGPathSegLinetoAbs (self) x y))
  
 foreign import javascript unsafe
         "$1[\"createSVGPathSegLinetoRel\"]($2,\n$3)"
         js_createSVGPathSegLinetoRel ::
-        JSRef SVGPathElement ->
-          Float -> Float -> IO (JSRef SVGPathSegLinetoRel)
+        SVGPathElement ->
+          Float -> Float -> IO (Nullable SVGPathSegLinetoRel)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathElement.createSVGPathSegLinetoRel Mozilla SVGPathElement.createSVGPathSegLinetoRel documentation> 
 createSVGPathSegLinetoRel ::
@@ -152,17 +146,16 @@
                             SVGPathElement -> Float -> Float -> m (Maybe SVGPathSegLinetoRel)
 createSVGPathSegLinetoRel self x y
   = liftIO
-      ((js_createSVGPathSegLinetoRel (unSVGPathElement self) x y) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_createSVGPathSegLinetoRel (self) x y))
  
 foreign import javascript unsafe
         "$1[\"createSVGPathSegCurvetoCubicAbs\"]($2,\n$3, $4, $5, $6, $7)"
         js_createSVGPathSegCurvetoCubicAbs ::
-        JSRef SVGPathElement ->
+        SVGPathElement ->
           Float ->
             Float ->
               Float ->
-                Float -> Float -> Float -> IO (JSRef SVGPathSegCurvetoCubicAbs)
+                Float -> Float -> Float -> IO (Nullable SVGPathSegCurvetoCubicAbs)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathElement.createSVGPathSegCurvetoCubicAbs Mozilla SVGPathElement.createSVGPathSegCurvetoCubicAbs documentation> 
 createSVGPathSegCurvetoCubicAbs ::
@@ -175,20 +168,17 @@
                                             Float -> Float -> m (Maybe SVGPathSegCurvetoCubicAbs)
 createSVGPathSegCurvetoCubicAbs self x y x1 y1 x2 y2
   = liftIO
-      ((js_createSVGPathSegCurvetoCubicAbs (unSVGPathElement self) x y x1
-          y1
-          x2
-          y2)
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createSVGPathSegCurvetoCubicAbs (self) x y x1 y1 x2 y2))
  
 foreign import javascript unsafe
         "$1[\"createSVGPathSegCurvetoCubicRel\"]($2,\n$3, $4, $5, $6, $7)"
         js_createSVGPathSegCurvetoCubicRel ::
-        JSRef SVGPathElement ->
+        SVGPathElement ->
           Float ->
             Float ->
               Float ->
-                Float -> Float -> Float -> IO (JSRef SVGPathSegCurvetoCubicRel)
+                Float -> Float -> Float -> IO (Nullable SVGPathSegCurvetoCubicRel)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathElement.createSVGPathSegCurvetoCubicRel Mozilla SVGPathElement.createSVGPathSegCurvetoCubicRel documentation> 
 createSVGPathSegCurvetoCubicRel ::
@@ -201,18 +191,16 @@
                                             Float -> Float -> m (Maybe SVGPathSegCurvetoCubicRel)
 createSVGPathSegCurvetoCubicRel self x y x1 y1 x2 y2
   = liftIO
-      ((js_createSVGPathSegCurvetoCubicRel (unSVGPathElement self) x y x1
-          y1
-          x2
-          y2)
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createSVGPathSegCurvetoCubicRel (self) x y x1 y1 x2 y2))
  
 foreign import javascript unsafe
         "$1[\"createSVGPathSegCurvetoQuadraticAbs\"]($2,\n$3, $4, $5)"
         js_createSVGPathSegCurvetoQuadraticAbs ::
-        JSRef SVGPathElement ->
+        SVGPathElement ->
           Float ->
-            Float -> Float -> Float -> IO (JSRef SVGPathSegCurvetoQuadraticAbs)
+            Float ->
+              Float -> Float -> IO (Nullable SVGPathSegCurvetoQuadraticAbs)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathElement.createSVGPathSegCurvetoQuadraticAbs Mozilla SVGPathElement.createSVGPathSegCurvetoQuadraticAbs documentation> 
 createSVGPathSegCurvetoQuadraticAbs ::
@@ -224,18 +212,16 @@
                                               Float -> m (Maybe SVGPathSegCurvetoQuadraticAbs)
 createSVGPathSegCurvetoQuadraticAbs self x y x1 y1
   = liftIO
-      ((js_createSVGPathSegCurvetoQuadraticAbs (unSVGPathElement self) x
-          y
-          x1
-          y1)
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createSVGPathSegCurvetoQuadraticAbs (self) x y x1 y1))
  
 foreign import javascript unsafe
         "$1[\"createSVGPathSegCurvetoQuadraticRel\"]($2,\n$3, $4, $5)"
         js_createSVGPathSegCurvetoQuadraticRel ::
-        JSRef SVGPathElement ->
+        SVGPathElement ->
           Float ->
-            Float -> Float -> Float -> IO (JSRef SVGPathSegCurvetoQuadraticRel)
+            Float ->
+              Float -> Float -> IO (Nullable SVGPathSegCurvetoQuadraticRel)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathElement.createSVGPathSegCurvetoQuadraticRel Mozilla SVGPathElement.createSVGPathSegCurvetoQuadraticRel documentation> 
 createSVGPathSegCurvetoQuadraticRel ::
@@ -247,20 +233,17 @@
                                               Float -> m (Maybe SVGPathSegCurvetoQuadraticRel)
 createSVGPathSegCurvetoQuadraticRel self x y x1 y1
   = liftIO
-      ((js_createSVGPathSegCurvetoQuadraticRel (unSVGPathElement self) x
-          y
-          x1
-          y1)
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createSVGPathSegCurvetoQuadraticRel (self) x y x1 y1))
  
 foreign import javascript unsafe
         "$1[\"createSVGPathSegArcAbs\"]($2,\n$3, $4, $5, $6, $7, $8)"
         js_createSVGPathSegArcAbs ::
-        JSRef SVGPathElement ->
+        SVGPathElement ->
           Float ->
             Float ->
               Float ->
-                Float -> Float -> Bool -> Bool -> IO (JSRef SVGPathSegArcAbs)
+                Float -> Float -> Bool -> Bool -> IO (Nullable SVGPathSegArcAbs)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathElement.createSVGPathSegArcAbs Mozilla SVGPathElement.createSVGPathSegArcAbs documentation> 
 createSVGPathSegArcAbs ::
@@ -272,19 +255,18 @@
                                  Float -> Float -> Bool -> Bool -> m (Maybe SVGPathSegArcAbs)
 createSVGPathSegArcAbs self x y r1 r2 angle largeArcFlag sweepFlag
   = liftIO
-      ((js_createSVGPathSegArcAbs (unSVGPathElement self) x y r1 r2 angle
-          largeArcFlag
-          sweepFlag)
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createSVGPathSegArcAbs (self) x y r1 r2 angle largeArcFlag
+            sweepFlag))
  
 foreign import javascript unsafe
         "$1[\"createSVGPathSegArcRel\"]($2,\n$3, $4, $5, $6, $7, $8)"
         js_createSVGPathSegArcRel ::
-        JSRef SVGPathElement ->
+        SVGPathElement ->
           Float ->
             Float ->
               Float ->
-                Float -> Float -> Bool -> Bool -> IO (JSRef SVGPathSegArcRel)
+                Float -> Float -> Bool -> Bool -> IO (Nullable SVGPathSegArcRel)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathElement.createSVGPathSegArcRel Mozilla SVGPathElement.createSVGPathSegArcRel documentation> 
 createSVGPathSegArcRel ::
@@ -296,16 +278,15 @@
                                  Float -> Float -> Bool -> Bool -> m (Maybe SVGPathSegArcRel)
 createSVGPathSegArcRel self x y r1 r2 angle largeArcFlag sweepFlag
   = liftIO
-      ((js_createSVGPathSegArcRel (unSVGPathElement self) x y r1 r2 angle
-          largeArcFlag
-          sweepFlag)
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createSVGPathSegArcRel (self) x y r1 r2 angle largeArcFlag
+            sweepFlag))
  
 foreign import javascript unsafe
         "$1[\"createSVGPathSegLinetoHorizontalAbs\"]($2)"
         js_createSVGPathSegLinetoHorizontalAbs ::
-        JSRef SVGPathElement ->
-          Float -> IO (JSRef SVGPathSegLinetoHorizontalAbs)
+        SVGPathElement ->
+          Float -> IO (Nullable SVGPathSegLinetoHorizontalAbs)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathElement.createSVGPathSegLinetoHorizontalAbs Mozilla SVGPathElement.createSVGPathSegLinetoHorizontalAbs documentation> 
 createSVGPathSegLinetoHorizontalAbs ::
@@ -314,14 +295,14 @@
                                         Float -> m (Maybe SVGPathSegLinetoHorizontalAbs)
 createSVGPathSegLinetoHorizontalAbs self x
   = liftIO
-      ((js_createSVGPathSegLinetoHorizontalAbs (unSVGPathElement self) x)
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createSVGPathSegLinetoHorizontalAbs (self) x))
  
 foreign import javascript unsafe
         "$1[\"createSVGPathSegLinetoHorizontalRel\"]($2)"
         js_createSVGPathSegLinetoHorizontalRel ::
-        JSRef SVGPathElement ->
-          Float -> IO (JSRef SVGPathSegLinetoHorizontalRel)
+        SVGPathElement ->
+          Float -> IO (Nullable SVGPathSegLinetoHorizontalRel)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathElement.createSVGPathSegLinetoHorizontalRel Mozilla SVGPathElement.createSVGPathSegLinetoHorizontalRel documentation> 
 createSVGPathSegLinetoHorizontalRel ::
@@ -330,14 +311,14 @@
                                         Float -> m (Maybe SVGPathSegLinetoHorizontalRel)
 createSVGPathSegLinetoHorizontalRel self x
   = liftIO
-      ((js_createSVGPathSegLinetoHorizontalRel (unSVGPathElement self) x)
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createSVGPathSegLinetoHorizontalRel (self) x))
  
 foreign import javascript unsafe
         "$1[\"createSVGPathSegLinetoVerticalAbs\"]($2)"
         js_createSVGPathSegLinetoVerticalAbs ::
-        JSRef SVGPathElement ->
-          Float -> IO (JSRef SVGPathSegLinetoVerticalAbs)
+        SVGPathElement ->
+          Float -> IO (Nullable SVGPathSegLinetoVerticalAbs)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathElement.createSVGPathSegLinetoVerticalAbs Mozilla SVGPathElement.createSVGPathSegLinetoVerticalAbs documentation> 
 createSVGPathSegLinetoVerticalAbs ::
@@ -345,14 +326,14 @@
                                     SVGPathElement -> Float -> m (Maybe SVGPathSegLinetoVerticalAbs)
 createSVGPathSegLinetoVerticalAbs self y
   = liftIO
-      ((js_createSVGPathSegLinetoVerticalAbs (unSVGPathElement self) y)
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createSVGPathSegLinetoVerticalAbs (self) y))
  
 foreign import javascript unsafe
         "$1[\"createSVGPathSegLinetoVerticalRel\"]($2)"
         js_createSVGPathSegLinetoVerticalRel ::
-        JSRef SVGPathElement ->
-          Float -> IO (JSRef SVGPathSegLinetoVerticalRel)
+        SVGPathElement ->
+          Float -> IO (Nullable SVGPathSegLinetoVerticalRel)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathElement.createSVGPathSegLinetoVerticalRel Mozilla SVGPathElement.createSVGPathSegLinetoVerticalRel documentation> 
 createSVGPathSegLinetoVerticalRel ::
@@ -360,16 +341,16 @@
                                     SVGPathElement -> Float -> m (Maybe SVGPathSegLinetoVerticalRel)
 createSVGPathSegLinetoVerticalRel self y
   = liftIO
-      ((js_createSVGPathSegLinetoVerticalRel (unSVGPathElement self) y)
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createSVGPathSegLinetoVerticalRel (self) y))
  
 foreign import javascript unsafe
         "$1[\"createSVGPathSegCurvetoCubicSmoothAbs\"]($2,\n$3, $4, $5)"
         js_createSVGPathSegCurvetoCubicSmoothAbs ::
-        JSRef SVGPathElement ->
+        SVGPathElement ->
           Float ->
             Float ->
-              Float -> Float -> IO (JSRef SVGPathSegCurvetoCubicSmoothAbs)
+              Float -> Float -> IO (Nullable SVGPathSegCurvetoCubicSmoothAbs)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathElement.createSVGPathSegCurvetoCubicSmoothAbs Mozilla SVGPathElement.createSVGPathSegCurvetoCubicSmoothAbs documentation> 
 createSVGPathSegCurvetoCubicSmoothAbs ::
@@ -381,20 +362,16 @@
                                                 Float -> m (Maybe SVGPathSegCurvetoCubicSmoothAbs)
 createSVGPathSegCurvetoCubicSmoothAbs self x y x2 y2
   = liftIO
-      ((js_createSVGPathSegCurvetoCubicSmoothAbs (unSVGPathElement self)
-          x
-          y
-          x2
-          y2)
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createSVGPathSegCurvetoCubicSmoothAbs (self) x y x2 y2))
  
 foreign import javascript unsafe
         "$1[\"createSVGPathSegCurvetoCubicSmoothRel\"]($2,\n$3, $4, $5)"
         js_createSVGPathSegCurvetoCubicSmoothRel ::
-        JSRef SVGPathElement ->
+        SVGPathElement ->
           Float ->
             Float ->
-              Float -> Float -> IO (JSRef SVGPathSegCurvetoCubicSmoothRel)
+              Float -> Float -> IO (Nullable SVGPathSegCurvetoCubicSmoothRel)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathElement.createSVGPathSegCurvetoCubicSmoothRel Mozilla SVGPathElement.createSVGPathSegCurvetoCubicSmoothRel documentation> 
 createSVGPathSegCurvetoCubicSmoothRel ::
@@ -406,18 +383,14 @@
                                                 Float -> m (Maybe SVGPathSegCurvetoCubicSmoothRel)
 createSVGPathSegCurvetoCubicSmoothRel self x y x2 y2
   = liftIO
-      ((js_createSVGPathSegCurvetoCubicSmoothRel (unSVGPathElement self)
-          x
-          y
-          x2
-          y2)
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createSVGPathSegCurvetoCubicSmoothRel (self) x y x2 y2))
  
 foreign import javascript unsafe
         "$1[\"createSVGPathSegCurvetoQuadraticSmoothAbs\"]($2,\n$3)"
         js_createSVGPathSegCurvetoQuadraticSmoothAbs ::
-        JSRef SVGPathElement ->
-          Float -> Float -> IO (JSRef SVGPathSegCurvetoQuadraticSmoothAbs)
+        SVGPathElement ->
+          Float -> Float -> IO (Nullable SVGPathSegCurvetoQuadraticSmoothAbs)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathElement.createSVGPathSegCurvetoQuadraticSmoothAbs Mozilla SVGPathElement.createSVGPathSegCurvetoQuadraticSmoothAbs documentation> 
 createSVGPathSegCurvetoQuadraticSmoothAbs ::
@@ -428,17 +401,14 @@
                                                   m (Maybe SVGPathSegCurvetoQuadraticSmoothAbs)
 createSVGPathSegCurvetoQuadraticSmoothAbs self x y
   = liftIO
-      ((js_createSVGPathSegCurvetoQuadraticSmoothAbs
-          (unSVGPathElement self)
-          x
-          y)
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createSVGPathSegCurvetoQuadraticSmoothAbs (self) x y))
  
 foreign import javascript unsafe
         "$1[\"createSVGPathSegCurvetoQuadraticSmoothRel\"]($2,\n$3)"
         js_createSVGPathSegCurvetoQuadraticSmoothRel ::
-        JSRef SVGPathElement ->
-          Float -> Float -> IO (JSRef SVGPathSegCurvetoQuadraticSmoothRel)
+        SVGPathElement ->
+          Float -> Float -> IO (Nullable SVGPathSegCurvetoQuadraticSmoothRel)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathElement.createSVGPathSegCurvetoQuadraticSmoothRel Mozilla SVGPathElement.createSVGPathSegCurvetoQuadraticSmoothRel documentation> 
 createSVGPathSegCurvetoQuadraticSmoothRel ::
@@ -449,65 +419,56 @@
                                                   m (Maybe SVGPathSegCurvetoQuadraticSmoothRel)
 createSVGPathSegCurvetoQuadraticSmoothRel self x y
   = liftIO
-      ((js_createSVGPathSegCurvetoQuadraticSmoothRel
-          (unSVGPathElement self)
-          x
-          y)
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createSVGPathSegCurvetoQuadraticSmoothRel (self) x y))
  
 foreign import javascript unsafe "$1[\"pathLength\"]"
         js_getPathLength ::
-        JSRef SVGPathElement -> IO (JSRef SVGAnimatedNumber)
+        SVGPathElement -> IO (Nullable SVGAnimatedNumber)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathElement.pathLength Mozilla SVGPathElement.pathLength documentation> 
 getPathLength ::
               (MonadIO m) => SVGPathElement -> m (Maybe SVGAnimatedNumber)
 getPathLength self
-  = liftIO ((js_getPathLength (unSVGPathElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getPathLength (self)))
  
 foreign import javascript unsafe "$1[\"pathSegList\"]"
-        js_getPathSegList ::
-        JSRef SVGPathElement -> IO (JSRef SVGPathSegList)
+        js_getPathSegList :: SVGPathElement -> IO (Nullable SVGPathSegList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathElement.pathSegList Mozilla SVGPathElement.pathSegList documentation> 
 getPathSegList ::
                (MonadIO m) => SVGPathElement -> m (Maybe SVGPathSegList)
 getPathSegList self
-  = liftIO
-      ((js_getPathSegList (unSVGPathElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getPathSegList (self)))
  
 foreign import javascript unsafe "$1[\"normalizedPathSegList\"]"
         js_getNormalizedPathSegList ::
-        JSRef SVGPathElement -> IO (JSRef SVGPathSegList)
+        SVGPathElement -> IO (Nullable SVGPathSegList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathElement.normalizedPathSegList Mozilla SVGPathElement.normalizedPathSegList documentation> 
 getNormalizedPathSegList ::
                          (MonadIO m) => SVGPathElement -> m (Maybe SVGPathSegList)
 getNormalizedPathSegList self
-  = liftIO
-      ((js_getNormalizedPathSegList (unSVGPathElement self)) >>=
-         fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getNormalizedPathSegList (self)))
  
 foreign import javascript unsafe "$1[\"animatedPathSegList\"]"
         js_getAnimatedPathSegList ::
-        JSRef SVGPathElement -> IO (JSRef SVGPathSegList)
+        SVGPathElement -> IO (Nullable SVGPathSegList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathElement.animatedPathSegList Mozilla SVGPathElement.animatedPathSegList documentation> 
 getAnimatedPathSegList ::
                        (MonadIO m) => SVGPathElement -> m (Maybe SVGPathSegList)
 getAnimatedPathSegList self
-  = liftIO
-      ((js_getAnimatedPathSegList (unSVGPathElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getAnimatedPathSegList (self)))
  
 foreign import javascript unsafe
         "$1[\"animatedNormalizedPathSegList\"]"
         js_getAnimatedNormalizedPathSegList ::
-        JSRef SVGPathElement -> IO (JSRef SVGPathSegList)
+        SVGPathElement -> IO (Nullable SVGPathSegList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathElement.animatedNormalizedPathSegList Mozilla SVGPathElement.animatedNormalizedPathSegList documentation> 
 getAnimatedNormalizedPathSegList ::
                                  (MonadIO m) => SVGPathElement -> m (Maybe SVGPathSegList)
 getAnimatedNormalizedPathSegList self
   = liftIO
-      ((js_getAnimatedNormalizedPathSegList (unSVGPathElement self)) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_getAnimatedNormalizedPathSegList (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGPathSeg.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGPathSeg.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGPathSeg.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGPathSeg.hs
@@ -21,7 +21,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -55,15 +55,15 @@
 pattern PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL = 19
  
 foreign import javascript unsafe "$1[\"pathSegType\"]"
-        js_getPathSegType :: JSRef SVGPathSeg -> IO Word
+        js_getPathSegType :: SVGPathSeg -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSeg.pathSegType Mozilla SVGPathSeg.pathSegType documentation> 
 getPathSegType :: (MonadIO m, IsSVGPathSeg self) => self -> m Word
 getPathSegType self
-  = liftIO (js_getPathSegType (unSVGPathSeg (toSVGPathSeg self)))
+  = liftIO (js_getPathSegType (toSVGPathSeg self))
  
 foreign import javascript unsafe "$1[\"pathSegTypeAsLetter\"]"
-        js_getPathSegTypeAsLetter :: JSRef SVGPathSeg -> IO JSString
+        js_getPathSegTypeAsLetter :: SVGPathSeg -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSeg.pathSegTypeAsLetter Mozilla SVGPathSeg.pathSegTypeAsLetter documentation> 
 getPathSegTypeAsLetter ::
@@ -71,5 +71,4 @@
                          self -> m result
 getPathSegTypeAsLetter self
   = liftIO
-      (fromJSString <$>
-         (js_getPathSegTypeAsLetter (unSVGPathSeg (toSVGPathSeg self))))
+      (fromJSString <$> (js_getPathSegTypeAsLetter (toSVGPathSeg self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegArcAbs.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegArcAbs.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegArcAbs.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegArcAbs.hs
@@ -9,7 +9,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -23,104 +23,99 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"x\"] = $2;" js_setX ::
-        JSRef SVGPathSegArcAbs -> Float -> IO ()
+        SVGPathSegArcAbs -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegArcAbs.x Mozilla SVGPathSegArcAbs.x documentation> 
 setX :: (MonadIO m) => SVGPathSegArcAbs -> Float -> m ()
-setX self val = liftIO (js_setX (unSVGPathSegArcAbs self) val)
+setX self val = liftIO (js_setX (self) val)
  
 foreign import javascript unsafe "$1[\"x\"]" js_getX ::
-        JSRef SVGPathSegArcAbs -> IO Float
+        SVGPathSegArcAbs -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegArcAbs.x Mozilla SVGPathSegArcAbs.x documentation> 
 getX :: (MonadIO m) => SVGPathSegArcAbs -> m Float
-getX self = liftIO (js_getX (unSVGPathSegArcAbs self))
+getX self = liftIO (js_getX (self))
  
 foreign import javascript unsafe "$1[\"y\"] = $2;" js_setY ::
-        JSRef SVGPathSegArcAbs -> Float -> IO ()
+        SVGPathSegArcAbs -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegArcAbs.y Mozilla SVGPathSegArcAbs.y documentation> 
 setY :: (MonadIO m) => SVGPathSegArcAbs -> Float -> m ()
-setY self val = liftIO (js_setY (unSVGPathSegArcAbs self) val)
+setY self val = liftIO (js_setY (self) val)
  
 foreign import javascript unsafe "$1[\"y\"]" js_getY ::
-        JSRef SVGPathSegArcAbs -> IO Float
+        SVGPathSegArcAbs -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegArcAbs.y Mozilla SVGPathSegArcAbs.y documentation> 
 getY :: (MonadIO m) => SVGPathSegArcAbs -> m Float
-getY self = liftIO (js_getY (unSVGPathSegArcAbs self))
+getY self = liftIO (js_getY (self))
  
 foreign import javascript unsafe "$1[\"r1\"] = $2;" js_setR1 ::
-        JSRef SVGPathSegArcAbs -> Float -> IO ()
+        SVGPathSegArcAbs -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegArcAbs.r1 Mozilla SVGPathSegArcAbs.r1 documentation> 
 setR1 :: (MonadIO m) => SVGPathSegArcAbs -> Float -> m ()
-setR1 self val = liftIO (js_setR1 (unSVGPathSegArcAbs self) val)
+setR1 self val = liftIO (js_setR1 (self) val)
  
 foreign import javascript unsafe "$1[\"r1\"]" js_getR1 ::
-        JSRef SVGPathSegArcAbs -> IO Float
+        SVGPathSegArcAbs -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegArcAbs.r1 Mozilla SVGPathSegArcAbs.r1 documentation> 
 getR1 :: (MonadIO m) => SVGPathSegArcAbs -> m Float
-getR1 self = liftIO (js_getR1 (unSVGPathSegArcAbs self))
+getR1 self = liftIO (js_getR1 (self))
  
 foreign import javascript unsafe "$1[\"r2\"] = $2;" js_setR2 ::
-        JSRef SVGPathSegArcAbs -> Float -> IO ()
+        SVGPathSegArcAbs -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegArcAbs.r2 Mozilla SVGPathSegArcAbs.r2 documentation> 
 setR2 :: (MonadIO m) => SVGPathSegArcAbs -> Float -> m ()
-setR2 self val = liftIO (js_setR2 (unSVGPathSegArcAbs self) val)
+setR2 self val = liftIO (js_setR2 (self) val)
  
 foreign import javascript unsafe "$1[\"r2\"]" js_getR2 ::
-        JSRef SVGPathSegArcAbs -> IO Float
+        SVGPathSegArcAbs -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegArcAbs.r2 Mozilla SVGPathSegArcAbs.r2 documentation> 
 getR2 :: (MonadIO m) => SVGPathSegArcAbs -> m Float
-getR2 self = liftIO (js_getR2 (unSVGPathSegArcAbs self))
+getR2 self = liftIO (js_getR2 (self))
  
 foreign import javascript unsafe "$1[\"angle\"] = $2;" js_setAngle
-        :: JSRef SVGPathSegArcAbs -> Float -> IO ()
+        :: SVGPathSegArcAbs -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegArcAbs.angle Mozilla SVGPathSegArcAbs.angle documentation> 
 setAngle :: (MonadIO m) => SVGPathSegArcAbs -> Float -> m ()
-setAngle self val
-  = liftIO (js_setAngle (unSVGPathSegArcAbs self) val)
+setAngle self val = liftIO (js_setAngle (self) val)
  
 foreign import javascript unsafe "$1[\"angle\"]" js_getAngle ::
-        JSRef SVGPathSegArcAbs -> IO Float
+        SVGPathSegArcAbs -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegArcAbs.angle Mozilla SVGPathSegArcAbs.angle documentation> 
 getAngle :: (MonadIO m) => SVGPathSegArcAbs -> m Float
-getAngle self = liftIO (js_getAngle (unSVGPathSegArcAbs self))
+getAngle self = liftIO (js_getAngle (self))
  
 foreign import javascript unsafe "$1[\"largeArcFlag\"] = $2;"
-        js_setLargeArcFlag :: JSRef SVGPathSegArcAbs -> Bool -> IO ()
+        js_setLargeArcFlag :: SVGPathSegArcAbs -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegArcAbs.largeArcFlag Mozilla SVGPathSegArcAbs.largeArcFlag documentation> 
 setLargeArcFlag :: (MonadIO m) => SVGPathSegArcAbs -> Bool -> m ()
-setLargeArcFlag self val
-  = liftIO (js_setLargeArcFlag (unSVGPathSegArcAbs self) val)
+setLargeArcFlag self val = liftIO (js_setLargeArcFlag (self) val)
  
 foreign import javascript unsafe "($1[\"largeArcFlag\"] ? 1 : 0)"
-        js_getLargeArcFlag :: JSRef SVGPathSegArcAbs -> IO Bool
+        js_getLargeArcFlag :: SVGPathSegArcAbs -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegArcAbs.largeArcFlag Mozilla SVGPathSegArcAbs.largeArcFlag documentation> 
 getLargeArcFlag :: (MonadIO m) => SVGPathSegArcAbs -> m Bool
-getLargeArcFlag self
-  = liftIO (js_getLargeArcFlag (unSVGPathSegArcAbs self))
+getLargeArcFlag self = liftIO (js_getLargeArcFlag (self))
  
 foreign import javascript unsafe "$1[\"sweepFlag\"] = $2;"
-        js_setSweepFlag :: JSRef SVGPathSegArcAbs -> Bool -> IO ()
+        js_setSweepFlag :: SVGPathSegArcAbs -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegArcAbs.sweepFlag Mozilla SVGPathSegArcAbs.sweepFlag documentation> 
 setSweepFlag :: (MonadIO m) => SVGPathSegArcAbs -> Bool -> m ()
-setSweepFlag self val
-  = liftIO (js_setSweepFlag (unSVGPathSegArcAbs self) val)
+setSweepFlag self val = liftIO (js_setSweepFlag (self) val)
  
 foreign import javascript unsafe "($1[\"sweepFlag\"] ? 1 : 0)"
-        js_getSweepFlag :: JSRef SVGPathSegArcAbs -> IO Bool
+        js_getSweepFlag :: SVGPathSegArcAbs -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegArcAbs.sweepFlag Mozilla SVGPathSegArcAbs.sweepFlag documentation> 
 getSweepFlag :: (MonadIO m) => SVGPathSegArcAbs -> m Bool
-getSweepFlag self
-  = liftIO (js_getSweepFlag (unSVGPathSegArcAbs self))
+getSweepFlag self = liftIO (js_getSweepFlag (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegArcRel.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegArcRel.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegArcRel.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegArcRel.hs
@@ -9,7 +9,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -23,104 +23,99 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"x\"] = $2;" js_setX ::
-        JSRef SVGPathSegArcRel -> Float -> IO ()
+        SVGPathSegArcRel -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegArcRel.x Mozilla SVGPathSegArcRel.x documentation> 
 setX :: (MonadIO m) => SVGPathSegArcRel -> Float -> m ()
-setX self val = liftIO (js_setX (unSVGPathSegArcRel self) val)
+setX self val = liftIO (js_setX (self) val)
  
 foreign import javascript unsafe "$1[\"x\"]" js_getX ::
-        JSRef SVGPathSegArcRel -> IO Float
+        SVGPathSegArcRel -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegArcRel.x Mozilla SVGPathSegArcRel.x documentation> 
 getX :: (MonadIO m) => SVGPathSegArcRel -> m Float
-getX self = liftIO (js_getX (unSVGPathSegArcRel self))
+getX self = liftIO (js_getX (self))
  
 foreign import javascript unsafe "$1[\"y\"] = $2;" js_setY ::
-        JSRef SVGPathSegArcRel -> Float -> IO ()
+        SVGPathSegArcRel -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegArcRel.y Mozilla SVGPathSegArcRel.y documentation> 
 setY :: (MonadIO m) => SVGPathSegArcRel -> Float -> m ()
-setY self val = liftIO (js_setY (unSVGPathSegArcRel self) val)
+setY self val = liftIO (js_setY (self) val)
  
 foreign import javascript unsafe "$1[\"y\"]" js_getY ::
-        JSRef SVGPathSegArcRel -> IO Float
+        SVGPathSegArcRel -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegArcRel.y Mozilla SVGPathSegArcRel.y documentation> 
 getY :: (MonadIO m) => SVGPathSegArcRel -> m Float
-getY self = liftIO (js_getY (unSVGPathSegArcRel self))
+getY self = liftIO (js_getY (self))
  
 foreign import javascript unsafe "$1[\"r1\"] = $2;" js_setR1 ::
-        JSRef SVGPathSegArcRel -> Float -> IO ()
+        SVGPathSegArcRel -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegArcRel.r1 Mozilla SVGPathSegArcRel.r1 documentation> 
 setR1 :: (MonadIO m) => SVGPathSegArcRel -> Float -> m ()
-setR1 self val = liftIO (js_setR1 (unSVGPathSegArcRel self) val)
+setR1 self val = liftIO (js_setR1 (self) val)
  
 foreign import javascript unsafe "$1[\"r1\"]" js_getR1 ::
-        JSRef SVGPathSegArcRel -> IO Float
+        SVGPathSegArcRel -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegArcRel.r1 Mozilla SVGPathSegArcRel.r1 documentation> 
 getR1 :: (MonadIO m) => SVGPathSegArcRel -> m Float
-getR1 self = liftIO (js_getR1 (unSVGPathSegArcRel self))
+getR1 self = liftIO (js_getR1 (self))
  
 foreign import javascript unsafe "$1[\"r2\"] = $2;" js_setR2 ::
-        JSRef SVGPathSegArcRel -> Float -> IO ()
+        SVGPathSegArcRel -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegArcRel.r2 Mozilla SVGPathSegArcRel.r2 documentation> 
 setR2 :: (MonadIO m) => SVGPathSegArcRel -> Float -> m ()
-setR2 self val = liftIO (js_setR2 (unSVGPathSegArcRel self) val)
+setR2 self val = liftIO (js_setR2 (self) val)
  
 foreign import javascript unsafe "$1[\"r2\"]" js_getR2 ::
-        JSRef SVGPathSegArcRel -> IO Float
+        SVGPathSegArcRel -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegArcRel.r2 Mozilla SVGPathSegArcRel.r2 documentation> 
 getR2 :: (MonadIO m) => SVGPathSegArcRel -> m Float
-getR2 self = liftIO (js_getR2 (unSVGPathSegArcRel self))
+getR2 self = liftIO (js_getR2 (self))
  
 foreign import javascript unsafe "$1[\"angle\"] = $2;" js_setAngle
-        :: JSRef SVGPathSegArcRel -> Float -> IO ()
+        :: SVGPathSegArcRel -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegArcRel.angle Mozilla SVGPathSegArcRel.angle documentation> 
 setAngle :: (MonadIO m) => SVGPathSegArcRel -> Float -> m ()
-setAngle self val
-  = liftIO (js_setAngle (unSVGPathSegArcRel self) val)
+setAngle self val = liftIO (js_setAngle (self) val)
  
 foreign import javascript unsafe "$1[\"angle\"]" js_getAngle ::
-        JSRef SVGPathSegArcRel -> IO Float
+        SVGPathSegArcRel -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegArcRel.angle Mozilla SVGPathSegArcRel.angle documentation> 
 getAngle :: (MonadIO m) => SVGPathSegArcRel -> m Float
-getAngle self = liftIO (js_getAngle (unSVGPathSegArcRel self))
+getAngle self = liftIO (js_getAngle (self))
  
 foreign import javascript unsafe "$1[\"largeArcFlag\"] = $2;"
-        js_setLargeArcFlag :: JSRef SVGPathSegArcRel -> Bool -> IO ()
+        js_setLargeArcFlag :: SVGPathSegArcRel -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegArcRel.largeArcFlag Mozilla SVGPathSegArcRel.largeArcFlag documentation> 
 setLargeArcFlag :: (MonadIO m) => SVGPathSegArcRel -> Bool -> m ()
-setLargeArcFlag self val
-  = liftIO (js_setLargeArcFlag (unSVGPathSegArcRel self) val)
+setLargeArcFlag self val = liftIO (js_setLargeArcFlag (self) val)
  
 foreign import javascript unsafe "($1[\"largeArcFlag\"] ? 1 : 0)"
-        js_getLargeArcFlag :: JSRef SVGPathSegArcRel -> IO Bool
+        js_getLargeArcFlag :: SVGPathSegArcRel -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegArcRel.largeArcFlag Mozilla SVGPathSegArcRel.largeArcFlag documentation> 
 getLargeArcFlag :: (MonadIO m) => SVGPathSegArcRel -> m Bool
-getLargeArcFlag self
-  = liftIO (js_getLargeArcFlag (unSVGPathSegArcRel self))
+getLargeArcFlag self = liftIO (js_getLargeArcFlag (self))
  
 foreign import javascript unsafe "$1[\"sweepFlag\"] = $2;"
-        js_setSweepFlag :: JSRef SVGPathSegArcRel -> Bool -> IO ()
+        js_setSweepFlag :: SVGPathSegArcRel -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegArcRel.sweepFlag Mozilla SVGPathSegArcRel.sweepFlag documentation> 
 setSweepFlag :: (MonadIO m) => SVGPathSegArcRel -> Bool -> m ()
-setSweepFlag self val
-  = liftIO (js_setSweepFlag (unSVGPathSegArcRel self) val)
+setSweepFlag self val = liftIO (js_setSweepFlag (self) val)
  
 foreign import javascript unsafe "($1[\"sweepFlag\"] ? 1 : 0)"
-        js_getSweepFlag :: JSRef SVGPathSegArcRel -> IO Bool
+        js_getSweepFlag :: SVGPathSegArcRel -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegArcRel.sweepFlag Mozilla SVGPathSegArcRel.sweepFlag documentation> 
 getSweepFlag :: (MonadIO m) => SVGPathSegArcRel -> m Bool
-getSweepFlag self
-  = liftIO (js_getSweepFlag (unSVGPathSegArcRel self))
+getSweepFlag self = liftIO (js_getSweepFlag (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegCurvetoCubicAbs.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegCurvetoCubicAbs.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegCurvetoCubicAbs.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegCurvetoCubicAbs.hs
@@ -8,7 +8,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -22,91 +22,85 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"x\"] = $2;" js_setX ::
-        JSRef SVGPathSegCurvetoCubicAbs -> Float -> IO ()
+        SVGPathSegCurvetoCubicAbs -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoCubicAbs.x Mozilla SVGPathSegCurvetoCubicAbs.x documentation> 
 setX :: (MonadIO m) => SVGPathSegCurvetoCubicAbs -> Float -> m ()
-setX self val
-  = liftIO (js_setX (unSVGPathSegCurvetoCubicAbs self) val)
+setX self val = liftIO (js_setX (self) val)
  
 foreign import javascript unsafe "$1[\"x\"]" js_getX ::
-        JSRef SVGPathSegCurvetoCubicAbs -> IO Float
+        SVGPathSegCurvetoCubicAbs -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoCubicAbs.x Mozilla SVGPathSegCurvetoCubicAbs.x documentation> 
 getX :: (MonadIO m) => SVGPathSegCurvetoCubicAbs -> m Float
-getX self = liftIO (js_getX (unSVGPathSegCurvetoCubicAbs self))
+getX self = liftIO (js_getX (self))
  
 foreign import javascript unsafe "$1[\"y\"] = $2;" js_setY ::
-        JSRef SVGPathSegCurvetoCubicAbs -> Float -> IO ()
+        SVGPathSegCurvetoCubicAbs -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoCubicAbs.y Mozilla SVGPathSegCurvetoCubicAbs.y documentation> 
 setY :: (MonadIO m) => SVGPathSegCurvetoCubicAbs -> Float -> m ()
-setY self val
-  = liftIO (js_setY (unSVGPathSegCurvetoCubicAbs self) val)
+setY self val = liftIO (js_setY (self) val)
  
 foreign import javascript unsafe "$1[\"y\"]" js_getY ::
-        JSRef SVGPathSegCurvetoCubicAbs -> IO Float
+        SVGPathSegCurvetoCubicAbs -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoCubicAbs.y Mozilla SVGPathSegCurvetoCubicAbs.y documentation> 
 getY :: (MonadIO m) => SVGPathSegCurvetoCubicAbs -> m Float
-getY self = liftIO (js_getY (unSVGPathSegCurvetoCubicAbs self))
+getY self = liftIO (js_getY (self))
  
 foreign import javascript unsafe "$1[\"x1\"] = $2;" js_setX1 ::
-        JSRef SVGPathSegCurvetoCubicAbs -> Float -> IO ()
+        SVGPathSegCurvetoCubicAbs -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoCubicAbs.x1 Mozilla SVGPathSegCurvetoCubicAbs.x1 documentation> 
 setX1 :: (MonadIO m) => SVGPathSegCurvetoCubicAbs -> Float -> m ()
-setX1 self val
-  = liftIO (js_setX1 (unSVGPathSegCurvetoCubicAbs self) val)
+setX1 self val = liftIO (js_setX1 (self) val)
  
 foreign import javascript unsafe "$1[\"x1\"]" js_getX1 ::
-        JSRef SVGPathSegCurvetoCubicAbs -> IO Float
+        SVGPathSegCurvetoCubicAbs -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoCubicAbs.x1 Mozilla SVGPathSegCurvetoCubicAbs.x1 documentation> 
 getX1 :: (MonadIO m) => SVGPathSegCurvetoCubicAbs -> m Float
-getX1 self = liftIO (js_getX1 (unSVGPathSegCurvetoCubicAbs self))
+getX1 self = liftIO (js_getX1 (self))
  
 foreign import javascript unsafe "$1[\"y1\"] = $2;" js_setY1 ::
-        JSRef SVGPathSegCurvetoCubicAbs -> Float -> IO ()
+        SVGPathSegCurvetoCubicAbs -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoCubicAbs.y1 Mozilla SVGPathSegCurvetoCubicAbs.y1 documentation> 
 setY1 :: (MonadIO m) => SVGPathSegCurvetoCubicAbs -> Float -> m ()
-setY1 self val
-  = liftIO (js_setY1 (unSVGPathSegCurvetoCubicAbs self) val)
+setY1 self val = liftIO (js_setY1 (self) val)
  
 foreign import javascript unsafe "$1[\"y1\"]" js_getY1 ::
-        JSRef SVGPathSegCurvetoCubicAbs -> IO Float
+        SVGPathSegCurvetoCubicAbs -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoCubicAbs.y1 Mozilla SVGPathSegCurvetoCubicAbs.y1 documentation> 
 getY1 :: (MonadIO m) => SVGPathSegCurvetoCubicAbs -> m Float
-getY1 self = liftIO (js_getY1 (unSVGPathSegCurvetoCubicAbs self))
+getY1 self = liftIO (js_getY1 (self))
  
 foreign import javascript unsafe "$1[\"x2\"] = $2;" js_setX2 ::
-        JSRef SVGPathSegCurvetoCubicAbs -> Float -> IO ()
+        SVGPathSegCurvetoCubicAbs -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoCubicAbs.x2 Mozilla SVGPathSegCurvetoCubicAbs.x2 documentation> 
 setX2 :: (MonadIO m) => SVGPathSegCurvetoCubicAbs -> Float -> m ()
-setX2 self val
-  = liftIO (js_setX2 (unSVGPathSegCurvetoCubicAbs self) val)
+setX2 self val = liftIO (js_setX2 (self) val)
  
 foreign import javascript unsafe "$1[\"x2\"]" js_getX2 ::
-        JSRef SVGPathSegCurvetoCubicAbs -> IO Float
+        SVGPathSegCurvetoCubicAbs -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoCubicAbs.x2 Mozilla SVGPathSegCurvetoCubicAbs.x2 documentation> 
 getX2 :: (MonadIO m) => SVGPathSegCurvetoCubicAbs -> m Float
-getX2 self = liftIO (js_getX2 (unSVGPathSegCurvetoCubicAbs self))
+getX2 self = liftIO (js_getX2 (self))
  
 foreign import javascript unsafe "$1[\"y2\"] = $2;" js_setY2 ::
-        JSRef SVGPathSegCurvetoCubicAbs -> Float -> IO ()
+        SVGPathSegCurvetoCubicAbs -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoCubicAbs.y2 Mozilla SVGPathSegCurvetoCubicAbs.y2 documentation> 
 setY2 :: (MonadIO m) => SVGPathSegCurvetoCubicAbs -> Float -> m ()
-setY2 self val
-  = liftIO (js_setY2 (unSVGPathSegCurvetoCubicAbs self) val)
+setY2 self val = liftIO (js_setY2 (self) val)
  
 foreign import javascript unsafe "$1[\"y2\"]" js_getY2 ::
-        JSRef SVGPathSegCurvetoCubicAbs -> IO Float
+        SVGPathSegCurvetoCubicAbs -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoCubicAbs.y2 Mozilla SVGPathSegCurvetoCubicAbs.y2 documentation> 
 getY2 :: (MonadIO m) => SVGPathSegCurvetoCubicAbs -> m Float
-getY2 self = liftIO (js_getY2 (unSVGPathSegCurvetoCubicAbs self))
+getY2 self = liftIO (js_getY2 (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegCurvetoCubicRel.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegCurvetoCubicRel.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegCurvetoCubicRel.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegCurvetoCubicRel.hs
@@ -8,7 +8,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -22,91 +22,85 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"x\"] = $2;" js_setX ::
-        JSRef SVGPathSegCurvetoCubicRel -> Float -> IO ()
+        SVGPathSegCurvetoCubicRel -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoCubicRel.x Mozilla SVGPathSegCurvetoCubicRel.x documentation> 
 setX :: (MonadIO m) => SVGPathSegCurvetoCubicRel -> Float -> m ()
-setX self val
-  = liftIO (js_setX (unSVGPathSegCurvetoCubicRel self) val)
+setX self val = liftIO (js_setX (self) val)
  
 foreign import javascript unsafe "$1[\"x\"]" js_getX ::
-        JSRef SVGPathSegCurvetoCubicRel -> IO Float
+        SVGPathSegCurvetoCubicRel -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoCubicRel.x Mozilla SVGPathSegCurvetoCubicRel.x documentation> 
 getX :: (MonadIO m) => SVGPathSegCurvetoCubicRel -> m Float
-getX self = liftIO (js_getX (unSVGPathSegCurvetoCubicRel self))
+getX self = liftIO (js_getX (self))
  
 foreign import javascript unsafe "$1[\"y\"] = $2;" js_setY ::
-        JSRef SVGPathSegCurvetoCubicRel -> Float -> IO ()
+        SVGPathSegCurvetoCubicRel -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoCubicRel.y Mozilla SVGPathSegCurvetoCubicRel.y documentation> 
 setY :: (MonadIO m) => SVGPathSegCurvetoCubicRel -> Float -> m ()
-setY self val
-  = liftIO (js_setY (unSVGPathSegCurvetoCubicRel self) val)
+setY self val = liftIO (js_setY (self) val)
  
 foreign import javascript unsafe "$1[\"y\"]" js_getY ::
-        JSRef SVGPathSegCurvetoCubicRel -> IO Float
+        SVGPathSegCurvetoCubicRel -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoCubicRel.y Mozilla SVGPathSegCurvetoCubicRel.y documentation> 
 getY :: (MonadIO m) => SVGPathSegCurvetoCubicRel -> m Float
-getY self = liftIO (js_getY (unSVGPathSegCurvetoCubicRel self))
+getY self = liftIO (js_getY (self))
  
 foreign import javascript unsafe "$1[\"x1\"] = $2;" js_setX1 ::
-        JSRef SVGPathSegCurvetoCubicRel -> Float -> IO ()
+        SVGPathSegCurvetoCubicRel -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoCubicRel.x1 Mozilla SVGPathSegCurvetoCubicRel.x1 documentation> 
 setX1 :: (MonadIO m) => SVGPathSegCurvetoCubicRel -> Float -> m ()
-setX1 self val
-  = liftIO (js_setX1 (unSVGPathSegCurvetoCubicRel self) val)
+setX1 self val = liftIO (js_setX1 (self) val)
  
 foreign import javascript unsafe "$1[\"x1\"]" js_getX1 ::
-        JSRef SVGPathSegCurvetoCubicRel -> IO Float
+        SVGPathSegCurvetoCubicRel -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoCubicRel.x1 Mozilla SVGPathSegCurvetoCubicRel.x1 documentation> 
 getX1 :: (MonadIO m) => SVGPathSegCurvetoCubicRel -> m Float
-getX1 self = liftIO (js_getX1 (unSVGPathSegCurvetoCubicRel self))
+getX1 self = liftIO (js_getX1 (self))
  
 foreign import javascript unsafe "$1[\"y1\"] = $2;" js_setY1 ::
-        JSRef SVGPathSegCurvetoCubicRel -> Float -> IO ()
+        SVGPathSegCurvetoCubicRel -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoCubicRel.y1 Mozilla SVGPathSegCurvetoCubicRel.y1 documentation> 
 setY1 :: (MonadIO m) => SVGPathSegCurvetoCubicRel -> Float -> m ()
-setY1 self val
-  = liftIO (js_setY1 (unSVGPathSegCurvetoCubicRel self) val)
+setY1 self val = liftIO (js_setY1 (self) val)
  
 foreign import javascript unsafe "$1[\"y1\"]" js_getY1 ::
-        JSRef SVGPathSegCurvetoCubicRel -> IO Float
+        SVGPathSegCurvetoCubicRel -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoCubicRel.y1 Mozilla SVGPathSegCurvetoCubicRel.y1 documentation> 
 getY1 :: (MonadIO m) => SVGPathSegCurvetoCubicRel -> m Float
-getY1 self = liftIO (js_getY1 (unSVGPathSegCurvetoCubicRel self))
+getY1 self = liftIO (js_getY1 (self))
  
 foreign import javascript unsafe "$1[\"x2\"] = $2;" js_setX2 ::
-        JSRef SVGPathSegCurvetoCubicRel -> Float -> IO ()
+        SVGPathSegCurvetoCubicRel -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoCubicRel.x2 Mozilla SVGPathSegCurvetoCubicRel.x2 documentation> 
 setX2 :: (MonadIO m) => SVGPathSegCurvetoCubicRel -> Float -> m ()
-setX2 self val
-  = liftIO (js_setX2 (unSVGPathSegCurvetoCubicRel self) val)
+setX2 self val = liftIO (js_setX2 (self) val)
  
 foreign import javascript unsafe "$1[\"x2\"]" js_getX2 ::
-        JSRef SVGPathSegCurvetoCubicRel -> IO Float
+        SVGPathSegCurvetoCubicRel -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoCubicRel.x2 Mozilla SVGPathSegCurvetoCubicRel.x2 documentation> 
 getX2 :: (MonadIO m) => SVGPathSegCurvetoCubicRel -> m Float
-getX2 self = liftIO (js_getX2 (unSVGPathSegCurvetoCubicRel self))
+getX2 self = liftIO (js_getX2 (self))
  
 foreign import javascript unsafe "$1[\"y2\"] = $2;" js_setY2 ::
-        JSRef SVGPathSegCurvetoCubicRel -> Float -> IO ()
+        SVGPathSegCurvetoCubicRel -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoCubicRel.y2 Mozilla SVGPathSegCurvetoCubicRel.y2 documentation> 
 setY2 :: (MonadIO m) => SVGPathSegCurvetoCubicRel -> Float -> m ()
-setY2 self val
-  = liftIO (js_setY2 (unSVGPathSegCurvetoCubicRel self) val)
+setY2 self val = liftIO (js_setY2 (self) val)
  
 foreign import javascript unsafe "$1[\"y2\"]" js_getY2 ::
-        JSRef SVGPathSegCurvetoCubicRel -> IO Float
+        SVGPathSegCurvetoCubicRel -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoCubicRel.y2 Mozilla SVGPathSegCurvetoCubicRel.y2 documentation> 
 getY2 :: (MonadIO m) => SVGPathSegCurvetoCubicRel -> m Float
-getY2 self = liftIO (js_getY2 (unSVGPathSegCurvetoCubicRel self))
+getY2 self = liftIO (js_getY2 (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegCurvetoCubicSmoothAbs.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegCurvetoCubicSmoothAbs.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegCurvetoCubicSmoothAbs.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegCurvetoCubicSmoothAbs.hs
@@ -8,7 +8,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -22,69 +22,61 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"x\"] = $2;" js_setX ::
-        JSRef SVGPathSegCurvetoCubicSmoothAbs -> Float -> IO ()
+        SVGPathSegCurvetoCubicSmoothAbs -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoCubicSmoothAbs.x Mozilla SVGPathSegCurvetoCubicSmoothAbs.x documentation> 
 setX ::
      (MonadIO m) => SVGPathSegCurvetoCubicSmoothAbs -> Float -> m ()
-setX self val
-  = liftIO (js_setX (unSVGPathSegCurvetoCubicSmoothAbs self) val)
+setX self val = liftIO (js_setX (self) val)
  
 foreign import javascript unsafe "$1[\"x\"]" js_getX ::
-        JSRef SVGPathSegCurvetoCubicSmoothAbs -> IO Float
+        SVGPathSegCurvetoCubicSmoothAbs -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoCubicSmoothAbs.x Mozilla SVGPathSegCurvetoCubicSmoothAbs.x documentation> 
 getX :: (MonadIO m) => SVGPathSegCurvetoCubicSmoothAbs -> m Float
-getX self
-  = liftIO (js_getX (unSVGPathSegCurvetoCubicSmoothAbs self))
+getX self = liftIO (js_getX (self))
  
 foreign import javascript unsafe "$1[\"y\"] = $2;" js_setY ::
-        JSRef SVGPathSegCurvetoCubicSmoothAbs -> Float -> IO ()
+        SVGPathSegCurvetoCubicSmoothAbs -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoCubicSmoothAbs.y Mozilla SVGPathSegCurvetoCubicSmoothAbs.y documentation> 
 setY ::
      (MonadIO m) => SVGPathSegCurvetoCubicSmoothAbs -> Float -> m ()
-setY self val
-  = liftIO (js_setY (unSVGPathSegCurvetoCubicSmoothAbs self) val)
+setY self val = liftIO (js_setY (self) val)
  
 foreign import javascript unsafe "$1[\"y\"]" js_getY ::
-        JSRef SVGPathSegCurvetoCubicSmoothAbs -> IO Float
+        SVGPathSegCurvetoCubicSmoothAbs -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoCubicSmoothAbs.y Mozilla SVGPathSegCurvetoCubicSmoothAbs.y documentation> 
 getY :: (MonadIO m) => SVGPathSegCurvetoCubicSmoothAbs -> m Float
-getY self
-  = liftIO (js_getY (unSVGPathSegCurvetoCubicSmoothAbs self))
+getY self = liftIO (js_getY (self))
  
 foreign import javascript unsafe "$1[\"x2\"] = $2;" js_setX2 ::
-        JSRef SVGPathSegCurvetoCubicSmoothAbs -> Float -> IO ()
+        SVGPathSegCurvetoCubicSmoothAbs -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoCubicSmoothAbs.x2 Mozilla SVGPathSegCurvetoCubicSmoothAbs.x2 documentation> 
 setX2 ::
       (MonadIO m) => SVGPathSegCurvetoCubicSmoothAbs -> Float -> m ()
-setX2 self val
-  = liftIO (js_setX2 (unSVGPathSegCurvetoCubicSmoothAbs self) val)
+setX2 self val = liftIO (js_setX2 (self) val)
  
 foreign import javascript unsafe "$1[\"x2\"]" js_getX2 ::
-        JSRef SVGPathSegCurvetoCubicSmoothAbs -> IO Float
+        SVGPathSegCurvetoCubicSmoothAbs -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoCubicSmoothAbs.x2 Mozilla SVGPathSegCurvetoCubicSmoothAbs.x2 documentation> 
 getX2 :: (MonadIO m) => SVGPathSegCurvetoCubicSmoothAbs -> m Float
-getX2 self
-  = liftIO (js_getX2 (unSVGPathSegCurvetoCubicSmoothAbs self))
+getX2 self = liftIO (js_getX2 (self))
  
 foreign import javascript unsafe "$1[\"y2\"] = $2;" js_setY2 ::
-        JSRef SVGPathSegCurvetoCubicSmoothAbs -> Float -> IO ()
+        SVGPathSegCurvetoCubicSmoothAbs -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoCubicSmoothAbs.y2 Mozilla SVGPathSegCurvetoCubicSmoothAbs.y2 documentation> 
 setY2 ::
       (MonadIO m) => SVGPathSegCurvetoCubicSmoothAbs -> Float -> m ()
-setY2 self val
-  = liftIO (js_setY2 (unSVGPathSegCurvetoCubicSmoothAbs self) val)
+setY2 self val = liftIO (js_setY2 (self) val)
  
 foreign import javascript unsafe "$1[\"y2\"]" js_getY2 ::
-        JSRef SVGPathSegCurvetoCubicSmoothAbs -> IO Float
+        SVGPathSegCurvetoCubicSmoothAbs -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoCubicSmoothAbs.y2 Mozilla SVGPathSegCurvetoCubicSmoothAbs.y2 documentation> 
 getY2 :: (MonadIO m) => SVGPathSegCurvetoCubicSmoothAbs -> m Float
-getY2 self
-  = liftIO (js_getY2 (unSVGPathSegCurvetoCubicSmoothAbs self))
+getY2 self = liftIO (js_getY2 (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegCurvetoCubicSmoothRel.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegCurvetoCubicSmoothRel.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegCurvetoCubicSmoothRel.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegCurvetoCubicSmoothRel.hs
@@ -8,7 +8,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -22,69 +22,61 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"x\"] = $2;" js_setX ::
-        JSRef SVGPathSegCurvetoCubicSmoothRel -> Float -> IO ()
+        SVGPathSegCurvetoCubicSmoothRel -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoCubicSmoothRel.x Mozilla SVGPathSegCurvetoCubicSmoothRel.x documentation> 
 setX ::
      (MonadIO m) => SVGPathSegCurvetoCubicSmoothRel -> Float -> m ()
-setX self val
-  = liftIO (js_setX (unSVGPathSegCurvetoCubicSmoothRel self) val)
+setX self val = liftIO (js_setX (self) val)
  
 foreign import javascript unsafe "$1[\"x\"]" js_getX ::
-        JSRef SVGPathSegCurvetoCubicSmoothRel -> IO Float
+        SVGPathSegCurvetoCubicSmoothRel -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoCubicSmoothRel.x Mozilla SVGPathSegCurvetoCubicSmoothRel.x documentation> 
 getX :: (MonadIO m) => SVGPathSegCurvetoCubicSmoothRel -> m Float
-getX self
-  = liftIO (js_getX (unSVGPathSegCurvetoCubicSmoothRel self))
+getX self = liftIO (js_getX (self))
  
 foreign import javascript unsafe "$1[\"y\"] = $2;" js_setY ::
-        JSRef SVGPathSegCurvetoCubicSmoothRel -> Float -> IO ()
+        SVGPathSegCurvetoCubicSmoothRel -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoCubicSmoothRel.y Mozilla SVGPathSegCurvetoCubicSmoothRel.y documentation> 
 setY ::
      (MonadIO m) => SVGPathSegCurvetoCubicSmoothRel -> Float -> m ()
-setY self val
-  = liftIO (js_setY (unSVGPathSegCurvetoCubicSmoothRel self) val)
+setY self val = liftIO (js_setY (self) val)
  
 foreign import javascript unsafe "$1[\"y\"]" js_getY ::
-        JSRef SVGPathSegCurvetoCubicSmoothRel -> IO Float
+        SVGPathSegCurvetoCubicSmoothRel -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoCubicSmoothRel.y Mozilla SVGPathSegCurvetoCubicSmoothRel.y documentation> 
 getY :: (MonadIO m) => SVGPathSegCurvetoCubicSmoothRel -> m Float
-getY self
-  = liftIO (js_getY (unSVGPathSegCurvetoCubicSmoothRel self))
+getY self = liftIO (js_getY (self))
  
 foreign import javascript unsafe "$1[\"x2\"] = $2;" js_setX2 ::
-        JSRef SVGPathSegCurvetoCubicSmoothRel -> Float -> IO ()
+        SVGPathSegCurvetoCubicSmoothRel -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoCubicSmoothRel.x2 Mozilla SVGPathSegCurvetoCubicSmoothRel.x2 documentation> 
 setX2 ::
       (MonadIO m) => SVGPathSegCurvetoCubicSmoothRel -> Float -> m ()
-setX2 self val
-  = liftIO (js_setX2 (unSVGPathSegCurvetoCubicSmoothRel self) val)
+setX2 self val = liftIO (js_setX2 (self) val)
  
 foreign import javascript unsafe "$1[\"x2\"]" js_getX2 ::
-        JSRef SVGPathSegCurvetoCubicSmoothRel -> IO Float
+        SVGPathSegCurvetoCubicSmoothRel -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoCubicSmoothRel.x2 Mozilla SVGPathSegCurvetoCubicSmoothRel.x2 documentation> 
 getX2 :: (MonadIO m) => SVGPathSegCurvetoCubicSmoothRel -> m Float
-getX2 self
-  = liftIO (js_getX2 (unSVGPathSegCurvetoCubicSmoothRel self))
+getX2 self = liftIO (js_getX2 (self))
  
 foreign import javascript unsafe "$1[\"y2\"] = $2;" js_setY2 ::
-        JSRef SVGPathSegCurvetoCubicSmoothRel -> Float -> IO ()
+        SVGPathSegCurvetoCubicSmoothRel -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoCubicSmoothRel.y2 Mozilla SVGPathSegCurvetoCubicSmoothRel.y2 documentation> 
 setY2 ::
       (MonadIO m) => SVGPathSegCurvetoCubicSmoothRel -> Float -> m ()
-setY2 self val
-  = liftIO (js_setY2 (unSVGPathSegCurvetoCubicSmoothRel self) val)
+setY2 self val = liftIO (js_setY2 (self) val)
  
 foreign import javascript unsafe "$1[\"y2\"]" js_getY2 ::
-        JSRef SVGPathSegCurvetoCubicSmoothRel -> IO Float
+        SVGPathSegCurvetoCubicSmoothRel -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoCubicSmoothRel.y2 Mozilla SVGPathSegCurvetoCubicSmoothRel.y2 documentation> 
 getY2 :: (MonadIO m) => SVGPathSegCurvetoCubicSmoothRel -> m Float
-getY2 self
-  = liftIO (js_getY2 (unSVGPathSegCurvetoCubicSmoothRel self))
+getY2 self = liftIO (js_getY2 (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegCurvetoQuadraticAbs.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegCurvetoQuadraticAbs.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegCurvetoQuadraticAbs.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegCurvetoQuadraticAbs.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -21,67 +21,61 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"x\"] = $2;" js_setX ::
-        JSRef SVGPathSegCurvetoQuadraticAbs -> Float -> IO ()
+        SVGPathSegCurvetoQuadraticAbs -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoQuadraticAbs.x Mozilla SVGPathSegCurvetoQuadraticAbs.x documentation> 
 setX ::
      (MonadIO m) => SVGPathSegCurvetoQuadraticAbs -> Float -> m ()
-setX self val
-  = liftIO (js_setX (unSVGPathSegCurvetoQuadraticAbs self) val)
+setX self val = liftIO (js_setX (self) val)
  
 foreign import javascript unsafe "$1[\"x\"]" js_getX ::
-        JSRef SVGPathSegCurvetoQuadraticAbs -> IO Float
+        SVGPathSegCurvetoQuadraticAbs -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoQuadraticAbs.x Mozilla SVGPathSegCurvetoQuadraticAbs.x documentation> 
 getX :: (MonadIO m) => SVGPathSegCurvetoQuadraticAbs -> m Float
-getX self = liftIO (js_getX (unSVGPathSegCurvetoQuadraticAbs self))
+getX self = liftIO (js_getX (self))
  
 foreign import javascript unsafe "$1[\"y\"] = $2;" js_setY ::
-        JSRef SVGPathSegCurvetoQuadraticAbs -> Float -> IO ()
+        SVGPathSegCurvetoQuadraticAbs -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoQuadraticAbs.y Mozilla SVGPathSegCurvetoQuadraticAbs.y documentation> 
 setY ::
      (MonadIO m) => SVGPathSegCurvetoQuadraticAbs -> Float -> m ()
-setY self val
-  = liftIO (js_setY (unSVGPathSegCurvetoQuadraticAbs self) val)
+setY self val = liftIO (js_setY (self) val)
  
 foreign import javascript unsafe "$1[\"y\"]" js_getY ::
-        JSRef SVGPathSegCurvetoQuadraticAbs -> IO Float
+        SVGPathSegCurvetoQuadraticAbs -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoQuadraticAbs.y Mozilla SVGPathSegCurvetoQuadraticAbs.y documentation> 
 getY :: (MonadIO m) => SVGPathSegCurvetoQuadraticAbs -> m Float
-getY self = liftIO (js_getY (unSVGPathSegCurvetoQuadraticAbs self))
+getY self = liftIO (js_getY (self))
  
 foreign import javascript unsafe "$1[\"x1\"] = $2;" js_setX1 ::
-        JSRef SVGPathSegCurvetoQuadraticAbs -> Float -> IO ()
+        SVGPathSegCurvetoQuadraticAbs -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoQuadraticAbs.x1 Mozilla SVGPathSegCurvetoQuadraticAbs.x1 documentation> 
 setX1 ::
       (MonadIO m) => SVGPathSegCurvetoQuadraticAbs -> Float -> m ()
-setX1 self val
-  = liftIO (js_setX1 (unSVGPathSegCurvetoQuadraticAbs self) val)
+setX1 self val = liftIO (js_setX1 (self) val)
  
 foreign import javascript unsafe "$1[\"x1\"]" js_getX1 ::
-        JSRef SVGPathSegCurvetoQuadraticAbs -> IO Float
+        SVGPathSegCurvetoQuadraticAbs -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoQuadraticAbs.x1 Mozilla SVGPathSegCurvetoQuadraticAbs.x1 documentation> 
 getX1 :: (MonadIO m) => SVGPathSegCurvetoQuadraticAbs -> m Float
-getX1 self
-  = liftIO (js_getX1 (unSVGPathSegCurvetoQuadraticAbs self))
+getX1 self = liftIO (js_getX1 (self))
  
 foreign import javascript unsafe "$1[\"y1\"] = $2;" js_setY1 ::
-        JSRef SVGPathSegCurvetoQuadraticAbs -> Float -> IO ()
+        SVGPathSegCurvetoQuadraticAbs -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoQuadraticAbs.y1 Mozilla SVGPathSegCurvetoQuadraticAbs.y1 documentation> 
 setY1 ::
       (MonadIO m) => SVGPathSegCurvetoQuadraticAbs -> Float -> m ()
-setY1 self val
-  = liftIO (js_setY1 (unSVGPathSegCurvetoQuadraticAbs self) val)
+setY1 self val = liftIO (js_setY1 (self) val)
  
 foreign import javascript unsafe "$1[\"y1\"]" js_getY1 ::
-        JSRef SVGPathSegCurvetoQuadraticAbs -> IO Float
+        SVGPathSegCurvetoQuadraticAbs -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoQuadraticAbs.y1 Mozilla SVGPathSegCurvetoQuadraticAbs.y1 documentation> 
 getY1 :: (MonadIO m) => SVGPathSegCurvetoQuadraticAbs -> m Float
-getY1 self
-  = liftIO (js_getY1 (unSVGPathSegCurvetoQuadraticAbs self))
+getY1 self = liftIO (js_getY1 (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegCurvetoQuadraticRel.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegCurvetoQuadraticRel.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegCurvetoQuadraticRel.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegCurvetoQuadraticRel.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -21,67 +21,61 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"x\"] = $2;" js_setX ::
-        JSRef SVGPathSegCurvetoQuadraticRel -> Float -> IO ()
+        SVGPathSegCurvetoQuadraticRel -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoQuadraticRel.x Mozilla SVGPathSegCurvetoQuadraticRel.x documentation> 
 setX ::
      (MonadIO m) => SVGPathSegCurvetoQuadraticRel -> Float -> m ()
-setX self val
-  = liftIO (js_setX (unSVGPathSegCurvetoQuadraticRel self) val)
+setX self val = liftIO (js_setX (self) val)
  
 foreign import javascript unsafe "$1[\"x\"]" js_getX ::
-        JSRef SVGPathSegCurvetoQuadraticRel -> IO Float
+        SVGPathSegCurvetoQuadraticRel -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoQuadraticRel.x Mozilla SVGPathSegCurvetoQuadraticRel.x documentation> 
 getX :: (MonadIO m) => SVGPathSegCurvetoQuadraticRel -> m Float
-getX self = liftIO (js_getX (unSVGPathSegCurvetoQuadraticRel self))
+getX self = liftIO (js_getX (self))
  
 foreign import javascript unsafe "$1[\"y\"] = $2;" js_setY ::
-        JSRef SVGPathSegCurvetoQuadraticRel -> Float -> IO ()
+        SVGPathSegCurvetoQuadraticRel -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoQuadraticRel.y Mozilla SVGPathSegCurvetoQuadraticRel.y documentation> 
 setY ::
      (MonadIO m) => SVGPathSegCurvetoQuadraticRel -> Float -> m ()
-setY self val
-  = liftIO (js_setY (unSVGPathSegCurvetoQuadraticRel self) val)
+setY self val = liftIO (js_setY (self) val)
  
 foreign import javascript unsafe "$1[\"y\"]" js_getY ::
-        JSRef SVGPathSegCurvetoQuadraticRel -> IO Float
+        SVGPathSegCurvetoQuadraticRel -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoQuadraticRel.y Mozilla SVGPathSegCurvetoQuadraticRel.y documentation> 
 getY :: (MonadIO m) => SVGPathSegCurvetoQuadraticRel -> m Float
-getY self = liftIO (js_getY (unSVGPathSegCurvetoQuadraticRel self))
+getY self = liftIO (js_getY (self))
  
 foreign import javascript unsafe "$1[\"x1\"] = $2;" js_setX1 ::
-        JSRef SVGPathSegCurvetoQuadraticRel -> Float -> IO ()
+        SVGPathSegCurvetoQuadraticRel -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoQuadraticRel.x1 Mozilla SVGPathSegCurvetoQuadraticRel.x1 documentation> 
 setX1 ::
       (MonadIO m) => SVGPathSegCurvetoQuadraticRel -> Float -> m ()
-setX1 self val
-  = liftIO (js_setX1 (unSVGPathSegCurvetoQuadraticRel self) val)
+setX1 self val = liftIO (js_setX1 (self) val)
  
 foreign import javascript unsafe "$1[\"x1\"]" js_getX1 ::
-        JSRef SVGPathSegCurvetoQuadraticRel -> IO Float
+        SVGPathSegCurvetoQuadraticRel -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoQuadraticRel.x1 Mozilla SVGPathSegCurvetoQuadraticRel.x1 documentation> 
 getX1 :: (MonadIO m) => SVGPathSegCurvetoQuadraticRel -> m Float
-getX1 self
-  = liftIO (js_getX1 (unSVGPathSegCurvetoQuadraticRel self))
+getX1 self = liftIO (js_getX1 (self))
  
 foreign import javascript unsafe "$1[\"y1\"] = $2;" js_setY1 ::
-        JSRef SVGPathSegCurvetoQuadraticRel -> Float -> IO ()
+        SVGPathSegCurvetoQuadraticRel -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoQuadraticRel.y1 Mozilla SVGPathSegCurvetoQuadraticRel.y1 documentation> 
 setY1 ::
       (MonadIO m) => SVGPathSegCurvetoQuadraticRel -> Float -> m ()
-setY1 self val
-  = liftIO (js_setY1 (unSVGPathSegCurvetoQuadraticRel self) val)
+setY1 self val = liftIO (js_setY1 (self) val)
  
 foreign import javascript unsafe "$1[\"y1\"]" js_getY1 ::
-        JSRef SVGPathSegCurvetoQuadraticRel -> IO Float
+        SVGPathSegCurvetoQuadraticRel -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoQuadraticRel.y1 Mozilla SVGPathSegCurvetoQuadraticRel.y1 documentation> 
 getY1 :: (MonadIO m) => SVGPathSegCurvetoQuadraticRel -> m Float
-getY1 self
-  = liftIO (js_getY1 (unSVGPathSegCurvetoQuadraticRel self))
+getY1 self = liftIO (js_getY1 (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegCurvetoQuadraticSmoothAbs.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegCurvetoQuadraticSmoothAbs.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegCurvetoQuadraticSmoothAbs.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegCurvetoQuadraticSmoothAbs.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -21,37 +21,33 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"x\"] = $2;" js_setX ::
-        JSRef SVGPathSegCurvetoQuadraticSmoothAbs -> Float -> IO ()
+        SVGPathSegCurvetoQuadraticSmoothAbs -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoQuadraticSmoothAbs.x Mozilla SVGPathSegCurvetoQuadraticSmoothAbs.x documentation> 
 setX ::
      (MonadIO m) => SVGPathSegCurvetoQuadraticSmoothAbs -> Float -> m ()
-setX self val
-  = liftIO (js_setX (unSVGPathSegCurvetoQuadraticSmoothAbs self) val)
+setX self val = liftIO (js_setX (self) val)
  
 foreign import javascript unsafe "$1[\"x\"]" js_getX ::
-        JSRef SVGPathSegCurvetoQuadraticSmoothAbs -> IO Float
+        SVGPathSegCurvetoQuadraticSmoothAbs -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoQuadraticSmoothAbs.x Mozilla SVGPathSegCurvetoQuadraticSmoothAbs.x documentation> 
 getX ::
      (MonadIO m) => SVGPathSegCurvetoQuadraticSmoothAbs -> m Float
-getX self
-  = liftIO (js_getX (unSVGPathSegCurvetoQuadraticSmoothAbs self))
+getX self = liftIO (js_getX (self))
  
 foreign import javascript unsafe "$1[\"y\"] = $2;" js_setY ::
-        JSRef SVGPathSegCurvetoQuadraticSmoothAbs -> Float -> IO ()
+        SVGPathSegCurvetoQuadraticSmoothAbs -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoQuadraticSmoothAbs.y Mozilla SVGPathSegCurvetoQuadraticSmoothAbs.y documentation> 
 setY ::
      (MonadIO m) => SVGPathSegCurvetoQuadraticSmoothAbs -> Float -> m ()
-setY self val
-  = liftIO (js_setY (unSVGPathSegCurvetoQuadraticSmoothAbs self) val)
+setY self val = liftIO (js_setY (self) val)
  
 foreign import javascript unsafe "$1[\"y\"]" js_getY ::
-        JSRef SVGPathSegCurvetoQuadraticSmoothAbs -> IO Float
+        SVGPathSegCurvetoQuadraticSmoothAbs -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoQuadraticSmoothAbs.y Mozilla SVGPathSegCurvetoQuadraticSmoothAbs.y documentation> 
 getY ::
      (MonadIO m) => SVGPathSegCurvetoQuadraticSmoothAbs -> m Float
-getY self
-  = liftIO (js_getY (unSVGPathSegCurvetoQuadraticSmoothAbs self))
+getY self = liftIO (js_getY (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegCurvetoQuadraticSmoothRel.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegCurvetoQuadraticSmoothRel.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegCurvetoQuadraticSmoothRel.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegCurvetoQuadraticSmoothRel.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -21,37 +21,33 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"x\"] = $2;" js_setX ::
-        JSRef SVGPathSegCurvetoQuadraticSmoothRel -> Float -> IO ()
+        SVGPathSegCurvetoQuadraticSmoothRel -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoQuadraticSmoothRel.x Mozilla SVGPathSegCurvetoQuadraticSmoothRel.x documentation> 
 setX ::
      (MonadIO m) => SVGPathSegCurvetoQuadraticSmoothRel -> Float -> m ()
-setX self val
-  = liftIO (js_setX (unSVGPathSegCurvetoQuadraticSmoothRel self) val)
+setX self val = liftIO (js_setX (self) val)
  
 foreign import javascript unsafe "$1[\"x\"]" js_getX ::
-        JSRef SVGPathSegCurvetoQuadraticSmoothRel -> IO Float
+        SVGPathSegCurvetoQuadraticSmoothRel -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoQuadraticSmoothRel.x Mozilla SVGPathSegCurvetoQuadraticSmoothRel.x documentation> 
 getX ::
      (MonadIO m) => SVGPathSegCurvetoQuadraticSmoothRel -> m Float
-getX self
-  = liftIO (js_getX (unSVGPathSegCurvetoQuadraticSmoothRel self))
+getX self = liftIO (js_getX (self))
  
 foreign import javascript unsafe "$1[\"y\"] = $2;" js_setY ::
-        JSRef SVGPathSegCurvetoQuadraticSmoothRel -> Float -> IO ()
+        SVGPathSegCurvetoQuadraticSmoothRel -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoQuadraticSmoothRel.y Mozilla SVGPathSegCurvetoQuadraticSmoothRel.y documentation> 
 setY ::
      (MonadIO m) => SVGPathSegCurvetoQuadraticSmoothRel -> Float -> m ()
-setY self val
-  = liftIO (js_setY (unSVGPathSegCurvetoQuadraticSmoothRel self) val)
+setY self val = liftIO (js_setY (self) val)
  
 foreign import javascript unsafe "$1[\"y\"]" js_getY ::
-        JSRef SVGPathSegCurvetoQuadraticSmoothRel -> IO Float
+        SVGPathSegCurvetoQuadraticSmoothRel -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoQuadraticSmoothRel.y Mozilla SVGPathSegCurvetoQuadraticSmoothRel.y documentation> 
 getY ::
      (MonadIO m) => SVGPathSegCurvetoQuadraticSmoothRel -> m Float
-getY self
-  = liftIO (js_getY (unSVGPathSegCurvetoQuadraticSmoothRel self))
+getY self = liftIO (js_getY (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegLinetoAbs.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegLinetoAbs.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegLinetoAbs.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegLinetoAbs.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,29 +20,29 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"x\"] = $2;" js_setX ::
-        JSRef SVGPathSegLinetoAbs -> Float -> IO ()
+        SVGPathSegLinetoAbs -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegLinetoAbs.x Mozilla SVGPathSegLinetoAbs.x documentation> 
 setX :: (MonadIO m) => SVGPathSegLinetoAbs -> Float -> m ()
-setX self val = liftIO (js_setX (unSVGPathSegLinetoAbs self) val)
+setX self val = liftIO (js_setX (self) val)
  
 foreign import javascript unsafe "$1[\"x\"]" js_getX ::
-        JSRef SVGPathSegLinetoAbs -> IO Float
+        SVGPathSegLinetoAbs -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegLinetoAbs.x Mozilla SVGPathSegLinetoAbs.x documentation> 
 getX :: (MonadIO m) => SVGPathSegLinetoAbs -> m Float
-getX self = liftIO (js_getX (unSVGPathSegLinetoAbs self))
+getX self = liftIO (js_getX (self))
  
 foreign import javascript unsafe "$1[\"y\"] = $2;" js_setY ::
-        JSRef SVGPathSegLinetoAbs -> Float -> IO ()
+        SVGPathSegLinetoAbs -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegLinetoAbs.y Mozilla SVGPathSegLinetoAbs.y documentation> 
 setY :: (MonadIO m) => SVGPathSegLinetoAbs -> Float -> m ()
-setY self val = liftIO (js_setY (unSVGPathSegLinetoAbs self) val)
+setY self val = liftIO (js_setY (self) val)
  
 foreign import javascript unsafe "$1[\"y\"]" js_getY ::
-        JSRef SVGPathSegLinetoAbs -> IO Float
+        SVGPathSegLinetoAbs -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegLinetoAbs.y Mozilla SVGPathSegLinetoAbs.y documentation> 
 getY :: (MonadIO m) => SVGPathSegLinetoAbs -> m Float
-getY self = liftIO (js_getY (unSVGPathSegLinetoAbs self))
+getY self = liftIO (js_getY (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegLinetoHorizontalAbs.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegLinetoHorizontalAbs.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegLinetoHorizontalAbs.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegLinetoHorizontalAbs.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,17 +20,16 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"x\"] = $2;" js_setX ::
-        JSRef SVGPathSegLinetoHorizontalAbs -> Float -> IO ()
+        SVGPathSegLinetoHorizontalAbs -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegLinetoHorizontalAbs.x Mozilla SVGPathSegLinetoHorizontalAbs.x documentation> 
 setX ::
      (MonadIO m) => SVGPathSegLinetoHorizontalAbs -> Float -> m ()
-setX self val
-  = liftIO (js_setX (unSVGPathSegLinetoHorizontalAbs self) val)
+setX self val = liftIO (js_setX (self) val)
  
 foreign import javascript unsafe "$1[\"x\"]" js_getX ::
-        JSRef SVGPathSegLinetoHorizontalAbs -> IO Float
+        SVGPathSegLinetoHorizontalAbs -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegLinetoHorizontalAbs.x Mozilla SVGPathSegLinetoHorizontalAbs.x documentation> 
 getX :: (MonadIO m) => SVGPathSegLinetoHorizontalAbs -> m Float
-getX self = liftIO (js_getX (unSVGPathSegLinetoHorizontalAbs self))
+getX self = liftIO (js_getX (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegLinetoHorizontalRel.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegLinetoHorizontalRel.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegLinetoHorizontalRel.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegLinetoHorizontalRel.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,17 +20,16 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"x\"] = $2;" js_setX ::
-        JSRef SVGPathSegLinetoHorizontalRel -> Float -> IO ()
+        SVGPathSegLinetoHorizontalRel -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegLinetoHorizontalRel.x Mozilla SVGPathSegLinetoHorizontalRel.x documentation> 
 setX ::
      (MonadIO m) => SVGPathSegLinetoHorizontalRel -> Float -> m ()
-setX self val
-  = liftIO (js_setX (unSVGPathSegLinetoHorizontalRel self) val)
+setX self val = liftIO (js_setX (self) val)
  
 foreign import javascript unsafe "$1[\"x\"]" js_getX ::
-        JSRef SVGPathSegLinetoHorizontalRel -> IO Float
+        SVGPathSegLinetoHorizontalRel -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegLinetoHorizontalRel.x Mozilla SVGPathSegLinetoHorizontalRel.x documentation> 
 getX :: (MonadIO m) => SVGPathSegLinetoHorizontalRel -> m Float
-getX self = liftIO (js_getX (unSVGPathSegLinetoHorizontalRel self))
+getX self = liftIO (js_getX (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegLinetoRel.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegLinetoRel.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegLinetoRel.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegLinetoRel.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,29 +20,29 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"x\"] = $2;" js_setX ::
-        JSRef SVGPathSegLinetoRel -> Float -> IO ()
+        SVGPathSegLinetoRel -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegLinetoRel.x Mozilla SVGPathSegLinetoRel.x documentation> 
 setX :: (MonadIO m) => SVGPathSegLinetoRel -> Float -> m ()
-setX self val = liftIO (js_setX (unSVGPathSegLinetoRel self) val)
+setX self val = liftIO (js_setX (self) val)
  
 foreign import javascript unsafe "$1[\"x\"]" js_getX ::
-        JSRef SVGPathSegLinetoRel -> IO Float
+        SVGPathSegLinetoRel -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegLinetoRel.x Mozilla SVGPathSegLinetoRel.x documentation> 
 getX :: (MonadIO m) => SVGPathSegLinetoRel -> m Float
-getX self = liftIO (js_getX (unSVGPathSegLinetoRel self))
+getX self = liftIO (js_getX (self))
  
 foreign import javascript unsafe "$1[\"y\"] = $2;" js_setY ::
-        JSRef SVGPathSegLinetoRel -> Float -> IO ()
+        SVGPathSegLinetoRel -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegLinetoRel.y Mozilla SVGPathSegLinetoRel.y documentation> 
 setY :: (MonadIO m) => SVGPathSegLinetoRel -> Float -> m ()
-setY self val = liftIO (js_setY (unSVGPathSegLinetoRel self) val)
+setY self val = liftIO (js_setY (self) val)
  
 foreign import javascript unsafe "$1[\"y\"]" js_getY ::
-        JSRef SVGPathSegLinetoRel -> IO Float
+        SVGPathSegLinetoRel -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegLinetoRel.y Mozilla SVGPathSegLinetoRel.y documentation> 
 getY :: (MonadIO m) => SVGPathSegLinetoRel -> m Float
-getY self = liftIO (js_getY (unSVGPathSegLinetoRel self))
+getY self = liftIO (js_getY (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegLinetoVerticalAbs.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegLinetoVerticalAbs.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegLinetoVerticalAbs.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegLinetoVerticalAbs.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,16 +20,15 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"y\"] = $2;" js_setY ::
-        JSRef SVGPathSegLinetoVerticalAbs -> Float -> IO ()
+        SVGPathSegLinetoVerticalAbs -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegLinetoVerticalAbs.y Mozilla SVGPathSegLinetoVerticalAbs.y documentation> 
 setY :: (MonadIO m) => SVGPathSegLinetoVerticalAbs -> Float -> m ()
-setY self val
-  = liftIO (js_setY (unSVGPathSegLinetoVerticalAbs self) val)
+setY self val = liftIO (js_setY (self) val)
  
 foreign import javascript unsafe "$1[\"y\"]" js_getY ::
-        JSRef SVGPathSegLinetoVerticalAbs -> IO Float
+        SVGPathSegLinetoVerticalAbs -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegLinetoVerticalAbs.y Mozilla SVGPathSegLinetoVerticalAbs.y documentation> 
 getY :: (MonadIO m) => SVGPathSegLinetoVerticalAbs -> m Float
-getY self = liftIO (js_getY (unSVGPathSegLinetoVerticalAbs self))
+getY self = liftIO (js_getY (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegLinetoVerticalRel.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegLinetoVerticalRel.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegLinetoVerticalRel.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegLinetoVerticalRel.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,16 +20,15 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"y\"] = $2;" js_setY ::
-        JSRef SVGPathSegLinetoVerticalRel -> Float -> IO ()
+        SVGPathSegLinetoVerticalRel -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegLinetoVerticalRel.y Mozilla SVGPathSegLinetoVerticalRel.y documentation> 
 setY :: (MonadIO m) => SVGPathSegLinetoVerticalRel -> Float -> m ()
-setY self val
-  = liftIO (js_setY (unSVGPathSegLinetoVerticalRel self) val)
+setY self val = liftIO (js_setY (self) val)
  
 foreign import javascript unsafe "$1[\"y\"]" js_getY ::
-        JSRef SVGPathSegLinetoVerticalRel -> IO Float
+        SVGPathSegLinetoVerticalRel -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegLinetoVerticalRel.y Mozilla SVGPathSegLinetoVerticalRel.y documentation> 
 getY :: (MonadIO m) => SVGPathSegLinetoVerticalRel -> m Float
-getY self = liftIO (js_getY (unSVGPathSegLinetoVerticalRel self))
+getY self = liftIO (js_getY (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegList.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegList.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegList.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegList.hs
@@ -8,7 +8,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -22,15 +22,15 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"clear\"]()" js_clear ::
-        JSRef SVGPathSegList -> IO ()
+        SVGPathSegList -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegList.clear Mozilla SVGPathSegList.clear documentation> 
 clear :: (MonadIO m) => SVGPathSegList -> m ()
-clear self = liftIO (js_clear (unSVGPathSegList self))
+clear self = liftIO (js_clear (self))
  
 foreign import javascript unsafe "$1[\"initialize\"]($2)"
         js_initialize ::
-        JSRef SVGPathSegList -> JSRef SVGPathSeg -> IO (JSRef SVGPathSeg)
+        SVGPathSegList -> Nullable SVGPathSeg -> IO (Nullable SVGPathSeg)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegList.initialize Mozilla SVGPathSegList.initialize documentation> 
 initialize ::
@@ -38,23 +38,23 @@
              SVGPathSegList -> Maybe newItem -> m (Maybe SVGPathSeg)
 initialize self newItem
   = liftIO
-      ((js_initialize (unSVGPathSegList self)
-          (maybe jsNull (unSVGPathSeg . toSVGPathSeg) newItem))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_initialize (self)
+            (maybeToNullable (fmap toSVGPathSeg newItem))))
  
 foreign import javascript unsafe "$1[\"getItem\"]($2)" js_getItem
-        :: JSRef SVGPathSegList -> Word -> IO (JSRef SVGPathSeg)
+        :: SVGPathSegList -> Word -> IO (Nullable SVGPathSeg)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegList.getItem Mozilla SVGPathSegList.getItem documentation> 
 getItem ::
         (MonadIO m) => SVGPathSegList -> Word -> m (Maybe SVGPathSeg)
 getItem self index
-  = liftIO ((js_getItem (unSVGPathSegList self) index) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getItem (self) index))
  
 foreign import javascript unsafe "$1[\"insertItemBefore\"]($2, $3)"
         js_insertItemBefore ::
-        JSRef SVGPathSegList ->
-          JSRef SVGPathSeg -> Word -> IO (JSRef SVGPathSeg)
+        SVGPathSegList ->
+          Nullable SVGPathSeg -> Word -> IO (Nullable SVGPathSeg)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegList.insertItemBefore Mozilla SVGPathSegList.insertItemBefore documentation> 
 insertItemBefore ::
@@ -62,15 +62,15 @@
                    SVGPathSegList -> Maybe newItem -> Word -> m (Maybe SVGPathSeg)
 insertItemBefore self newItem index
   = liftIO
-      ((js_insertItemBefore (unSVGPathSegList self)
-          (maybe jsNull (unSVGPathSeg . toSVGPathSeg) newItem)
-          index)
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_insertItemBefore (self)
+            (maybeToNullable (fmap toSVGPathSeg newItem))
+            index))
  
 foreign import javascript unsafe "$1[\"replaceItem\"]($2, $3)"
         js_replaceItem ::
-        JSRef SVGPathSegList ->
-          JSRef SVGPathSeg -> Word -> IO (JSRef SVGPathSeg)
+        SVGPathSegList ->
+          Nullable SVGPathSeg -> Word -> IO (Nullable SVGPathSeg)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegList.replaceItem Mozilla SVGPathSegList.replaceItem documentation> 
 replaceItem ::
@@ -78,25 +78,23 @@
               SVGPathSegList -> Maybe newItem -> Word -> m (Maybe SVGPathSeg)
 replaceItem self newItem index
   = liftIO
-      ((js_replaceItem (unSVGPathSegList self)
-          (maybe jsNull (unSVGPathSeg . toSVGPathSeg) newItem)
-          index)
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_replaceItem (self)
+            (maybeToNullable (fmap toSVGPathSeg newItem))
+            index))
  
 foreign import javascript unsafe "$1[\"removeItem\"]($2)"
-        js_removeItem ::
-        JSRef SVGPathSegList -> Word -> IO (JSRef SVGPathSeg)
+        js_removeItem :: SVGPathSegList -> Word -> IO (Nullable SVGPathSeg)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegList.removeItem Mozilla SVGPathSegList.removeItem documentation> 
 removeItem ::
            (MonadIO m) => SVGPathSegList -> Word -> m (Maybe SVGPathSeg)
 removeItem self index
-  = liftIO
-      ((js_removeItem (unSVGPathSegList self) index) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_removeItem (self) index))
  
 foreign import javascript unsafe "$1[\"appendItem\"]($2)"
         js_appendItem ::
-        JSRef SVGPathSegList -> JSRef SVGPathSeg -> IO (JSRef SVGPathSeg)
+        SVGPathSegList -> Nullable SVGPathSeg -> IO (Nullable SVGPathSeg)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegList.appendItem Mozilla SVGPathSegList.appendItem documentation> 
 appendItem ::
@@ -104,14 +102,13 @@
              SVGPathSegList -> Maybe newItem -> m (Maybe SVGPathSeg)
 appendItem self newItem
   = liftIO
-      ((js_appendItem (unSVGPathSegList self)
-          (maybe jsNull (unSVGPathSeg . toSVGPathSeg) newItem))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_appendItem (self)
+            (maybeToNullable (fmap toSVGPathSeg newItem))))
  
 foreign import javascript unsafe "$1[\"numberOfItems\"]"
-        js_getNumberOfItems :: JSRef SVGPathSegList -> IO Word
+        js_getNumberOfItems :: SVGPathSegList -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegList.numberOfItems Mozilla SVGPathSegList.numberOfItems documentation> 
 getNumberOfItems :: (MonadIO m) => SVGPathSegList -> m Word
-getNumberOfItems self
-  = liftIO (js_getNumberOfItems (unSVGPathSegList self))
+getNumberOfItems self = liftIO (js_getNumberOfItems (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegMovetoAbs.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegMovetoAbs.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegMovetoAbs.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegMovetoAbs.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,29 +20,29 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"x\"] = $2;" js_setX ::
-        JSRef SVGPathSegMovetoAbs -> Float -> IO ()
+        SVGPathSegMovetoAbs -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegMovetoAbs.x Mozilla SVGPathSegMovetoAbs.x documentation> 
 setX :: (MonadIO m) => SVGPathSegMovetoAbs -> Float -> m ()
-setX self val = liftIO (js_setX (unSVGPathSegMovetoAbs self) val)
+setX self val = liftIO (js_setX (self) val)
  
 foreign import javascript unsafe "$1[\"x\"]" js_getX ::
-        JSRef SVGPathSegMovetoAbs -> IO Float
+        SVGPathSegMovetoAbs -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegMovetoAbs.x Mozilla SVGPathSegMovetoAbs.x documentation> 
 getX :: (MonadIO m) => SVGPathSegMovetoAbs -> m Float
-getX self = liftIO (js_getX (unSVGPathSegMovetoAbs self))
+getX self = liftIO (js_getX (self))
  
 foreign import javascript unsafe "$1[\"y\"] = $2;" js_setY ::
-        JSRef SVGPathSegMovetoAbs -> Float -> IO ()
+        SVGPathSegMovetoAbs -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegMovetoAbs.y Mozilla SVGPathSegMovetoAbs.y documentation> 
 setY :: (MonadIO m) => SVGPathSegMovetoAbs -> Float -> m ()
-setY self val = liftIO (js_setY (unSVGPathSegMovetoAbs self) val)
+setY self val = liftIO (js_setY (self) val)
  
 foreign import javascript unsafe "$1[\"y\"]" js_getY ::
-        JSRef SVGPathSegMovetoAbs -> IO Float
+        SVGPathSegMovetoAbs -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegMovetoAbs.y Mozilla SVGPathSegMovetoAbs.y documentation> 
 getY :: (MonadIO m) => SVGPathSegMovetoAbs -> m Float
-getY self = liftIO (js_getY (unSVGPathSegMovetoAbs self))
+getY self = liftIO (js_getY (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegMovetoRel.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegMovetoRel.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegMovetoRel.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGPathSegMovetoRel.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,29 +20,29 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"x\"] = $2;" js_setX ::
-        JSRef SVGPathSegMovetoRel -> Float -> IO ()
+        SVGPathSegMovetoRel -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegMovetoRel.x Mozilla SVGPathSegMovetoRel.x documentation> 
 setX :: (MonadIO m) => SVGPathSegMovetoRel -> Float -> m ()
-setX self val = liftIO (js_setX (unSVGPathSegMovetoRel self) val)
+setX self val = liftIO (js_setX (self) val)
  
 foreign import javascript unsafe "$1[\"x\"]" js_getX ::
-        JSRef SVGPathSegMovetoRel -> IO Float
+        SVGPathSegMovetoRel -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegMovetoRel.x Mozilla SVGPathSegMovetoRel.x documentation> 
 getX :: (MonadIO m) => SVGPathSegMovetoRel -> m Float
-getX self = liftIO (js_getX (unSVGPathSegMovetoRel self))
+getX self = liftIO (js_getX (self))
  
 foreign import javascript unsafe "$1[\"y\"] = $2;" js_setY ::
-        JSRef SVGPathSegMovetoRel -> Float -> IO ()
+        SVGPathSegMovetoRel -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegMovetoRel.y Mozilla SVGPathSegMovetoRel.y documentation> 
 setY :: (MonadIO m) => SVGPathSegMovetoRel -> Float -> m ()
-setY self val = liftIO (js_setY (unSVGPathSegMovetoRel self) val)
+setY self val = liftIO (js_setY (self) val)
  
 foreign import javascript unsafe "$1[\"y\"]" js_getY ::
-        JSRef SVGPathSegMovetoRel -> IO Float
+        SVGPathSegMovetoRel -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegMovetoRel.y Mozilla SVGPathSegMovetoRel.y documentation> 
 getY :: (MonadIO m) => SVGPathSegMovetoRel -> m Float
-getY self = liftIO (js_getY (unSVGPathSegMovetoRel self))
+getY self = liftIO (js_getY (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGPatternElement.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGPatternElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGPatternElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGPatternElement.hs
@@ -8,7 +8,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -23,73 +23,65 @@
  
 foreign import javascript unsafe "$1[\"patternUnits\"]"
         js_getPatternUnits ::
-        JSRef SVGPatternElement -> IO (JSRef SVGAnimatedEnumeration)
+        SVGPatternElement -> IO (Nullable SVGAnimatedEnumeration)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPatternElement.patternUnits Mozilla SVGPatternElement.patternUnits documentation> 
 getPatternUnits ::
                 (MonadIO m) =>
                   SVGPatternElement -> m (Maybe SVGAnimatedEnumeration)
 getPatternUnits self
-  = liftIO
-      ((js_getPatternUnits (unSVGPatternElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getPatternUnits (self)))
  
 foreign import javascript unsafe "$1[\"patternContentUnits\"]"
         js_getPatternContentUnits ::
-        JSRef SVGPatternElement -> IO (JSRef SVGAnimatedEnumeration)
+        SVGPatternElement -> IO (Nullable SVGAnimatedEnumeration)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPatternElement.patternContentUnits Mozilla SVGPatternElement.patternContentUnits documentation> 
 getPatternContentUnits ::
                        (MonadIO m) =>
                          SVGPatternElement -> m (Maybe SVGAnimatedEnumeration)
 getPatternContentUnits self
-  = liftIO
-      ((js_getPatternContentUnits (unSVGPatternElement self)) >>=
-         fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getPatternContentUnits (self)))
  
 foreign import javascript unsafe "$1[\"patternTransform\"]"
         js_getPatternTransform ::
-        JSRef SVGPatternElement -> IO (JSRef SVGAnimatedTransformList)
+        SVGPatternElement -> IO (Nullable SVGAnimatedTransformList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPatternElement.patternTransform Mozilla SVGPatternElement.patternTransform documentation> 
 getPatternTransform ::
                     (MonadIO m) =>
                       SVGPatternElement -> m (Maybe SVGAnimatedTransformList)
 getPatternTransform self
-  = liftIO
-      ((js_getPatternTransform (unSVGPatternElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getPatternTransform (self)))
  
 foreign import javascript unsafe "$1[\"x\"]" js_getX ::
-        JSRef SVGPatternElement -> IO (JSRef SVGAnimatedLength)
+        SVGPatternElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPatternElement.x Mozilla SVGPatternElement.x documentation> 
 getX ::
      (MonadIO m) => SVGPatternElement -> m (Maybe SVGAnimatedLength)
-getX self
-  = liftIO ((js_getX (unSVGPatternElement self)) >>= fromJSRef)
+getX self = liftIO (nullableToMaybe <$> (js_getX (self)))
  
 foreign import javascript unsafe "$1[\"y\"]" js_getY ::
-        JSRef SVGPatternElement -> IO (JSRef SVGAnimatedLength)
+        SVGPatternElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPatternElement.y Mozilla SVGPatternElement.y documentation> 
 getY ::
      (MonadIO m) => SVGPatternElement -> m (Maybe SVGAnimatedLength)
-getY self
-  = liftIO ((js_getY (unSVGPatternElement self)) >>= fromJSRef)
+getY self = liftIO (nullableToMaybe <$> (js_getY (self)))
  
 foreign import javascript unsafe "$1[\"width\"]" js_getWidth ::
-        JSRef SVGPatternElement -> IO (JSRef SVGAnimatedLength)
+        SVGPatternElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPatternElement.width Mozilla SVGPatternElement.width documentation> 
 getWidth ::
          (MonadIO m) => SVGPatternElement -> m (Maybe SVGAnimatedLength)
-getWidth self
-  = liftIO ((js_getWidth (unSVGPatternElement self)) >>= fromJSRef)
+getWidth self = liftIO (nullableToMaybe <$> (js_getWidth (self)))
  
 foreign import javascript unsafe "$1[\"height\"]" js_getHeight ::
-        JSRef SVGPatternElement -> IO (JSRef SVGAnimatedLength)
+        SVGPatternElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPatternElement.height Mozilla SVGPatternElement.height documentation> 
 getHeight ::
           (MonadIO m) => SVGPatternElement -> m (Maybe SVGAnimatedLength)
-getHeight self
-  = liftIO ((js_getHeight (unSVGPatternElement self)) >>= fromJSRef)
+getHeight self = liftIO (nullableToMaybe <$> (js_getHeight (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGPoint.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGPoint.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGPoint.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGPoint.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -21,41 +21,40 @@
  
 foreign import javascript unsafe "$1[\"matrixTransform\"]($2)"
         js_matrixTransform ::
-        JSRef SVGPoint -> JSRef SVGMatrix -> IO (JSRef SVGPoint)
+        SVGPoint -> Nullable SVGMatrix -> IO (Nullable SVGPoint)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPoint.matrixTransform Mozilla SVGPoint.matrixTransform documentation> 
 matrixTransform ::
                 (MonadIO m) => SVGPoint -> Maybe SVGMatrix -> m (Maybe SVGPoint)
 matrixTransform self matrix
   = liftIO
-      ((js_matrixTransform (unSVGPoint self)
-          (maybe jsNull pToJSRef matrix))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_matrixTransform (self) (maybeToNullable matrix)))
  
 foreign import javascript unsafe "$1[\"x\"] = $2;" js_setX ::
-        JSRef SVGPoint -> Float -> IO ()
+        SVGPoint -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPoint.x Mozilla SVGPoint.x documentation> 
 setX :: (MonadIO m) => SVGPoint -> Float -> m ()
-setX self val = liftIO (js_setX (unSVGPoint self) val)
+setX self val = liftIO (js_setX (self) val)
  
 foreign import javascript unsafe "$1[\"x\"]" js_getX ::
-        JSRef SVGPoint -> IO Float
+        SVGPoint -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPoint.x Mozilla SVGPoint.x documentation> 
 getX :: (MonadIO m) => SVGPoint -> m Float
-getX self = liftIO (js_getX (unSVGPoint self))
+getX self = liftIO (js_getX (self))
  
 foreign import javascript unsafe "$1[\"y\"] = $2;" js_setY ::
-        JSRef SVGPoint -> Float -> IO ()
+        SVGPoint -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPoint.y Mozilla SVGPoint.y documentation> 
 setY :: (MonadIO m) => SVGPoint -> Float -> m ()
-setY self val = liftIO (js_setY (unSVGPoint self) val)
+setY self val = liftIO (js_setY (self) val)
  
 foreign import javascript unsafe "$1[\"y\"]" js_getY ::
-        JSRef SVGPoint -> IO Float
+        SVGPoint -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPoint.y Mozilla SVGPoint.y documentation> 
 getY :: (MonadIO m) => SVGPoint -> m Float
-getY self = liftIO (js_getY (unSVGPoint self))
+getY self = liftIO (js_getY (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGPointList.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGPointList.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGPointList.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGPointList.hs
@@ -8,7 +8,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -22,36 +22,35 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"clear\"]()" js_clear ::
-        JSRef SVGPointList -> IO ()
+        SVGPointList -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPointList.clear Mozilla SVGPointList.clear documentation> 
 clear :: (MonadIO m) => SVGPointList -> m ()
-clear self = liftIO (js_clear (unSVGPointList self))
+clear self = liftIO (js_clear (self))
  
 foreign import javascript unsafe "$1[\"initialize\"]($2)"
         js_initialize ::
-        JSRef SVGPointList -> JSRef SVGPoint -> IO (JSRef SVGPoint)
+        SVGPointList -> Nullable SVGPoint -> IO (Nullable SVGPoint)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPointList.initialize Mozilla SVGPointList.initialize documentation> 
 initialize ::
            (MonadIO m) => SVGPointList -> Maybe SVGPoint -> m (Maybe SVGPoint)
 initialize self item
   = liftIO
-      ((js_initialize (unSVGPointList self) (maybe jsNull pToJSRef item))
-         >>= fromJSRef)
+      (nullableToMaybe <$> (js_initialize (self) (maybeToNullable item)))
  
 foreign import javascript unsafe "$1[\"getItem\"]($2)" js_getItem
-        :: JSRef SVGPointList -> Word -> IO (JSRef SVGPoint)
+        :: SVGPointList -> Word -> IO (Nullable SVGPoint)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPointList.getItem Mozilla SVGPointList.getItem documentation> 
 getItem ::
         (MonadIO m) => SVGPointList -> Word -> m (Maybe SVGPoint)
 getItem self index
-  = liftIO ((js_getItem (unSVGPointList self) index) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getItem (self) index))
  
 foreign import javascript unsafe "$1[\"insertItemBefore\"]($2, $3)"
         js_insertItemBefore ::
-        JSRef SVGPointList -> JSRef SVGPoint -> Word -> IO (JSRef SVGPoint)
+        SVGPointList -> Nullable SVGPoint -> Word -> IO (Nullable SVGPoint)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPointList.insertItemBefore Mozilla SVGPointList.insertItemBefore documentation> 
 insertItemBefore ::
@@ -59,14 +58,12 @@
                    SVGPointList -> Maybe SVGPoint -> Word -> m (Maybe SVGPoint)
 insertItemBefore self item index
   = liftIO
-      ((js_insertItemBefore (unSVGPointList self)
-          (maybe jsNull pToJSRef item)
-          index)
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_insertItemBefore (self) (maybeToNullable item) index))
  
 foreign import javascript unsafe "$1[\"replaceItem\"]($2, $3)"
         js_replaceItem ::
-        JSRef SVGPointList -> JSRef SVGPoint -> Word -> IO (JSRef SVGPoint)
+        SVGPointList -> Nullable SVGPoint -> Word -> IO (Nullable SVGPoint)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPointList.replaceItem Mozilla SVGPointList.replaceItem documentation> 
 replaceItem ::
@@ -74,36 +71,32 @@
               SVGPointList -> Maybe SVGPoint -> Word -> m (Maybe SVGPoint)
 replaceItem self item index
   = liftIO
-      ((js_replaceItem (unSVGPointList self) (maybe jsNull pToJSRef item)
-          index)
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_replaceItem (self) (maybeToNullable item) index))
  
 foreign import javascript unsafe "$1[\"removeItem\"]($2)"
-        js_removeItem :: JSRef SVGPointList -> Word -> IO (JSRef SVGPoint)
+        js_removeItem :: SVGPointList -> Word -> IO (Nullable SVGPoint)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPointList.removeItem Mozilla SVGPointList.removeItem documentation> 
 removeItem ::
            (MonadIO m) => SVGPointList -> Word -> m (Maybe SVGPoint)
 removeItem self index
-  = liftIO
-      ((js_removeItem (unSVGPointList self) index) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_removeItem (self) index))
  
 foreign import javascript unsafe "$1[\"appendItem\"]($2)"
         js_appendItem ::
-        JSRef SVGPointList -> JSRef SVGPoint -> IO (JSRef SVGPoint)
+        SVGPointList -> Nullable SVGPoint -> IO (Nullable SVGPoint)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPointList.appendItem Mozilla SVGPointList.appendItem documentation> 
 appendItem ::
            (MonadIO m) => SVGPointList -> Maybe SVGPoint -> m (Maybe SVGPoint)
 appendItem self item
   = liftIO
-      ((js_appendItem (unSVGPointList self) (maybe jsNull pToJSRef item))
-         >>= fromJSRef)
+      (nullableToMaybe <$> (js_appendItem (self) (maybeToNullable item)))
  
 foreign import javascript unsafe "$1[\"numberOfItems\"]"
-        js_getNumberOfItems :: JSRef SVGPointList -> IO Word
+        js_getNumberOfItems :: SVGPointList -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPointList.numberOfItems Mozilla SVGPointList.numberOfItems documentation> 
 getNumberOfItems :: (MonadIO m) => SVGPointList -> m Word
-getNumberOfItems self
-  = liftIO (js_getNumberOfItems (unSVGPointList self))
+getNumberOfItems self = liftIO (js_getNumberOfItems (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGPolygonElement.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGPolygonElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGPolygonElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGPolygonElement.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,21 +19,19 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"points\"]" js_getPoints ::
-        JSRef SVGPolygonElement -> IO (JSRef SVGPointList)
+        SVGPolygonElement -> IO (Nullable SVGPointList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPolygonElement.points Mozilla SVGPolygonElement.points documentation> 
 getPoints ::
           (MonadIO m) => SVGPolygonElement -> m (Maybe SVGPointList)
-getPoints self
-  = liftIO ((js_getPoints (unSVGPolygonElement self)) >>= fromJSRef)
+getPoints self = liftIO (nullableToMaybe <$> (js_getPoints (self)))
  
 foreign import javascript unsafe "$1[\"animatedPoints\"]"
         js_getAnimatedPoints ::
-        JSRef SVGPolygonElement -> IO (JSRef SVGPointList)
+        SVGPolygonElement -> IO (Nullable SVGPointList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPolygonElement.animatedPoints Mozilla SVGPolygonElement.animatedPoints documentation> 
 getAnimatedPoints ::
                   (MonadIO m) => SVGPolygonElement -> m (Maybe SVGPointList)
 getAnimatedPoints self
-  = liftIO
-      ((js_getAnimatedPoints (unSVGPolygonElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getAnimatedPoints (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGPolylineElement.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGPolylineElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGPolylineElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGPolylineElement.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,21 +20,19 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"points\"]" js_getPoints ::
-        JSRef SVGPolylineElement -> IO (JSRef SVGPointList)
+        SVGPolylineElement -> IO (Nullable SVGPointList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPolylineElement.points Mozilla SVGPolylineElement.points documentation> 
 getPoints ::
           (MonadIO m) => SVGPolylineElement -> m (Maybe SVGPointList)
-getPoints self
-  = liftIO ((js_getPoints (unSVGPolylineElement self)) >>= fromJSRef)
+getPoints self = liftIO (nullableToMaybe <$> (js_getPoints (self)))
  
 foreign import javascript unsafe "$1[\"animatedPoints\"]"
         js_getAnimatedPoints ::
-        JSRef SVGPolylineElement -> IO (JSRef SVGPointList)
+        SVGPolylineElement -> IO (Nullable SVGPointList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPolylineElement.animatedPoints Mozilla SVGPolylineElement.animatedPoints documentation> 
 getAnimatedPoints ::
                   (MonadIO m) => SVGPolylineElement -> m (Maybe SVGPointList)
 getAnimatedPoints self
-  = liftIO
-      ((js_getAnimatedPoints (unSVGPolylineElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getAnimatedPoints (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGPreserveAspectRatio.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGPreserveAspectRatio.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGPreserveAspectRatio.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGPreserveAspectRatio.hs
@@ -19,7 +19,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -47,34 +47,30 @@
 pattern SVG_MEETORSLICE_SLICE = 2
  
 foreign import javascript unsafe "$1[\"align\"] = $2;" js_setAlign
-        :: JSRef SVGPreserveAspectRatio -> Word -> IO ()
+        :: SVGPreserveAspectRatio -> Word -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPreserveAspectRatio.align Mozilla SVGPreserveAspectRatio.align documentation> 
 setAlign :: (MonadIO m) => SVGPreserveAspectRatio -> Word -> m ()
-setAlign self val
-  = liftIO (js_setAlign (unSVGPreserveAspectRatio self) val)
+setAlign self val = liftIO (js_setAlign (self) val)
  
 foreign import javascript unsafe "$1[\"align\"]" js_getAlign ::
-        JSRef SVGPreserveAspectRatio -> IO Word
+        SVGPreserveAspectRatio -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPreserveAspectRatio.align Mozilla SVGPreserveAspectRatio.align documentation> 
 getAlign :: (MonadIO m) => SVGPreserveAspectRatio -> m Word
-getAlign self
-  = liftIO (js_getAlign (unSVGPreserveAspectRatio self))
+getAlign self = liftIO (js_getAlign (self))
  
 foreign import javascript unsafe "$1[\"meetOrSlice\"] = $2;"
-        js_setMeetOrSlice :: JSRef SVGPreserveAspectRatio -> Word -> IO ()
+        js_setMeetOrSlice :: SVGPreserveAspectRatio -> Word -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPreserveAspectRatio.meetOrSlice Mozilla SVGPreserveAspectRatio.meetOrSlice documentation> 
 setMeetOrSlice ::
                (MonadIO m) => SVGPreserveAspectRatio -> Word -> m ()
-setMeetOrSlice self val
-  = liftIO (js_setMeetOrSlice (unSVGPreserveAspectRatio self) val)
+setMeetOrSlice self val = liftIO (js_setMeetOrSlice (self) val)
  
 foreign import javascript unsafe "$1[\"meetOrSlice\"]"
-        js_getMeetOrSlice :: JSRef SVGPreserveAspectRatio -> IO Word
+        js_getMeetOrSlice :: SVGPreserveAspectRatio -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGPreserveAspectRatio.meetOrSlice Mozilla SVGPreserveAspectRatio.meetOrSlice documentation> 
 getMeetOrSlice :: (MonadIO m) => SVGPreserveAspectRatio -> m Word
-getMeetOrSlice self
-  = liftIO (js_getMeetOrSlice (unSVGPreserveAspectRatio self))
+getMeetOrSlice self = liftIO (js_getMeetOrSlice (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGRadialGradientElement.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGRadialGradientElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGRadialGradientElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGRadialGradientElement.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,67 +20,55 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"cx\"]" js_getCx ::
-        JSRef SVGRadialGradientElement -> IO (JSRef SVGAnimatedLength)
+        SVGRadialGradientElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGRadialGradientElement.cx Mozilla SVGRadialGradientElement.cx documentation> 
 getCx ::
       (MonadIO m) =>
         SVGRadialGradientElement -> m (Maybe SVGAnimatedLength)
-getCx self
-  = liftIO
-      ((js_getCx (unSVGRadialGradientElement self)) >>= fromJSRef)
+getCx self = liftIO (nullableToMaybe <$> (js_getCx (self)))
  
 foreign import javascript unsafe "$1[\"cy\"]" js_getCy ::
-        JSRef SVGRadialGradientElement -> IO (JSRef SVGAnimatedLength)
+        SVGRadialGradientElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGRadialGradientElement.cy Mozilla SVGRadialGradientElement.cy documentation> 
 getCy ::
       (MonadIO m) =>
         SVGRadialGradientElement -> m (Maybe SVGAnimatedLength)
-getCy self
-  = liftIO
-      ((js_getCy (unSVGRadialGradientElement self)) >>= fromJSRef)
+getCy self = liftIO (nullableToMaybe <$> (js_getCy (self)))
  
 foreign import javascript unsafe "$1[\"r\"]" js_getR ::
-        JSRef SVGRadialGradientElement -> IO (JSRef SVGAnimatedLength)
+        SVGRadialGradientElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGRadialGradientElement.r Mozilla SVGRadialGradientElement.r documentation> 
 getR ::
      (MonadIO m) =>
        SVGRadialGradientElement -> m (Maybe SVGAnimatedLength)
-getR self
-  = liftIO
-      ((js_getR (unSVGRadialGradientElement self)) >>= fromJSRef)
+getR self = liftIO (nullableToMaybe <$> (js_getR (self)))
  
 foreign import javascript unsafe "$1[\"fx\"]" js_getFx ::
-        JSRef SVGRadialGradientElement -> IO (JSRef SVGAnimatedLength)
+        SVGRadialGradientElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGRadialGradientElement.fx Mozilla SVGRadialGradientElement.fx documentation> 
 getFx ::
       (MonadIO m) =>
         SVGRadialGradientElement -> m (Maybe SVGAnimatedLength)
-getFx self
-  = liftIO
-      ((js_getFx (unSVGRadialGradientElement self)) >>= fromJSRef)
+getFx self = liftIO (nullableToMaybe <$> (js_getFx (self)))
  
 foreign import javascript unsafe "$1[\"fy\"]" js_getFy ::
-        JSRef SVGRadialGradientElement -> IO (JSRef SVGAnimatedLength)
+        SVGRadialGradientElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGRadialGradientElement.fy Mozilla SVGRadialGradientElement.fy documentation> 
 getFy ::
       (MonadIO m) =>
         SVGRadialGradientElement -> m (Maybe SVGAnimatedLength)
-getFy self
-  = liftIO
-      ((js_getFy (unSVGRadialGradientElement self)) >>= fromJSRef)
+getFy self = liftIO (nullableToMaybe <$> (js_getFy (self)))
  
 foreign import javascript unsafe "$1[\"fr\"]" js_getFr ::
-        JSRef SVGRadialGradientElement -> IO (JSRef SVGAnimatedLength)
+        SVGRadialGradientElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGRadialGradientElement.fr Mozilla SVGRadialGradientElement.fr documentation> 
 getFr ::
       (MonadIO m) =>
         SVGRadialGradientElement -> m (Maybe SVGAnimatedLength)
-getFr self
-  = liftIO
-      ((js_getFr (unSVGRadialGradientElement self)) >>= fromJSRef)
+getFr self = liftIO (nullableToMaybe <$> (js_getFr (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGRect.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGRect.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGRect.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGRect.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -21,57 +21,57 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"x\"] = $2;" js_setX ::
-        JSRef SVGRect -> Float -> IO ()
+        SVGRect -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGRect.x Mozilla SVGRect.x documentation> 
 setX :: (MonadIO m) => SVGRect -> Float -> m ()
-setX self val = liftIO (js_setX (unSVGRect self) val)
+setX self val = liftIO (js_setX (self) val)
  
 foreign import javascript unsafe "$1[\"x\"]" js_getX ::
-        JSRef SVGRect -> IO Float
+        SVGRect -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGRect.x Mozilla SVGRect.x documentation> 
 getX :: (MonadIO m) => SVGRect -> m Float
-getX self = liftIO (js_getX (unSVGRect self))
+getX self = liftIO (js_getX (self))
  
 foreign import javascript unsafe "$1[\"y\"] = $2;" js_setY ::
-        JSRef SVGRect -> Float -> IO ()
+        SVGRect -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGRect.y Mozilla SVGRect.y documentation> 
 setY :: (MonadIO m) => SVGRect -> Float -> m ()
-setY self val = liftIO (js_setY (unSVGRect self) val)
+setY self val = liftIO (js_setY (self) val)
  
 foreign import javascript unsafe "$1[\"y\"]" js_getY ::
-        JSRef SVGRect -> IO Float
+        SVGRect -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGRect.y Mozilla SVGRect.y documentation> 
 getY :: (MonadIO m) => SVGRect -> m Float
-getY self = liftIO (js_getY (unSVGRect self))
+getY self = liftIO (js_getY (self))
  
 foreign import javascript unsafe "$1[\"width\"] = $2;" js_setWidth
-        :: JSRef SVGRect -> Float -> IO ()
+        :: SVGRect -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGRect.width Mozilla SVGRect.width documentation> 
 setWidth :: (MonadIO m) => SVGRect -> Float -> m ()
-setWidth self val = liftIO (js_setWidth (unSVGRect self) val)
+setWidth self val = liftIO (js_setWidth (self) val)
  
 foreign import javascript unsafe "$1[\"width\"]" js_getWidth ::
-        JSRef SVGRect -> IO Float
+        SVGRect -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGRect.width Mozilla SVGRect.width documentation> 
 getWidth :: (MonadIO m) => SVGRect -> m Float
-getWidth self = liftIO (js_getWidth (unSVGRect self))
+getWidth self = liftIO (js_getWidth (self))
  
 foreign import javascript unsafe "$1[\"height\"] = $2;"
-        js_setHeight :: JSRef SVGRect -> Float -> IO ()
+        js_setHeight :: SVGRect -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGRect.height Mozilla SVGRect.height documentation> 
 setHeight :: (MonadIO m) => SVGRect -> Float -> m ()
-setHeight self val = liftIO (js_setHeight (unSVGRect self) val)
+setHeight self val = liftIO (js_setHeight (self) val)
  
 foreign import javascript unsafe "$1[\"height\"]" js_getHeight ::
-        JSRef SVGRect -> IO Float
+        SVGRect -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGRect.height Mozilla SVGRect.height documentation> 
 getHeight :: (MonadIO m) => SVGRect -> m Float
-getHeight self = liftIO (js_getHeight (unSVGRect self))
+getHeight self = liftIO (js_getHeight (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGRectElement.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGRectElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGRectElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGRectElement.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,55 +20,49 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"x\"]" js_getX ::
-        JSRef SVGRectElement -> IO (JSRef SVGAnimatedLength)
+        SVGRectElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGRectElement.x Mozilla SVGRectElement.x documentation> 
 getX ::
      (MonadIO m) => SVGRectElement -> m (Maybe SVGAnimatedLength)
-getX self
-  = liftIO ((js_getX (unSVGRectElement self)) >>= fromJSRef)
+getX self = liftIO (nullableToMaybe <$> (js_getX (self)))
  
 foreign import javascript unsafe "$1[\"y\"]" js_getY ::
-        JSRef SVGRectElement -> IO (JSRef SVGAnimatedLength)
+        SVGRectElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGRectElement.y Mozilla SVGRectElement.y documentation> 
 getY ::
      (MonadIO m) => SVGRectElement -> m (Maybe SVGAnimatedLength)
-getY self
-  = liftIO ((js_getY (unSVGRectElement self)) >>= fromJSRef)
+getY self = liftIO (nullableToMaybe <$> (js_getY (self)))
  
 foreign import javascript unsafe "$1[\"width\"]" js_getWidth ::
-        JSRef SVGRectElement -> IO (JSRef SVGAnimatedLength)
+        SVGRectElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGRectElement.width Mozilla SVGRectElement.width documentation> 
 getWidth ::
          (MonadIO m) => SVGRectElement -> m (Maybe SVGAnimatedLength)
-getWidth self
-  = liftIO ((js_getWidth (unSVGRectElement self)) >>= fromJSRef)
+getWidth self = liftIO (nullableToMaybe <$> (js_getWidth (self)))
  
 foreign import javascript unsafe "$1[\"height\"]" js_getHeight ::
-        JSRef SVGRectElement -> IO (JSRef SVGAnimatedLength)
+        SVGRectElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGRectElement.height Mozilla SVGRectElement.height documentation> 
 getHeight ::
           (MonadIO m) => SVGRectElement -> m (Maybe SVGAnimatedLength)
-getHeight self
-  = liftIO ((js_getHeight (unSVGRectElement self)) >>= fromJSRef)
+getHeight self = liftIO (nullableToMaybe <$> (js_getHeight (self)))
  
 foreign import javascript unsafe "$1[\"rx\"]" js_getRx ::
-        JSRef SVGRectElement -> IO (JSRef SVGAnimatedLength)
+        SVGRectElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGRectElement.rx Mozilla SVGRectElement.rx documentation> 
 getRx ::
       (MonadIO m) => SVGRectElement -> m (Maybe SVGAnimatedLength)
-getRx self
-  = liftIO ((js_getRx (unSVGRectElement self)) >>= fromJSRef)
+getRx self = liftIO (nullableToMaybe <$> (js_getRx (self)))
  
 foreign import javascript unsafe "$1[\"ry\"]" js_getRy ::
-        JSRef SVGRectElement -> IO (JSRef SVGAnimatedLength)
+        SVGRectElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGRectElement.ry Mozilla SVGRectElement.ry documentation> 
 getRy ::
       (MonadIO m) => SVGRectElement -> m (Maybe SVGAnimatedLength)
-getRy self
-  = liftIO ((js_getRy (unSVGRectElement self)) >>= fromJSRef)
+getRy self = liftIO (nullableToMaybe <$> (js_getRy (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGRenderingIntent.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGRenderingIntent.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGRenderingIntent.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGRenderingIntent.hs
@@ -9,7 +9,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGSVGElement.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGSVGElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGSVGElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGSVGElement.hs
@@ -32,7 +32,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -46,83 +46,76 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"suspendRedraw\"]($2)"
-        js_suspendRedraw :: JSRef SVGSVGElement -> Word -> IO Word
+        js_suspendRedraw :: SVGSVGElement -> Word -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGSVGElement.suspendRedraw Mozilla SVGSVGElement.suspendRedraw documentation> 
 suspendRedraw :: (MonadIO m) => SVGSVGElement -> Word -> m Word
 suspendRedraw self maxWaitMilliseconds
-  = liftIO
-      (js_suspendRedraw (unSVGSVGElement self) maxWaitMilliseconds)
+  = liftIO (js_suspendRedraw (self) maxWaitMilliseconds)
  
 foreign import javascript unsafe "$1[\"unsuspendRedraw\"]($2)"
-        js_unsuspendRedraw :: JSRef SVGSVGElement -> Word -> IO ()
+        js_unsuspendRedraw :: SVGSVGElement -> Word -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGSVGElement.unsuspendRedraw Mozilla SVGSVGElement.unsuspendRedraw documentation> 
 unsuspendRedraw :: (MonadIO m) => SVGSVGElement -> Word -> m ()
 unsuspendRedraw self suspendHandleId
-  = liftIO
-      (js_unsuspendRedraw (unSVGSVGElement self) suspendHandleId)
+  = liftIO (js_unsuspendRedraw (self) suspendHandleId)
  
 foreign import javascript unsafe "$1[\"unsuspendRedrawAll\"]()"
-        js_unsuspendRedrawAll :: JSRef SVGSVGElement -> IO ()
+        js_unsuspendRedrawAll :: SVGSVGElement -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGSVGElement.unsuspendRedrawAll Mozilla SVGSVGElement.unsuspendRedrawAll documentation> 
 unsuspendRedrawAll :: (MonadIO m) => SVGSVGElement -> m ()
-unsuspendRedrawAll self
-  = liftIO (js_unsuspendRedrawAll (unSVGSVGElement self))
+unsuspendRedrawAll self = liftIO (js_unsuspendRedrawAll (self))
  
 foreign import javascript unsafe "$1[\"forceRedraw\"]()"
-        js_forceRedraw :: JSRef SVGSVGElement -> IO ()
+        js_forceRedraw :: SVGSVGElement -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGSVGElement.forceRedraw Mozilla SVGSVGElement.forceRedraw documentation> 
 forceRedraw :: (MonadIO m) => SVGSVGElement -> m ()
-forceRedraw self = liftIO (js_forceRedraw (unSVGSVGElement self))
+forceRedraw self = liftIO (js_forceRedraw (self))
  
 foreign import javascript unsafe "$1[\"pauseAnimations\"]()"
-        js_pauseAnimations :: JSRef SVGSVGElement -> IO ()
+        js_pauseAnimations :: SVGSVGElement -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGSVGElement.pauseAnimations Mozilla SVGSVGElement.pauseAnimations documentation> 
 pauseAnimations :: (MonadIO m) => SVGSVGElement -> m ()
-pauseAnimations self
-  = liftIO (js_pauseAnimations (unSVGSVGElement self))
+pauseAnimations self = liftIO (js_pauseAnimations (self))
  
 foreign import javascript unsafe "$1[\"unpauseAnimations\"]()"
-        js_unpauseAnimations :: JSRef SVGSVGElement -> IO ()
+        js_unpauseAnimations :: SVGSVGElement -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGSVGElement.unpauseAnimations Mozilla SVGSVGElement.unpauseAnimations documentation> 
 unpauseAnimations :: (MonadIO m) => SVGSVGElement -> m ()
-unpauseAnimations self
-  = liftIO (js_unpauseAnimations (unSVGSVGElement self))
+unpauseAnimations self = liftIO (js_unpauseAnimations (self))
  
 foreign import javascript unsafe
         "($1[\"animationsPaused\"]() ? 1 : 0)" js_animationsPaused ::
-        JSRef SVGSVGElement -> IO Bool
+        SVGSVGElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGSVGElement.animationsPaused Mozilla SVGSVGElement.animationsPaused documentation> 
 animationsPaused :: (MonadIO m) => SVGSVGElement -> m Bool
-animationsPaused self
-  = liftIO (js_animationsPaused (unSVGSVGElement self))
+animationsPaused self = liftIO (js_animationsPaused (self))
  
 foreign import javascript unsafe "$1[\"getCurrentTime\"]()"
-        js_getCurrentTime :: JSRef SVGSVGElement -> IO Float
+        js_getCurrentTime :: SVGSVGElement -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGSVGElement.getCurrentTime Mozilla SVGSVGElement.getCurrentTime documentation> 
 getCurrentTime :: (MonadIO m) => SVGSVGElement -> m Float
-getCurrentTime self
-  = liftIO (js_getCurrentTime (unSVGSVGElement self))
+getCurrentTime self = liftIO (js_getCurrentTime (self))
  
 foreign import javascript unsafe "$1[\"setCurrentTime\"]($2)"
-        js_setCurrentTime :: JSRef SVGSVGElement -> Float -> IO ()
+        js_setCurrentTime :: SVGSVGElement -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGSVGElement.setCurrentTime Mozilla SVGSVGElement.setCurrentTime documentation> 
 setCurrentTime :: (MonadIO m) => SVGSVGElement -> Float -> m ()
 setCurrentTime self seconds
-  = liftIO (js_setCurrentTime (unSVGSVGElement self) seconds)
+  = liftIO (js_setCurrentTime (self) seconds)
  
 foreign import javascript unsafe
         "$1[\"getIntersectionList\"]($2,\n$3)" js_getIntersectionList ::
-        JSRef SVGSVGElement ->
-          JSRef SVGRect -> JSRef SVGElement -> IO (JSRef NodeList)
+        SVGSVGElement ->
+          Nullable SVGRect -> Nullable SVGElement -> IO (Nullable NodeList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGSVGElement.getIntersectionList Mozilla SVGSVGElement.getIntersectionList documentation> 
 getIntersectionList ::
@@ -131,15 +124,14 @@
                         Maybe SVGRect -> Maybe referenceElement -> m (Maybe NodeList)
 getIntersectionList self rect referenceElement
   = liftIO
-      ((js_getIntersectionList (unSVGSVGElement self)
-          (maybe jsNull pToJSRef rect)
-          (maybe jsNull (unSVGElement . toSVGElement) referenceElement))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_getIntersectionList (self) (maybeToNullable rect)
+            (maybeToNullable (fmap toSVGElement referenceElement))))
  
 foreign import javascript unsafe "$1[\"getEnclosureList\"]($2, $3)"
         js_getEnclosureList ::
-        JSRef SVGSVGElement ->
-          JSRef SVGRect -> JSRef SVGElement -> IO (JSRef NodeList)
+        SVGSVGElement ->
+          Nullable SVGRect -> Nullable SVGElement -> IO (Nullable NodeList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGSVGElement.getEnclosureList Mozilla SVGSVGElement.getEnclosureList documentation> 
 getEnclosureList ::
@@ -148,15 +140,14 @@
                      Maybe SVGRect -> Maybe referenceElement -> m (Maybe NodeList)
 getEnclosureList self rect referenceElement
   = liftIO
-      ((js_getEnclosureList (unSVGSVGElement self)
-          (maybe jsNull pToJSRef rect)
-          (maybe jsNull (unSVGElement . toSVGElement) referenceElement))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_getEnclosureList (self) (maybeToNullable rect)
+            (maybeToNullable (fmap toSVGElement referenceElement))))
  
 foreign import javascript unsafe
         "($1[\"checkIntersection\"]($2,\n$3) ? 1 : 0)" js_checkIntersection
         ::
-        JSRef SVGSVGElement -> JSRef SVGElement -> JSRef SVGRect -> IO Bool
+        SVGSVGElement -> Nullable SVGElement -> Nullable SVGRect -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGSVGElement.checkIntersection Mozilla SVGSVGElement.checkIntersection documentation> 
 checkIntersection ::
@@ -164,13 +155,13 @@
                     SVGSVGElement -> Maybe element -> Maybe SVGRect -> m Bool
 checkIntersection self element rect
   = liftIO
-      (js_checkIntersection (unSVGSVGElement self)
-         (maybe jsNull (unSVGElement . toSVGElement) element)
-         (maybe jsNull pToJSRef rect))
+      (js_checkIntersection (self)
+         (maybeToNullable (fmap toSVGElement element))
+         (maybeToNullable rect))
  
 foreign import javascript unsafe
         "($1[\"checkEnclosure\"]($2,\n$3) ? 1 : 0)" js_checkEnclosure ::
-        JSRef SVGSVGElement -> JSRef SVGElement -> JSRef SVGRect -> IO Bool
+        SVGSVGElement -> Nullable SVGElement -> Nullable SVGRect -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGSVGElement.checkEnclosure Mozilla SVGSVGElement.checkEnclosure documentation> 
 checkEnclosure ::
@@ -178,88 +169,84 @@
                  SVGSVGElement -> Maybe element -> Maybe SVGRect -> m Bool
 checkEnclosure self element rect
   = liftIO
-      (js_checkEnclosure (unSVGSVGElement self)
-         (maybe jsNull (unSVGElement . toSVGElement) element)
-         (maybe jsNull pToJSRef rect))
+      (js_checkEnclosure (self)
+         (maybeToNullable (fmap toSVGElement element))
+         (maybeToNullable rect))
  
 foreign import javascript unsafe "$1[\"deselectAll\"]()"
-        js_deselectAll :: JSRef SVGSVGElement -> IO ()
+        js_deselectAll :: SVGSVGElement -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGSVGElement.deselectAll Mozilla SVGSVGElement.deselectAll documentation> 
 deselectAll :: (MonadIO m) => SVGSVGElement -> m ()
-deselectAll self = liftIO (js_deselectAll (unSVGSVGElement self))
+deselectAll self = liftIO (js_deselectAll (self))
  
 foreign import javascript unsafe "$1[\"createSVGNumber\"]()"
-        js_createSVGNumber :: JSRef SVGSVGElement -> IO (JSRef SVGNumber)
+        js_createSVGNumber :: SVGSVGElement -> IO (Nullable SVGNumber)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGSVGElement.createSVGNumber Mozilla SVGSVGElement.createSVGNumber documentation> 
 createSVGNumber ::
                 (MonadIO m) => SVGSVGElement -> m (Maybe SVGNumber)
 createSVGNumber self
-  = liftIO
-      ((js_createSVGNumber (unSVGSVGElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_createSVGNumber (self)))
  
 foreign import javascript unsafe "$1[\"createSVGLength\"]()"
-        js_createSVGLength :: JSRef SVGSVGElement -> IO (JSRef SVGLength)
+        js_createSVGLength :: SVGSVGElement -> IO (Nullable SVGLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGSVGElement.createSVGLength Mozilla SVGSVGElement.createSVGLength documentation> 
 createSVGLength ::
                 (MonadIO m) => SVGSVGElement -> m (Maybe SVGLength)
 createSVGLength self
-  = liftIO
-      ((js_createSVGLength (unSVGSVGElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_createSVGLength (self)))
  
 foreign import javascript unsafe "$1[\"createSVGAngle\"]()"
-        js_createSVGAngle :: JSRef SVGSVGElement -> IO (JSRef SVGAngle)
+        js_createSVGAngle :: SVGSVGElement -> IO (Nullable SVGAngle)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGSVGElement.createSVGAngle Mozilla SVGSVGElement.createSVGAngle documentation> 
 createSVGAngle ::
                (MonadIO m) => SVGSVGElement -> m (Maybe SVGAngle)
 createSVGAngle self
-  = liftIO ((js_createSVGAngle (unSVGSVGElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_createSVGAngle (self)))
  
 foreign import javascript unsafe "$1[\"createSVGPoint\"]()"
-        js_createSVGPoint :: JSRef SVGSVGElement -> IO (JSRef SVGPoint)
+        js_createSVGPoint :: SVGSVGElement -> IO (Nullable SVGPoint)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGSVGElement.createSVGPoint Mozilla SVGSVGElement.createSVGPoint documentation> 
 createSVGPoint ::
                (MonadIO m) => SVGSVGElement -> m (Maybe SVGPoint)
 createSVGPoint self
-  = liftIO ((js_createSVGPoint (unSVGSVGElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_createSVGPoint (self)))
  
 foreign import javascript unsafe "$1[\"createSVGMatrix\"]()"
-        js_createSVGMatrix :: JSRef SVGSVGElement -> IO (JSRef SVGMatrix)
+        js_createSVGMatrix :: SVGSVGElement -> IO (Nullable SVGMatrix)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGSVGElement.createSVGMatrix Mozilla SVGSVGElement.createSVGMatrix documentation> 
 createSVGMatrix ::
                 (MonadIO m) => SVGSVGElement -> m (Maybe SVGMatrix)
 createSVGMatrix self
-  = liftIO
-      ((js_createSVGMatrix (unSVGSVGElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_createSVGMatrix (self)))
  
 foreign import javascript unsafe "$1[\"createSVGRect\"]()"
-        js_createSVGRect :: JSRef SVGSVGElement -> IO (JSRef SVGRect)
+        js_createSVGRect :: SVGSVGElement -> IO (Nullable SVGRect)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGSVGElement.createSVGRect Mozilla SVGSVGElement.createSVGRect documentation> 
 createSVGRect :: (MonadIO m) => SVGSVGElement -> m (Maybe SVGRect)
 createSVGRect self
-  = liftIO ((js_createSVGRect (unSVGSVGElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_createSVGRect (self)))
  
 foreign import javascript unsafe "$1[\"createSVGTransform\"]()"
         js_createSVGTransform ::
-        JSRef SVGSVGElement -> IO (JSRef SVGTransform)
+        SVGSVGElement -> IO (Nullable SVGTransform)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGSVGElement.createSVGTransform Mozilla SVGSVGElement.createSVGTransform documentation> 
 createSVGTransform ::
                    (MonadIO m) => SVGSVGElement -> m (Maybe SVGTransform)
 createSVGTransform self
-  = liftIO
-      ((js_createSVGTransform (unSVGSVGElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_createSVGTransform (self)))
  
 foreign import javascript unsafe
         "$1[\"createSVGTransformFromMatrix\"]($2)"
         js_createSVGTransformFromMatrix ::
-        JSRef SVGSVGElement -> JSRef SVGMatrix -> IO (JSRef SVGTransform)
+        SVGSVGElement -> Nullable SVGMatrix -> IO (Nullable SVGTransform)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGSVGElement.createSVGTransformFromMatrix Mozilla SVGSVGElement.createSVGTransformFromMatrix documentation> 
 createSVGTransformFromMatrix ::
@@ -267,13 +254,12 @@
                                SVGSVGElement -> Maybe SVGMatrix -> m (Maybe SVGTransform)
 createSVGTransformFromMatrix self matrix
   = liftIO
-      ((js_createSVGTransformFromMatrix (unSVGSVGElement self)
-          (maybe jsNull pToJSRef matrix))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createSVGTransformFromMatrix (self) (maybeToNullable matrix)))
  
 foreign import javascript unsafe "$1[\"getElementById\"]($2)"
         js_getElementById ::
-        JSRef SVGSVGElement -> JSString -> IO (JSRef Element)
+        SVGSVGElement -> JSString -> IO (Nullable Element)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGSVGElement.getElementById Mozilla SVGSVGElement.getElementById documentation> 
 getElementById ::
@@ -281,165 +267,154 @@
                  SVGSVGElement -> elementId -> m (Maybe Element)
 getElementById self elementId
   = liftIO
-      ((js_getElementById (unSVGSVGElement self) (toJSString elementId))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_getElementById (self) (toJSString elementId)))
  
 foreign import javascript unsafe "$1[\"x\"]" js_getX ::
-        JSRef SVGSVGElement -> IO (JSRef SVGAnimatedLength)
+        SVGSVGElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGSVGElement.x Mozilla SVGSVGElement.x documentation> 
 getX :: (MonadIO m) => SVGSVGElement -> m (Maybe SVGAnimatedLength)
-getX self = liftIO ((js_getX (unSVGSVGElement self)) >>= fromJSRef)
+getX self = liftIO (nullableToMaybe <$> (js_getX (self)))
  
 foreign import javascript unsafe "$1[\"y\"]" js_getY ::
-        JSRef SVGSVGElement -> IO (JSRef SVGAnimatedLength)
+        SVGSVGElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGSVGElement.y Mozilla SVGSVGElement.y documentation> 
 getY :: (MonadIO m) => SVGSVGElement -> m (Maybe SVGAnimatedLength)
-getY self = liftIO ((js_getY (unSVGSVGElement self)) >>= fromJSRef)
+getY self = liftIO (nullableToMaybe <$> (js_getY (self)))
  
 foreign import javascript unsafe "$1[\"width\"]" js_getWidth ::
-        JSRef SVGSVGElement -> IO (JSRef SVGAnimatedLength)
+        SVGSVGElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGSVGElement.width Mozilla SVGSVGElement.width documentation> 
 getWidth ::
          (MonadIO m) => SVGSVGElement -> m (Maybe SVGAnimatedLength)
-getWidth self
-  = liftIO ((js_getWidth (unSVGSVGElement self)) >>= fromJSRef)
+getWidth self = liftIO (nullableToMaybe <$> (js_getWidth (self)))
  
 foreign import javascript unsafe "$1[\"height\"]" js_getHeight ::
-        JSRef SVGSVGElement -> IO (JSRef SVGAnimatedLength)
+        SVGSVGElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGSVGElement.height Mozilla SVGSVGElement.height documentation> 
 getHeight ::
           (MonadIO m) => SVGSVGElement -> m (Maybe SVGAnimatedLength)
-getHeight self
-  = liftIO ((js_getHeight (unSVGSVGElement self)) >>= fromJSRef)
+getHeight self = liftIO (nullableToMaybe <$> (js_getHeight (self)))
  
 foreign import javascript unsafe "$1[\"contentScriptType\"] = $2;"
-        js_setContentScriptType :: JSRef SVGSVGElement -> JSString -> IO ()
+        js_setContentScriptType :: SVGSVGElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGSVGElement.contentScriptType Mozilla SVGSVGElement.contentScriptType documentation> 
 setContentScriptType ::
                      (MonadIO m, ToJSString val) => SVGSVGElement -> val -> m ()
 setContentScriptType self val
-  = liftIO
-      (js_setContentScriptType (unSVGSVGElement self) (toJSString val))
+  = liftIO (js_setContentScriptType (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"contentScriptType\"]"
-        js_getContentScriptType :: JSRef SVGSVGElement -> IO JSString
+        js_getContentScriptType :: SVGSVGElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGSVGElement.contentScriptType Mozilla SVGSVGElement.contentScriptType documentation> 
 getContentScriptType ::
                      (MonadIO m, FromJSString result) => SVGSVGElement -> m result
 getContentScriptType self
-  = liftIO
-      (fromJSString <$> (js_getContentScriptType (unSVGSVGElement self)))
+  = liftIO (fromJSString <$> (js_getContentScriptType (self)))
  
 foreign import javascript unsafe "$1[\"contentStyleType\"] = $2;"
-        js_setContentStyleType :: JSRef SVGSVGElement -> JSString -> IO ()
+        js_setContentStyleType :: SVGSVGElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGSVGElement.contentStyleType Mozilla SVGSVGElement.contentStyleType documentation> 
 setContentStyleType ::
                     (MonadIO m, ToJSString val) => SVGSVGElement -> val -> m ()
 setContentStyleType self val
-  = liftIO
-      (js_setContentStyleType (unSVGSVGElement self) (toJSString val))
+  = liftIO (js_setContentStyleType (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"contentStyleType\"]"
-        js_getContentStyleType :: JSRef SVGSVGElement -> IO JSString
+        js_getContentStyleType :: SVGSVGElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGSVGElement.contentStyleType Mozilla SVGSVGElement.contentStyleType documentation> 
 getContentStyleType ::
                     (MonadIO m, FromJSString result) => SVGSVGElement -> m result
 getContentStyleType self
-  = liftIO
-      (fromJSString <$> (js_getContentStyleType (unSVGSVGElement self)))
+  = liftIO (fromJSString <$> (js_getContentStyleType (self)))
  
 foreign import javascript unsafe "$1[\"viewport\"]" js_getViewport
-        :: JSRef SVGSVGElement -> IO (JSRef SVGRect)
+        :: SVGSVGElement -> IO (Nullable SVGRect)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGSVGElement.viewport Mozilla SVGSVGElement.viewport documentation> 
 getViewport :: (MonadIO m) => SVGSVGElement -> m (Maybe SVGRect)
 getViewport self
-  = liftIO ((js_getViewport (unSVGSVGElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getViewport (self)))
  
 foreign import javascript unsafe "$1[\"pixelUnitToMillimeterX\"]"
-        js_getPixelUnitToMillimeterX :: JSRef SVGSVGElement -> IO Float
+        js_getPixelUnitToMillimeterX :: SVGSVGElement -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGSVGElement.pixelUnitToMillimeterX Mozilla SVGSVGElement.pixelUnitToMillimeterX documentation> 
 getPixelUnitToMillimeterX ::
                           (MonadIO m) => SVGSVGElement -> m Float
 getPixelUnitToMillimeterX self
-  = liftIO (js_getPixelUnitToMillimeterX (unSVGSVGElement self))
+  = liftIO (js_getPixelUnitToMillimeterX (self))
  
 foreign import javascript unsafe "$1[\"pixelUnitToMillimeterY\"]"
-        js_getPixelUnitToMillimeterY :: JSRef SVGSVGElement -> IO Float
+        js_getPixelUnitToMillimeterY :: SVGSVGElement -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGSVGElement.pixelUnitToMillimeterY Mozilla SVGSVGElement.pixelUnitToMillimeterY documentation> 
 getPixelUnitToMillimeterY ::
                           (MonadIO m) => SVGSVGElement -> m Float
 getPixelUnitToMillimeterY self
-  = liftIO (js_getPixelUnitToMillimeterY (unSVGSVGElement self))
+  = liftIO (js_getPixelUnitToMillimeterY (self))
  
 foreign import javascript unsafe "$1[\"screenPixelToMillimeterX\"]"
-        js_getScreenPixelToMillimeterX :: JSRef SVGSVGElement -> IO Float
+        js_getScreenPixelToMillimeterX :: SVGSVGElement -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGSVGElement.screenPixelToMillimeterX Mozilla SVGSVGElement.screenPixelToMillimeterX documentation> 
 getScreenPixelToMillimeterX ::
                             (MonadIO m) => SVGSVGElement -> m Float
 getScreenPixelToMillimeterX self
-  = liftIO (js_getScreenPixelToMillimeterX (unSVGSVGElement self))
+  = liftIO (js_getScreenPixelToMillimeterX (self))
  
 foreign import javascript unsafe "$1[\"screenPixelToMillimeterY\"]"
-        js_getScreenPixelToMillimeterY :: JSRef SVGSVGElement -> IO Float
+        js_getScreenPixelToMillimeterY :: SVGSVGElement -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGSVGElement.screenPixelToMillimeterY Mozilla SVGSVGElement.screenPixelToMillimeterY documentation> 
 getScreenPixelToMillimeterY ::
                             (MonadIO m) => SVGSVGElement -> m Float
 getScreenPixelToMillimeterY self
-  = liftIO (js_getScreenPixelToMillimeterY (unSVGSVGElement self))
+  = liftIO (js_getScreenPixelToMillimeterY (self))
  
 foreign import javascript unsafe "($1[\"useCurrentView\"] ? 1 : 0)"
-        js_getUseCurrentView :: JSRef SVGSVGElement -> IO Bool
+        js_getUseCurrentView :: SVGSVGElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGSVGElement.useCurrentView Mozilla SVGSVGElement.useCurrentView documentation> 
 getUseCurrentView :: (MonadIO m) => SVGSVGElement -> m Bool
-getUseCurrentView self
-  = liftIO (js_getUseCurrentView (unSVGSVGElement self))
+getUseCurrentView self = liftIO (js_getUseCurrentView (self))
  
 foreign import javascript unsafe "$1[\"currentView\"]"
-        js_getCurrentView :: JSRef SVGSVGElement -> IO (JSRef SVGViewSpec)
+        js_getCurrentView :: SVGSVGElement -> IO (Nullable SVGViewSpec)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGSVGElement.currentView Mozilla SVGSVGElement.currentView documentation> 
 getCurrentView ::
                (MonadIO m) => SVGSVGElement -> m (Maybe SVGViewSpec)
 getCurrentView self
-  = liftIO ((js_getCurrentView (unSVGSVGElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getCurrentView (self)))
  
 foreign import javascript unsafe "$1[\"currentScale\"] = $2;"
-        js_setCurrentScale :: JSRef SVGSVGElement -> Float -> IO ()
+        js_setCurrentScale :: SVGSVGElement -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGSVGElement.currentScale Mozilla SVGSVGElement.currentScale documentation> 
 setCurrentScale :: (MonadIO m) => SVGSVGElement -> Float -> m ()
-setCurrentScale self val
-  = liftIO (js_setCurrentScale (unSVGSVGElement self) val)
+setCurrentScale self val = liftIO (js_setCurrentScale (self) val)
  
 foreign import javascript unsafe "$1[\"currentScale\"]"
-        js_getCurrentScale :: JSRef SVGSVGElement -> IO Float
+        js_getCurrentScale :: SVGSVGElement -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGSVGElement.currentScale Mozilla SVGSVGElement.currentScale documentation> 
 getCurrentScale :: (MonadIO m) => SVGSVGElement -> m Float
-getCurrentScale self
-  = liftIO (js_getCurrentScale (unSVGSVGElement self))
+getCurrentScale self = liftIO (js_getCurrentScale (self))
  
 foreign import javascript unsafe "$1[\"currentTranslate\"]"
-        js_getCurrentTranslate ::
-        JSRef SVGSVGElement -> IO (JSRef SVGPoint)
+        js_getCurrentTranslate :: SVGSVGElement -> IO (Nullable SVGPoint)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGSVGElement.currentTranslate Mozilla SVGSVGElement.currentTranslate documentation> 
 getCurrentTranslate ::
                     (MonadIO m) => SVGSVGElement -> m (Maybe SVGPoint)
 getCurrentTranslate self
-  = liftIO
-      ((js_getCurrentTranslate (unSVGSVGElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getCurrentTranslate (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGScriptElement.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGScriptElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGScriptElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGScriptElement.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,23 +19,19 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"type\"] = $2;" js_setType ::
-        JSRef SVGScriptElement -> JSRef (Maybe JSString) -> IO ()
+        SVGScriptElement -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGScriptElement.type Mozilla SVGScriptElement.type documentation> 
 setType ::
         (MonadIO m, ToJSString val) =>
           SVGScriptElement -> Maybe val -> m ()
-setType self val
-  = liftIO
-      (js_setType (unSVGScriptElement self) (toMaybeJSString val))
+setType self val = liftIO (js_setType (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"type\"]" js_getType ::
-        JSRef SVGScriptElement -> IO (JSRef (Maybe JSString))
+        SVGScriptElement -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGScriptElement.type Mozilla SVGScriptElement.type documentation> 
 getType ::
         (MonadIO m, FromJSString result) =>
           SVGScriptElement -> m (Maybe result)
-getType self
-  = liftIO
-      (fromMaybeJSString <$> (js_getType (unSVGScriptElement self)))
+getType self = liftIO (fromMaybeJSString <$> (js_getType (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGStopElement.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGStopElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGStopElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGStopElement.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,10 +19,9 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"offset\"]" js_getOffset ::
-        JSRef SVGStopElement -> IO (JSRef SVGAnimatedNumber)
+        SVGStopElement -> IO (Nullable SVGAnimatedNumber)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGStopElement.offset Mozilla SVGStopElement.offset documentation> 
 getOffset ::
           (MonadIO m) => SVGStopElement -> m (Maybe SVGAnimatedNumber)
-getOffset self
-  = liftIO ((js_getOffset (unSVGStopElement self)) >>= fromJSRef)
+getOffset self = liftIO (nullableToMaybe <$> (js_getOffset (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGStringList.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGStringList.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGStringList.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGStringList.hs
@@ -8,7 +8,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -22,14 +22,14 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"clear\"]()" js_clear ::
-        JSRef SVGStringList -> IO ()
+        SVGStringList -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGStringList.clear Mozilla SVGStringList.clear documentation> 
 clear :: (MonadIO m) => SVGStringList -> m ()
-clear self = liftIO (js_clear (unSVGStringList self))
+clear self = liftIO (js_clear (self))
  
 foreign import javascript unsafe "$1[\"initialize\"]($2)"
-        js_initialize :: JSRef SVGStringList -> JSString -> IO JSString
+        js_initialize :: SVGStringList -> JSString -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGStringList.initialize Mozilla SVGStringList.initialize documentation> 
 initialize ::
@@ -37,23 +37,21 @@
              SVGStringList -> item -> m result
 initialize self item
   = liftIO
-      (fromJSString <$>
-         (js_initialize (unSVGStringList self) (toJSString item)))
+      (fromJSString <$> (js_initialize (self) (toJSString item)))
  
 foreign import javascript unsafe "$1[\"getItem\"]($2)" js_getItem
-        :: JSRef SVGStringList -> Word -> IO JSString
+        :: SVGStringList -> Word -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGStringList.getItem Mozilla SVGStringList.getItem documentation> 
 getItem ::
         (MonadIO m, FromJSString result) =>
           SVGStringList -> Word -> m result
 getItem self index
-  = liftIO
-      (fromJSString <$> (js_getItem (unSVGStringList self) index))
+  = liftIO (fromJSString <$> (js_getItem (self) index))
  
 foreign import javascript unsafe "$1[\"insertItemBefore\"]($2, $3)"
         js_insertItemBefore ::
-        JSRef SVGStringList -> JSString -> Word -> IO JSString
+        SVGStringList -> JSString -> Word -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGStringList.insertItemBefore Mozilla SVGStringList.insertItemBefore documentation> 
 insertItemBefore ::
@@ -62,12 +60,10 @@
 insertItemBefore self item index
   = liftIO
       (fromJSString <$>
-         (js_insertItemBefore (unSVGStringList self) (toJSString item)
-            index))
+         (js_insertItemBefore (self) (toJSString item) index))
  
 foreign import javascript unsafe "$1[\"replaceItem\"]($2, $3)"
-        js_replaceItem ::
-        JSRef SVGStringList -> JSString -> Word -> IO JSString
+        js_replaceItem :: SVGStringList -> JSString -> Word -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGStringList.replaceItem Mozilla SVGStringList.replaceItem documentation> 
 replaceItem ::
@@ -75,22 +71,20 @@
               SVGStringList -> item -> Word -> m result
 replaceItem self item index
   = liftIO
-      (fromJSString <$>
-         (js_replaceItem (unSVGStringList self) (toJSString item) index))
+      (fromJSString <$> (js_replaceItem (self) (toJSString item) index))
  
 foreign import javascript unsafe "$1[\"removeItem\"]($2)"
-        js_removeItem :: JSRef SVGStringList -> Word -> IO JSString
+        js_removeItem :: SVGStringList -> Word -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGStringList.removeItem Mozilla SVGStringList.removeItem documentation> 
 removeItem ::
            (MonadIO m, FromJSString result) =>
              SVGStringList -> Word -> m result
 removeItem self index
-  = liftIO
-      (fromJSString <$> (js_removeItem (unSVGStringList self) index))
+  = liftIO (fromJSString <$> (js_removeItem (self) index))
  
 foreign import javascript unsafe "$1[\"appendItem\"]($2)"
-        js_appendItem :: JSRef SVGStringList -> JSString -> IO JSString
+        js_appendItem :: SVGStringList -> JSString -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGStringList.appendItem Mozilla SVGStringList.appendItem documentation> 
 appendItem ::
@@ -98,13 +92,11 @@
              SVGStringList -> item -> m result
 appendItem self item
   = liftIO
-      (fromJSString <$>
-         (js_appendItem (unSVGStringList self) (toJSString item)))
+      (fromJSString <$> (js_appendItem (self) (toJSString item)))
  
 foreign import javascript unsafe "$1[\"numberOfItems\"]"
-        js_getNumberOfItems :: JSRef SVGStringList -> IO Word
+        js_getNumberOfItems :: SVGStringList -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGStringList.numberOfItems Mozilla SVGStringList.numberOfItems documentation> 
 getNumberOfItems :: (MonadIO m) => SVGStringList -> m Word
-getNumberOfItems self
-  = liftIO (js_getNumberOfItems (unSVGStringList self))
+getNumberOfItems self = liftIO (js_getNumberOfItems (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGStyleElement.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGStyleElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGStyleElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGStyleElement.hs
@@ -8,7 +8,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -22,70 +22,63 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"disabled\"] = $2;"
-        js_setDisabled :: JSRef SVGStyleElement -> Bool -> IO ()
+        js_setDisabled :: SVGStyleElement -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGStyleElement.disabled Mozilla SVGStyleElement.disabled documentation> 
 setDisabled :: (MonadIO m) => SVGStyleElement -> Bool -> m ()
-setDisabled self val
-  = liftIO (js_setDisabled (unSVGStyleElement self) val)
+setDisabled self val = liftIO (js_setDisabled (self) val)
  
 foreign import javascript unsafe "($1[\"disabled\"] ? 1 : 0)"
-        js_getDisabled :: JSRef SVGStyleElement -> IO Bool
+        js_getDisabled :: SVGStyleElement -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGStyleElement.disabled Mozilla SVGStyleElement.disabled documentation> 
 getDisabled :: (MonadIO m) => SVGStyleElement -> m Bool
-getDisabled self = liftIO (js_getDisabled (unSVGStyleElement self))
+getDisabled self = liftIO (js_getDisabled (self))
  
 foreign import javascript unsafe "$1[\"type\"] = $2;" js_setType ::
-        JSRef SVGStyleElement -> JSString -> IO ()
+        SVGStyleElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGStyleElement.type Mozilla SVGStyleElement.type documentation> 
 setType ::
         (MonadIO m, ToJSString val) => SVGStyleElement -> val -> m ()
-setType self val
-  = liftIO (js_setType (unSVGStyleElement self) (toJSString val))
+setType self val = liftIO (js_setType (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"type\"]" js_getType ::
-        JSRef SVGStyleElement -> IO JSString
+        SVGStyleElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGStyleElement.type Mozilla SVGStyleElement.type documentation> 
 getType ::
         (MonadIO m, FromJSString result) => SVGStyleElement -> m result
-getType self
-  = liftIO (fromJSString <$> (js_getType (unSVGStyleElement self)))
+getType self = liftIO (fromJSString <$> (js_getType (self)))
  
 foreign import javascript unsafe "$1[\"media\"] = $2;" js_setMedia
-        :: JSRef SVGStyleElement -> JSString -> IO ()
+        :: SVGStyleElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGStyleElement.media Mozilla SVGStyleElement.media documentation> 
 setMedia ::
          (MonadIO m, ToJSString val) => SVGStyleElement -> val -> m ()
-setMedia self val
-  = liftIO (js_setMedia (unSVGStyleElement self) (toJSString val))
+setMedia self val = liftIO (js_setMedia (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"media\"]" js_getMedia ::
-        JSRef SVGStyleElement -> IO JSString
+        SVGStyleElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGStyleElement.media Mozilla SVGStyleElement.media documentation> 
 getMedia ::
          (MonadIO m, FromJSString result) => SVGStyleElement -> m result
-getMedia self
-  = liftIO (fromJSString <$> (js_getMedia (unSVGStyleElement self)))
+getMedia self = liftIO (fromJSString <$> (js_getMedia (self)))
  
 foreign import javascript unsafe "$1[\"title\"] = $2;" js_setTitle
-        :: JSRef SVGStyleElement -> JSString -> IO ()
+        :: SVGStyleElement -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGStyleElement.title Mozilla SVGStyleElement.title documentation> 
 setTitle ::
          (MonadIO m, ToJSString val) => SVGStyleElement -> val -> m ()
-setTitle self val
-  = liftIO (js_setTitle (unSVGStyleElement self) (toJSString val))
+setTitle self val = liftIO (js_setTitle (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"title\"]" js_getTitle ::
-        JSRef SVGStyleElement -> IO JSString
+        SVGStyleElement -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGStyleElement.title Mozilla SVGStyleElement.title documentation> 
 getTitle ::
          (MonadIO m, FromJSString result) => SVGStyleElement -> m result
-getTitle self
-  = liftIO (fromJSString <$> (js_getTitle (unSVGStyleElement self)))
+getTitle self = liftIO (fromJSString <$> (js_getTitle (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGTests.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGTests.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGTests.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGTests.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -22,41 +22,38 @@
  
 foreign import javascript unsafe
         "($1[\"hasExtension\"]($2) ? 1 : 0)" js_hasExtension ::
-        JSRef SVGTests -> JSString -> IO Bool
+        SVGTests -> JSString -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGTests.hasExtension Mozilla SVGTests.hasExtension documentation> 
 hasExtension ::
              (MonadIO m, ToJSString extension) =>
                SVGTests -> extension -> m Bool
 hasExtension self extension
-  = liftIO (js_hasExtension (unSVGTests self) (toJSString extension))
+  = liftIO (js_hasExtension (self) (toJSString extension))
  
 foreign import javascript unsafe "$1[\"requiredFeatures\"]"
-        js_getRequiredFeatures ::
-        JSRef SVGTests -> IO (JSRef SVGStringList)
+        js_getRequiredFeatures :: SVGTests -> IO (Nullable SVGStringList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGTests.requiredFeatures Mozilla SVGTests.requiredFeatures documentation> 
 getRequiredFeatures ::
                     (MonadIO m) => SVGTests -> m (Maybe SVGStringList)
 getRequiredFeatures self
-  = liftIO ((js_getRequiredFeatures (unSVGTests self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getRequiredFeatures (self)))
  
 foreign import javascript unsafe "$1[\"requiredExtensions\"]"
-        js_getRequiredExtensions ::
-        JSRef SVGTests -> IO (JSRef SVGStringList)
+        js_getRequiredExtensions :: SVGTests -> IO (Nullable SVGStringList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGTests.requiredExtensions Mozilla SVGTests.requiredExtensions documentation> 
 getRequiredExtensions ::
                       (MonadIO m) => SVGTests -> m (Maybe SVGStringList)
 getRequiredExtensions self
-  = liftIO
-      ((js_getRequiredExtensions (unSVGTests self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getRequiredExtensions (self)))
  
 foreign import javascript unsafe "$1[\"systemLanguage\"]"
-        js_getSystemLanguage :: JSRef SVGTests -> IO (JSRef SVGStringList)
+        js_getSystemLanguage :: SVGTests -> IO (Nullable SVGStringList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGTests.systemLanguage Mozilla SVGTests.systemLanguage documentation> 
 getSystemLanguage ::
                   (MonadIO m) => SVGTests -> m (Maybe SVGStringList)
 getSystemLanguage self
-  = liftIO ((js_getSystemLanguage (unSVGTests self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getSystemLanguage (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGTextContentElement.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGTextContentElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGTextContentElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGTextContentElement.hs
@@ -16,7 +16,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -30,30 +30,26 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"getNumberOfChars\"]()"
-        js_getNumberOfChars :: JSRef SVGTextContentElement -> IO Int
+        js_getNumberOfChars :: SVGTextContentElement -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGTextContentElement.getNumberOfChars Mozilla SVGTextContentElement.getNumberOfChars documentation> 
 getNumberOfChars ::
                  (MonadIO m, IsSVGTextContentElement self) => self -> m Int
 getNumberOfChars self
-  = liftIO
-      (js_getNumberOfChars
-         (unSVGTextContentElement (toSVGTextContentElement self)))
+  = liftIO (js_getNumberOfChars (toSVGTextContentElement self))
  
 foreign import javascript unsafe "$1[\"getComputedTextLength\"]()"
-        js_getComputedTextLength :: JSRef SVGTextContentElement -> IO Float
+        js_getComputedTextLength :: SVGTextContentElement -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGTextContentElement.getComputedTextLength Mozilla SVGTextContentElement.getComputedTextLength documentation> 
 getComputedTextLength ::
                       (MonadIO m, IsSVGTextContentElement self) => self -> m Float
 getComputedTextLength self
-  = liftIO
-      (js_getComputedTextLength
-         (unSVGTextContentElement (toSVGTextContentElement self)))
+  = liftIO (js_getComputedTextLength (toSVGTextContentElement self))
  
 foreign import javascript unsafe
         "$1[\"getSubStringLength\"]($2, $3)" js_getSubStringLength ::
-        JSRef SVGTextContentElement -> Word -> Word -> IO Float
+        SVGTextContentElement -> Word -> Word -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGTextContentElement.getSubStringLength Mozilla SVGTextContentElement.getSubStringLength documentation> 
 getSubStringLength ::
@@ -61,14 +57,12 @@
                      self -> Word -> Word -> m Float
 getSubStringLength self offset length
   = liftIO
-      (js_getSubStringLength
-         (unSVGTextContentElement (toSVGTextContentElement self))
-         offset
+      (js_getSubStringLength (toSVGTextContentElement self) offset
          length)
  
 foreign import javascript unsafe
         "$1[\"getStartPositionOfChar\"]($2)" js_getStartPositionOfChar ::
-        JSRef SVGTextContentElement -> Word -> IO (JSRef SVGPoint)
+        SVGTextContentElement -> Word -> IO (Nullable SVGPoint)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGTextContentElement.getStartPositionOfChar Mozilla SVGTextContentElement.getStartPositionOfChar documentation> 
 getStartPositionOfChar ::
@@ -76,14 +70,12 @@
                          self -> Word -> m (Maybe SVGPoint)
 getStartPositionOfChar self offset
   = liftIO
-      ((js_getStartPositionOfChar
-          (unSVGTextContentElement (toSVGTextContentElement self))
-          offset)
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_getStartPositionOfChar (toSVGTextContentElement self) offset))
  
 foreign import javascript unsafe "$1[\"getEndPositionOfChar\"]($2)"
         js_getEndPositionOfChar ::
-        JSRef SVGTextContentElement -> Word -> IO (JSRef SVGPoint)
+        SVGTextContentElement -> Word -> IO (Nullable SVGPoint)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGTextContentElement.getEndPositionOfChar Mozilla SVGTextContentElement.getEndPositionOfChar documentation> 
 getEndPositionOfChar ::
@@ -91,14 +83,12 @@
                        self -> Word -> m (Maybe SVGPoint)
 getEndPositionOfChar self offset
   = liftIO
-      ((js_getEndPositionOfChar
-          (unSVGTextContentElement (toSVGTextContentElement self))
-          offset)
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_getEndPositionOfChar (toSVGTextContentElement self) offset))
  
 foreign import javascript unsafe "$1[\"getExtentOfChar\"]($2)"
         js_getExtentOfChar ::
-        JSRef SVGTextContentElement -> Word -> IO (JSRef SVGRect)
+        SVGTextContentElement -> Word -> IO (Nullable SVGRect)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGTextContentElement.getExtentOfChar Mozilla SVGTextContentElement.getExtentOfChar documentation> 
 getExtentOfChar ::
@@ -106,14 +96,11 @@
                   self -> Word -> m (Maybe SVGRect)
 getExtentOfChar self offset
   = liftIO
-      ((js_getExtentOfChar
-          (unSVGTextContentElement (toSVGTextContentElement self))
-          offset)
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_getExtentOfChar (toSVGTextContentElement self) offset))
  
 foreign import javascript unsafe "$1[\"getRotationOfChar\"]($2)"
-        js_getRotationOfChar ::
-        JSRef SVGTextContentElement -> Word -> IO Float
+        js_getRotationOfChar :: SVGTextContentElement -> Word -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGTextContentElement.getRotationOfChar Mozilla SVGTextContentElement.getRotationOfChar documentation> 
 getRotationOfChar ::
@@ -121,13 +108,11 @@
                     self -> Word -> m Float
 getRotationOfChar self offset
   = liftIO
-      (js_getRotationOfChar
-         (unSVGTextContentElement (toSVGTextContentElement self))
-         offset)
+      (js_getRotationOfChar (toSVGTextContentElement self) offset)
  
 foreign import javascript unsafe "$1[\"getCharNumAtPosition\"]($2)"
         js_getCharNumAtPosition ::
-        JSRef SVGTextContentElement -> JSRef SVGPoint -> IO Int
+        SVGTextContentElement -> Nullable SVGPoint -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGTextContentElement.getCharNumAtPosition Mozilla SVGTextContentElement.getCharNumAtPosition documentation> 
 getCharNumAtPosition ::
@@ -135,13 +120,12 @@
                        self -> Maybe SVGPoint -> m Int
 getCharNumAtPosition self point
   = liftIO
-      (js_getCharNumAtPosition
-         (unSVGTextContentElement (toSVGTextContentElement self))
-         (maybe jsNull pToJSRef point))
+      (js_getCharNumAtPosition (toSVGTextContentElement self)
+         (maybeToNullable point))
  
 foreign import javascript unsafe "$1[\"selectSubString\"]($2, $3)"
         js_selectSubString ::
-        JSRef SVGTextContentElement -> Word -> Word -> IO ()
+        SVGTextContentElement -> Word -> Word -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGTextContentElement.selectSubString Mozilla SVGTextContentElement.selectSubString documentation> 
 selectSubString ::
@@ -149,17 +133,14 @@
                   self -> Word -> Word -> m ()
 selectSubString self offset length
   = liftIO
-      (js_selectSubString
-         (unSVGTextContentElement (toSVGTextContentElement self))
-         offset
-         length)
+      (js_selectSubString (toSVGTextContentElement self) offset length)
 pattern LENGTHADJUST_UNKNOWN = 0
 pattern LENGTHADJUST_SPACING = 1
 pattern LENGTHADJUST_SPACINGANDGLYPHS = 2
  
 foreign import javascript unsafe "$1[\"textLength\"]"
         js_getTextLength ::
-        JSRef SVGTextContentElement -> IO (JSRef SVGAnimatedLength)
+        SVGTextContentElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGTextContentElement.textLength Mozilla SVGTextContentElement.textLength documentation> 
 getTextLength ::
@@ -167,13 +148,12 @@
                 self -> m (Maybe SVGAnimatedLength)
 getTextLength self
   = liftIO
-      ((js_getTextLength
-          (unSVGTextContentElement (toSVGTextContentElement self)))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_getTextLength (toSVGTextContentElement self)))
  
 foreign import javascript unsafe "$1[\"lengthAdjust\"]"
         js_getLengthAdjust ::
-        JSRef SVGTextContentElement -> IO (JSRef SVGAnimatedEnumeration)
+        SVGTextContentElement -> IO (Nullable SVGAnimatedEnumeration)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGTextContentElement.lengthAdjust Mozilla SVGTextContentElement.lengthAdjust documentation> 
 getLengthAdjust ::
@@ -181,6 +161,5 @@
                   self -> m (Maybe SVGAnimatedEnumeration)
 getLengthAdjust self
   = liftIO
-      ((js_getLengthAdjust
-          (unSVGTextContentElement (toSVGTextContentElement self)))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_getLengthAdjust (toSVGTextContentElement self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGTextPathElement.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGTextPathElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGTextPathElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGTextPathElement.hs
@@ -12,7 +12,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -33,32 +33,29 @@
  
 foreign import javascript unsafe "$1[\"startOffset\"]"
         js_getStartOffset ::
-        JSRef SVGTextPathElement -> IO (JSRef SVGAnimatedLength)
+        SVGTextPathElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGTextPathElement.startOffset Mozilla SVGTextPathElement.startOffset documentation> 
 getStartOffset ::
                (MonadIO m) => SVGTextPathElement -> m (Maybe SVGAnimatedLength)
 getStartOffset self
-  = liftIO
-      ((js_getStartOffset (unSVGTextPathElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getStartOffset (self)))
  
 foreign import javascript unsafe "$1[\"method\"]" js_getMethod ::
-        JSRef SVGTextPathElement -> IO (JSRef SVGAnimatedEnumeration)
+        SVGTextPathElement -> IO (Nullable SVGAnimatedEnumeration)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGTextPathElement.method Mozilla SVGTextPathElement.method documentation> 
 getMethod ::
           (MonadIO m) =>
             SVGTextPathElement -> m (Maybe SVGAnimatedEnumeration)
-getMethod self
-  = liftIO ((js_getMethod (unSVGTextPathElement self)) >>= fromJSRef)
+getMethod self = liftIO (nullableToMaybe <$> (js_getMethod (self)))
  
 foreign import javascript unsafe "$1[\"spacing\"]" js_getSpacing ::
-        JSRef SVGTextPathElement -> IO (JSRef SVGAnimatedEnumeration)
+        SVGTextPathElement -> IO (Nullable SVGAnimatedEnumeration)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGTextPathElement.spacing Mozilla SVGTextPathElement.spacing documentation> 
 getSpacing ::
            (MonadIO m) =>
              SVGTextPathElement -> m (Maybe SVGAnimatedEnumeration)
 getSpacing self
-  = liftIO
-      ((js_getSpacing (unSVGTextPathElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getSpacing (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGTextPositioningElement.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGTextPositioningElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGTextPositioningElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGTextPositioningElement.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -21,7 +21,7 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"x\"]" js_getX ::
-        JSRef SVGTextPositioningElement -> IO (JSRef SVGAnimatedLengthList)
+        SVGTextPositioningElement -> IO (Nullable SVGAnimatedLengthList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGTextPositioningElement.x Mozilla SVGTextPositioningElement.x documentation> 
 getX ::
@@ -29,12 +29,10 @@
        self -> m (Maybe SVGAnimatedLengthList)
 getX self
   = liftIO
-      ((js_getX
-          (unSVGTextPositioningElement (toSVGTextPositioningElement self)))
-         >>= fromJSRef)
+      (nullableToMaybe <$> (js_getX (toSVGTextPositioningElement self)))
  
 foreign import javascript unsafe "$1[\"y\"]" js_getY ::
-        JSRef SVGTextPositioningElement -> IO (JSRef SVGAnimatedLengthList)
+        SVGTextPositioningElement -> IO (Nullable SVGAnimatedLengthList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGTextPositioningElement.y Mozilla SVGTextPositioningElement.y documentation> 
 getY ::
@@ -42,12 +40,10 @@
        self -> m (Maybe SVGAnimatedLengthList)
 getY self
   = liftIO
-      ((js_getY
-          (unSVGTextPositioningElement (toSVGTextPositioningElement self)))
-         >>= fromJSRef)
+      (nullableToMaybe <$> (js_getY (toSVGTextPositioningElement self)))
  
 foreign import javascript unsafe "$1[\"dx\"]" js_getDx ::
-        JSRef SVGTextPositioningElement -> IO (JSRef SVGAnimatedLengthList)
+        SVGTextPositioningElement -> IO (Nullable SVGAnimatedLengthList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGTextPositioningElement.dx Mozilla SVGTextPositioningElement.dx documentation> 
 getDx ::
@@ -55,12 +51,10 @@
         self -> m (Maybe SVGAnimatedLengthList)
 getDx self
   = liftIO
-      ((js_getDx
-          (unSVGTextPositioningElement (toSVGTextPositioningElement self)))
-         >>= fromJSRef)
+      (nullableToMaybe <$> (js_getDx (toSVGTextPositioningElement self)))
  
 foreign import javascript unsafe "$1[\"dy\"]" js_getDy ::
-        JSRef SVGTextPositioningElement -> IO (JSRef SVGAnimatedLengthList)
+        SVGTextPositioningElement -> IO (Nullable SVGAnimatedLengthList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGTextPositioningElement.dy Mozilla SVGTextPositioningElement.dy documentation> 
 getDy ::
@@ -68,12 +62,10 @@
         self -> m (Maybe SVGAnimatedLengthList)
 getDy self
   = liftIO
-      ((js_getDy
-          (unSVGTextPositioningElement (toSVGTextPositioningElement self)))
-         >>= fromJSRef)
+      (nullableToMaybe <$> (js_getDy (toSVGTextPositioningElement self)))
  
 foreign import javascript unsafe "$1[\"rotate\"]" js_getRotate ::
-        JSRef SVGTextPositioningElement -> IO (JSRef SVGAnimatedNumberList)
+        SVGTextPositioningElement -> IO (Nullable SVGAnimatedNumberList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGTextPositioningElement.rotate Mozilla SVGTextPositioningElement.rotate documentation> 
 getRotate ::
@@ -81,6 +73,5 @@
             self -> m (Maybe SVGAnimatedNumberList)
 getRotate self
   = liftIO
-      ((js_getRotate
-          (unSVGTextPositioningElement (toSVGTextPositioningElement self)))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_getRotate (toSVGTextPositioningElement self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGTransform.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGTransform.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGTransform.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGTransform.hs
@@ -11,7 +11,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -25,56 +25,50 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"setMatrix\"]($2)"
-        js_setMatrix :: JSRef SVGTransform -> JSRef SVGMatrix -> IO ()
+        js_setMatrix :: SVGTransform -> Nullable SVGMatrix -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGTransform.setMatrix Mozilla SVGTransform.setMatrix documentation> 
 setMatrix :: (MonadIO m) => SVGTransform -> Maybe SVGMatrix -> m ()
 setMatrix self matrix
-  = liftIO
-      (js_setMatrix (unSVGTransform self) (maybe jsNull pToJSRef matrix))
+  = liftIO (js_setMatrix (self) (maybeToNullable matrix))
  
 foreign import javascript unsafe "$1[\"setTranslate\"]($2, $3)"
-        js_setTranslate :: JSRef SVGTransform -> Float -> Float -> IO ()
+        js_setTranslate :: SVGTransform -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGTransform.setTranslate Mozilla SVGTransform.setTranslate documentation> 
 setTranslate ::
              (MonadIO m) => SVGTransform -> Float -> Float -> m ()
-setTranslate self tx ty
-  = liftIO (js_setTranslate (unSVGTransform self) tx ty)
+setTranslate self tx ty = liftIO (js_setTranslate (self) tx ty)
  
 foreign import javascript unsafe "$1[\"setScale\"]($2, $3)"
-        js_setScale :: JSRef SVGTransform -> Float -> Float -> IO ()
+        js_setScale :: SVGTransform -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGTransform.setScale Mozilla SVGTransform.setScale documentation> 
 setScale :: (MonadIO m) => SVGTransform -> Float -> Float -> m ()
-setScale self sx sy
-  = liftIO (js_setScale (unSVGTransform self) sx sy)
+setScale self sx sy = liftIO (js_setScale (self) sx sy)
  
 foreign import javascript unsafe "$1[\"setRotate\"]($2, $3, $4)"
-        js_setRotate ::
-        JSRef SVGTransform -> Float -> Float -> Float -> IO ()
+        js_setRotate :: SVGTransform -> Float -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGTransform.setRotate Mozilla SVGTransform.setRotate documentation> 
 setRotate ::
           (MonadIO m) => SVGTransform -> Float -> Float -> Float -> m ()
 setRotate self angle cx cy
-  = liftIO (js_setRotate (unSVGTransform self) angle cx cy)
+  = liftIO (js_setRotate (self) angle cx cy)
  
 foreign import javascript unsafe "$1[\"setSkewX\"]($2)" js_setSkewX
-        :: JSRef SVGTransform -> Float -> IO ()
+        :: SVGTransform -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGTransform.setSkewX Mozilla SVGTransform.setSkewX documentation> 
 setSkewX :: (MonadIO m) => SVGTransform -> Float -> m ()
-setSkewX self angle
-  = liftIO (js_setSkewX (unSVGTransform self) angle)
+setSkewX self angle = liftIO (js_setSkewX (self) angle)
  
 foreign import javascript unsafe "$1[\"setSkewY\"]($2)" js_setSkewY
-        :: JSRef SVGTransform -> Float -> IO ()
+        :: SVGTransform -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGTransform.setSkewY Mozilla SVGTransform.setSkewY documentation> 
 setSkewY :: (MonadIO m) => SVGTransform -> Float -> m ()
-setSkewY self angle
-  = liftIO (js_setSkewY (unSVGTransform self) angle)
+setSkewY self angle = liftIO (js_setSkewY (self) angle)
 pattern SVG_TRANSFORM_UNKNOWN = 0
 pattern SVG_TRANSFORM_MATRIX = 1
 pattern SVG_TRANSFORM_TRANSLATE = 2
@@ -84,23 +78,22 @@
 pattern SVG_TRANSFORM_SKEWY = 6
  
 foreign import javascript unsafe "$1[\"type\"]" js_getType ::
-        JSRef SVGTransform -> IO Word
+        SVGTransform -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGTransform.type Mozilla SVGTransform.type documentation> 
 getType :: (MonadIO m) => SVGTransform -> m Word
-getType self = liftIO (js_getType (unSVGTransform self))
+getType self = liftIO (js_getType (self))
  
 foreign import javascript unsafe "$1[\"matrix\"]" js_getMatrix ::
-        JSRef SVGTransform -> IO (JSRef SVGMatrix)
+        SVGTransform -> IO (Nullable SVGMatrix)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGTransform.matrix Mozilla SVGTransform.matrix documentation> 
 getMatrix :: (MonadIO m) => SVGTransform -> m (Maybe SVGMatrix)
-getMatrix self
-  = liftIO ((js_getMatrix (unSVGTransform self)) >>= fromJSRef)
+getMatrix self = liftIO (nullableToMaybe <$> (js_getMatrix (self)))
  
 foreign import javascript unsafe "$1[\"angle\"]" js_getAngle ::
-        JSRef SVGTransform -> IO Float
+        SVGTransform -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGTransform.angle Mozilla SVGTransform.angle documentation> 
 getAngle :: (MonadIO m) => SVGTransform -> m Float
-getAngle self = liftIO (js_getAngle (unSVGTransform self))
+getAngle self = liftIO (js_getAngle (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGTransformList.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGTransformList.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGTransformList.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGTransformList.hs
@@ -9,7 +9,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -23,16 +23,16 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"clear\"]()" js_clear ::
-        JSRef SVGTransformList -> IO ()
+        SVGTransformList -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGTransformList.clear Mozilla SVGTransformList.clear documentation> 
 clear :: (MonadIO m) => SVGTransformList -> m ()
-clear self = liftIO (js_clear (unSVGTransformList self))
+clear self = liftIO (js_clear (self))
  
 foreign import javascript unsafe "$1[\"initialize\"]($2)"
         js_initialize ::
-        JSRef SVGTransformList ->
-          JSRef SVGTransform -> IO (JSRef SVGTransform)
+        SVGTransformList ->
+          Nullable SVGTransform -> IO (Nullable SVGTransform)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGTransformList.initialize Mozilla SVGTransformList.initialize documentation> 
 initialize ::
@@ -40,24 +40,21 @@
              SVGTransformList -> Maybe SVGTransform -> m (Maybe SVGTransform)
 initialize self item
   = liftIO
-      ((js_initialize (unSVGTransformList self)
-          (maybe jsNull pToJSRef item))
-         >>= fromJSRef)
+      (nullableToMaybe <$> (js_initialize (self) (maybeToNullable item)))
  
 foreign import javascript unsafe "$1[\"getItem\"]($2)" js_getItem
-        :: JSRef SVGTransformList -> Word -> IO (JSRef SVGTransform)
+        :: SVGTransformList -> Word -> IO (Nullable SVGTransform)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGTransformList.getItem Mozilla SVGTransformList.getItem documentation> 
 getItem ::
         (MonadIO m) => SVGTransformList -> Word -> m (Maybe SVGTransform)
 getItem self index
-  = liftIO
-      ((js_getItem (unSVGTransformList self) index) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getItem (self) index))
  
 foreign import javascript unsafe "$1[\"insertItemBefore\"]($2, $3)"
         js_insertItemBefore ::
-        JSRef SVGTransformList ->
-          JSRef SVGTransform -> Word -> IO (JSRef SVGTransform)
+        SVGTransformList ->
+          Nullable SVGTransform -> Word -> IO (Nullable SVGTransform)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGTransformList.insertItemBefore Mozilla SVGTransformList.insertItemBefore documentation> 
 insertItemBefore ::
@@ -66,15 +63,13 @@
                      Maybe SVGTransform -> Word -> m (Maybe SVGTransform)
 insertItemBefore self item index
   = liftIO
-      ((js_insertItemBefore (unSVGTransformList self)
-          (maybe jsNull pToJSRef item)
-          index)
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_insertItemBefore (self) (maybeToNullable item) index))
  
 foreign import javascript unsafe "$1[\"replaceItem\"]($2, $3)"
         js_replaceItem ::
-        JSRef SVGTransformList ->
-          JSRef SVGTransform -> Word -> IO (JSRef SVGTransform)
+        SVGTransformList ->
+          Nullable SVGTransform -> Word -> IO (Nullable SVGTransform)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGTransformList.replaceItem Mozilla SVGTransformList.replaceItem documentation> 
 replaceItem ::
@@ -83,26 +78,23 @@
                 Maybe SVGTransform -> Word -> m (Maybe SVGTransform)
 replaceItem self item index
   = liftIO
-      ((js_replaceItem (unSVGTransformList self)
-          (maybe jsNull pToJSRef item)
-          index)
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_replaceItem (self) (maybeToNullable item) index))
  
 foreign import javascript unsafe "$1[\"removeItem\"]($2)"
         js_removeItem ::
-        JSRef SVGTransformList -> Word -> IO (JSRef SVGTransform)
+        SVGTransformList -> Word -> IO (Nullable SVGTransform)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGTransformList.removeItem Mozilla SVGTransformList.removeItem documentation> 
 removeItem ::
            (MonadIO m) => SVGTransformList -> Word -> m (Maybe SVGTransform)
 removeItem self index
-  = liftIO
-      ((js_removeItem (unSVGTransformList self) index) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_removeItem (self) index))
  
 foreign import javascript unsafe "$1[\"appendItem\"]($2)"
         js_appendItem ::
-        JSRef SVGTransformList ->
-          JSRef SVGTransform -> IO (JSRef SVGTransform)
+        SVGTransformList ->
+          Nullable SVGTransform -> IO (Nullable SVGTransform)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGTransformList.appendItem Mozilla SVGTransformList.appendItem documentation> 
 appendItem ::
@@ -110,15 +102,13 @@
              SVGTransformList -> Maybe SVGTransform -> m (Maybe SVGTransform)
 appendItem self item
   = liftIO
-      ((js_appendItem (unSVGTransformList self)
-          (maybe jsNull pToJSRef item))
-         >>= fromJSRef)
+      (nullableToMaybe <$> (js_appendItem (self) (maybeToNullable item)))
  
 foreign import javascript unsafe
         "$1[\"createSVGTransformFromMatrix\"]($2)"
         js_createSVGTransformFromMatrix ::
-        JSRef SVGTransformList ->
-          JSRef SVGMatrix -> IO (JSRef SVGTransform)
+        SVGTransformList ->
+          Nullable SVGMatrix -> IO (Nullable SVGTransform)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGTransformList.createSVGTransformFromMatrix Mozilla SVGTransformList.createSVGTransformFromMatrix documentation> 
 createSVGTransformFromMatrix ::
@@ -126,23 +116,21 @@
                                SVGTransformList -> Maybe SVGMatrix -> m (Maybe SVGTransform)
 createSVGTransformFromMatrix self matrix
   = liftIO
-      ((js_createSVGTransformFromMatrix (unSVGTransformList self)
-          (maybe jsNull pToJSRef matrix))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createSVGTransformFromMatrix (self) (maybeToNullable matrix)))
  
 foreign import javascript unsafe "$1[\"consolidate\"]()"
-        js_consolidate :: JSRef SVGTransformList -> IO (JSRef SVGTransform)
+        js_consolidate :: SVGTransformList -> IO (Nullable SVGTransform)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGTransformList.consolidate Mozilla SVGTransformList.consolidate documentation> 
 consolidate ::
             (MonadIO m) => SVGTransformList -> m (Maybe SVGTransform)
 consolidate self
-  = liftIO ((js_consolidate (unSVGTransformList self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_consolidate (self)))
  
 foreign import javascript unsafe "$1[\"numberOfItems\"]"
-        js_getNumberOfItems :: JSRef SVGTransformList -> IO Word
+        js_getNumberOfItems :: SVGTransformList -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGTransformList.numberOfItems Mozilla SVGTransformList.numberOfItems documentation> 
 getNumberOfItems :: (MonadIO m) => SVGTransformList -> m Word
-getNumberOfItems self
-  = liftIO (js_getNumberOfItems (unSVGTransformList self))
+getNumberOfItems self = liftIO (js_getNumberOfItems (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGURIReference.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGURIReference.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGURIReference.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGURIReference.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,10 +19,9 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"href\"]" js_getHref ::
-        JSRef SVGURIReference -> IO (JSRef SVGAnimatedString)
+        SVGURIReference -> IO (Nullable SVGAnimatedString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGURIReference.href Mozilla SVGURIReference.href documentation> 
 getHref ::
         (MonadIO m) => SVGURIReference -> m (Maybe SVGAnimatedString)
-getHref self
-  = liftIO ((js_getHref (unSVGURIReference self)) >>= fromJSRef)
+getHref self = liftIO (nullableToMaybe <$> (js_getHref (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGUnitTypes.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGUnitTypes.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGUnitTypes.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGUnitTypes.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGUseElement.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGUseElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGUseElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGUseElement.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,33 +19,31 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"x\"]" js_getX ::
-        JSRef SVGUseElement -> IO (JSRef SVGAnimatedLength)
+        SVGUseElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGUseElement.x Mozilla SVGUseElement.x documentation> 
 getX :: (MonadIO m) => SVGUseElement -> m (Maybe SVGAnimatedLength)
-getX self = liftIO ((js_getX (unSVGUseElement self)) >>= fromJSRef)
+getX self = liftIO (nullableToMaybe <$> (js_getX (self)))
  
 foreign import javascript unsafe "$1[\"y\"]" js_getY ::
-        JSRef SVGUseElement -> IO (JSRef SVGAnimatedLength)
+        SVGUseElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGUseElement.y Mozilla SVGUseElement.y documentation> 
 getY :: (MonadIO m) => SVGUseElement -> m (Maybe SVGAnimatedLength)
-getY self = liftIO ((js_getY (unSVGUseElement self)) >>= fromJSRef)
+getY self = liftIO (nullableToMaybe <$> (js_getY (self)))
  
 foreign import javascript unsafe "$1[\"width\"]" js_getWidth ::
-        JSRef SVGUseElement -> IO (JSRef SVGAnimatedLength)
+        SVGUseElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGUseElement.width Mozilla SVGUseElement.width documentation> 
 getWidth ::
          (MonadIO m) => SVGUseElement -> m (Maybe SVGAnimatedLength)
-getWidth self
-  = liftIO ((js_getWidth (unSVGUseElement self)) >>= fromJSRef)
+getWidth self = liftIO (nullableToMaybe <$> (js_getWidth (self)))
  
 foreign import javascript unsafe "$1[\"height\"]" js_getHeight ::
-        JSRef SVGUseElement -> IO (JSRef SVGAnimatedLength)
+        SVGUseElement -> IO (Nullable SVGAnimatedLength)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGUseElement.height Mozilla SVGUseElement.height documentation> 
 getHeight ::
           (MonadIO m) => SVGUseElement -> m (Maybe SVGAnimatedLength)
-getHeight self
-  = liftIO ((js_getHeight (unSVGUseElement self)) >>= fromJSRef)
+getHeight self = liftIO (nullableToMaybe <$> (js_getHeight (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGViewElement.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGViewElement.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGViewElement.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGViewElement.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,11 +19,10 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"viewTarget\"]"
-        js_getViewTarget ::
-        JSRef SVGViewElement -> IO (JSRef SVGStringList)
+        js_getViewTarget :: SVGViewElement -> IO (Nullable SVGStringList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGViewElement.viewTarget Mozilla SVGViewElement.viewTarget documentation> 
 getViewTarget ::
               (MonadIO m) => SVGViewElement -> m (Maybe SVGStringList)
 getViewTarget self
-  = liftIO ((js_getViewTarget (unSVGViewElement self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getViewTarget (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGViewSpec.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGViewSpec.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGViewSpec.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGViewSpec.hs
@@ -10,7 +10,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -24,75 +24,70 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"transform\"]"
-        js_getTransform :: JSRef SVGViewSpec -> IO (JSRef SVGTransformList)
+        js_getTransform :: SVGViewSpec -> IO (Nullable SVGTransformList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGViewSpec.transform Mozilla SVGViewSpec.transform documentation> 
 getTransform ::
              (MonadIO m) => SVGViewSpec -> m (Maybe SVGTransformList)
 getTransform self
-  = liftIO ((js_getTransform (unSVGViewSpec self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getTransform (self)))
  
 foreign import javascript unsafe "$1[\"viewTarget\"]"
-        js_getViewTarget :: JSRef SVGViewSpec -> IO (JSRef SVGElement)
+        js_getViewTarget :: SVGViewSpec -> IO (Nullable SVGElement)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGViewSpec.viewTarget Mozilla SVGViewSpec.viewTarget documentation> 
 getViewTarget :: (MonadIO m) => SVGViewSpec -> m (Maybe SVGElement)
 getViewTarget self
-  = liftIO ((js_getViewTarget (unSVGViewSpec self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getViewTarget (self)))
  
 foreign import javascript unsafe "$1[\"viewBoxString\"]"
-        js_getViewBoxString :: JSRef SVGViewSpec -> IO JSString
+        js_getViewBoxString :: SVGViewSpec -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGViewSpec.viewBoxString Mozilla SVGViewSpec.viewBoxString documentation> 
 getViewBoxString ::
                  (MonadIO m, FromJSString result) => SVGViewSpec -> m result
 getViewBoxString self
-  = liftIO
-      (fromJSString <$> (js_getViewBoxString (unSVGViewSpec self)))
+  = liftIO (fromJSString <$> (js_getViewBoxString (self)))
  
 foreign import javascript unsafe
         "$1[\"preserveAspectRatioString\"]" js_getPreserveAspectRatioString
-        :: JSRef SVGViewSpec -> IO JSString
+        :: SVGViewSpec -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGViewSpec.preserveAspectRatioString Mozilla SVGViewSpec.preserveAspectRatioString documentation> 
 getPreserveAspectRatioString ::
                              (MonadIO m, FromJSString result) => SVGViewSpec -> m result
 getPreserveAspectRatioString self
   = liftIO
-      (fromJSString <$>
-         (js_getPreserveAspectRatioString (unSVGViewSpec self)))
+      (fromJSString <$> (js_getPreserveAspectRatioString (self)))
  
 foreign import javascript unsafe "$1[\"transformString\"]"
-        js_getTransformString :: JSRef SVGViewSpec -> IO JSString
+        js_getTransformString :: SVGViewSpec -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGViewSpec.transformString Mozilla SVGViewSpec.transformString documentation> 
 getTransformString ::
                    (MonadIO m, FromJSString result) => SVGViewSpec -> m result
 getTransformString self
-  = liftIO
-      (fromJSString <$> (js_getTransformString (unSVGViewSpec self)))
+  = liftIO (fromJSString <$> (js_getTransformString (self)))
  
 foreign import javascript unsafe "$1[\"viewTargetString\"]"
-        js_getViewTargetString :: JSRef SVGViewSpec -> IO JSString
+        js_getViewTargetString :: SVGViewSpec -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGViewSpec.viewTargetString Mozilla SVGViewSpec.viewTargetString documentation> 
 getViewTargetString ::
                     (MonadIO m, FromJSString result) => SVGViewSpec -> m result
 getViewTargetString self
-  = liftIO
-      (fromJSString <$> (js_getViewTargetString (unSVGViewSpec self)))
+  = liftIO (fromJSString <$> (js_getViewTargetString (self)))
  
 foreign import javascript unsafe "$1[\"zoomAndPan\"] = $2;"
-        js_setZoomAndPan :: JSRef SVGViewSpec -> Word -> IO ()
+        js_setZoomAndPan :: SVGViewSpec -> Word -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGViewSpec.zoomAndPan Mozilla SVGViewSpec.zoomAndPan documentation> 
 setZoomAndPan :: (MonadIO m) => SVGViewSpec -> Word -> m ()
-setZoomAndPan self val
-  = liftIO (js_setZoomAndPan (unSVGViewSpec self) val)
+setZoomAndPan self val = liftIO (js_setZoomAndPan (self) val)
  
 foreign import javascript unsafe "$1[\"zoomAndPan\"]"
-        js_getZoomAndPan :: JSRef SVGViewSpec -> IO Word
+        js_getZoomAndPan :: SVGViewSpec -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGViewSpec.zoomAndPan Mozilla SVGViewSpec.zoomAndPan documentation> 
 getZoomAndPan :: (MonadIO m) => SVGViewSpec -> m Word
-getZoomAndPan self = liftIO (js_getZoomAndPan (unSVGViewSpec self))
+getZoomAndPan self = liftIO (js_getZoomAndPan (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGZoomAndPan.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGZoomAndPan.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGZoomAndPan.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGZoomAndPan.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -24,17 +24,15 @@
 pattern SVG_ZOOMANDPAN_MAGNIFY = 2
  
 foreign import javascript unsafe "$1[\"zoomAndPan\"] = $2;"
-        js_setZoomAndPan :: JSRef SVGZoomAndPan -> Word -> IO ()
+        js_setZoomAndPan :: SVGZoomAndPan -> Word -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGZoomAndPan.zoomAndPan Mozilla SVGZoomAndPan.zoomAndPan documentation> 
 setZoomAndPan :: (MonadIO m) => SVGZoomAndPan -> Word -> m ()
-setZoomAndPan self val
-  = liftIO (js_setZoomAndPan (unSVGZoomAndPan self) val)
+setZoomAndPan self val = liftIO (js_setZoomAndPan (self) val)
  
 foreign import javascript unsafe "$1[\"zoomAndPan\"]"
-        js_getZoomAndPan :: JSRef SVGZoomAndPan -> IO Word
+        js_getZoomAndPan :: SVGZoomAndPan -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGZoomAndPan.zoomAndPan Mozilla SVGZoomAndPan.zoomAndPan documentation> 
 getZoomAndPan :: (MonadIO m) => SVGZoomAndPan -> m Word
-getZoomAndPan self
-  = liftIO (js_getZoomAndPan (unSVGZoomAndPan self))
+getZoomAndPan self = liftIO (js_getZoomAndPan (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SVGZoomEvent.hs b/src/GHCJS/DOM/JSFFI/Generated/SVGZoomEvent.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SVGZoomEvent.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SVGZoomEvent.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -21,46 +21,42 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"zoomRectScreen\"]"
-        js_getZoomRectScreen :: JSRef SVGZoomEvent -> IO (JSRef SVGRect)
+        js_getZoomRectScreen :: SVGZoomEvent -> IO (Nullable SVGRect)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGZoomEvent.zoomRectScreen Mozilla SVGZoomEvent.zoomRectScreen documentation> 
 getZoomRectScreen ::
                   (MonadIO m) => SVGZoomEvent -> m (Maybe SVGRect)
 getZoomRectScreen self
-  = liftIO
-      ((js_getZoomRectScreen (unSVGZoomEvent self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getZoomRectScreen (self)))
  
 foreign import javascript unsafe "$1[\"previousScale\"]"
-        js_getPreviousScale :: JSRef SVGZoomEvent -> IO Float
+        js_getPreviousScale :: SVGZoomEvent -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGZoomEvent.previousScale Mozilla SVGZoomEvent.previousScale documentation> 
 getPreviousScale :: (MonadIO m) => SVGZoomEvent -> m Float
-getPreviousScale self
-  = liftIO (js_getPreviousScale (unSVGZoomEvent self))
+getPreviousScale self = liftIO (js_getPreviousScale (self))
  
 foreign import javascript unsafe "$1[\"previousTranslate\"]"
-        js_getPreviousTranslate ::
-        JSRef SVGZoomEvent -> IO (JSRef SVGPoint)
+        js_getPreviousTranslate :: SVGZoomEvent -> IO (Nullable SVGPoint)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGZoomEvent.previousTranslate Mozilla SVGZoomEvent.previousTranslate documentation> 
 getPreviousTranslate ::
                      (MonadIO m) => SVGZoomEvent -> m (Maybe SVGPoint)
 getPreviousTranslate self
-  = liftIO
-      ((js_getPreviousTranslate (unSVGZoomEvent self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getPreviousTranslate (self)))
  
 foreign import javascript unsafe "$1[\"newScale\"]" js_getNewScale
-        :: JSRef SVGZoomEvent -> IO Float
+        :: SVGZoomEvent -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGZoomEvent.newScale Mozilla SVGZoomEvent.newScale documentation> 
 getNewScale :: (MonadIO m) => SVGZoomEvent -> m Float
-getNewScale self = liftIO (js_getNewScale (unSVGZoomEvent self))
+getNewScale self = liftIO (js_getNewScale (self))
  
 foreign import javascript unsafe "$1[\"newTranslate\"]"
-        js_getNewTranslate :: JSRef SVGZoomEvent -> IO (JSRef SVGPoint)
+        js_getNewTranslate :: SVGZoomEvent -> IO (Nullable SVGPoint)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SVGZoomEvent.newTranslate Mozilla SVGZoomEvent.newTranslate documentation> 
 getNewTranslate ::
                 (MonadIO m) => SVGZoomEvent -> m (Maybe SVGPoint)
 getNewTranslate self
-  = liftIO ((js_getNewTranslate (unSVGZoomEvent self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getNewTranslate (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/Screen.hs b/src/GHCJS/DOM/JSFFI/Generated/Screen.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/Screen.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/Screen.hs
@@ -8,7 +8,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -22,57 +22,57 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"height\"]" js_getHeight ::
-        JSRef Screen -> IO Word
+        Screen -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Screen.height Mozilla Screen.height documentation> 
 getHeight :: (MonadIO m) => Screen -> m Word
-getHeight self = liftIO (js_getHeight (unScreen self))
+getHeight self = liftIO (js_getHeight (self))
  
 foreign import javascript unsafe "$1[\"width\"]" js_getWidth ::
-        JSRef Screen -> IO Word
+        Screen -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Screen.width Mozilla Screen.width documentation> 
 getWidth :: (MonadIO m) => Screen -> m Word
-getWidth self = liftIO (js_getWidth (unScreen self))
+getWidth self = liftIO (js_getWidth (self))
  
 foreign import javascript unsafe "$1[\"colorDepth\"]"
-        js_getColorDepth :: JSRef Screen -> IO Word
+        js_getColorDepth :: Screen -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Screen.colorDepth Mozilla Screen.colorDepth documentation> 
 getColorDepth :: (MonadIO m) => Screen -> m Word
-getColorDepth self = liftIO (js_getColorDepth (unScreen self))
+getColorDepth self = liftIO (js_getColorDepth (self))
  
 foreign import javascript unsafe "$1[\"pixelDepth\"]"
-        js_getPixelDepth :: JSRef Screen -> IO Word
+        js_getPixelDepth :: Screen -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Screen.pixelDepth Mozilla Screen.pixelDepth documentation> 
 getPixelDepth :: (MonadIO m) => Screen -> m Word
-getPixelDepth self = liftIO (js_getPixelDepth (unScreen self))
+getPixelDepth self = liftIO (js_getPixelDepth (self))
  
 foreign import javascript unsafe "$1[\"availLeft\"]"
-        js_getAvailLeft :: JSRef Screen -> IO Int
+        js_getAvailLeft :: Screen -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Screen.availLeft Mozilla Screen.availLeft documentation> 
 getAvailLeft :: (MonadIO m) => Screen -> m Int
-getAvailLeft self = liftIO (js_getAvailLeft (unScreen self))
+getAvailLeft self = liftIO (js_getAvailLeft (self))
  
 foreign import javascript unsafe "$1[\"availTop\"]" js_getAvailTop
-        :: JSRef Screen -> IO Int
+        :: Screen -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Screen.availTop Mozilla Screen.availTop documentation> 
 getAvailTop :: (MonadIO m) => Screen -> m Int
-getAvailTop self = liftIO (js_getAvailTop (unScreen self))
+getAvailTop self = liftIO (js_getAvailTop (self))
  
 foreign import javascript unsafe "$1[\"availHeight\"]"
-        js_getAvailHeight :: JSRef Screen -> IO Word
+        js_getAvailHeight :: Screen -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Screen.availHeight Mozilla Screen.availHeight documentation> 
 getAvailHeight :: (MonadIO m) => Screen -> m Word
-getAvailHeight self = liftIO (js_getAvailHeight (unScreen self))
+getAvailHeight self = liftIO (js_getAvailHeight (self))
  
 foreign import javascript unsafe "$1[\"availWidth\"]"
-        js_getAvailWidth :: JSRef Screen -> IO Word
+        js_getAvailWidth :: Screen -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Screen.availWidth Mozilla Screen.availWidth documentation> 
 getAvailWidth :: (MonadIO m) => Screen -> m Word
-getAvailWidth self = liftIO (js_getAvailWidth (unScreen self))
+getAvailWidth self = liftIO (js_getAvailWidth (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/ScriptProcessorNode.hs b/src/GHCJS/DOM/JSFFI/Generated/ScriptProcessorNode.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/ScriptProcessorNode.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/ScriptProcessorNode.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -24,9 +24,8 @@
 audioProcess = unsafeEventName (toJSString "audioprocess")
  
 foreign import javascript unsafe "$1[\"bufferSize\"]"
-        js_getBufferSize :: JSRef ScriptProcessorNode -> IO Int
+        js_getBufferSize :: ScriptProcessorNode -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ScriptProcessorNode.bufferSize Mozilla ScriptProcessorNode.bufferSize documentation> 
 getBufferSize :: (MonadIO m) => ScriptProcessorNode -> m Int
-getBufferSize self
-  = liftIO (js_getBufferSize (unScriptProcessorNode self))
+getBufferSize self = liftIO (js_getBufferSize (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/ScriptProfile.hs b/src/GHCJS/DOM/JSFFI/Generated/ScriptProfile.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/ScriptProfile.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/ScriptProfile.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,26 +20,25 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"title\"]" js_getTitle ::
-        JSRef ScriptProfile -> IO JSString
+        ScriptProfile -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ScriptProfile.title Mozilla ScriptProfile.title documentation> 
 getTitle ::
          (MonadIO m, FromJSString result) => ScriptProfile -> m result
-getTitle self
-  = liftIO (fromJSString <$> (js_getTitle (unScriptProfile self)))
+getTitle self = liftIO (fromJSString <$> (js_getTitle (self)))
  
 foreign import javascript unsafe "$1[\"uid\"]" js_getUid ::
-        JSRef ScriptProfile -> IO Word
+        ScriptProfile -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ScriptProfile.uid Mozilla ScriptProfile.uid documentation> 
 getUid :: (MonadIO m) => ScriptProfile -> m Word
-getUid self = liftIO (js_getUid (unScriptProfile self))
+getUid self = liftIO (js_getUid (self))
  
 foreign import javascript unsafe "$1[\"rootNode\"]" js_getRootNode
-        :: JSRef ScriptProfile -> IO (JSRef ScriptProfileNode)
+        :: ScriptProfile -> IO (Nullable ScriptProfileNode)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ScriptProfile.rootNode Mozilla ScriptProfile.rootNode documentation> 
 getRootNode ::
             (MonadIO m) => ScriptProfile -> m (Maybe ScriptProfileNode)
 getRootNode self
-  = liftIO ((js_getRootNode (unScriptProfile self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getRootNode (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/ScriptProfileNode.hs b/src/GHCJS/DOM/JSFFI/Generated/ScriptProfileNode.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/ScriptProfileNode.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/ScriptProfileNode.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -21,53 +21,48 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"children\"]()" js_children
-        :: JSRef ScriptProfileNode -> IO (JSRef [Maybe ScriptProfileNode])
+        :: ScriptProfileNode -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ScriptProfileNode.children Mozilla ScriptProfileNode.children documentation> 
 children ::
          (MonadIO m) => ScriptProfileNode -> m [Maybe ScriptProfileNode]
 children self
-  = liftIO
-      ((js_children (unScriptProfileNode self)) >>= fromJSRefUnchecked)
+  = liftIO ((js_children (self)) >>= fromJSRefUnchecked)
  
 foreign import javascript unsafe "$1[\"id\"]" js_getId ::
-        JSRef ScriptProfileNode -> IO Word
+        ScriptProfileNode -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ScriptProfileNode.id Mozilla ScriptProfileNode.id documentation> 
 getId :: (MonadIO m) => ScriptProfileNode -> m Word
-getId self = liftIO (js_getId (unScriptProfileNode self))
+getId self = liftIO (js_getId (self))
  
 foreign import javascript unsafe "$1[\"functionName\"]"
-        js_getFunctionName :: JSRef ScriptProfileNode -> IO JSString
+        js_getFunctionName :: ScriptProfileNode -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ScriptProfileNode.functionName Mozilla ScriptProfileNode.functionName documentation> 
 getFunctionName ::
                 (MonadIO m, FromJSString result) => ScriptProfileNode -> m result
 getFunctionName self
-  = liftIO
-      (fromJSString <$> (js_getFunctionName (unScriptProfileNode self)))
+  = liftIO (fromJSString <$> (js_getFunctionName (self)))
  
 foreign import javascript unsafe "$1[\"url\"]" js_getUrl ::
-        JSRef ScriptProfileNode -> IO JSString
+        ScriptProfileNode -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ScriptProfileNode.url Mozilla ScriptProfileNode.url documentation> 
 getUrl ::
        (MonadIO m, FromJSString result) => ScriptProfileNode -> m result
-getUrl self
-  = liftIO (fromJSString <$> (js_getUrl (unScriptProfileNode self)))
+getUrl self = liftIO (fromJSString <$> (js_getUrl (self)))
  
 foreign import javascript unsafe "$1[\"lineNumber\"]"
-        js_getLineNumber :: JSRef ScriptProfileNode -> IO Word
+        js_getLineNumber :: ScriptProfileNode -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ScriptProfileNode.lineNumber Mozilla ScriptProfileNode.lineNumber documentation> 
 getLineNumber :: (MonadIO m) => ScriptProfileNode -> m Word
-getLineNumber self
-  = liftIO (js_getLineNumber (unScriptProfileNode self))
+getLineNumber self = liftIO (js_getLineNumber (self))
  
 foreign import javascript unsafe "$1[\"columnNumber\"]"
-        js_getColumnNumber :: JSRef ScriptProfileNode -> IO Word
+        js_getColumnNumber :: ScriptProfileNode -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ScriptProfileNode.columnNumber Mozilla ScriptProfileNode.columnNumber documentation> 
 getColumnNumber :: (MonadIO m) => ScriptProfileNode -> m Word
-getColumnNumber self
-  = liftIO (js_getColumnNumber (unScriptProfileNode self))
+getColumnNumber self = liftIO (js_getColumnNumber (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SecurityPolicy.hs b/src/GHCJS/DOM/JSFFI/Generated/SecurityPolicy.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SecurityPolicy.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SecurityPolicy.hs
@@ -14,7 +14,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -29,153 +29,140 @@
  
 foreign import javascript unsafe
         "($1[\"allowsConnectionTo\"]($2) ? 1 : 0)" js_allowsConnectionTo ::
-        JSRef SecurityPolicy -> JSString -> IO Bool
+        SecurityPolicy -> JSString -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SecurityPolicy.allowsConnectionTo Mozilla SecurityPolicy.allowsConnectionTo documentation> 
 allowsConnectionTo ::
                    (MonadIO m, ToJSString url) => SecurityPolicy -> url -> m Bool
 allowsConnectionTo self url
-  = liftIO
-      (js_allowsConnectionTo (unSecurityPolicy self) (toJSString url))
+  = liftIO (js_allowsConnectionTo (self) (toJSString url))
  
 foreign import javascript unsafe
         "($1[\"allowsFontFrom\"]($2) ? 1 : 0)" js_allowsFontFrom ::
-        JSRef SecurityPolicy -> JSString -> IO Bool
+        SecurityPolicy -> JSString -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SecurityPolicy.allowsFontFrom Mozilla SecurityPolicy.allowsFontFrom documentation> 
 allowsFontFrom ::
                (MonadIO m, ToJSString url) => SecurityPolicy -> url -> m Bool
 allowsFontFrom self url
-  = liftIO
-      (js_allowsFontFrom (unSecurityPolicy self) (toJSString url))
+  = liftIO (js_allowsFontFrom (self) (toJSString url))
  
 foreign import javascript unsafe
         "($1[\"allowsFormAction\"]($2) ? 1 : 0)" js_allowsFormAction ::
-        JSRef SecurityPolicy -> JSString -> IO Bool
+        SecurityPolicy -> JSString -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SecurityPolicy.allowsFormAction Mozilla SecurityPolicy.allowsFormAction documentation> 
 allowsFormAction ::
                  (MonadIO m, ToJSString url) => SecurityPolicy -> url -> m Bool
 allowsFormAction self url
-  = liftIO
-      (js_allowsFormAction (unSecurityPolicy self) (toJSString url))
+  = liftIO (js_allowsFormAction (self) (toJSString url))
  
 foreign import javascript unsafe
         "($1[\"allowsFrameFrom\"]($2) ? 1 : 0)" js_allowsFrameFrom ::
-        JSRef SecurityPolicy -> JSString -> IO Bool
+        SecurityPolicy -> JSString -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SecurityPolicy.allowsFrameFrom Mozilla SecurityPolicy.allowsFrameFrom documentation> 
 allowsFrameFrom ::
                 (MonadIO m, ToJSString url) => SecurityPolicy -> url -> m Bool
 allowsFrameFrom self url
-  = liftIO
-      (js_allowsFrameFrom (unSecurityPolicy self) (toJSString url))
+  = liftIO (js_allowsFrameFrom (self) (toJSString url))
  
 foreign import javascript unsafe
         "($1[\"allowsImageFrom\"]($2) ? 1 : 0)" js_allowsImageFrom ::
-        JSRef SecurityPolicy -> JSString -> IO Bool
+        SecurityPolicy -> JSString -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SecurityPolicy.allowsImageFrom Mozilla SecurityPolicy.allowsImageFrom documentation> 
 allowsImageFrom ::
                 (MonadIO m, ToJSString url) => SecurityPolicy -> url -> m Bool
 allowsImageFrom self url
-  = liftIO
-      (js_allowsImageFrom (unSecurityPolicy self) (toJSString url))
+  = liftIO (js_allowsImageFrom (self) (toJSString url))
  
 foreign import javascript unsafe
         "($1[\"allowsMediaFrom\"]($2) ? 1 : 0)" js_allowsMediaFrom ::
-        JSRef SecurityPolicy -> JSString -> IO Bool
+        SecurityPolicy -> JSString -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SecurityPolicy.allowsMediaFrom Mozilla SecurityPolicy.allowsMediaFrom documentation> 
 allowsMediaFrom ::
                 (MonadIO m, ToJSString url) => SecurityPolicy -> url -> m Bool
 allowsMediaFrom self url
-  = liftIO
-      (js_allowsMediaFrom (unSecurityPolicy self) (toJSString url))
+  = liftIO (js_allowsMediaFrom (self) (toJSString url))
  
 foreign import javascript unsafe
         "($1[\"allowsObjectFrom\"]($2) ? 1 : 0)" js_allowsObjectFrom ::
-        JSRef SecurityPolicy -> JSString -> IO Bool
+        SecurityPolicy -> JSString -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SecurityPolicy.allowsObjectFrom Mozilla SecurityPolicy.allowsObjectFrom documentation> 
 allowsObjectFrom ::
                  (MonadIO m, ToJSString url) => SecurityPolicy -> url -> m Bool
 allowsObjectFrom self url
-  = liftIO
-      (js_allowsObjectFrom (unSecurityPolicy self) (toJSString url))
+  = liftIO (js_allowsObjectFrom (self) (toJSString url))
  
 foreign import javascript unsafe
         "($1[\"allowsPluginType\"]($2) ? 1 : 0)" js_allowsPluginType ::
-        JSRef SecurityPolicy -> JSString -> IO Bool
+        SecurityPolicy -> JSString -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SecurityPolicy.allowsPluginType Mozilla SecurityPolicy.allowsPluginType documentation> 
 allowsPluginType ::
                  (MonadIO m, ToJSString type') => SecurityPolicy -> type' -> m Bool
 allowsPluginType self type'
-  = liftIO
-      (js_allowsPluginType (unSecurityPolicy self) (toJSString type'))
+  = liftIO (js_allowsPluginType (self) (toJSString type'))
  
 foreign import javascript unsafe
         "($1[\"allowsScriptFrom\"]($2) ? 1 : 0)" js_allowsScriptFrom ::
-        JSRef SecurityPolicy -> JSString -> IO Bool
+        SecurityPolicy -> JSString -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SecurityPolicy.allowsScriptFrom Mozilla SecurityPolicy.allowsScriptFrom documentation> 
 allowsScriptFrom ::
                  (MonadIO m, ToJSString url) => SecurityPolicy -> url -> m Bool
 allowsScriptFrom self url
-  = liftIO
-      (js_allowsScriptFrom (unSecurityPolicy self) (toJSString url))
+  = liftIO (js_allowsScriptFrom (self) (toJSString url))
  
 foreign import javascript unsafe
         "($1[\"allowsStyleFrom\"]($2) ? 1 : 0)" js_allowsStyleFrom ::
-        JSRef SecurityPolicy -> JSString -> IO Bool
+        SecurityPolicy -> JSString -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SecurityPolicy.allowsStyleFrom Mozilla SecurityPolicy.allowsStyleFrom documentation> 
 allowsStyleFrom ::
                 (MonadIO m, ToJSString url) => SecurityPolicy -> url -> m Bool
 allowsStyleFrom self url
-  = liftIO
-      (js_allowsStyleFrom (unSecurityPolicy self) (toJSString url))
+  = liftIO (js_allowsStyleFrom (self) (toJSString url))
  
 foreign import javascript unsafe "($1[\"allowsEval\"] ? 1 : 0)"
-        js_getAllowsEval :: JSRef SecurityPolicy -> IO Bool
+        js_getAllowsEval :: SecurityPolicy -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SecurityPolicy.allowsEval Mozilla SecurityPolicy.allowsEval documentation> 
 getAllowsEval :: (MonadIO m) => SecurityPolicy -> m Bool
-getAllowsEval self
-  = liftIO (js_getAllowsEval (unSecurityPolicy self))
+getAllowsEval self = liftIO (js_getAllowsEval (self))
  
 foreign import javascript unsafe
         "($1[\"allowsInlineScript\"] ? 1 : 0)" js_getAllowsInlineScript ::
-        JSRef SecurityPolicy -> IO Bool
+        SecurityPolicy -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SecurityPolicy.allowsInlineScript Mozilla SecurityPolicy.allowsInlineScript documentation> 
 getAllowsInlineScript :: (MonadIO m) => SecurityPolicy -> m Bool
 getAllowsInlineScript self
-  = liftIO (js_getAllowsInlineScript (unSecurityPolicy self))
+  = liftIO (js_getAllowsInlineScript (self))
  
 foreign import javascript unsafe
         "($1[\"allowsInlineStyle\"] ? 1 : 0)" js_getAllowsInlineStyle ::
-        JSRef SecurityPolicy -> IO Bool
+        SecurityPolicy -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SecurityPolicy.allowsInlineStyle Mozilla SecurityPolicy.allowsInlineStyle documentation> 
 getAllowsInlineStyle :: (MonadIO m) => SecurityPolicy -> m Bool
-getAllowsInlineStyle self
-  = liftIO (js_getAllowsInlineStyle (unSecurityPolicy self))
+getAllowsInlineStyle self = liftIO (js_getAllowsInlineStyle (self))
  
 foreign import javascript unsafe "($1[\"isActive\"] ? 1 : 0)"
-        js_getIsActive :: JSRef SecurityPolicy -> IO Bool
+        js_getIsActive :: SecurityPolicy -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SecurityPolicy.isActive Mozilla SecurityPolicy.isActive documentation> 
 getIsActive :: (MonadIO m) => SecurityPolicy -> m Bool
-getIsActive self = liftIO (js_getIsActive (unSecurityPolicy self))
+getIsActive self = liftIO (js_getIsActive (self))
  
 foreign import javascript unsafe "$1[\"reportURIs\"]"
-        js_getReportURIs ::
-        JSRef SecurityPolicy -> IO (JSRef DOMStringList)
+        js_getReportURIs :: SecurityPolicy -> IO (Nullable DOMStringList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SecurityPolicy.reportURIs Mozilla SecurityPolicy.reportURIs documentation> 
 getReportURIs ::
               (MonadIO m) => SecurityPolicy -> m (Maybe DOMStringList)
 getReportURIs self
-  = liftIO ((js_getReportURIs (unSecurityPolicy self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getReportURIs (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SecurityPolicyViolationEvent.hs b/src/GHCJS/DOM/JSFFI/Generated/SecurityPolicyViolationEvent.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SecurityPolicyViolationEvent.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SecurityPolicyViolationEvent.hs
@@ -10,7 +10,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -24,100 +24,81 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"documentURI\"]"
-        js_getDocumentURI ::
-        JSRef SecurityPolicyViolationEvent -> IO JSString
+        js_getDocumentURI :: SecurityPolicyViolationEvent -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SecurityPolicyViolationEvent.documentURI Mozilla SecurityPolicyViolationEvent.documentURI documentation> 
 getDocumentURI ::
                (MonadIO m, FromJSString result) =>
                  SecurityPolicyViolationEvent -> m result
 getDocumentURI self
-  = liftIO
-      (fromJSString <$>
-         (js_getDocumentURI (unSecurityPolicyViolationEvent self)))
+  = liftIO (fromJSString <$> (js_getDocumentURI (self)))
  
 foreign import javascript unsafe "$1[\"referrer\"]" js_getReferrer
-        :: JSRef SecurityPolicyViolationEvent -> IO JSString
+        :: SecurityPolicyViolationEvent -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SecurityPolicyViolationEvent.referrer Mozilla SecurityPolicyViolationEvent.referrer documentation> 
 getReferrer ::
             (MonadIO m, FromJSString result) =>
               SecurityPolicyViolationEvent -> m result
 getReferrer self
-  = liftIO
-      (fromJSString <$>
-         (js_getReferrer (unSecurityPolicyViolationEvent self)))
+  = liftIO (fromJSString <$> (js_getReferrer (self)))
  
 foreign import javascript unsafe "$1[\"blockedURI\"]"
-        js_getBlockedURI ::
-        JSRef SecurityPolicyViolationEvent -> IO JSString
+        js_getBlockedURI :: SecurityPolicyViolationEvent -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SecurityPolicyViolationEvent.blockedURI Mozilla SecurityPolicyViolationEvent.blockedURI documentation> 
 getBlockedURI ::
               (MonadIO m, FromJSString result) =>
                 SecurityPolicyViolationEvent -> m result
 getBlockedURI self
-  = liftIO
-      (fromJSString <$>
-         (js_getBlockedURI (unSecurityPolicyViolationEvent self)))
+  = liftIO (fromJSString <$> (js_getBlockedURI (self)))
  
 foreign import javascript unsafe "$1[\"violatedDirective\"]"
         js_getViolatedDirective ::
-        JSRef SecurityPolicyViolationEvent -> IO JSString
+        SecurityPolicyViolationEvent -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SecurityPolicyViolationEvent.violatedDirective Mozilla SecurityPolicyViolationEvent.violatedDirective documentation> 
 getViolatedDirective ::
                      (MonadIO m, FromJSString result) =>
                        SecurityPolicyViolationEvent -> m result
 getViolatedDirective self
-  = liftIO
-      (fromJSString <$>
-         (js_getViolatedDirective (unSecurityPolicyViolationEvent self)))
+  = liftIO (fromJSString <$> (js_getViolatedDirective (self)))
  
 foreign import javascript unsafe "$1[\"effectiveDirective\"]"
         js_getEffectiveDirective ::
-        JSRef SecurityPolicyViolationEvent -> IO JSString
+        SecurityPolicyViolationEvent -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SecurityPolicyViolationEvent.effectiveDirective Mozilla SecurityPolicyViolationEvent.effectiveDirective documentation> 
 getEffectiveDirective ::
                       (MonadIO m, FromJSString result) =>
                         SecurityPolicyViolationEvent -> m result
 getEffectiveDirective self
-  = liftIO
-      (fromJSString <$>
-         (js_getEffectiveDirective (unSecurityPolicyViolationEvent self)))
+  = liftIO (fromJSString <$> (js_getEffectiveDirective (self)))
  
 foreign import javascript unsafe "$1[\"originalPolicy\"]"
-        js_getOriginalPolicy ::
-        JSRef SecurityPolicyViolationEvent -> IO JSString
+        js_getOriginalPolicy :: SecurityPolicyViolationEvent -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SecurityPolicyViolationEvent.originalPolicy Mozilla SecurityPolicyViolationEvent.originalPolicy documentation> 
 getOriginalPolicy ::
                   (MonadIO m, FromJSString result) =>
                     SecurityPolicyViolationEvent -> m result
 getOriginalPolicy self
-  = liftIO
-      (fromJSString <$>
-         (js_getOriginalPolicy (unSecurityPolicyViolationEvent self)))
+  = liftIO (fromJSString <$> (js_getOriginalPolicy (self)))
  
 foreign import javascript unsafe "$1[\"sourceFile\"]"
-        js_getSourceFile ::
-        JSRef SecurityPolicyViolationEvent -> IO JSString
+        js_getSourceFile :: SecurityPolicyViolationEvent -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SecurityPolicyViolationEvent.sourceFile Mozilla SecurityPolicyViolationEvent.sourceFile documentation> 
 getSourceFile ::
               (MonadIO m, FromJSString result) =>
                 SecurityPolicyViolationEvent -> m result
 getSourceFile self
-  = liftIO
-      (fromJSString <$>
-         (js_getSourceFile (unSecurityPolicyViolationEvent self)))
+  = liftIO (fromJSString <$> (js_getSourceFile (self)))
  
 foreign import javascript unsafe "$1[\"lineNumber\"]"
-        js_getLineNumber :: JSRef SecurityPolicyViolationEvent -> IO Int
+        js_getLineNumber :: SecurityPolicyViolationEvent -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SecurityPolicyViolationEvent.lineNumber Mozilla SecurityPolicyViolationEvent.lineNumber documentation> 
 getLineNumber ::
               (MonadIO m) => SecurityPolicyViolationEvent -> m Int
-getLineNumber self
-  = liftIO (js_getLineNumber (unSecurityPolicyViolationEvent self))
+getLineNumber self = liftIO (js_getLineNumber (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/Selection.hs b/src/GHCJS/DOM/JSFFI/Generated/Selection.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/Selection.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/Selection.hs
@@ -17,7 +17,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -31,43 +31,39 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"collapse\"]($2, $3)"
-        js_collapse :: JSRef Selection -> JSRef Node -> Int -> IO ()
+        js_collapse :: Selection -> Nullable Node -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Selection.collapse Mozilla Selection.collapse documentation> 
 collapse ::
          (MonadIO m, IsNode node) => Selection -> Maybe node -> Int -> m ()
 collapse self node index
   = liftIO
-      (js_collapse (unSelection self)
-         (maybe jsNull (unNode . toNode) node)
-         index)
+      (js_collapse (self) (maybeToNullable (fmap toNode node)) index)
  
 foreign import javascript unsafe "$1[\"collapseToEnd\"]()"
-        js_collapseToEnd :: JSRef Selection -> IO ()
+        js_collapseToEnd :: Selection -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Selection.collapseToEnd Mozilla Selection.collapseToEnd documentation> 
 collapseToEnd :: (MonadIO m) => Selection -> m ()
-collapseToEnd self = liftIO (js_collapseToEnd (unSelection self))
+collapseToEnd self = liftIO (js_collapseToEnd (self))
  
 foreign import javascript unsafe "$1[\"collapseToStart\"]()"
-        js_collapseToStart :: JSRef Selection -> IO ()
+        js_collapseToStart :: Selection -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Selection.collapseToStart Mozilla Selection.collapseToStart documentation> 
 collapseToStart :: (MonadIO m) => Selection -> m ()
-collapseToStart self
-  = liftIO (js_collapseToStart (unSelection self))
+collapseToStart self = liftIO (js_collapseToStart (self))
  
 foreign import javascript unsafe "$1[\"deleteFromDocument\"]()"
-        js_deleteFromDocument :: JSRef Selection -> IO ()
+        js_deleteFromDocument :: Selection -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Selection.deleteFromDocument Mozilla Selection.deleteFromDocument documentation> 
 deleteFromDocument :: (MonadIO m) => Selection -> m ()
-deleteFromDocument self
-  = liftIO (js_deleteFromDocument (unSelection self))
+deleteFromDocument self = liftIO (js_deleteFromDocument (self))
  
 foreign import javascript unsafe
         "($1[\"containsNode\"]($2,\n$3) ? 1 : 0)" js_containsNode ::
-        JSRef Selection -> JSRef Node -> Bool -> IO Bool
+        Selection -> Nullable Node -> Bool -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Selection.containsNode Mozilla Selection.containsNode documentation> 
 containsNode ::
@@ -75,69 +71,62 @@
                Selection -> Maybe node -> Bool -> m Bool
 containsNode self node allowPartial
   = liftIO
-      (js_containsNode (unSelection self)
-         (maybe jsNull (unNode . toNode) node)
+      (js_containsNode (self) (maybeToNullable (fmap toNode node))
          allowPartial)
  
 foreign import javascript unsafe "$1[\"selectAllChildren\"]($2)"
-        js_selectAllChildren :: JSRef Selection -> JSRef Node -> IO ()
+        js_selectAllChildren :: Selection -> Nullable Node -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Selection.selectAllChildren Mozilla Selection.selectAllChildren documentation> 
 selectAllChildren ::
                   (MonadIO m, IsNode node) => Selection -> Maybe node -> m ()
 selectAllChildren self node
   = liftIO
-      (js_selectAllChildren (unSelection self)
-         (maybe jsNull (unNode . toNode) node))
+      (js_selectAllChildren (self) (maybeToNullable (fmap toNode node)))
  
 foreign import javascript unsafe "$1[\"extend\"]($2, $3)" js_extend
-        :: JSRef Selection -> JSRef Node -> Int -> IO ()
+        :: Selection -> Nullable Node -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Selection.extend Mozilla Selection.extend documentation> 
 extend ::
        (MonadIO m, IsNode node) => Selection -> Maybe node -> Int -> m ()
 extend self node offset
   = liftIO
-      (js_extend (unSelection self) (maybe jsNull (unNode . toNode) node)
-         offset)
+      (js_extend (self) (maybeToNullable (fmap toNode node)) offset)
  
 foreign import javascript unsafe "$1[\"getRangeAt\"]($2)"
-        js_getRangeAt :: JSRef Selection -> Int -> IO (JSRef Range)
+        js_getRangeAt :: Selection -> Int -> IO (Nullable Range)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Selection.getRangeAt Mozilla Selection.getRangeAt documentation> 
 getRangeAt :: (MonadIO m) => Selection -> Int -> m (Maybe Range)
 getRangeAt self index
-  = liftIO ((js_getRangeAt (unSelection self) index) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getRangeAt (self) index))
  
 foreign import javascript unsafe "$1[\"removeAllRanges\"]()"
-        js_removeAllRanges :: JSRef Selection -> IO ()
+        js_removeAllRanges :: Selection -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Selection.removeAllRanges Mozilla Selection.removeAllRanges documentation> 
 removeAllRanges :: (MonadIO m) => Selection -> m ()
-removeAllRanges self
-  = liftIO (js_removeAllRanges (unSelection self))
+removeAllRanges self = liftIO (js_removeAllRanges (self))
  
 foreign import javascript unsafe "$1[\"addRange\"]($2)" js_addRange
-        :: JSRef Selection -> JSRef Range -> IO ()
+        :: Selection -> Nullable Range -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Selection.addRange Mozilla Selection.addRange documentation> 
 addRange :: (MonadIO m) => Selection -> Maybe Range -> m ()
 addRange self range
-  = liftIO
-      (js_addRange (unSelection self) (maybe jsNull pToJSRef range))
+  = liftIO (js_addRange (self) (maybeToNullable range))
  
 foreign import javascript unsafe "$1[\"toString\"]()" js_toString
-        :: JSRef Selection -> IO JSString
+        :: Selection -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Selection.toString Mozilla Selection.toString documentation> 
 toString ::
          (MonadIO m, FromJSString result) => Selection -> m result
-toString self
-  = liftIO (fromJSString <$> (js_toString (unSelection self)))
+toString self = liftIO (fromJSString <$> (js_toString (self)))
  
 foreign import javascript unsafe "$1[\"modify\"]($2, $3, $4)"
-        js_modify ::
-        JSRef Selection -> JSString -> JSString -> JSString -> IO ()
+        js_modify :: Selection -> JSString -> JSString -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Selection.modify Mozilla Selection.modify documentation> 
 modify ::
@@ -146,13 +135,12 @@
          Selection -> alter -> direction -> granularity -> m ()
 modify self alter direction granularity
   = liftIO
-      (js_modify (unSelection self) (toJSString alter)
-         (toJSString direction)
+      (js_modify (self) (toJSString alter) (toJSString direction)
          (toJSString granularity))
  
 foreign import javascript unsafe
         "$1[\"setBaseAndExtent\"]($2, $3,\n$4, $5)" js_setBaseAndExtent ::
-        JSRef Selection -> JSRef Node -> Int -> JSRef Node -> Int -> IO ()
+        Selection -> Nullable Node -> Int -> Nullable Node -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Selection.setBaseAndExtent Mozilla Selection.setBaseAndExtent documentation> 
 setBaseAndExtent ::
@@ -161,112 +149,107 @@
                      Maybe baseNode -> Int -> Maybe extentNode -> Int -> m ()
 setBaseAndExtent self baseNode baseOffset extentNode extentOffset
   = liftIO
-      (js_setBaseAndExtent (unSelection self)
-         (maybe jsNull (unNode . toNode) baseNode)
+      (js_setBaseAndExtent (self)
+         (maybeToNullable (fmap toNode baseNode))
          baseOffset
-         (maybe jsNull (unNode . toNode) extentNode)
+         (maybeToNullable (fmap toNode extentNode))
          extentOffset)
  
 foreign import javascript unsafe "$1[\"setPosition\"]($2, $3)"
-        js_setPosition :: JSRef Selection -> JSRef Node -> Int -> IO ()
+        js_setPosition :: Selection -> Nullable Node -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Selection.setPosition Mozilla Selection.setPosition documentation> 
 setPosition ::
             (MonadIO m, IsNode node) => Selection -> Maybe node -> Int -> m ()
 setPosition self node offset
   = liftIO
-      (js_setPosition (unSelection self)
-         (maybe jsNull (unNode . toNode) node)
-         offset)
+      (js_setPosition (self) (maybeToNullable (fmap toNode node)) offset)
  
 foreign import javascript unsafe "$1[\"empty\"]()" js_empty ::
-        JSRef Selection -> IO ()
+        Selection -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Selection.empty Mozilla Selection.empty documentation> 
 empty :: (MonadIO m) => Selection -> m ()
-empty self = liftIO (js_empty (unSelection self))
+empty self = liftIO (js_empty (self))
  
 foreign import javascript unsafe "$1[\"anchorNode\"]"
-        js_getAnchorNode :: JSRef Selection -> IO (JSRef Node)
+        js_getAnchorNode :: Selection -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Selection.anchorNode Mozilla Selection.anchorNode documentation> 
 getAnchorNode :: (MonadIO m) => Selection -> m (Maybe Node)
 getAnchorNode self
-  = liftIO ((js_getAnchorNode (unSelection self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getAnchorNode (self)))
  
 foreign import javascript unsafe "$1[\"anchorOffset\"]"
-        js_getAnchorOffset :: JSRef Selection -> IO Int
+        js_getAnchorOffset :: Selection -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Selection.anchorOffset Mozilla Selection.anchorOffset documentation> 
 getAnchorOffset :: (MonadIO m) => Selection -> m Int
-getAnchorOffset self
-  = liftIO (js_getAnchorOffset (unSelection self))
+getAnchorOffset self = liftIO (js_getAnchorOffset (self))
  
 foreign import javascript unsafe "$1[\"focusNode\"]"
-        js_getFocusNode :: JSRef Selection -> IO (JSRef Node)
+        js_getFocusNode :: Selection -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Selection.focusNode Mozilla Selection.focusNode documentation> 
 getFocusNode :: (MonadIO m) => Selection -> m (Maybe Node)
 getFocusNode self
-  = liftIO ((js_getFocusNode (unSelection self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getFocusNode (self)))
  
 foreign import javascript unsafe "$1[\"focusOffset\"]"
-        js_getFocusOffset :: JSRef Selection -> IO Int
+        js_getFocusOffset :: Selection -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Selection.focusOffset Mozilla Selection.focusOffset documentation> 
 getFocusOffset :: (MonadIO m) => Selection -> m Int
-getFocusOffset self = liftIO (js_getFocusOffset (unSelection self))
+getFocusOffset self = liftIO (js_getFocusOffset (self))
  
 foreign import javascript unsafe "($1[\"isCollapsed\"] ? 1 : 0)"
-        js_getIsCollapsed :: JSRef Selection -> IO Bool
+        js_getIsCollapsed :: Selection -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Selection.isCollapsed Mozilla Selection.isCollapsed documentation> 
 getIsCollapsed :: (MonadIO m) => Selection -> m Bool
-getIsCollapsed self = liftIO (js_getIsCollapsed (unSelection self))
+getIsCollapsed self = liftIO (js_getIsCollapsed (self))
  
 foreign import javascript unsafe "$1[\"rangeCount\"]"
-        js_getRangeCount :: JSRef Selection -> IO Int
+        js_getRangeCount :: Selection -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Selection.rangeCount Mozilla Selection.rangeCount documentation> 
 getRangeCount :: (MonadIO m) => Selection -> m Int
-getRangeCount self = liftIO (js_getRangeCount (unSelection self))
+getRangeCount self = liftIO (js_getRangeCount (self))
  
 foreign import javascript unsafe "$1[\"baseNode\"]" js_getBaseNode
-        :: JSRef Selection -> IO (JSRef Node)
+        :: Selection -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Selection.baseNode Mozilla Selection.baseNode documentation> 
 getBaseNode :: (MonadIO m) => Selection -> m (Maybe Node)
 getBaseNode self
-  = liftIO ((js_getBaseNode (unSelection self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getBaseNode (self)))
  
 foreign import javascript unsafe "$1[\"baseOffset\"]"
-        js_getBaseOffset :: JSRef Selection -> IO Int
+        js_getBaseOffset :: Selection -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Selection.baseOffset Mozilla Selection.baseOffset documentation> 
 getBaseOffset :: (MonadIO m) => Selection -> m Int
-getBaseOffset self = liftIO (js_getBaseOffset (unSelection self))
+getBaseOffset self = liftIO (js_getBaseOffset (self))
  
 foreign import javascript unsafe "$1[\"extentNode\"]"
-        js_getExtentNode :: JSRef Selection -> IO (JSRef Node)
+        js_getExtentNode :: Selection -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Selection.extentNode Mozilla Selection.extentNode documentation> 
 getExtentNode :: (MonadIO m) => Selection -> m (Maybe Node)
 getExtentNode self
-  = liftIO ((js_getExtentNode (unSelection self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getExtentNode (self)))
  
 foreign import javascript unsafe "$1[\"extentOffset\"]"
-        js_getExtentOffset :: JSRef Selection -> IO Int
+        js_getExtentOffset :: Selection -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Selection.extentOffset Mozilla Selection.extentOffset documentation> 
 getExtentOffset :: (MonadIO m) => Selection -> m Int
-getExtentOffset self
-  = liftIO (js_getExtentOffset (unSelection self))
+getExtentOffset self = liftIO (js_getExtentOffset (self))
  
 foreign import javascript unsafe "$1[\"type\"]" js_getType ::
-        JSRef Selection -> IO JSString
+        Selection -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Selection.type Mozilla Selection.type documentation> 
 getType ::
         (MonadIO m, FromJSString result) => Selection -> m result
-getType self
-  = liftIO (fromJSString <$> (js_getType (unSelection self)))
+getType self = liftIO (fromJSString <$> (js_getType (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SourceBuffer.hs b/src/GHCJS/DOM/JSFFI/Generated/SourceBuffer.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SourceBuffer.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SourceBuffer.hs
@@ -15,7 +15,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -29,7 +29,7 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"appendBuffer\"]($2)"
-        js_appendBuffer :: JSRef SourceBuffer -> JSRef ArrayBuffer -> IO ()
+        js_appendBuffer :: SourceBuffer -> Nullable ArrayBuffer -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SourceBuffer.appendBuffer Mozilla SourceBuffer.appendBuffer documentation> 
 appendBuffer ::
@@ -37,12 +37,12 @@
                SourceBuffer -> Maybe data' -> m ()
 appendBuffer self data'
   = liftIO
-      (js_appendBuffer (unSourceBuffer self)
-         (maybe jsNull (unArrayBuffer . toArrayBuffer) data'))
+      (js_appendBuffer (self)
+         (maybeToNullable (fmap toArrayBuffer data')))
  
 foreign import javascript unsafe "$1[\"appendBuffer\"]($2)"
         js_appendBufferView ::
-        JSRef SourceBuffer -> JSRef ArrayBufferView -> IO ()
+        SourceBuffer -> Nullable ArrayBufferView -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SourceBuffer.appendBuffer Mozilla SourceBuffer.appendBuffer documentation> 
 appendBufferView ::
@@ -50,130 +50,121 @@
                    SourceBuffer -> Maybe data' -> m ()
 appendBufferView self data'
   = liftIO
-      (js_appendBufferView (unSourceBuffer self)
-         (maybe jsNull (unArrayBufferView . toArrayBufferView) data'))
+      (js_appendBufferView (self)
+         (maybeToNullable (fmap toArrayBufferView data')))
  
 foreign import javascript unsafe "$1[\"abort\"]()" js_abort ::
-        JSRef SourceBuffer -> IO ()
+        SourceBuffer -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SourceBuffer.abort Mozilla SourceBuffer.abort documentation> 
 abort :: (MonadIO m) => SourceBuffer -> m ()
-abort self = liftIO (js_abort (unSourceBuffer self))
+abort self = liftIO (js_abort (self))
  
 foreign import javascript unsafe "$1[\"remove\"]($2, $3)" js_remove
-        :: JSRef SourceBuffer -> Double -> Double -> IO ()
+        :: SourceBuffer -> Double -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SourceBuffer.remove Mozilla SourceBuffer.remove documentation> 
 remove :: (MonadIO m) => SourceBuffer -> Double -> Double -> m ()
-remove self start end
-  = liftIO (js_remove (unSourceBuffer self) start end)
+remove self start end = liftIO (js_remove (self) start end)
  
 foreign import javascript unsafe "$1[\"mode\"] = $2;" js_setMode ::
-        JSRef SourceBuffer -> JSRef AppendMode -> IO ()
+        SourceBuffer -> JSRef -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SourceBuffer.mode Mozilla SourceBuffer.mode documentation> 
 setMode :: (MonadIO m) => SourceBuffer -> AppendMode -> m ()
-setMode self val
-  = liftIO (js_setMode (unSourceBuffer self) (pToJSRef val))
+setMode self val = liftIO (js_setMode (self) (pToJSRef val))
  
 foreign import javascript unsafe "$1[\"mode\"]" js_getMode ::
-        JSRef SourceBuffer -> IO (JSRef AppendMode)
+        SourceBuffer -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SourceBuffer.mode Mozilla SourceBuffer.mode documentation> 
 getMode :: (MonadIO m) => SourceBuffer -> m AppendMode
-getMode self
-  = liftIO
-      ((js_getMode (unSourceBuffer self)) >>= fromJSRefUnchecked)
+getMode self = liftIO ((js_getMode (self)) >>= fromJSRefUnchecked)
  
 foreign import javascript unsafe "($1[\"updating\"] ? 1 : 0)"
-        js_getUpdating :: JSRef SourceBuffer -> IO Bool
+        js_getUpdating :: SourceBuffer -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SourceBuffer.updating Mozilla SourceBuffer.updating documentation> 
 getUpdating :: (MonadIO m) => SourceBuffer -> m Bool
-getUpdating self = liftIO (js_getUpdating (unSourceBuffer self))
+getUpdating self = liftIO (js_getUpdating (self))
  
 foreign import javascript unsafe "$1[\"buffered\"]" js_getBuffered
-        :: JSRef SourceBuffer -> IO (JSRef TimeRanges)
+        :: SourceBuffer -> IO (Nullable TimeRanges)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SourceBuffer.buffered Mozilla SourceBuffer.buffered documentation> 
 getBuffered :: (MonadIO m) => SourceBuffer -> m (Maybe TimeRanges)
 getBuffered self
-  = liftIO ((js_getBuffered (unSourceBuffer self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getBuffered (self)))
  
 foreign import javascript unsafe "$1[\"timestampOffset\"] = $2;"
-        js_setTimestampOffset :: JSRef SourceBuffer -> Double -> IO ()
+        js_setTimestampOffset :: SourceBuffer -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SourceBuffer.timestampOffset Mozilla SourceBuffer.timestampOffset documentation> 
 setTimestampOffset :: (MonadIO m) => SourceBuffer -> Double -> m ()
 setTimestampOffset self val
-  = liftIO (js_setTimestampOffset (unSourceBuffer self) val)
+  = liftIO (js_setTimestampOffset (self) val)
  
 foreign import javascript unsafe "$1[\"timestampOffset\"]"
-        js_getTimestampOffset :: JSRef SourceBuffer -> IO Double
+        js_getTimestampOffset :: SourceBuffer -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SourceBuffer.timestampOffset Mozilla SourceBuffer.timestampOffset documentation> 
 getTimestampOffset :: (MonadIO m) => SourceBuffer -> m Double
-getTimestampOffset self
-  = liftIO (js_getTimestampOffset (unSourceBuffer self))
+getTimestampOffset self = liftIO (js_getTimestampOffset (self))
  
 foreign import javascript unsafe "$1[\"audioTracks\"]"
-        js_getAudioTracks ::
-        JSRef SourceBuffer -> IO (JSRef AudioTrackList)
+        js_getAudioTracks :: SourceBuffer -> IO (Nullable AudioTrackList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SourceBuffer.audioTracks Mozilla SourceBuffer.audioTracks documentation> 
 getAudioTracks ::
                (MonadIO m) => SourceBuffer -> m (Maybe AudioTrackList)
 getAudioTracks self
-  = liftIO ((js_getAudioTracks (unSourceBuffer self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getAudioTracks (self)))
  
 foreign import javascript unsafe "$1[\"videoTracks\"]"
-        js_getVideoTracks ::
-        JSRef SourceBuffer -> IO (JSRef VideoTrackList)
+        js_getVideoTracks :: SourceBuffer -> IO (Nullable VideoTrackList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SourceBuffer.videoTracks Mozilla SourceBuffer.videoTracks documentation> 
 getVideoTracks ::
                (MonadIO m) => SourceBuffer -> m (Maybe VideoTrackList)
 getVideoTracks self
-  = liftIO ((js_getVideoTracks (unSourceBuffer self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getVideoTracks (self)))
  
 foreign import javascript unsafe "$1[\"textTracks\"]"
-        js_getTextTracks :: JSRef SourceBuffer -> IO (JSRef TextTrackList)
+        js_getTextTracks :: SourceBuffer -> IO (Nullable TextTrackList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SourceBuffer.textTracks Mozilla SourceBuffer.textTracks documentation> 
 getTextTracks ::
               (MonadIO m) => SourceBuffer -> m (Maybe TextTrackList)
 getTextTracks self
-  = liftIO ((js_getTextTracks (unSourceBuffer self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getTextTracks (self)))
  
 foreign import javascript unsafe "$1[\"appendWindowStart\"] = $2;"
-        js_setAppendWindowStart :: JSRef SourceBuffer -> Double -> IO ()
+        js_setAppendWindowStart :: SourceBuffer -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SourceBuffer.appendWindowStart Mozilla SourceBuffer.appendWindowStart documentation> 
 setAppendWindowStart ::
                      (MonadIO m) => SourceBuffer -> Double -> m ()
 setAppendWindowStart self val
-  = liftIO (js_setAppendWindowStart (unSourceBuffer self) val)
+  = liftIO (js_setAppendWindowStart (self) val)
  
 foreign import javascript unsafe "$1[\"appendWindowStart\"]"
-        js_getAppendWindowStart :: JSRef SourceBuffer -> IO Double
+        js_getAppendWindowStart :: SourceBuffer -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SourceBuffer.appendWindowStart Mozilla SourceBuffer.appendWindowStart documentation> 
 getAppendWindowStart :: (MonadIO m) => SourceBuffer -> m Double
-getAppendWindowStart self
-  = liftIO (js_getAppendWindowStart (unSourceBuffer self))
+getAppendWindowStart self = liftIO (js_getAppendWindowStart (self))
  
 foreign import javascript unsafe "$1[\"appendWindowEnd\"] = $2;"
-        js_setAppendWindowEnd :: JSRef SourceBuffer -> Double -> IO ()
+        js_setAppendWindowEnd :: SourceBuffer -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SourceBuffer.appendWindowEnd Mozilla SourceBuffer.appendWindowEnd documentation> 
 setAppendWindowEnd :: (MonadIO m) => SourceBuffer -> Double -> m ()
 setAppendWindowEnd self val
-  = liftIO (js_setAppendWindowEnd (unSourceBuffer self) val)
+  = liftIO (js_setAppendWindowEnd (self) val)
  
 foreign import javascript unsafe "$1[\"appendWindowEnd\"]"
-        js_getAppendWindowEnd :: JSRef SourceBuffer -> IO Double
+        js_getAppendWindowEnd :: SourceBuffer -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SourceBuffer.appendWindowEnd Mozilla SourceBuffer.appendWindowEnd documentation> 
 getAppendWindowEnd :: (MonadIO m) => SourceBuffer -> m Double
-getAppendWindowEnd self
-  = liftIO (js_getAppendWindowEnd (unSourceBuffer self))
+getAppendWindowEnd self = liftIO (js_getAppendWindowEnd (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SourceBufferList.hs b/src/GHCJS/DOM/JSFFI/Generated/SourceBufferList.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SourceBufferList.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SourceBufferList.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,17 +19,17 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"item\"]($2)" js_item ::
-        JSRef SourceBufferList -> Word -> IO (JSRef SourceBuffer)
+        SourceBufferList -> Word -> IO (Nullable SourceBuffer)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SourceBufferList.item Mozilla SourceBufferList.item documentation> 
 item ::
      (MonadIO m) => SourceBufferList -> Word -> m (Maybe SourceBuffer)
 item self index
-  = liftIO ((js_item (unSourceBufferList self) index) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_item (self) index))
  
 foreign import javascript unsafe "$1[\"length\"]" js_getLength ::
-        JSRef SourceBufferList -> IO Word
+        SourceBufferList -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SourceBufferList.length Mozilla SourceBufferList.length documentation> 
 getLength :: (MonadIO m) => SourceBufferList -> m Word
-getLength self = liftIO (js_getLength (unSourceBufferList self))
+getLength self = liftIO (js_getLength (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SourceInfo.hs b/src/GHCJS/DOM/JSFFI/Generated/SourceInfo.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SourceInfo.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SourceInfo.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,28 +19,26 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"sourceId\"]" js_getSourceId
-        :: JSRef SourceInfo -> IO JSString
+        :: SourceInfo -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SourceInfo.sourceId Mozilla SourceInfo.sourceId documentation> 
 getSourceId ::
             (MonadIO m, FromJSString result) => SourceInfo -> m result
 getSourceId self
-  = liftIO (fromJSString <$> (js_getSourceId (unSourceInfo self)))
+  = liftIO (fromJSString <$> (js_getSourceId (self)))
  
 foreign import javascript unsafe "$1[\"kind\"]" js_getKind ::
-        JSRef SourceInfo -> IO JSString
+        SourceInfo -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SourceInfo.kind Mozilla SourceInfo.kind documentation> 
 getKind ::
         (MonadIO m, FromJSString result) => SourceInfo -> m result
-getKind self
-  = liftIO (fromJSString <$> (js_getKind (unSourceInfo self)))
+getKind self = liftIO (fromJSString <$> (js_getKind (self)))
  
 foreign import javascript unsafe "$1[\"label\"]" js_getLabel ::
-        JSRef SourceInfo -> IO JSString
+        SourceInfo -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SourceInfo.label Mozilla SourceInfo.label documentation> 
 getLabel ::
          (MonadIO m, FromJSString result) => SourceInfo -> m result
-getLabel self
-  = liftIO (fromJSString <$> (js_getLabel (unSourceInfo self)))
+getLabel self = liftIO (fromJSString <$> (js_getLabel (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SpeechSynthesis.hs b/src/GHCJS/DOM/JSFFI/Generated/SpeechSynthesis.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SpeechSynthesis.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SpeechSynthesis.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -21,65 +21,62 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"speak\"]($2)" js_speak ::
-        JSRef SpeechSynthesis -> JSRef SpeechSynthesisUtterance -> IO ()
+        SpeechSynthesis -> Nullable SpeechSynthesisUtterance -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesis.speak Mozilla SpeechSynthesis.speak documentation> 
 speak ::
       (MonadIO m) =>
         SpeechSynthesis -> Maybe SpeechSynthesisUtterance -> m ()
 speak self utterance
-  = liftIO
-      (js_speak (unSpeechSynthesis self)
-         (maybe jsNull pToJSRef utterance))
+  = liftIO (js_speak (self) (maybeToNullable utterance))
  
 foreign import javascript unsafe "$1[\"cancel\"]()" js_cancel ::
-        JSRef SpeechSynthesis -> IO ()
+        SpeechSynthesis -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesis.cancel Mozilla SpeechSynthesis.cancel documentation> 
 cancel :: (MonadIO m) => SpeechSynthesis -> m ()
-cancel self = liftIO (js_cancel (unSpeechSynthesis self))
+cancel self = liftIO (js_cancel (self))
  
 foreign import javascript unsafe "$1[\"pause\"]()" js_pause ::
-        JSRef SpeechSynthesis -> IO ()
+        SpeechSynthesis -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesis.pause Mozilla SpeechSynthesis.pause documentation> 
 pause :: (MonadIO m) => SpeechSynthesis -> m ()
-pause self = liftIO (js_pause (unSpeechSynthesis self))
+pause self = liftIO (js_pause (self))
  
 foreign import javascript unsafe "$1[\"resume\"]()" js_resume ::
-        JSRef SpeechSynthesis -> IO ()
+        SpeechSynthesis -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesis.resume Mozilla SpeechSynthesis.resume documentation> 
 resume :: (MonadIO m) => SpeechSynthesis -> m ()
-resume self = liftIO (js_resume (unSpeechSynthesis self))
+resume self = liftIO (js_resume (self))
  
 foreign import javascript unsafe "$1[\"getVoices\"]()" js_getVoices
-        :: JSRef SpeechSynthesis -> IO (JSRef [Maybe SpeechSynthesisVoice])
+        :: SpeechSynthesis -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesis.getVoices Mozilla SpeechSynthesis.getVoices documentation> 
 getVoices ::
           (MonadIO m) => SpeechSynthesis -> m [Maybe SpeechSynthesisVoice]
 getVoices self
-  = liftIO
-      ((js_getVoices (unSpeechSynthesis self)) >>= fromJSRefUnchecked)
+  = liftIO ((js_getVoices (self)) >>= fromJSRefUnchecked)
  
 foreign import javascript unsafe "($1[\"pending\"] ? 1 : 0)"
-        js_getPending :: JSRef SpeechSynthesis -> IO Bool
+        js_getPending :: SpeechSynthesis -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesis.pending Mozilla SpeechSynthesis.pending documentation> 
 getPending :: (MonadIO m) => SpeechSynthesis -> m Bool
-getPending self = liftIO (js_getPending (unSpeechSynthesis self))
+getPending self = liftIO (js_getPending (self))
  
 foreign import javascript unsafe "($1[\"speaking\"] ? 1 : 0)"
-        js_getSpeaking :: JSRef SpeechSynthesis -> IO Bool
+        js_getSpeaking :: SpeechSynthesis -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesis.speaking Mozilla SpeechSynthesis.speaking documentation> 
 getSpeaking :: (MonadIO m) => SpeechSynthesis -> m Bool
-getSpeaking self = liftIO (js_getSpeaking (unSpeechSynthesis self))
+getSpeaking self = liftIO (js_getSpeaking (self))
  
 foreign import javascript unsafe "($1[\"paused\"] ? 1 : 0)"
-        js_getPaused :: JSRef SpeechSynthesis -> IO Bool
+        js_getPaused :: SpeechSynthesis -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesis.paused Mozilla SpeechSynthesis.paused documentation> 
 getPaused :: (MonadIO m) => SpeechSynthesis -> m Bool
-getPaused self = liftIO (js_getPaused (unSpeechSynthesis self))
+getPaused self = liftIO (js_getPaused (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SpeechSynthesisEvent.hs b/src/GHCJS/DOM/JSFFI/Generated/SpeechSynthesisEvent.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SpeechSynthesisEvent.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SpeechSynthesisEvent.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,28 +20,24 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"charIndex\"]"
-        js_getCharIndex :: JSRef SpeechSynthesisEvent -> IO Word
+        js_getCharIndex :: SpeechSynthesisEvent -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesisEvent.charIndex Mozilla SpeechSynthesisEvent.charIndex documentation> 
 getCharIndex :: (MonadIO m) => SpeechSynthesisEvent -> m Word
-getCharIndex self
-  = liftIO (js_getCharIndex (unSpeechSynthesisEvent self))
+getCharIndex self = liftIO (js_getCharIndex (self))
  
 foreign import javascript unsafe "$1[\"elapsedTime\"]"
-        js_getElapsedTime :: JSRef SpeechSynthesisEvent -> IO Float
+        js_getElapsedTime :: SpeechSynthesisEvent -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesisEvent.elapsedTime Mozilla SpeechSynthesisEvent.elapsedTime documentation> 
 getElapsedTime :: (MonadIO m) => SpeechSynthesisEvent -> m Float
-getElapsedTime self
-  = liftIO (js_getElapsedTime (unSpeechSynthesisEvent self))
+getElapsedTime self = liftIO (js_getElapsedTime (self))
  
 foreign import javascript unsafe "$1[\"name\"]" js_getName ::
-        JSRef SpeechSynthesisEvent -> IO JSString
+        SpeechSynthesisEvent -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesisEvent.name Mozilla SpeechSynthesisEvent.name documentation> 
 getName ::
         (MonadIO m, FromJSString result) =>
           SpeechSynthesisEvent -> m result
-getName self
-  = liftIO
-      (fromJSString <$> (js_getName (unSpeechSynthesisEvent self)))
+getName self = liftIO (fromJSString <$> (js_getName (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SpeechSynthesisUtterance.hs b/src/GHCJS/DOM/JSFFI/Generated/SpeechSynthesisUtterance.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SpeechSynthesisUtterance.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SpeechSynthesisUtterance.hs
@@ -11,7 +11,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -27,134 +27,113 @@
 foreign import javascript unsafe
         "new window[\"SpeechSynthesisUtterance\"]($1)"
         js_newSpeechSynthesisUtterance ::
-        JSString -> IO (JSRef SpeechSynthesisUtterance)
+        JSString -> IO SpeechSynthesisUtterance
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesisUtterance Mozilla SpeechSynthesisUtterance documentation> 
 newSpeechSynthesisUtterance ::
                             (MonadIO m, ToJSString text) => text -> m SpeechSynthesisUtterance
 newSpeechSynthesisUtterance text
-  = liftIO
-      (js_newSpeechSynthesisUtterance (toJSString text) >>=
-         fromJSRefUnchecked)
+  = liftIO (js_newSpeechSynthesisUtterance (toJSString text))
  
 foreign import javascript unsafe "$1[\"text\"] = $2;" js_setText ::
-        JSRef SpeechSynthesisUtterance -> JSString -> IO ()
+        SpeechSynthesisUtterance -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesisUtterance.text Mozilla SpeechSynthesisUtterance.text documentation> 
 setText ::
         (MonadIO m, ToJSString val) =>
           SpeechSynthesisUtterance -> val -> m ()
-setText self val
-  = liftIO
-      (js_setText (unSpeechSynthesisUtterance self) (toJSString val))
+setText self val = liftIO (js_setText (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"text\"]" js_getText ::
-        JSRef SpeechSynthesisUtterance -> IO JSString
+        SpeechSynthesisUtterance -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesisUtterance.text Mozilla SpeechSynthesisUtterance.text documentation> 
 getText ::
         (MonadIO m, FromJSString result) =>
           SpeechSynthesisUtterance -> m result
-getText self
-  = liftIO
-      (fromJSString <$> (js_getText (unSpeechSynthesisUtterance self)))
+getText self = liftIO (fromJSString <$> (js_getText (self)))
  
 foreign import javascript unsafe "$1[\"lang\"] = $2;" js_setLang ::
-        JSRef SpeechSynthesisUtterance -> JSString -> IO ()
+        SpeechSynthesisUtterance -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesisUtterance.lang Mozilla SpeechSynthesisUtterance.lang documentation> 
 setLang ::
         (MonadIO m, ToJSString val) =>
           SpeechSynthesisUtterance -> val -> m ()
-setLang self val
-  = liftIO
-      (js_setLang (unSpeechSynthesisUtterance self) (toJSString val))
+setLang self val = liftIO (js_setLang (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"lang\"]" js_getLang ::
-        JSRef SpeechSynthesisUtterance -> IO JSString
+        SpeechSynthesisUtterance -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesisUtterance.lang Mozilla SpeechSynthesisUtterance.lang documentation> 
 getLang ::
         (MonadIO m, FromJSString result) =>
           SpeechSynthesisUtterance -> m result
-getLang self
-  = liftIO
-      (fromJSString <$> (js_getLang (unSpeechSynthesisUtterance self)))
+getLang self = liftIO (fromJSString <$> (js_getLang (self)))
  
 foreign import javascript unsafe "$1[\"voice\"] = $2;" js_setVoice
         ::
-        JSRef SpeechSynthesisUtterance ->
-          JSRef SpeechSynthesisVoice -> IO ()
+        SpeechSynthesisUtterance -> Nullable SpeechSynthesisVoice -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesisUtterance.voice Mozilla SpeechSynthesisUtterance.voice documentation> 
 setVoice ::
          (MonadIO m) =>
            SpeechSynthesisUtterance -> Maybe SpeechSynthesisVoice -> m ()
 setVoice self val
-  = liftIO
-      (js_setVoice (unSpeechSynthesisUtterance self)
-         (maybe jsNull pToJSRef val))
+  = liftIO (js_setVoice (self) (maybeToNullable val))
  
 foreign import javascript unsafe "$1[\"voice\"]" js_getVoice ::
-        JSRef SpeechSynthesisUtterance -> IO (JSRef SpeechSynthesisVoice)
+        SpeechSynthesisUtterance -> IO (Nullable SpeechSynthesisVoice)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesisUtterance.voice Mozilla SpeechSynthesisUtterance.voice documentation> 
 getVoice ::
          (MonadIO m) =>
            SpeechSynthesisUtterance -> m (Maybe SpeechSynthesisVoice)
-getVoice self
-  = liftIO
-      ((js_getVoice (unSpeechSynthesisUtterance self)) >>= fromJSRef)
+getVoice self = liftIO (nullableToMaybe <$> (js_getVoice (self)))
  
 foreign import javascript unsafe "$1[\"volume\"] = $2;"
-        js_setVolume :: JSRef SpeechSynthesisUtterance -> Float -> IO ()
+        js_setVolume :: SpeechSynthesisUtterance -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesisUtterance.volume Mozilla SpeechSynthesisUtterance.volume documentation> 
 setVolume ::
           (MonadIO m) => SpeechSynthesisUtterance -> Float -> m ()
-setVolume self val
-  = liftIO (js_setVolume (unSpeechSynthesisUtterance self) val)
+setVolume self val = liftIO (js_setVolume (self) val)
  
 foreign import javascript unsafe "$1[\"volume\"]" js_getVolume ::
-        JSRef SpeechSynthesisUtterance -> IO Float
+        SpeechSynthesisUtterance -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesisUtterance.volume Mozilla SpeechSynthesisUtterance.volume documentation> 
 getVolume :: (MonadIO m) => SpeechSynthesisUtterance -> m Float
-getVolume self
-  = liftIO (js_getVolume (unSpeechSynthesisUtterance self))
+getVolume self = liftIO (js_getVolume (self))
  
 foreign import javascript unsafe "$1[\"rate\"] = $2;" js_setRate ::
-        JSRef SpeechSynthesisUtterance -> Float -> IO ()
+        SpeechSynthesisUtterance -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesisUtterance.rate Mozilla SpeechSynthesisUtterance.rate documentation> 
 setRate :: (MonadIO m) => SpeechSynthesisUtterance -> Float -> m ()
-setRate self val
-  = liftIO (js_setRate (unSpeechSynthesisUtterance self) val)
+setRate self val = liftIO (js_setRate (self) val)
  
 foreign import javascript unsafe "$1[\"rate\"]" js_getRate ::
-        JSRef SpeechSynthesisUtterance -> IO Float
+        SpeechSynthesisUtterance -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesisUtterance.rate Mozilla SpeechSynthesisUtterance.rate documentation> 
 getRate :: (MonadIO m) => SpeechSynthesisUtterance -> m Float
-getRate self
-  = liftIO (js_getRate (unSpeechSynthesisUtterance self))
+getRate self = liftIO (js_getRate (self))
  
 foreign import javascript unsafe "$1[\"pitch\"] = $2;" js_setPitch
-        :: JSRef SpeechSynthesisUtterance -> Float -> IO ()
+        :: SpeechSynthesisUtterance -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesisUtterance.pitch Mozilla SpeechSynthesisUtterance.pitch documentation> 
 setPitch ::
          (MonadIO m) => SpeechSynthesisUtterance -> Float -> m ()
-setPitch self val
-  = liftIO (js_setPitch (unSpeechSynthesisUtterance self) val)
+setPitch self val = liftIO (js_setPitch (self) val)
  
 foreign import javascript unsafe "$1[\"pitch\"]" js_getPitch ::
-        JSRef SpeechSynthesisUtterance -> IO Float
+        SpeechSynthesisUtterance -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesisUtterance.pitch Mozilla SpeechSynthesisUtterance.pitch documentation> 
 getPitch :: (MonadIO m) => SpeechSynthesisUtterance -> m Float
-getPitch self
-  = liftIO (js_getPitch (unSpeechSynthesisUtterance self))
+getPitch self = liftIO (js_getPitch (self))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesisUtterance.onstart Mozilla SpeechSynthesisUtterance.onstart documentation> 
 start :: EventName SpeechSynthesisUtterance Event
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SpeechSynthesisVoice.hs b/src/GHCJS/DOM/JSFFI/Generated/SpeechSynthesisVoice.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SpeechSynthesisVoice.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SpeechSynthesisVoice.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -21,50 +21,43 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"voiceURI\"]" js_getVoiceURI
-        :: JSRef SpeechSynthesisVoice -> IO JSString
+        :: SpeechSynthesisVoice -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesisVoice.voiceURI Mozilla SpeechSynthesisVoice.voiceURI documentation> 
 getVoiceURI ::
             (MonadIO m, FromJSString result) =>
               SpeechSynthesisVoice -> m result
 getVoiceURI self
-  = liftIO
-      (fromJSString <$> (js_getVoiceURI (unSpeechSynthesisVoice self)))
+  = liftIO (fromJSString <$> (js_getVoiceURI (self)))
  
 foreign import javascript unsafe "$1[\"name\"]" js_getName ::
-        JSRef SpeechSynthesisVoice -> IO JSString
+        SpeechSynthesisVoice -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesisVoice.name Mozilla SpeechSynthesisVoice.name documentation> 
 getName ::
         (MonadIO m, FromJSString result) =>
           SpeechSynthesisVoice -> m result
-getName self
-  = liftIO
-      (fromJSString <$> (js_getName (unSpeechSynthesisVoice self)))
+getName self = liftIO (fromJSString <$> (js_getName (self)))
  
 foreign import javascript unsafe "$1[\"lang\"]" js_getLang ::
-        JSRef SpeechSynthesisVoice -> IO JSString
+        SpeechSynthesisVoice -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesisVoice.lang Mozilla SpeechSynthesisVoice.lang documentation> 
 getLang ::
         (MonadIO m, FromJSString result) =>
           SpeechSynthesisVoice -> m result
-getLang self
-  = liftIO
-      (fromJSString <$> (js_getLang (unSpeechSynthesisVoice self)))
+getLang self = liftIO (fromJSString <$> (js_getLang (self)))
  
 foreign import javascript unsafe "($1[\"localService\"] ? 1 : 0)"
-        js_getLocalService :: JSRef SpeechSynthesisVoice -> IO Bool
+        js_getLocalService :: SpeechSynthesisVoice -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesisVoice.localService Mozilla SpeechSynthesisVoice.localService documentation> 
 getLocalService :: (MonadIO m) => SpeechSynthesisVoice -> m Bool
-getLocalService self
-  = liftIO (js_getLocalService (unSpeechSynthesisVoice self))
+getLocalService self = liftIO (js_getLocalService (self))
  
 foreign import javascript unsafe "($1[\"default\"] ? 1 : 0)"
-        js_getDefault :: JSRef SpeechSynthesisVoice -> IO Bool
+        js_getDefault :: SpeechSynthesisVoice -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesisVoice.default Mozilla SpeechSynthesisVoice.default documentation> 
 getDefault :: (MonadIO m) => SpeechSynthesisVoice -> m Bool
-getDefault self
-  = liftIO (js_getDefault (unSpeechSynthesisVoice self))
+getDefault self = liftIO (js_getDefault (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/Storage.hs b/src/GHCJS/DOM/JSFFI/Generated/Storage.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/Storage.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/Storage.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,17 +20,17 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"key\"]($2)" js_key ::
-        JSRef Storage -> Word -> IO (JSRef (Maybe JSString))
+        Storage -> Word -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Storage.key Mozilla Storage.key documentation> 
 key ::
     (MonadIO m, FromJSString result) =>
       Storage -> Word -> m (Maybe result)
 key self index
-  = liftIO (fromMaybeJSString <$> (js_key (unStorage self) index))
+  = liftIO (fromMaybeJSString <$> (js_key (self) index))
  
 foreign import javascript unsafe "$1[\"getItem\"]($2)" js_getItem
-        :: JSRef Storage -> JSString -> IO (JSRef (Maybe JSString))
+        :: Storage -> JSString -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Storage.getItem Mozilla Storage.getItem documentation> 
 getItem ::
@@ -38,38 +38,36 @@
           Storage -> key -> m (Maybe result)
 getItem self key
   = liftIO
-      (fromMaybeJSString <$>
-         (js_getItem (unStorage self) (toJSString key)))
+      (fromMaybeJSString <$> (js_getItem (self) (toJSString key)))
  
 foreign import javascript unsafe "$1[\"setItem\"]($2, $3)"
-        js_setItem :: JSRef Storage -> JSString -> JSString -> IO ()
+        js_setItem :: Storage -> JSString -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Storage.setItem Mozilla Storage.setItem documentation> 
 setItem ::
         (MonadIO m, ToJSString key, ToJSString data') =>
           Storage -> key -> data' -> m ()
 setItem self key data'
-  = liftIO
-      (js_setItem (unStorage self) (toJSString key) (toJSString data'))
+  = liftIO (js_setItem (self) (toJSString key) (toJSString data'))
  
 foreign import javascript unsafe "$1[\"removeItem\"]($2)"
-        js_removeItem :: JSRef Storage -> JSString -> IO ()
+        js_removeItem :: Storage -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Storage.removeItem Mozilla Storage.removeItem documentation> 
 removeItem :: (MonadIO m, ToJSString key) => Storage -> key -> m ()
 removeItem self key
-  = liftIO (js_removeItem (unStorage self) (toJSString key))
+  = liftIO (js_removeItem (self) (toJSString key))
  
 foreign import javascript unsafe "$1[\"clear\"]()" js_clear ::
-        JSRef Storage -> IO ()
+        Storage -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Storage.clear Mozilla Storage.clear documentation> 
 clear :: (MonadIO m) => Storage -> m ()
-clear self = liftIO (js_clear (unStorage self))
+clear self = liftIO (js_clear (self))
  
 foreign import javascript unsafe "$1[\"length\"]" js_getLength ::
-        JSRef Storage -> IO Word
+        Storage -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Storage.length Mozilla Storage.length documentation> 
 getLength :: (MonadIO m) => Storage -> m Word
-getLength self = liftIO (js_getLength (unStorage self))
+getLength self = liftIO (js_getLength (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/StorageErrorCallback.hs b/src/GHCJS/DOM/JSFFI/Generated/StorageErrorCallback.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/StorageErrorCallback.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/StorageErrorCallback.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -24,9 +24,10 @@
                           (Maybe DOMException -> IO ()) -> m StorageErrorCallback
 newStorageErrorCallback callback
   = liftIO
-      (syncCallback1 ThrowWouldBlock
-         (\ error ->
-            fromJSRefUnchecked error >>= \ error' -> callback error'))
+      (StorageErrorCallback <$>
+         syncCallback1 ThrowWouldBlock
+           (\ error ->
+              fromJSRefUnchecked error >>= \ error' -> callback error'))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/StorageErrorCallback Mozilla StorageErrorCallback documentation> 
 newStorageErrorCallbackSync ::
@@ -34,9 +35,10 @@
                               (Maybe DOMException -> IO ()) -> m StorageErrorCallback
 newStorageErrorCallbackSync callback
   = liftIO
-      (syncCallback1 ContinueAsync
-         (\ error ->
-            fromJSRefUnchecked error >>= \ error' -> callback error'))
+      (StorageErrorCallback <$>
+         syncCallback1 ContinueAsync
+           (\ error ->
+              fromJSRefUnchecked error >>= \ error' -> callback error'))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/StorageErrorCallback Mozilla StorageErrorCallback documentation> 
 newStorageErrorCallbackAsync ::
@@ -44,6 +46,7 @@
                                (Maybe DOMException -> IO ()) -> m StorageErrorCallback
 newStorageErrorCallbackAsync callback
   = liftIO
-      (asyncCallback1
-         (\ error ->
-            fromJSRefUnchecked error >>= \ error' -> callback error'))
+      (StorageErrorCallback <$>
+         asyncCallback1
+           (\ error ->
+              fromJSRefUnchecked error >>= \ error' -> callback error'))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/StorageEvent.hs b/src/GHCJS/DOM/JSFFI/Generated/StorageEvent.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/StorageEvent.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/StorageEvent.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -23,13 +23,13 @@
 foreign import javascript unsafe
         "$1[\"initStorageEvent\"]($2, $3,\n$4, $5, $6, $7, $8, $9)"
         js_initStorageEvent ::
-        JSRef StorageEvent ->
+        StorageEvent ->
           JSString ->
             Bool ->
               Bool ->
                 JSString ->
-                  JSRef (Maybe JSString) ->
-                    JSRef (Maybe JSString) -> JSString -> JSRef Storage -> IO ()
+                  Nullable JSString ->
+                    Nullable JSString -> JSString -> Nullable Storage -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/StorageEvent.initStorageEvent Mozilla StorageEvent.initStorageEvent documentation> 
 initStorageEvent ::
@@ -46,59 +46,54 @@
 initStorageEvent self typeArg canBubbleArg cancelableArg keyArg
   oldValueArg newValueArg urlArg storageAreaArg
   = liftIO
-      (js_initStorageEvent (unStorageEvent self) (toJSString typeArg)
-         canBubbleArg
+      (js_initStorageEvent (self) (toJSString typeArg) canBubbleArg
          cancelableArg
          (toJSString keyArg)
          (toMaybeJSString oldValueArg)
          (toMaybeJSString newValueArg)
          (toJSString urlArg)
-         (maybe jsNull pToJSRef storageAreaArg))
+         (maybeToNullable storageAreaArg))
  
 foreign import javascript unsafe "$1[\"key\"]" js_getKey ::
-        JSRef StorageEvent -> IO JSString
+        StorageEvent -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/StorageEvent.key Mozilla StorageEvent.key documentation> 
 getKey ::
        (MonadIO m, FromJSString result) => StorageEvent -> m result
-getKey self
-  = liftIO (fromJSString <$> (js_getKey (unStorageEvent self)))
+getKey self = liftIO (fromJSString <$> (js_getKey (self)))
  
 foreign import javascript unsafe "$1[\"oldValue\"]" js_getOldValue
-        :: JSRef StorageEvent -> IO (JSRef (Maybe JSString))
+        :: StorageEvent -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/StorageEvent.oldValue Mozilla StorageEvent.oldValue documentation> 
 getOldValue ::
             (MonadIO m, FromJSString result) =>
               StorageEvent -> m (Maybe result)
 getOldValue self
-  = liftIO
-      (fromMaybeJSString <$> (js_getOldValue (unStorageEvent self)))
+  = liftIO (fromMaybeJSString <$> (js_getOldValue (self)))
  
 foreign import javascript unsafe "$1[\"newValue\"]" js_getNewValue
-        :: JSRef StorageEvent -> IO (JSRef (Maybe JSString))
+        :: StorageEvent -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/StorageEvent.newValue Mozilla StorageEvent.newValue documentation> 
 getNewValue ::
             (MonadIO m, FromJSString result) =>
               StorageEvent -> m (Maybe result)
 getNewValue self
-  = liftIO
-      (fromMaybeJSString <$> (js_getNewValue (unStorageEvent self)))
+  = liftIO (fromMaybeJSString <$> (js_getNewValue (self)))
  
 foreign import javascript unsafe "$1[\"url\"]" js_getUrl ::
-        JSRef StorageEvent -> IO JSString
+        StorageEvent -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/StorageEvent.url Mozilla StorageEvent.url documentation> 
 getUrl ::
        (MonadIO m, FromJSString result) => StorageEvent -> m result
-getUrl self
-  = liftIO (fromJSString <$> (js_getUrl (unStorageEvent self)))
+getUrl self = liftIO (fromJSString <$> (js_getUrl (self)))
  
 foreign import javascript unsafe "$1[\"storageArea\"]"
-        js_getStorageArea :: JSRef StorageEvent -> IO (JSRef Storage)
+        js_getStorageArea :: StorageEvent -> IO (Nullable Storage)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/StorageEvent.storageArea Mozilla StorageEvent.storageArea documentation> 
 getStorageArea :: (MonadIO m) => StorageEvent -> m (Maybe Storage)
 getStorageArea self
-  = liftIO ((js_getStorageArea (unStorageEvent self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getStorageArea (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/StorageInfo.hs b/src/GHCJS/DOM/JSFFI/Generated/StorageInfo.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/StorageInfo.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/StorageInfo.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -21,9 +21,10 @@
  
 foreign import javascript unsafe
         "$1[\"queryUsageAndQuota\"]($2, $3,\n$4)" js_queryUsageAndQuota ::
-        JSRef StorageInfo ->
+        StorageInfo ->
           Word ->
-            JSRef StorageUsageCallback -> JSRef StorageErrorCallback -> IO ()
+            Nullable StorageUsageCallback ->
+              Nullable StorageErrorCallback -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/StorageInfo.queryUsageAndQuota Mozilla StorageInfo.queryUsageAndQuota documentation> 
 queryUsageAndQuota ::
@@ -33,16 +34,17 @@
                          Maybe StorageUsageCallback -> Maybe StorageErrorCallback -> m ()
 queryUsageAndQuota self storageType usageCallback errorCallback
   = liftIO
-      (js_queryUsageAndQuota (unStorageInfo self) storageType
-         (maybe jsNull pToJSRef usageCallback)
-         (maybe jsNull pToJSRef errorCallback))
+      (js_queryUsageAndQuota (self) storageType
+         (maybeToNullable usageCallback)
+         (maybeToNullable errorCallback))
  
 foreign import javascript unsafe
         "$1[\"requestQuota\"]($2, $3, $4,\n$5)" js_requestQuota ::
-        JSRef StorageInfo ->
+        StorageInfo ->
           Word ->
             Double ->
-              JSRef StorageQuotaCallback -> JSRef StorageErrorCallback -> IO ()
+              Nullable StorageQuotaCallback ->
+                Nullable StorageErrorCallback -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/StorageInfo.requestQuota Mozilla StorageInfo.requestQuota documentation> 
 requestQuota ::
@@ -54,9 +56,8 @@
 requestQuota self storageType newQuotaInBytes quotaCallback
   errorCallback
   = liftIO
-      (js_requestQuota (unStorageInfo self) storageType
-         (fromIntegral newQuotaInBytes)
-         (maybe jsNull pToJSRef quotaCallback)
-         (maybe jsNull pToJSRef errorCallback))
+      (js_requestQuota (self) storageType (fromIntegral newQuotaInBytes)
+         (maybeToNullable quotaCallback)
+         (maybeToNullable errorCallback))
 pattern TEMPORARY = 0
 pattern PERSISTENT = 1
diff --git a/src/GHCJS/DOM/JSFFI/Generated/StorageQuota.hs b/src/GHCJS/DOM/JSFFI/Generated/StorageQuota.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/StorageQuota.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/StorageQuota.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,8 +20,9 @@
  
 foreign import javascript unsafe
         "$1[\"queryUsageAndQuota\"]($2, $3)" js_queryUsageAndQuota ::
-        JSRef StorageQuota ->
-          JSRef StorageUsageCallback -> JSRef StorageErrorCallback -> IO ()
+        StorageQuota ->
+          Nullable StorageUsageCallback ->
+            Nullable StorageErrorCallback -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/StorageQuota.queryUsageAndQuota Mozilla StorageQuota.queryUsageAndQuota documentation> 
 queryUsageAndQuota ::
@@ -30,15 +31,15 @@
                        Maybe StorageUsageCallback -> Maybe StorageErrorCallback -> m ()
 queryUsageAndQuota self usageCallback errorCallback
   = liftIO
-      (js_queryUsageAndQuota (unStorageQuota self)
-         (maybe jsNull pToJSRef usageCallback)
-         (maybe jsNull pToJSRef errorCallback))
+      (js_queryUsageAndQuota (self) (maybeToNullable usageCallback)
+         (maybeToNullable errorCallback))
  
 foreign import javascript unsafe "$1[\"requestQuota\"]($2, $3, $4)"
         js_requestQuota ::
-        JSRef StorageQuota ->
+        StorageQuota ->
           Double ->
-            JSRef StorageQuotaCallback -> JSRef StorageErrorCallback -> IO ()
+            Nullable StorageQuotaCallback ->
+              Nullable StorageErrorCallback -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/StorageQuota.requestQuota Mozilla StorageQuota.requestQuota documentation> 
 requestQuota ::
@@ -48,7 +49,6 @@
                    Maybe StorageQuotaCallback -> Maybe StorageErrorCallback -> m ()
 requestQuota self newQuotaInBytes quotaCallback errorCallback
   = liftIO
-      (js_requestQuota (unStorageQuota self)
-         (fromIntegral newQuotaInBytes)
-         (maybe jsNull pToJSRef quotaCallback)
-         (maybe jsNull pToJSRef errorCallback))
+      (js_requestQuota (self) (fromIntegral newQuotaInBytes)
+         (maybeToNullable quotaCallback)
+         (maybeToNullable errorCallback))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/StorageQuotaCallback.hs b/src/GHCJS/DOM/JSFFI/Generated/StorageQuotaCallback.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/StorageQuotaCallback.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/StorageQuotaCallback.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -23,27 +23,30 @@
                         (MonadIO m) => (Double -> IO ()) -> m StorageQuotaCallback
 newStorageQuotaCallback callback
   = liftIO
-      (syncCallback1 ThrowWouldBlock
-         (\ grantedQuotaInBytes ->
-            fromJSRefUnchecked grantedQuotaInBytes >>=
-              \ grantedQuotaInBytes' -> callback grantedQuotaInBytes'))
+      (StorageQuotaCallback <$>
+         syncCallback1 ThrowWouldBlock
+           (\ grantedQuotaInBytes ->
+              fromJSRefUnchecked grantedQuotaInBytes >>=
+                \ grantedQuotaInBytes' -> callback grantedQuotaInBytes'))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/StorageQuotaCallback Mozilla StorageQuotaCallback documentation> 
 newStorageQuotaCallbackSync ::
                             (MonadIO m) => (Double -> IO ()) -> m StorageQuotaCallback
 newStorageQuotaCallbackSync callback
   = liftIO
-      (syncCallback1 ContinueAsync
-         (\ grantedQuotaInBytes ->
-            fromJSRefUnchecked grantedQuotaInBytes >>=
-              \ grantedQuotaInBytes' -> callback grantedQuotaInBytes'))
+      (StorageQuotaCallback <$>
+         syncCallback1 ContinueAsync
+           (\ grantedQuotaInBytes ->
+              fromJSRefUnchecked grantedQuotaInBytes >>=
+                \ grantedQuotaInBytes' -> callback grantedQuotaInBytes'))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/StorageQuotaCallback Mozilla StorageQuotaCallback documentation> 
 newStorageQuotaCallbackAsync ::
                              (MonadIO m) => (Double -> IO ()) -> m StorageQuotaCallback
 newStorageQuotaCallbackAsync callback
   = liftIO
-      (asyncCallback1
-         (\ grantedQuotaInBytes ->
-            fromJSRefUnchecked grantedQuotaInBytes >>=
-              \ grantedQuotaInBytes' -> callback grantedQuotaInBytes'))
+      (StorageQuotaCallback <$>
+         asyncCallback1
+           (\ grantedQuotaInBytes ->
+              fromJSRefUnchecked grantedQuotaInBytes >>=
+                \ grantedQuotaInBytes' -> callback grantedQuotaInBytes'))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/StorageUsageCallback.hs b/src/GHCJS/DOM/JSFFI/Generated/StorageUsageCallback.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/StorageUsageCallback.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/StorageUsageCallback.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -24,13 +24,14 @@
                           (Double -> Double -> IO ()) -> m StorageUsageCallback
 newStorageUsageCallback callback
   = liftIO
-      (syncCallback2 ThrowWouldBlock
-         (\ currentUsageInBytes currentQuotaInBytes ->
-            fromJSRefUnchecked currentQuotaInBytes >>=
-              \ currentQuotaInBytes' ->
-                fromJSRefUnchecked currentUsageInBytes >>=
-                  \ currentUsageInBytes' -> callback currentUsageInBytes'
-                  currentQuotaInBytes'))
+      (StorageUsageCallback <$>
+         syncCallback2 ThrowWouldBlock
+           (\ currentUsageInBytes currentQuotaInBytes ->
+              fromJSRefUnchecked currentQuotaInBytes >>=
+                \ currentQuotaInBytes' ->
+                  fromJSRefUnchecked currentUsageInBytes >>=
+                    \ currentUsageInBytes' -> callback currentUsageInBytes'
+                    currentQuotaInBytes'))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/StorageUsageCallback Mozilla StorageUsageCallback documentation> 
 newStorageUsageCallbackSync ::
@@ -38,13 +39,14 @@
                               (Double -> Double -> IO ()) -> m StorageUsageCallback
 newStorageUsageCallbackSync callback
   = liftIO
-      (syncCallback2 ContinueAsync
-         (\ currentUsageInBytes currentQuotaInBytes ->
-            fromJSRefUnchecked currentQuotaInBytes >>=
-              \ currentQuotaInBytes' ->
-                fromJSRefUnchecked currentUsageInBytes >>=
-                  \ currentUsageInBytes' -> callback currentUsageInBytes'
-                  currentQuotaInBytes'))
+      (StorageUsageCallback <$>
+         syncCallback2 ContinueAsync
+           (\ currentUsageInBytes currentQuotaInBytes ->
+              fromJSRefUnchecked currentQuotaInBytes >>=
+                \ currentQuotaInBytes' ->
+                  fromJSRefUnchecked currentUsageInBytes >>=
+                    \ currentUsageInBytes' -> callback currentUsageInBytes'
+                    currentQuotaInBytes'))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/StorageUsageCallback Mozilla StorageUsageCallback documentation> 
 newStorageUsageCallbackAsync ::
@@ -52,10 +54,11 @@
                                (Double -> Double -> IO ()) -> m StorageUsageCallback
 newStorageUsageCallbackAsync callback
   = liftIO
-      (asyncCallback2
-         (\ currentUsageInBytes currentQuotaInBytes ->
-            fromJSRefUnchecked currentQuotaInBytes >>=
-              \ currentQuotaInBytes' ->
-                fromJSRefUnchecked currentUsageInBytes >>=
-                  \ currentUsageInBytes' -> callback currentUsageInBytes'
-                  currentQuotaInBytes'))
+      (StorageUsageCallback <$>
+         asyncCallback2
+           (\ currentUsageInBytes currentQuotaInBytes ->
+              fromJSRefUnchecked currentQuotaInBytes >>=
+                \ currentQuotaInBytes' ->
+                  fromJSRefUnchecked currentUsageInBytes >>=
+                    \ currentUsageInBytes' -> callback currentUsageInBytes'
+                    currentQuotaInBytes'))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/StringCallback.hs b/src/GHCJS/DOM/JSFFI/Generated/StringCallback.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/StringCallback.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/StringCallback.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -24,9 +24,10 @@
                     (data' -> IO ()) -> m (StringCallback data')
 newStringCallback callback
   = liftIO
-      (syncCallback1 ThrowWouldBlock
-         (\ data' ->
-            fromJSRefUnchecked data' >>= \ data'' -> callback data''))
+      (StringCallback <$>
+         syncCallback1 ThrowWouldBlock
+           (\ data' ->
+              fromJSRefUnchecked data' >>= \ data'' -> callback data''))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/StringCallback Mozilla StringCallback documentation> 
 newStringCallbackSync ::
@@ -34,9 +35,10 @@
                         (data' -> IO ()) -> m (StringCallback data')
 newStringCallbackSync callback
   = liftIO
-      (syncCallback1 ContinueAsync
-         (\ data' ->
-            fromJSRefUnchecked data' >>= \ data'' -> callback data''))
+      (StringCallback <$>
+         syncCallback1 ContinueAsync
+           (\ data' ->
+              fromJSRefUnchecked data' >>= \ data'' -> callback data''))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/StringCallback Mozilla StringCallback documentation> 
 newStringCallbackAsync ::
@@ -44,6 +46,7 @@
                          (data' -> IO ()) -> m (StringCallback data')
 newStringCallbackAsync callback
   = liftIO
-      (asyncCallback1
-         (\ data' ->
-            fromJSRefUnchecked data' >>= \ data'' -> callback data''))
+      (StringCallback <$>
+         asyncCallback1
+           (\ data' ->
+              fromJSRefUnchecked data' >>= \ data'' -> callback data''))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/StyleMedia.hs b/src/GHCJS/DOM/JSFFI/Generated/StyleMedia.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/StyleMedia.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/StyleMedia.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,21 +20,19 @@
  
 foreign import javascript unsafe
         "($1[\"matchMedium\"]($2) ? 1 : 0)" js_matchMedium ::
-        JSRef StyleMedia -> JSString -> IO Bool
+        StyleMedia -> JSString -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/StyleMedia.matchMedium Mozilla StyleMedia.matchMedium documentation> 
 matchMedium ::
             (MonadIO m, ToJSString mediaquery) =>
               StyleMedia -> mediaquery -> m Bool
 matchMedium self mediaquery
-  = liftIO
-      (js_matchMedium (unStyleMedia self) (toJSString mediaquery))
+  = liftIO (js_matchMedium (self) (toJSString mediaquery))
  
 foreign import javascript unsafe "$1[\"type\"]" js_getType ::
-        JSRef StyleMedia -> IO JSString
+        StyleMedia -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/StyleMedia.type Mozilla StyleMedia.type documentation> 
 getType ::
         (MonadIO m, FromJSString result) => StyleMedia -> m result
-getType self
-  = liftIO (fromJSString <$> (js_getType (unStyleMedia self)))
+getType self = liftIO (fromJSString <$> (js_getType (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/StyleSheet.hs b/src/GHCJS/DOM/JSFFI/Generated/StyleSheet.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/StyleSheet.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/StyleSheet.hs
@@ -8,7 +8,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -22,86 +22,76 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"type\"]" js_getType ::
-        JSRef StyleSheet -> IO (JSRef (Maybe JSString))
+        StyleSheet -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/StyleSheet.type Mozilla StyleSheet.type documentation> 
 getType ::
         (MonadIO m, IsStyleSheet self, FromJSString result) =>
           self -> m (Maybe result)
 getType self
-  = liftIO
-      (fromMaybeJSString <$>
-         (js_getType (unStyleSheet (toStyleSheet self))))
+  = liftIO (fromMaybeJSString <$> (js_getType (toStyleSheet self)))
  
 foreign import javascript unsafe "$1[\"disabled\"] = $2;"
-        js_setDisabled :: JSRef StyleSheet -> Bool -> IO ()
+        js_setDisabled :: StyleSheet -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/StyleSheet.disabled Mozilla StyleSheet.disabled documentation> 
 setDisabled ::
             (MonadIO m, IsStyleSheet self) => self -> Bool -> m ()
 setDisabled self val
-  = liftIO (js_setDisabled (unStyleSheet (toStyleSheet self)) val)
+  = liftIO (js_setDisabled (toStyleSheet self) val)
  
 foreign import javascript unsafe "($1[\"disabled\"] ? 1 : 0)"
-        js_getDisabled :: JSRef StyleSheet -> IO Bool
+        js_getDisabled :: StyleSheet -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/StyleSheet.disabled Mozilla StyleSheet.disabled documentation> 
 getDisabled :: (MonadIO m, IsStyleSheet self) => self -> m Bool
-getDisabled self
-  = liftIO (js_getDisabled (unStyleSheet (toStyleSheet self)))
+getDisabled self = liftIO (js_getDisabled (toStyleSheet self))
  
 foreign import javascript unsafe "$1[\"ownerNode\"]"
-        js_getOwnerNode :: JSRef StyleSheet -> IO (JSRef Node)
+        js_getOwnerNode :: StyleSheet -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/StyleSheet.ownerNode Mozilla StyleSheet.ownerNode documentation> 
 getOwnerNode ::
              (MonadIO m, IsStyleSheet self) => self -> m (Maybe Node)
 getOwnerNode self
   = liftIO
-      ((js_getOwnerNode (unStyleSheet (toStyleSheet self))) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_getOwnerNode (toStyleSheet self)))
  
 foreign import javascript unsafe "$1[\"parentStyleSheet\"]"
-        js_getParentStyleSheet :: JSRef StyleSheet -> IO (JSRef StyleSheet)
+        js_getParentStyleSheet :: StyleSheet -> IO (Nullable StyleSheet)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/StyleSheet.parentStyleSheet Mozilla StyleSheet.parentStyleSheet documentation> 
 getParentStyleSheet ::
                     (MonadIO m, IsStyleSheet self) => self -> m (Maybe StyleSheet)
 getParentStyleSheet self
   = liftIO
-      ((js_getParentStyleSheet (unStyleSheet (toStyleSheet self))) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_getParentStyleSheet (toStyleSheet self)))
  
 foreign import javascript unsafe "$1[\"href\"]" js_getHref ::
-        JSRef StyleSheet -> IO (JSRef (Maybe JSString))
+        StyleSheet -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/StyleSheet.href Mozilla StyleSheet.href documentation> 
 getHref ::
         (MonadIO m, IsStyleSheet self, FromJSString result) =>
           self -> m (Maybe result)
 getHref self
-  = liftIO
-      (fromMaybeJSString <$>
-         (js_getHref (unStyleSheet (toStyleSheet self))))
+  = liftIO (fromMaybeJSString <$> (js_getHref (toStyleSheet self)))
  
 foreign import javascript unsafe "$1[\"title\"]" js_getTitle ::
-        JSRef StyleSheet -> IO (JSRef (Maybe JSString))
+        StyleSheet -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/StyleSheet.title Mozilla StyleSheet.title documentation> 
 getTitle ::
          (MonadIO m, IsStyleSheet self, FromJSString result) =>
            self -> m (Maybe result)
 getTitle self
-  = liftIO
-      (fromMaybeJSString <$>
-         (js_getTitle (unStyleSheet (toStyleSheet self))))
+  = liftIO (fromMaybeJSString <$> (js_getTitle (toStyleSheet self)))
  
 foreign import javascript unsafe "$1[\"media\"]" js_getMedia ::
-        JSRef StyleSheet -> IO (JSRef MediaList)
+        StyleSheet -> IO (Nullable MediaList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/StyleSheet.media Mozilla StyleSheet.media documentation> 
 getMedia ::
          (MonadIO m, IsStyleSheet self) => self -> m (Maybe MediaList)
 getMedia self
-  = liftIO
-      ((js_getMedia (unStyleSheet (toStyleSheet self))) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getMedia (toStyleSheet self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/StyleSheetList.hs b/src/GHCJS/DOM/JSFFI/Generated/StyleSheetList.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/StyleSheetList.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/StyleSheetList.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,28 +19,27 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"item\"]($2)" js_item ::
-        JSRef StyleSheetList -> Word -> IO (JSRef StyleSheet)
+        StyleSheetList -> Word -> IO (Nullable StyleSheet)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/StyleSheetList.item Mozilla StyleSheetList.item documentation> 
 item ::
      (MonadIO m) => StyleSheetList -> Word -> m (Maybe StyleSheet)
 item self index
-  = liftIO ((js_item (unStyleSheetList self) index) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_item (self) index))
  
 foreign import javascript unsafe "$1[\"_get\"]($2)" js__get ::
-        JSRef StyleSheetList -> JSString -> IO (JSRef CSSStyleSheet)
+        StyleSheetList -> JSString -> IO (Nullable CSSStyleSheet)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/StyleSheetList._get Mozilla StyleSheetList._get documentation> 
 _get ::
      (MonadIO m, ToJSString name) =>
        StyleSheetList -> name -> m (Maybe CSSStyleSheet)
 _get self name
-  = liftIO
-      ((js__get (unStyleSheetList self) (toJSString name)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js__get (self) (toJSString name)))
  
 foreign import javascript unsafe "$1[\"length\"]" js_getLength ::
-        JSRef StyleSheetList -> IO Word
+        StyleSheetList -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/StyleSheetList.length Mozilla StyleSheetList.length documentation> 
 getLength :: (MonadIO m) => StyleSheetList -> m Word
-getLength self = liftIO (js_getLength (unStyleSheetList self))
+getLength self = liftIO (js_getLength (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/SubtleCrypto.hs b/src/GHCJS/DOM/JSFFI/Generated/SubtleCrypto.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/SubtleCrypto.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/SubtleCrypto.hs
@@ -8,7 +8,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -23,9 +23,8 @@
  
 foreign import javascript unsafe "$1[\"encrypt\"]($2, $3, $4)"
         js_encrypt ::
-        JSRef SubtleCrypto ->
-          JSString ->
-            JSRef CryptoKey -> JSRef [Maybe data'] -> IO (JSRef Promise)
+        SubtleCrypto ->
+          JSString -> Nullable CryptoKey -> JSRef -> IO (Nullable Promise)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitSubtleCrypto.encrypt Mozilla WebKitSubtleCrypto.encrypt documentation> 
 encrypt ::
@@ -34,18 +33,16 @@
             algorithm -> Maybe CryptoKey -> [Maybe data'] -> m (Maybe Promise)
 encrypt self algorithm key data'
   = liftIO
-      ((toJSRef data' >>=
-          \ data'' ->
-            js_encrypt (unSubtleCrypto self) (toJSString algorithm)
-              (maybe jsNull pToJSRef key)
-              data'')
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (toJSRef data' >>=
+            \ data'' ->
+              js_encrypt (self) (toJSString algorithm) (maybeToNullable key)
+                data''))
  
 foreign import javascript unsafe "$1[\"decrypt\"]($2, $3, $4)"
         js_decrypt ::
-        JSRef SubtleCrypto ->
-          JSString ->
-            JSRef CryptoKey -> JSRef [Maybe data'] -> IO (JSRef Promise)
+        SubtleCrypto ->
+          JSString -> Nullable CryptoKey -> JSRef -> IO (Nullable Promise)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitSubtleCrypto.decrypt Mozilla WebKitSubtleCrypto.decrypt documentation> 
 decrypt ::
@@ -54,18 +51,16 @@
             algorithm -> Maybe CryptoKey -> [Maybe data'] -> m (Maybe Promise)
 decrypt self algorithm key data'
   = liftIO
-      ((toJSRef data' >>=
-          \ data'' ->
-            js_decrypt (unSubtleCrypto self) (toJSString algorithm)
-              (maybe jsNull pToJSRef key)
-              data'')
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (toJSRef data' >>=
+            \ data'' ->
+              js_decrypt (self) (toJSString algorithm) (maybeToNullable key)
+                data''))
  
 foreign import javascript unsafe "$1[\"sign\"]($2, $3, $4)" js_sign
         ::
-        JSRef SubtleCrypto ->
-          JSString ->
-            JSRef CryptoKey -> JSRef [Maybe data'] -> IO (JSRef Promise)
+        SubtleCrypto ->
+          JSString -> Nullable CryptoKey -> JSRef -> IO (Nullable Promise)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitSubtleCrypto.sign Mozilla WebKitSubtleCrypto.sign documentation> 
 sign ::
@@ -74,20 +69,18 @@
          algorithm -> Maybe CryptoKey -> [Maybe data'] -> m (Maybe Promise)
 sign self algorithm key data'
   = liftIO
-      ((toJSRef data' >>=
-          \ data'' ->
-            js_sign (unSubtleCrypto self) (toJSString algorithm)
-              (maybe jsNull pToJSRef key)
-              data'')
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (toJSRef data' >>=
+            \ data'' ->
+              js_sign (self) (toJSString algorithm) (maybeToNullable key)
+                data''))
  
 foreign import javascript unsafe "$1[\"verify\"]($2, $3, $4, $5)"
         js_verify ::
-        JSRef SubtleCrypto ->
+        SubtleCrypto ->
           JSString ->
-            JSRef CryptoKey ->
-              JSRef CryptoOperationData ->
-                JSRef [Maybe data'] -> IO (JSRef Promise)
+            Nullable CryptoKey ->
+              Nullable CryptoOperationData -> JSRef -> IO (Nullable Promise)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitSubtleCrypto.verify Mozilla WebKitSubtleCrypto.verify documentation> 
 verify ::
@@ -99,19 +92,15 @@
                Maybe signature -> [Maybe data'] -> m (Maybe Promise)
 verify self algorithm key signature data'
   = liftIO
-      ((toJSRef data' >>=
-          \ data'' ->
-            js_verify (unSubtleCrypto self) (toJSString algorithm)
-              (maybe jsNull pToJSRef key)
-              (maybe jsNull (unCryptoOperationData . toCryptoOperationData)
-                 signature)
-              data'')
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (toJSRef data' >>=
+            \ data'' ->
+              js_verify (self) (toJSString algorithm) (maybeToNullable key)
+                (maybeToNullable (fmap toCryptoOperationData signature))
+                data''))
  
 foreign import javascript unsafe "$1[\"digest\"]($2, $3)" js_digest
-        ::
-        JSRef SubtleCrypto ->
-          JSString -> JSRef [Maybe data'] -> IO (JSRef Promise)
+        :: SubtleCrypto -> JSString -> JSRef -> IO (Nullable Promise)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitSubtleCrypto.digest Mozilla WebKitSubtleCrypto.digest documentation> 
 digest ::
@@ -119,15 +108,13 @@
          SubtleCrypto -> algorithm -> [Maybe data'] -> m (Maybe Promise)
 digest self algorithm data'
   = liftIO
-      ((toJSRef data' >>=
-          \ data'' ->
-            js_digest (unSubtleCrypto self) (toJSString algorithm) data'')
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (toJSRef data' >>=
+            \ data'' -> js_digest (self) (toJSString algorithm) data''))
  
 foreign import javascript unsafe "$1[\"generateKey\"]($2, $3, $4)"
         js_generateKey ::
-        JSRef SubtleCrypto ->
-          JSString -> Bool -> JSRef [KeyUsage] -> IO (JSRef Promise)
+        SubtleCrypto -> JSString -> Bool -> JSRef -> IO (Nullable Promise)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitSubtleCrypto.generateKey Mozilla WebKitSubtleCrypto.generateKey documentation> 
 generateKey ::
@@ -136,19 +123,18 @@
                 algorithm -> Bool -> [KeyUsage] -> m (Maybe Promise)
 generateKey self algorithm extractable keyUsages
   = liftIO
-      ((toJSRef keyUsages >>=
-          \ keyUsages' ->
-            js_generateKey (unSubtleCrypto self) (toJSString algorithm)
-              extractable
-              keyUsages')
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (toJSRef keyUsages >>=
+            \ keyUsages' ->
+              js_generateKey (self) (toJSString algorithm) extractable
+                keyUsages'))
  
 foreign import javascript unsafe
         "$1[\"importKey\"]($2, $3, $4, $5,\n$6)" js_importKey ::
-        JSRef SubtleCrypto ->
+        SubtleCrypto ->
           JSString ->
-            JSRef CryptoOperationData ->
-              JSString -> Bool -> JSRef [KeyUsage] -> IO (JSRef Promise)
+            Nullable CryptoOperationData ->
+              JSString -> Bool -> JSRef -> IO (Nullable Promise)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitSubtleCrypto.importKey Mozilla WebKitSubtleCrypto.importKey documentation> 
 importKey ::
@@ -160,20 +146,19 @@
                   algorithm -> Bool -> [KeyUsage] -> m (Maybe Promise)
 importKey self format keyData algorithm extractable keyUsages
   = liftIO
-      ((toJSRef keyUsages >>=
-          \ keyUsages' ->
-            js_importKey (unSubtleCrypto self) (toJSString format)
-              (maybe jsNull (unCryptoOperationData . toCryptoOperationData)
-                 keyData)
-              (toJSString algorithm)
-              extractable
-              keyUsages')
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (toJSRef keyUsages >>=
+            \ keyUsages' ->
+              js_importKey (self) (toJSString format)
+                (maybeToNullable (fmap toCryptoOperationData keyData))
+                (toJSString algorithm)
+                extractable
+                keyUsages'))
  
 foreign import javascript unsafe "$1[\"exportKey\"]($2, $3)"
         js_exportKey ::
-        JSRef SubtleCrypto ->
-          JSString -> JSRef CryptoKey -> IO (JSRef Promise)
+        SubtleCrypto ->
+          JSString -> Nullable CryptoKey -> IO (Nullable Promise)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitSubtleCrypto.exportKey Mozilla WebKitSubtleCrypto.exportKey documentation> 
 exportKey ::
@@ -181,16 +166,15 @@
             SubtleCrypto -> format -> Maybe CryptoKey -> m (Maybe Promise)
 exportKey self format key
   = liftIO
-      ((js_exportKey (unSubtleCrypto self) (toJSString format)
-          (maybe jsNull pToJSRef key))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_exportKey (self) (toJSString format) (maybeToNullable key)))
  
 foreign import javascript unsafe "$1[\"wrapKey\"]($2, $3, $4, $5)"
         js_wrapKey ::
-        JSRef SubtleCrypto ->
+        SubtleCrypto ->
           JSString ->
-            JSRef CryptoKey ->
-              JSRef CryptoKey -> JSString -> IO (JSRef Promise)
+            Nullable CryptoKey ->
+              Nullable CryptoKey -> JSString -> IO (Nullable Promise)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitSubtleCrypto.wrapKey Mozilla WebKitSubtleCrypto.wrapKey documentation> 
 wrapKey ::
@@ -201,20 +185,18 @@
                 Maybe CryptoKey -> wrapAlgorithm -> m (Maybe Promise)
 wrapKey self format key wrappingKey wrapAlgorithm
   = liftIO
-      ((js_wrapKey (unSubtleCrypto self) (toJSString format)
-          (maybe jsNull pToJSRef key)
-          (maybe jsNull pToJSRef wrappingKey)
-          (toJSString wrapAlgorithm))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_wrapKey (self) (toJSString format) (maybeToNullable key)
+            (maybeToNullable wrappingKey)
+            (toJSString wrapAlgorithm)))
  
 foreign import javascript unsafe
         "$1[\"unwrapKey\"]($2, $3, $4, $5,\n$6, $7, $8)" js_unwrapKey ::
-        JSRef SubtleCrypto ->
+        SubtleCrypto ->
           JSString ->
-            JSRef CryptoOperationData ->
-              JSRef CryptoKey ->
-                JSString ->
-                  JSString -> Bool -> JSRef [KeyUsage] -> IO (JSRef Promise)
+            Nullable CryptoOperationData ->
+              Nullable CryptoKey ->
+                JSString -> JSString -> Bool -> JSRef -> IO (Nullable Promise)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitSubtleCrypto.unwrapKey Mozilla WebKitSubtleCrypto.unwrapKey documentation> 
 unwrapKey ::
@@ -229,14 +211,13 @@
 unwrapKey self format wrappedKey unwrappingKey unwrapAlgorithm
   unwrappedKeyAlgorithm extractable keyUsages
   = liftIO
-      ((toJSRef keyUsages >>=
-          \ keyUsages' ->
-            js_unwrapKey (unSubtleCrypto self) (toJSString format)
-              (maybe jsNull (unCryptoOperationData . toCryptoOperationData)
-                 wrappedKey)
-              (maybe jsNull pToJSRef unwrappingKey)
-              (toJSString unwrapAlgorithm)
-              (toJSString unwrappedKeyAlgorithm)
-              extractable
-              keyUsages')
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (toJSRef keyUsages >>=
+            \ keyUsages' ->
+              js_unwrapKey (self) (toJSString format)
+                (maybeToNullable (fmap toCryptoOperationData wrappedKey))
+                (maybeToNullable unwrappingKey)
+                (toJSString unwrapAlgorithm)
+                (toJSString unwrappedKeyAlgorithm)
+                extractable
+                keyUsages'))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/Text.hs b/src/GHCJS/DOM/JSFFI/Generated/Text.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/Text.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/Text.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,25 +20,23 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "new window[\"Text\"]($1)"
-        js_newText :: JSString -> IO (JSRef Text)
+        js_newText :: JSString -> IO Text
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Text Mozilla Text documentation> 
 newText :: (MonadIO m, ToJSString data') => data' -> m Text
-newText data'
-  = liftIO (js_newText (toJSString data') >>= fromJSRefUnchecked)
+newText data' = liftIO (js_newText (toJSString data'))
  
 foreign import javascript unsafe "$1[\"splitText\"]($2)"
-        js_splitText :: JSRef Text -> Word -> IO (JSRef Text)
+        js_splitText :: Text -> Word -> IO (Nullable Text)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Text.splitText Mozilla Text.splitText documentation> 
 splitText ::
           (MonadIO m, IsText self) => self -> Word -> m (Maybe Text)
 splitText self offset
-  = liftIO
-      ((js_splitText (unText (toText self)) offset) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_splitText (toText self) offset))
  
 foreign import javascript unsafe "$1[\"replaceWholeText\"]($2)"
-        js_replaceWholeText :: JSRef Text -> JSString -> IO (JSRef Text)
+        js_replaceWholeText :: Text -> JSString -> IO (Nullable Text)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Text.replaceWholeText Mozilla Text.replaceWholeText documentation> 
 replaceWholeText ::
@@ -46,15 +44,14 @@
                    self -> content -> m (Maybe Text)
 replaceWholeText self content
   = liftIO
-      ((js_replaceWholeText (unText (toText self)) (toJSString content))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_replaceWholeText (toText self) (toJSString content)))
  
 foreign import javascript unsafe "$1[\"wholeText\"]"
-        js_getWholeText :: JSRef Text -> IO JSString
+        js_getWholeText :: Text -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Text.wholeText Mozilla Text.wholeText documentation> 
 getWholeText ::
              (MonadIO m, IsText self, FromJSString result) => self -> m result
 getWholeText self
-  = liftIO
-      (fromJSString <$> (js_getWholeText (unText (toText self))))
+  = liftIO (fromJSString <$> (js_getWholeText (toText self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/TextEvent.hs b/src/GHCJS/DOM/JSFFI/Generated/TextEvent.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/TextEvent.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/TextEvent.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,8 +20,8 @@
  
 foreign import javascript unsafe
         "$1[\"initTextEvent\"]($2, $3, $4,\n$5, $6)" js_initTextEvent ::
-        JSRef TextEvent ->
-          JSString -> Bool -> Bool -> JSRef Window -> JSString -> IO ()
+        TextEvent ->
+          JSString -> Bool -> Bool -> Nullable Window -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TextEvent.initTextEvent Mozilla TextEvent.initTextEvent documentation> 
 initTextEvent ::
@@ -31,17 +31,15 @@
 initTextEvent self typeArg canBubbleArg cancelableArg viewArg
   dataArg
   = liftIO
-      (js_initTextEvent (unTextEvent self) (toJSString typeArg)
-         canBubbleArg
+      (js_initTextEvent (self) (toJSString typeArg) canBubbleArg
          cancelableArg
-         (maybe jsNull pToJSRef viewArg)
+         (maybeToNullable viewArg)
          (toJSString dataArg))
  
 foreign import javascript unsafe "$1[\"data\"]" js_getData ::
-        JSRef TextEvent -> IO JSString
+        TextEvent -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TextEvent.data Mozilla TextEvent.data documentation> 
 getData ::
         (MonadIO m, FromJSString result) => TextEvent -> m result
-getData self
-  = liftIO (fromJSString <$> (js_getData (unTextEvent self)))
+getData self = liftIO (fromJSString <$> (js_getData (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/TextMetrics.hs b/src/GHCJS/DOM/JSFFI/Generated/TextMetrics.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/TextMetrics.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/TextMetrics.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,8 +19,8 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"width\"]" js_getWidth ::
-        JSRef TextMetrics -> IO Float
+        TextMetrics -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TextMetrics.width Mozilla TextMetrics.width documentation> 
 getWidth :: (MonadIO m) => TextMetrics -> m Float
-getWidth self = liftIO (js_getWidth (unTextMetrics self))
+getWidth self = liftIO (js_getWidth (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/TextTrack.hs b/src/GHCJS/DOM/JSFFI/Generated/TextTrack.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/TextTrack.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/TextTrack.hs
@@ -13,7 +13,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -27,159 +27,146 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"addCue\"]($2)" js_addCue ::
-        JSRef TextTrack -> JSRef TextTrackCue -> IO ()
+        TextTrack -> Nullable TextTrackCue -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TextTrack.addCue Mozilla TextTrack.addCue documentation> 
 addCue ::
        (MonadIO m, IsTextTrackCue cue) => TextTrack -> Maybe cue -> m ()
 addCue self cue
   = liftIO
-      (js_addCue (unTextTrack self)
-         (maybe jsNull (unTextTrackCue . toTextTrackCue) cue))
+      (js_addCue (self) (maybeToNullable (fmap toTextTrackCue cue)))
  
 foreign import javascript unsafe "$1[\"removeCue\"]($2)"
-        js_removeCue :: JSRef TextTrack -> JSRef TextTrackCue -> IO ()
+        js_removeCue :: TextTrack -> Nullable TextTrackCue -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TextTrack.removeCue Mozilla TextTrack.removeCue documentation> 
 removeCue ::
           (MonadIO m, IsTextTrackCue cue) => TextTrack -> Maybe cue -> m ()
 removeCue self cue
   = liftIO
-      (js_removeCue (unTextTrack self)
-         (maybe jsNull (unTextTrackCue . toTextTrackCue) cue))
+      (js_removeCue (self) (maybeToNullable (fmap toTextTrackCue cue)))
  
 foreign import javascript unsafe "$1[\"addRegion\"]($2)"
-        js_addRegion :: JSRef TextTrack -> JSRef VTTRegion -> IO ()
+        js_addRegion :: TextTrack -> Nullable VTTRegion -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TextTrack.addRegion Mozilla TextTrack.addRegion documentation> 
 addRegion :: (MonadIO m) => TextTrack -> Maybe VTTRegion -> m ()
 addRegion self region
-  = liftIO
-      (js_addRegion (unTextTrack self) (maybe jsNull pToJSRef region))
+  = liftIO (js_addRegion (self) (maybeToNullable region))
  
 foreign import javascript unsafe "$1[\"removeRegion\"]($2)"
-        js_removeRegion :: JSRef TextTrack -> JSRef VTTRegion -> IO ()
+        js_removeRegion :: TextTrack -> Nullable VTTRegion -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TextTrack.removeRegion Mozilla TextTrack.removeRegion documentation> 
 removeRegion :: (MonadIO m) => TextTrack -> Maybe VTTRegion -> m ()
 removeRegion self region
-  = liftIO
-      (js_removeRegion (unTextTrack self) (maybe jsNull pToJSRef region))
+  = liftIO (js_removeRegion (self) (maybeToNullable region))
  
 foreign import javascript unsafe "$1[\"id\"]" js_getId ::
-        JSRef TextTrack -> IO JSString
+        TextTrack -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TextTrack.id Mozilla TextTrack.id documentation> 
 getId :: (MonadIO m, FromJSString result) => TextTrack -> m result
-getId self
-  = liftIO (fromJSString <$> (js_getId (unTextTrack self)))
+getId self = liftIO (fromJSString <$> (js_getId (self)))
  
 foreign import javascript unsafe "$1[\"kind\"] = $2;" js_setKind ::
-        JSRef TextTrack -> JSRef TextTrackKind -> IO ()
+        TextTrack -> JSRef -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TextTrack.kind Mozilla TextTrack.kind documentation> 
 setKind :: (MonadIO m) => TextTrack -> TextTrackKind -> m ()
-setKind self val
-  = liftIO (js_setKind (unTextTrack self) (pToJSRef val))
+setKind self val = liftIO (js_setKind (self) (pToJSRef val))
  
 foreign import javascript unsafe "$1[\"kind\"]" js_getKind ::
-        JSRef TextTrack -> IO (JSRef TextTrackKind)
+        TextTrack -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TextTrack.kind Mozilla TextTrack.kind documentation> 
 getKind :: (MonadIO m) => TextTrack -> m TextTrackKind
-getKind self
-  = liftIO ((js_getKind (unTextTrack self)) >>= fromJSRefUnchecked)
+getKind self = liftIO ((js_getKind (self)) >>= fromJSRefUnchecked)
  
 foreign import javascript unsafe "$1[\"label\"]" js_getLabel ::
-        JSRef TextTrack -> IO JSString
+        TextTrack -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TextTrack.label Mozilla TextTrack.label documentation> 
 getLabel ::
          (MonadIO m, FromJSString result) => TextTrack -> m result
-getLabel self
-  = liftIO (fromJSString <$> (js_getLabel (unTextTrack self)))
+getLabel self = liftIO (fromJSString <$> (js_getLabel (self)))
  
 foreign import javascript unsafe "$1[\"language\"] = $2;"
-        js_setLanguage :: JSRef TextTrack -> JSString -> IO ()
+        js_setLanguage :: TextTrack -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TextTrack.language Mozilla TextTrack.language documentation> 
 setLanguage ::
             (MonadIO m, ToJSString val) => TextTrack -> val -> m ()
 setLanguage self val
-  = liftIO (js_setLanguage (unTextTrack self) (toJSString val))
+  = liftIO (js_setLanguage (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"language\"]" js_getLanguage
-        :: JSRef TextTrack -> IO JSString
+        :: TextTrack -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TextTrack.language Mozilla TextTrack.language documentation> 
 getLanguage ::
             (MonadIO m, FromJSString result) => TextTrack -> m result
 getLanguage self
-  = liftIO (fromJSString <$> (js_getLanguage (unTextTrack self)))
+  = liftIO (fromJSString <$> (js_getLanguage (self)))
  
 foreign import javascript unsafe
         "$1[\"inBandMetadataTrackDispatchType\"]"
-        js_getInBandMetadataTrackDispatchType ::
-        JSRef TextTrack -> IO JSString
+        js_getInBandMetadataTrackDispatchType :: TextTrack -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TextTrack.inBandMetadataTrackDispatchType Mozilla TextTrack.inBandMetadataTrackDispatchType documentation> 
 getInBandMetadataTrackDispatchType ::
                                    (MonadIO m, FromJSString result) => TextTrack -> m result
 getInBandMetadataTrackDispatchType self
   = liftIO
-      (fromJSString <$>
-         (js_getInBandMetadataTrackDispatchType (unTextTrack self)))
+      (fromJSString <$> (js_getInBandMetadataTrackDispatchType (self)))
  
 foreign import javascript unsafe "$1[\"mode\"] = $2;" js_setMode ::
-        JSRef TextTrack -> JSRef TextTrackMode -> IO ()
+        TextTrack -> JSRef -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TextTrack.mode Mozilla TextTrack.mode documentation> 
 setMode :: (MonadIO m) => TextTrack -> TextTrackMode -> m ()
-setMode self val
-  = liftIO (js_setMode (unTextTrack self) (pToJSRef val))
+setMode self val = liftIO (js_setMode (self) (pToJSRef val))
  
 foreign import javascript unsafe "$1[\"mode\"]" js_getMode ::
-        JSRef TextTrack -> IO (JSRef TextTrackMode)
+        TextTrack -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TextTrack.mode Mozilla TextTrack.mode documentation> 
 getMode :: (MonadIO m) => TextTrack -> m TextTrackMode
-getMode self
-  = liftIO ((js_getMode (unTextTrack self)) >>= fromJSRefUnchecked)
+getMode self = liftIO ((js_getMode (self)) >>= fromJSRefUnchecked)
  
 foreign import javascript unsafe "$1[\"cues\"]" js_getCues ::
-        JSRef TextTrack -> IO (JSRef TextTrackCueList)
+        TextTrack -> IO (Nullable TextTrackCueList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TextTrack.cues Mozilla TextTrack.cues documentation> 
 getCues :: (MonadIO m) => TextTrack -> m (Maybe TextTrackCueList)
-getCues self
-  = liftIO ((js_getCues (unTextTrack self)) >>= fromJSRef)
+getCues self = liftIO (nullableToMaybe <$> (js_getCues (self)))
  
 foreign import javascript unsafe "$1[\"activeCues\"]"
-        js_getActiveCues :: JSRef TextTrack -> IO (JSRef TextTrackCueList)
+        js_getActiveCues :: TextTrack -> IO (Nullable TextTrackCueList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TextTrack.activeCues Mozilla TextTrack.activeCues documentation> 
 getActiveCues ::
               (MonadIO m) => TextTrack -> m (Maybe TextTrackCueList)
 getActiveCues self
-  = liftIO ((js_getActiveCues (unTextTrack self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getActiveCues (self)))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TextTrack.oncuechange Mozilla TextTrack.oncuechange documentation> 
 cueChange :: EventName TextTrack Event
 cueChange = unsafeEventName (toJSString "cuechange")
  
 foreign import javascript unsafe "$1[\"regions\"]" js_getRegions ::
-        JSRef TextTrack -> IO (JSRef VTTRegionList)
+        TextTrack -> IO (Nullable VTTRegionList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TextTrack.regions Mozilla TextTrack.regions documentation> 
 getRegions :: (MonadIO m) => TextTrack -> m (Maybe VTTRegionList)
 getRegions self
-  = liftIO ((js_getRegions (unTextTrack self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getRegions (self)))
  
 foreign import javascript unsafe "$1[\"sourceBuffer\"]"
-        js_getSourceBuffer :: JSRef TextTrack -> IO (JSRef SourceBuffer)
+        js_getSourceBuffer :: TextTrack -> IO (Nullable SourceBuffer)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TextTrack.sourceBuffer Mozilla TextTrack.sourceBuffer documentation> 
 getSourceBuffer ::
                 (MonadIO m) => TextTrack -> m (Maybe SourceBuffer)
 getSourceBuffer self
-  = liftIO ((js_getSourceBuffer (unTextTrack self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getSourceBuffer (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/TextTrackCue.hs b/src/GHCJS/DOM/JSFFI/Generated/TextTrackCue.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/TextTrackCue.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/TextTrackCue.hs
@@ -10,7 +10,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -25,105 +25,94 @@
  
 foreign import javascript unsafe
         "new window[\"TextTrackCue\"]($1,\n$2, $3)" js_newTextTrackCue ::
-        Double -> Double -> JSString -> IO (JSRef TextTrackCue)
+        Double -> Double -> JSString -> IO TextTrackCue
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TextTrackCue Mozilla TextTrackCue documentation> 
 newTextTrackCue ::
                 (MonadIO m, ToJSString text) =>
                   Double -> Double -> text -> m TextTrackCue
 newTextTrackCue startTime endTime text
-  = liftIO
-      (js_newTextTrackCue startTime endTime (toJSString text) >>=
-         fromJSRefUnchecked)
+  = liftIO (js_newTextTrackCue startTime endTime (toJSString text))
  
 foreign import javascript unsafe "$1[\"track\"]" js_getTrack ::
-        JSRef TextTrackCue -> IO (JSRef TextTrack)
+        TextTrackCue -> IO (Nullable TextTrack)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TextTrackCue.track Mozilla TextTrackCue.track documentation> 
 getTrack ::
          (MonadIO m, IsTextTrackCue self) => self -> m (Maybe TextTrack)
 getTrack self
-  = liftIO
-      ((js_getTrack (unTextTrackCue (toTextTrackCue self))) >>=
-         fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getTrack (toTextTrackCue self)))
  
 foreign import javascript unsafe "$1[\"id\"] = $2;" js_setId ::
-        JSRef TextTrackCue -> JSString -> IO ()
+        TextTrackCue -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TextTrackCue.id Mozilla TextTrackCue.id documentation> 
 setId ::
       (MonadIO m, IsTextTrackCue self, ToJSString val) =>
         self -> val -> m ()
 setId self val
-  = liftIO
-      (js_setId (unTextTrackCue (toTextTrackCue self)) (toJSString val))
+  = liftIO (js_setId (toTextTrackCue self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"id\"]" js_getId ::
-        JSRef TextTrackCue -> IO JSString
+        TextTrackCue -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TextTrackCue.id Mozilla TextTrackCue.id documentation> 
 getId ::
       (MonadIO m, IsTextTrackCue self, FromJSString result) =>
         self -> m result
 getId self
-  = liftIO
-      (fromJSString <$>
-         (js_getId (unTextTrackCue (toTextTrackCue self))))
+  = liftIO (fromJSString <$> (js_getId (toTextTrackCue self)))
  
 foreign import javascript unsafe "$1[\"startTime\"] = $2;"
-        js_setStartTime :: JSRef TextTrackCue -> Double -> IO ()
+        js_setStartTime :: TextTrackCue -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TextTrackCue.startTime Mozilla TextTrackCue.startTime documentation> 
 setStartTime ::
              (MonadIO m, IsTextTrackCue self) => self -> Double -> m ()
 setStartTime self val
-  = liftIO
-      (js_setStartTime (unTextTrackCue (toTextTrackCue self)) val)
+  = liftIO (js_setStartTime (toTextTrackCue self) val)
  
 foreign import javascript unsafe "$1[\"startTime\"]"
-        js_getStartTime :: JSRef TextTrackCue -> IO Double
+        js_getStartTime :: TextTrackCue -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TextTrackCue.startTime Mozilla TextTrackCue.startTime documentation> 
 getStartTime ::
              (MonadIO m, IsTextTrackCue self) => self -> m Double
-getStartTime self
-  = liftIO (js_getStartTime (unTextTrackCue (toTextTrackCue self)))
+getStartTime self = liftIO (js_getStartTime (toTextTrackCue self))
  
 foreign import javascript unsafe "$1[\"endTime\"] = $2;"
-        js_setEndTime :: JSRef TextTrackCue -> Double -> IO ()
+        js_setEndTime :: TextTrackCue -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TextTrackCue.endTime Mozilla TextTrackCue.endTime documentation> 
 setEndTime ::
            (MonadIO m, IsTextTrackCue self) => self -> Double -> m ()
 setEndTime self val
-  = liftIO (js_setEndTime (unTextTrackCue (toTextTrackCue self)) val)
+  = liftIO (js_setEndTime (toTextTrackCue self) val)
  
 foreign import javascript unsafe "$1[\"endTime\"]" js_getEndTime ::
-        JSRef TextTrackCue -> IO Double
+        TextTrackCue -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TextTrackCue.endTime Mozilla TextTrackCue.endTime documentation> 
 getEndTime :: (MonadIO m, IsTextTrackCue self) => self -> m Double
-getEndTime self
-  = liftIO (js_getEndTime (unTextTrackCue (toTextTrackCue self)))
+getEndTime self = liftIO (js_getEndTime (toTextTrackCue self))
  
 foreign import javascript unsafe "$1[\"pauseOnExit\"] = $2;"
-        js_setPauseOnExit :: JSRef TextTrackCue -> Bool -> IO ()
+        js_setPauseOnExit :: TextTrackCue -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TextTrackCue.pauseOnExit Mozilla TextTrackCue.pauseOnExit documentation> 
 setPauseOnExit ::
                (MonadIO m, IsTextTrackCue self) => self -> Bool -> m ()
 setPauseOnExit self val
-  = liftIO
-      (js_setPauseOnExit (unTextTrackCue (toTextTrackCue self)) val)
+  = liftIO (js_setPauseOnExit (toTextTrackCue self) val)
  
 foreign import javascript unsafe "($1[\"pauseOnExit\"] ? 1 : 0)"
-        js_getPauseOnExit :: JSRef TextTrackCue -> IO Bool
+        js_getPauseOnExit :: TextTrackCue -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TextTrackCue.pauseOnExit Mozilla TextTrackCue.pauseOnExit documentation> 
 getPauseOnExit ::
                (MonadIO m, IsTextTrackCue self) => self -> m Bool
 getPauseOnExit self
-  = liftIO (js_getPauseOnExit (unTextTrackCue (toTextTrackCue self)))
+  = liftIO (js_getPauseOnExit (toTextTrackCue self))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TextTrackCue.onenter Mozilla TextTrackCue.onenter documentation> 
 enter ::
diff --git a/src/GHCJS/DOM/JSFFI/Generated/TextTrackCueList.hs b/src/GHCJS/DOM/JSFFI/Generated/TextTrackCueList.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/TextTrackCueList.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/TextTrackCueList.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,17 +19,17 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"item\"]($2)" js_item ::
-        JSRef TextTrackCueList -> Word -> IO (JSRef TextTrackCue)
+        TextTrackCueList -> Word -> IO (Nullable TextTrackCue)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TextTrackCueList.item Mozilla TextTrackCueList.item documentation> 
 item ::
      (MonadIO m) => TextTrackCueList -> Word -> m (Maybe TextTrackCue)
 item self index
-  = liftIO ((js_item (unTextTrackCueList self) index) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_item (self) index))
  
 foreign import javascript unsafe "$1[\"getCueById\"]($2)"
         js_getCueById ::
-        JSRef TextTrackCueList -> JSString -> IO (JSRef TextTrackCue)
+        TextTrackCueList -> JSString -> IO (Nullable TextTrackCue)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TextTrackCueList.getCueById Mozilla TextTrackCueList.getCueById documentation> 
 getCueById ::
@@ -37,12 +37,11 @@
              TextTrackCueList -> id -> m (Maybe TextTrackCue)
 getCueById self id
   = liftIO
-      ((js_getCueById (unTextTrackCueList self) (toJSString id)) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_getCueById (self) (toJSString id)))
  
 foreign import javascript unsafe "$1[\"length\"]" js_getLength ::
-        JSRef TextTrackCueList -> IO Word
+        TextTrackCueList -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TextTrackCueList.length Mozilla TextTrackCueList.length documentation> 
 getLength :: (MonadIO m) => TextTrackCueList -> m Word
-getLength self = liftIO (js_getLength (unTextTrackCueList self))
+getLength self = liftIO (js_getLength (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/TextTrackList.hs b/src/GHCJS/DOM/JSFFI/Generated/TextTrackList.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/TextTrackList.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/TextTrackList.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,16 +20,16 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"item\"]($2)" js_item ::
-        JSRef TextTrackList -> Word -> IO (JSRef TextTrack)
+        TextTrackList -> Word -> IO (Nullable TextTrack)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TextTrackList.item Mozilla TextTrackList.item documentation> 
 item :: (MonadIO m) => TextTrackList -> Word -> m (Maybe TextTrack)
 item self index
-  = liftIO ((js_item (unTextTrackList self) index) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_item (self) index))
  
 foreign import javascript unsafe "$1[\"getTrackById\"]($2)"
         js_getTrackById ::
-        JSRef TextTrackList -> JSString -> IO (JSRef TextTrack)
+        TextTrackList -> JSString -> IO (Nullable TextTrack)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TextTrackList.getTrackById Mozilla TextTrackList.getTrackById documentation> 
 getTrackById ::
@@ -37,15 +37,14 @@
                TextTrackList -> id -> m (Maybe TextTrack)
 getTrackById self id
   = liftIO
-      ((js_getTrackById (unTextTrackList self) (toJSString id)) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_getTrackById (self) (toJSString id)))
  
 foreign import javascript unsafe "$1[\"length\"]" js_getLength ::
-        JSRef TextTrackList -> IO Word
+        TextTrackList -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TextTrackList.length Mozilla TextTrackList.length documentation> 
 getLength :: (MonadIO m) => TextTrackList -> m Word
-getLength self = liftIO (js_getLength (unTextTrackList self))
+getLength self = liftIO (js_getLength (self))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TextTrackList.onaddtrack Mozilla TextTrackList.onaddtrack documentation> 
 addTrack :: EventName TextTrackList Event
diff --git a/src/GHCJS/DOM/JSFFI/Generated/TimeRanges.hs b/src/GHCJS/DOM/JSFFI/Generated/TimeRanges.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/TimeRanges.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/TimeRanges.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,22 +19,22 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"start\"]($2)" js_start ::
-        JSRef TimeRanges -> Word -> IO Double
+        TimeRanges -> Word -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TimeRanges.start Mozilla TimeRanges.start documentation> 
 start :: (MonadIO m) => TimeRanges -> Word -> m Double
-start self index = liftIO (js_start (unTimeRanges self) index)
+start self index = liftIO (js_start (self) index)
  
 foreign import javascript unsafe "$1[\"end\"]($2)" js_end ::
-        JSRef TimeRanges -> Word -> IO Double
+        TimeRanges -> Word -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TimeRanges.end Mozilla TimeRanges.end documentation> 
 end :: (MonadIO m) => TimeRanges -> Word -> m Double
-end self index = liftIO (js_end (unTimeRanges self) index)
+end self index = liftIO (js_end (self) index)
  
 foreign import javascript unsafe "$1[\"length\"]" js_getLength ::
-        JSRef TimeRanges -> IO Word
+        TimeRanges -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TimeRanges.length Mozilla TimeRanges.length documentation> 
 getLength :: (MonadIO m) => TimeRanges -> m Word
-getLength self = liftIO (js_getLength (unTimeRanges self))
+getLength self = liftIO (js_getLength (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/Touch.hs b/src/GHCJS/DOM/JSFFI/Generated/Touch.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/Touch.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/Touch.hs
@@ -10,7 +10,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -24,87 +24,86 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"clientX\"]" js_getClientX ::
-        JSRef Touch -> IO Int
+        Touch -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Touch.clientX Mozilla Touch.clientX documentation> 
 getClientX :: (MonadIO m) => Touch -> m Int
-getClientX self = liftIO (js_getClientX (unTouch self))
+getClientX self = liftIO (js_getClientX (self))
  
 foreign import javascript unsafe "$1[\"clientY\"]" js_getClientY ::
-        JSRef Touch -> IO Int
+        Touch -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Touch.clientY Mozilla Touch.clientY documentation> 
 getClientY :: (MonadIO m) => Touch -> m Int
-getClientY self = liftIO (js_getClientY (unTouch self))
+getClientY self = liftIO (js_getClientY (self))
  
 foreign import javascript unsafe "$1[\"screenX\"]" js_getScreenX ::
-        JSRef Touch -> IO Int
+        Touch -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Touch.screenX Mozilla Touch.screenX documentation> 
 getScreenX :: (MonadIO m) => Touch -> m Int
-getScreenX self = liftIO (js_getScreenX (unTouch self))
+getScreenX self = liftIO (js_getScreenX (self))
  
 foreign import javascript unsafe "$1[\"screenY\"]" js_getScreenY ::
-        JSRef Touch -> IO Int
+        Touch -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Touch.screenY Mozilla Touch.screenY documentation> 
 getScreenY :: (MonadIO m) => Touch -> m Int
-getScreenY self = liftIO (js_getScreenY (unTouch self))
+getScreenY self = liftIO (js_getScreenY (self))
  
 foreign import javascript unsafe "$1[\"pageX\"]" js_getPageX ::
-        JSRef Touch -> IO Int
+        Touch -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Touch.pageX Mozilla Touch.pageX documentation> 
 getPageX :: (MonadIO m) => Touch -> m Int
-getPageX self = liftIO (js_getPageX (unTouch self))
+getPageX self = liftIO (js_getPageX (self))
  
 foreign import javascript unsafe "$1[\"pageY\"]" js_getPageY ::
-        JSRef Touch -> IO Int
+        Touch -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Touch.pageY Mozilla Touch.pageY documentation> 
 getPageY :: (MonadIO m) => Touch -> m Int
-getPageY self = liftIO (js_getPageY (unTouch self))
+getPageY self = liftIO (js_getPageY (self))
  
 foreign import javascript unsafe "$1[\"target\"]" js_getTarget ::
-        JSRef Touch -> IO (JSRef EventTarget)
+        Touch -> IO (Nullable EventTarget)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Touch.target Mozilla Touch.target documentation> 
 getTarget :: (MonadIO m) => Touch -> m (Maybe EventTarget)
-getTarget self
-  = liftIO ((js_getTarget (unTouch self)) >>= fromJSRef)
+getTarget self = liftIO (nullableToMaybe <$> (js_getTarget (self)))
  
 foreign import javascript unsafe "$1[\"identifier\"]"
-        js_getIdentifier :: JSRef Touch -> IO Word
+        js_getIdentifier :: Touch -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Touch.identifier Mozilla Touch.identifier documentation> 
 getIdentifier :: (MonadIO m) => Touch -> m Word
-getIdentifier self = liftIO (js_getIdentifier (unTouch self))
+getIdentifier self = liftIO (js_getIdentifier (self))
  
 foreign import javascript unsafe "$1[\"webkitRadiusX\"]"
-        js_getWebkitRadiusX :: JSRef Touch -> IO Int
+        js_getWebkitRadiusX :: Touch -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Touch.webkitRadiusX Mozilla Touch.webkitRadiusX documentation> 
 getWebkitRadiusX :: (MonadIO m) => Touch -> m Int
-getWebkitRadiusX self = liftIO (js_getWebkitRadiusX (unTouch self))
+getWebkitRadiusX self = liftIO (js_getWebkitRadiusX (self))
  
 foreign import javascript unsafe "$1[\"webkitRadiusY\"]"
-        js_getWebkitRadiusY :: JSRef Touch -> IO Int
+        js_getWebkitRadiusY :: Touch -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Touch.webkitRadiusY Mozilla Touch.webkitRadiusY documentation> 
 getWebkitRadiusY :: (MonadIO m) => Touch -> m Int
-getWebkitRadiusY self = liftIO (js_getWebkitRadiusY (unTouch self))
+getWebkitRadiusY self = liftIO (js_getWebkitRadiusY (self))
  
 foreign import javascript unsafe "$1[\"webkitRotationAngle\"]"
-        js_getWebkitRotationAngle :: JSRef Touch -> IO Float
+        js_getWebkitRotationAngle :: Touch -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Touch.webkitRotationAngle Mozilla Touch.webkitRotationAngle documentation> 
 getWebkitRotationAngle :: (MonadIO m) => Touch -> m Float
 getWebkitRotationAngle self
-  = liftIO (js_getWebkitRotationAngle (unTouch self))
+  = liftIO (js_getWebkitRotationAngle (self))
  
 foreign import javascript unsafe "$1[\"webkitForce\"]"
-        js_getWebkitForce :: JSRef Touch -> IO Float
+        js_getWebkitForce :: Touch -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Touch.webkitForce Mozilla Touch.webkitForce documentation> 
 getWebkitForce :: (MonadIO m) => Touch -> m Float
-getWebkitForce self = liftIO (js_getWebkitForce (unTouch self))
+getWebkitForce self = liftIO (js_getWebkitForce (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/TouchEvent.hs b/src/GHCJS/DOM/JSFFI/Generated/TouchEvent.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/TouchEvent.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/TouchEvent.hs
@@ -8,7 +8,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -24,12 +24,12 @@
 foreign import javascript unsafe
         "$1[\"initTouchEvent\"]($2, $3, $4,\n$5, $6, $7, $8, $9, $10, $11,\n$12, $13, $14)"
         js_initTouchEvent ::
-        JSRef TouchEvent ->
-          JSRef TouchList ->
-            JSRef TouchList ->
-              JSRef TouchList ->
+        TouchEvent ->
+          Nullable TouchList ->
+            Nullable TouchList ->
+              Nullable TouchList ->
                 JSString ->
-                  JSRef Window ->
+                  Nullable Window ->
                     Int -> Int -> Int -> Int -> Bool -> Bool -> Bool -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TouchEvent.initTouchEvent Mozilla TouchEvent.initTouchEvent documentation> 
@@ -45,12 +45,11 @@
 initTouchEvent self touches targetTouches changedTouches type' view
   screenX screenY clientX clientY ctrlKey altKey shiftKey metaKey
   = liftIO
-      (js_initTouchEvent (unTouchEvent self)
-         (maybe jsNull pToJSRef touches)
-         (maybe jsNull pToJSRef targetTouches)
-         (maybe jsNull pToJSRef changedTouches)
+      (js_initTouchEvent (self) (maybeToNullable touches)
+         (maybeToNullable targetTouches)
+         (maybeToNullable changedTouches)
          (toJSString type')
-         (maybe jsNull pToJSRef view)
+         (maybeToNullable view)
          screenX
          screenY
          clientX
@@ -61,55 +60,55 @@
          metaKey)
  
 foreign import javascript unsafe "$1[\"touches\"]" js_getTouches ::
-        JSRef TouchEvent -> IO (JSRef TouchList)
+        TouchEvent -> IO (Nullable TouchList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TouchEvent.touches Mozilla TouchEvent.touches documentation> 
 getTouches :: (MonadIO m) => TouchEvent -> m (Maybe TouchList)
 getTouches self
-  = liftIO ((js_getTouches (unTouchEvent self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getTouches (self)))
  
 foreign import javascript unsafe "$1[\"targetTouches\"]"
-        js_getTargetTouches :: JSRef TouchEvent -> IO (JSRef TouchList)
+        js_getTargetTouches :: TouchEvent -> IO (Nullable TouchList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TouchEvent.targetTouches Mozilla TouchEvent.targetTouches documentation> 
 getTargetTouches ::
                  (MonadIO m) => TouchEvent -> m (Maybe TouchList)
 getTargetTouches self
-  = liftIO ((js_getTargetTouches (unTouchEvent self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getTargetTouches (self)))
  
 foreign import javascript unsafe "$1[\"changedTouches\"]"
-        js_getChangedTouches :: JSRef TouchEvent -> IO (JSRef TouchList)
+        js_getChangedTouches :: TouchEvent -> IO (Nullable TouchList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TouchEvent.changedTouches Mozilla TouchEvent.changedTouches documentation> 
 getChangedTouches ::
                   (MonadIO m) => TouchEvent -> m (Maybe TouchList)
 getChangedTouches self
-  = liftIO ((js_getChangedTouches (unTouchEvent self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getChangedTouches (self)))
  
 foreign import javascript unsafe "($1[\"ctrlKey\"] ? 1 : 0)"
-        js_getCtrlKey :: JSRef TouchEvent -> IO Bool
+        js_getCtrlKey :: TouchEvent -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TouchEvent.ctrlKey Mozilla TouchEvent.ctrlKey documentation> 
 getCtrlKey :: (MonadIO m) => TouchEvent -> m Bool
-getCtrlKey self = liftIO (js_getCtrlKey (unTouchEvent self))
+getCtrlKey self = liftIO (js_getCtrlKey (self))
  
 foreign import javascript unsafe "($1[\"shiftKey\"] ? 1 : 0)"
-        js_getShiftKey :: JSRef TouchEvent -> IO Bool
+        js_getShiftKey :: TouchEvent -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TouchEvent.shiftKey Mozilla TouchEvent.shiftKey documentation> 
 getShiftKey :: (MonadIO m) => TouchEvent -> m Bool
-getShiftKey self = liftIO (js_getShiftKey (unTouchEvent self))
+getShiftKey self = liftIO (js_getShiftKey (self))
  
 foreign import javascript unsafe "($1[\"altKey\"] ? 1 : 0)"
-        js_getAltKey :: JSRef TouchEvent -> IO Bool
+        js_getAltKey :: TouchEvent -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TouchEvent.altKey Mozilla TouchEvent.altKey documentation> 
 getAltKey :: (MonadIO m) => TouchEvent -> m Bool
-getAltKey self = liftIO (js_getAltKey (unTouchEvent self))
+getAltKey self = liftIO (js_getAltKey (self))
  
 foreign import javascript unsafe "($1[\"metaKey\"] ? 1 : 0)"
-        js_getMetaKey :: JSRef TouchEvent -> IO Bool
+        js_getMetaKey :: TouchEvent -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TouchEvent.metaKey Mozilla TouchEvent.metaKey documentation> 
 getMetaKey :: (MonadIO m) => TouchEvent -> m Bool
-getMetaKey self = liftIO (js_getMetaKey (unTouchEvent self))
+getMetaKey self = liftIO (js_getMetaKey (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/TouchList.hs b/src/GHCJS/DOM/JSFFI/Generated/TouchList.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/TouchList.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/TouchList.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,16 +19,16 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"item\"]($2)" js_item ::
-        JSRef TouchList -> Word -> IO (JSRef Touch)
+        TouchList -> Word -> IO (Nullable Touch)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TouchList.item Mozilla TouchList.item documentation> 
 item :: (MonadIO m) => TouchList -> Word -> m (Maybe Touch)
 item self index
-  = liftIO ((js_item (unTouchList self) index) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_item (self) index))
  
 foreign import javascript unsafe "$1[\"length\"]" js_getLength ::
-        JSRef TouchList -> IO Word
+        TouchList -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TouchList.length Mozilla TouchList.length documentation> 
 getLength :: (MonadIO m) => TouchList -> m Word
-getLength self = liftIO (js_getLength (unTouchList self))
+getLength self = liftIO (js_getLength (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/TrackEvent.hs b/src/GHCJS/DOM/JSFFI/Generated/TrackEvent.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/TrackEvent.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/TrackEvent.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,9 +19,8 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"track\"]" js_getTrack ::
-        JSRef TrackEvent -> IO (JSRef GObject)
+        TrackEvent -> IO (Nullable GObject)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TrackEvent.track Mozilla TrackEvent.track documentation> 
 getTrack :: (MonadIO m) => TrackEvent -> m (Maybe GObject)
-getTrack self
-  = liftIO ((js_getTrack (unTrackEvent self)) >>= fromJSRef)
+getTrack self = liftIO (nullableToMaybe <$> (js_getTrack (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/TransitionEvent.hs b/src/GHCJS/DOM/JSFFI/Generated/TransitionEvent.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/TransitionEvent.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/TransitionEvent.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,29 +20,26 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"propertyName\"]"
-        js_getPropertyName :: JSRef TransitionEvent -> IO JSString
+        js_getPropertyName :: TransitionEvent -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TransitionEvent.propertyName Mozilla TransitionEvent.propertyName documentation> 
 getPropertyName ::
                 (MonadIO m, FromJSString result) => TransitionEvent -> m result
 getPropertyName self
-  = liftIO
-      (fromJSString <$> (js_getPropertyName (unTransitionEvent self)))
+  = liftIO (fromJSString <$> (js_getPropertyName (self)))
  
 foreign import javascript unsafe "$1[\"elapsedTime\"]"
-        js_getElapsedTime :: JSRef TransitionEvent -> IO Double
+        js_getElapsedTime :: TransitionEvent -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TransitionEvent.elapsedTime Mozilla TransitionEvent.elapsedTime documentation> 
 getElapsedTime :: (MonadIO m) => TransitionEvent -> m Double
-getElapsedTime self
-  = liftIO (js_getElapsedTime (unTransitionEvent self))
+getElapsedTime self = liftIO (js_getElapsedTime (self))
  
 foreign import javascript unsafe "$1[\"pseudoElement\"]"
-        js_getPseudoElement :: JSRef TransitionEvent -> IO JSString
+        js_getPseudoElement :: TransitionEvent -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TransitionEvent.pseudoElement Mozilla TransitionEvent.pseudoElement documentation> 
 getPseudoElement ::
                  (MonadIO m, FromJSString result) => TransitionEvent -> m result
 getPseudoElement self
-  = liftIO
-      (fromJSString <$> (js_getPseudoElement (unTransitionEvent self)))
+  = liftIO (fromJSString <$> (js_getPseudoElement (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/TreeWalker.hs b/src/GHCJS/DOM/JSFFI/Generated/TreeWalker.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/TreeWalker.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/TreeWalker.hs
@@ -11,7 +11,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -25,108 +25,103 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"parentNode\"]()"
-        js_parentNode :: JSRef TreeWalker -> IO (JSRef Node)
+        js_parentNode :: TreeWalker -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker.parentNode Mozilla TreeWalker.parentNode documentation> 
 parentNode :: (MonadIO m) => TreeWalker -> m (Maybe Node)
 parentNode self
-  = liftIO ((js_parentNode (unTreeWalker self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_parentNode (self)))
  
 foreign import javascript unsafe "$1[\"firstChild\"]()"
-        js_firstChild :: JSRef TreeWalker -> IO (JSRef Node)
+        js_firstChild :: TreeWalker -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker.firstChild Mozilla TreeWalker.firstChild documentation> 
 firstChild :: (MonadIO m) => TreeWalker -> m (Maybe Node)
 firstChild self
-  = liftIO ((js_firstChild (unTreeWalker self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_firstChild (self)))
  
 foreign import javascript unsafe "$1[\"lastChild\"]()" js_lastChild
-        :: JSRef TreeWalker -> IO (JSRef Node)
+        :: TreeWalker -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker.lastChild Mozilla TreeWalker.lastChild documentation> 
 lastChild :: (MonadIO m) => TreeWalker -> m (Maybe Node)
-lastChild self
-  = liftIO ((js_lastChild (unTreeWalker self)) >>= fromJSRef)
+lastChild self = liftIO (nullableToMaybe <$> (js_lastChild (self)))
  
 foreign import javascript unsafe "$1[\"previousSibling\"]()"
-        js_previousSibling :: JSRef TreeWalker -> IO (JSRef Node)
+        js_previousSibling :: TreeWalker -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker.previousSibling Mozilla TreeWalker.previousSibling documentation> 
 previousSibling :: (MonadIO m) => TreeWalker -> m (Maybe Node)
 previousSibling self
-  = liftIO ((js_previousSibling (unTreeWalker self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_previousSibling (self)))
  
 foreign import javascript unsafe "$1[\"nextSibling\"]()"
-        js_nextSibling :: JSRef TreeWalker -> IO (JSRef Node)
+        js_nextSibling :: TreeWalker -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker.nextSibling Mozilla TreeWalker.nextSibling documentation> 
 nextSibling :: (MonadIO m) => TreeWalker -> m (Maybe Node)
 nextSibling self
-  = liftIO ((js_nextSibling (unTreeWalker self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_nextSibling (self)))
  
 foreign import javascript unsafe "$1[\"previousNode\"]()"
-        js_previousNode :: JSRef TreeWalker -> IO (JSRef Node)
+        js_previousNode :: TreeWalker -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker.previousNode Mozilla TreeWalker.previousNode documentation> 
 previousNode :: (MonadIO m) => TreeWalker -> m (Maybe Node)
 previousNode self
-  = liftIO ((js_previousNode (unTreeWalker self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_previousNode (self)))
  
 foreign import javascript unsafe "$1[\"nextNode\"]()" js_nextNode
-        :: JSRef TreeWalker -> IO (JSRef Node)
+        :: TreeWalker -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker.nextNode Mozilla TreeWalker.nextNode documentation> 
 nextNode :: (MonadIO m) => TreeWalker -> m (Maybe Node)
-nextNode self
-  = liftIO ((js_nextNode (unTreeWalker self)) >>= fromJSRef)
+nextNode self = liftIO (nullableToMaybe <$> (js_nextNode (self)))
  
 foreign import javascript unsafe "$1[\"root\"]" js_getRoot ::
-        JSRef TreeWalker -> IO (JSRef Node)
+        TreeWalker -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker.root Mozilla TreeWalker.root documentation> 
 getRoot :: (MonadIO m) => TreeWalker -> m (Maybe Node)
-getRoot self
-  = liftIO ((js_getRoot (unTreeWalker self)) >>= fromJSRef)
+getRoot self = liftIO (nullableToMaybe <$> (js_getRoot (self)))
  
 foreign import javascript unsafe "$1[\"whatToShow\"]"
-        js_getWhatToShow :: JSRef TreeWalker -> IO Word
+        js_getWhatToShow :: TreeWalker -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker.whatToShow Mozilla TreeWalker.whatToShow documentation> 
 getWhatToShow :: (MonadIO m) => TreeWalker -> m Word
-getWhatToShow self = liftIO (js_getWhatToShow (unTreeWalker self))
+getWhatToShow self = liftIO (js_getWhatToShow (self))
  
 foreign import javascript unsafe "$1[\"filter\"]" js_getFilter ::
-        JSRef TreeWalker -> IO (JSRef NodeFilter)
+        TreeWalker -> IO (Nullable NodeFilter)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker.filter Mozilla TreeWalker.filter documentation> 
 getFilter :: (MonadIO m) => TreeWalker -> m (Maybe NodeFilter)
-getFilter self
-  = liftIO ((js_getFilter (unTreeWalker self)) >>= fromJSRef)
+getFilter self = liftIO (nullableToMaybe <$> (js_getFilter (self)))
  
 foreign import javascript unsafe
         "($1[\"expandEntityReferences\"] ? 1 : 0)"
-        js_getExpandEntityReferences :: JSRef TreeWalker -> IO Bool
+        js_getExpandEntityReferences :: TreeWalker -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker.expandEntityReferences Mozilla TreeWalker.expandEntityReferences documentation> 
 getExpandEntityReferences :: (MonadIO m) => TreeWalker -> m Bool
 getExpandEntityReferences self
-  = liftIO (js_getExpandEntityReferences (unTreeWalker self))
+  = liftIO (js_getExpandEntityReferences (self))
  
 foreign import javascript unsafe "$1[\"currentNode\"] = $2;"
-        js_setCurrentNode :: JSRef TreeWalker -> JSRef Node -> IO ()
+        js_setCurrentNode :: TreeWalker -> Nullable Node -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker.currentNode Mozilla TreeWalker.currentNode documentation> 
 setCurrentNode ::
                (MonadIO m, IsNode val) => TreeWalker -> Maybe val -> m ()
 setCurrentNode self val
   = liftIO
-      (js_setCurrentNode (unTreeWalker self)
-         (maybe jsNull (unNode . toNode) val))
+      (js_setCurrentNode (self) (maybeToNullable (fmap toNode val)))
  
 foreign import javascript unsafe "$1[\"currentNode\"]"
-        js_getCurrentNode :: JSRef TreeWalker -> IO (JSRef Node)
+        js_getCurrentNode :: TreeWalker -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker.currentNode Mozilla TreeWalker.currentNode documentation> 
 getCurrentNode :: (MonadIO m) => TreeWalker -> m (Maybe Node)
 getCurrentNode self
-  = liftIO ((js_getCurrentNode (unTreeWalker self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getCurrentNode (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/TypeConversions.hs b/src/GHCJS/DOM/JSFFI/Generated/TypeConversions.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/TypeConversions.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/TypeConversions.hs
@@ -36,7 +36,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -50,308 +50,283 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"testLong\"] = $2;"
-        js_setTestLong :: JSRef TypeConversions -> Int -> IO ()
+        js_setTestLong :: TypeConversions -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TypeConversions.testLong Mozilla TypeConversions.testLong documentation> 
 setTestLong :: (MonadIO m) => TypeConversions -> Int -> m ()
-setTestLong self val
-  = liftIO (js_setTestLong (unTypeConversions self) val)
+setTestLong self val = liftIO (js_setTestLong (self) val)
  
 foreign import javascript unsafe "$1[\"testLong\"]" js_getTestLong
-        :: JSRef TypeConversions -> IO Int
+        :: TypeConversions -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TypeConversions.testLong Mozilla TypeConversions.testLong documentation> 
 getTestLong :: (MonadIO m) => TypeConversions -> m Int
-getTestLong self = liftIO (js_getTestLong (unTypeConversions self))
+getTestLong self = liftIO (js_getTestLong (self))
  
 foreign import javascript unsafe
         "$1[\"testEnforceRangeLong\"] = $2;" js_setTestEnforceRangeLong ::
-        JSRef TypeConversions -> Int -> IO ()
+        TypeConversions -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TypeConversions.testEnforceRangeLong Mozilla TypeConversions.testEnforceRangeLong documentation> 
 setTestEnforceRangeLong ::
                         (MonadIO m) => TypeConversions -> Int -> m ()
 setTestEnforceRangeLong self val
-  = liftIO (js_setTestEnforceRangeLong (unTypeConversions self) val)
+  = liftIO (js_setTestEnforceRangeLong (self) val)
  
 foreign import javascript unsafe "$1[\"testEnforceRangeLong\"]"
-        js_getTestEnforceRangeLong :: JSRef TypeConversions -> IO Int
+        js_getTestEnforceRangeLong :: TypeConversions -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TypeConversions.testEnforceRangeLong Mozilla TypeConversions.testEnforceRangeLong documentation> 
 getTestEnforceRangeLong :: (MonadIO m) => TypeConversions -> m Int
 getTestEnforceRangeLong self
-  = liftIO (js_getTestEnforceRangeLong (unTypeConversions self))
+  = liftIO (js_getTestEnforceRangeLong (self))
  
 foreign import javascript unsafe "$1[\"testUnsignedLong\"] = $2;"
-        js_setTestUnsignedLong :: JSRef TypeConversions -> Word -> IO ()
+        js_setTestUnsignedLong :: TypeConversions -> Word -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TypeConversions.testUnsignedLong Mozilla TypeConversions.testUnsignedLong documentation> 
 setTestUnsignedLong ::
                     (MonadIO m) => TypeConversions -> Word -> m ()
 setTestUnsignedLong self val
-  = liftIO (js_setTestUnsignedLong (unTypeConversions self) val)
+  = liftIO (js_setTestUnsignedLong (self) val)
  
 foreign import javascript unsafe "$1[\"testUnsignedLong\"]"
-        js_getTestUnsignedLong :: JSRef TypeConversions -> IO Word
+        js_getTestUnsignedLong :: TypeConversions -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TypeConversions.testUnsignedLong Mozilla TypeConversions.testUnsignedLong documentation> 
 getTestUnsignedLong :: (MonadIO m) => TypeConversions -> m Word
-getTestUnsignedLong self
-  = liftIO (js_getTestUnsignedLong (unTypeConversions self))
+getTestUnsignedLong self = liftIO (js_getTestUnsignedLong (self))
  
 foreign import javascript unsafe
         "$1[\"testEnforceRangeUnsignedLong\"] = $2;"
         js_setTestEnforceRangeUnsignedLong ::
-        JSRef TypeConversions -> Word -> IO ()
+        TypeConversions -> Word -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TypeConversions.testEnforceRangeUnsignedLong Mozilla TypeConversions.testEnforceRangeUnsignedLong documentation> 
 setTestEnforceRangeUnsignedLong ::
                                 (MonadIO m) => TypeConversions -> Word -> m ()
 setTestEnforceRangeUnsignedLong self val
-  = liftIO
-      (js_setTestEnforceRangeUnsignedLong (unTypeConversions self) val)
+  = liftIO (js_setTestEnforceRangeUnsignedLong (self) val)
  
 foreign import javascript unsafe
         "$1[\"testEnforceRangeUnsignedLong\"]"
-        js_getTestEnforceRangeUnsignedLong ::
-        JSRef TypeConversions -> IO Word
+        js_getTestEnforceRangeUnsignedLong :: TypeConversions -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TypeConversions.testEnforceRangeUnsignedLong Mozilla TypeConversions.testEnforceRangeUnsignedLong documentation> 
 getTestEnforceRangeUnsignedLong ::
                                 (MonadIO m) => TypeConversions -> m Word
 getTestEnforceRangeUnsignedLong self
-  = liftIO
-      (js_getTestEnforceRangeUnsignedLong (unTypeConversions self))
+  = liftIO (js_getTestEnforceRangeUnsignedLong (self))
  
 foreign import javascript unsafe "$1[\"testLongLong\"] = $2;"
-        js_setTestLongLong :: JSRef TypeConversions -> Double -> IO ()
+        js_setTestLongLong :: TypeConversions -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TypeConversions.testLongLong Mozilla TypeConversions.testLongLong documentation> 
 setTestLongLong :: (MonadIO m) => TypeConversions -> Int64 -> m ()
 setTestLongLong self val
-  = liftIO
-      (js_setTestLongLong (unTypeConversions self) (fromIntegral val))
+  = liftIO (js_setTestLongLong (self) (fromIntegral val))
  
 foreign import javascript unsafe "$1[\"testLongLong\"]"
-        js_getTestLongLong :: JSRef TypeConversions -> IO Double
+        js_getTestLongLong :: TypeConversions -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TypeConversions.testLongLong Mozilla TypeConversions.testLongLong documentation> 
 getTestLongLong :: (MonadIO m) => TypeConversions -> m Int64
 getTestLongLong self
-  = liftIO (round <$> (js_getTestLongLong (unTypeConversions self)))
+  = liftIO (round <$> (js_getTestLongLong (self)))
  
 foreign import javascript unsafe
         "$1[\"testEnforceRangeLongLong\"] = $2;"
         js_setTestEnforceRangeLongLong ::
-        JSRef TypeConversions -> Double -> IO ()
+        TypeConversions -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TypeConversions.testEnforceRangeLongLong Mozilla TypeConversions.testEnforceRangeLongLong documentation> 
 setTestEnforceRangeLongLong ::
                             (MonadIO m) => TypeConversions -> Int64 -> m ()
 setTestEnforceRangeLongLong self val
-  = liftIO
-      (js_setTestEnforceRangeLongLong (unTypeConversions self)
-         (fromIntegral val))
+  = liftIO (js_setTestEnforceRangeLongLong (self) (fromIntegral val))
  
 foreign import javascript unsafe "$1[\"testEnforceRangeLongLong\"]"
-        js_getTestEnforceRangeLongLong ::
-        JSRef TypeConversions -> IO Double
+        js_getTestEnforceRangeLongLong :: TypeConversions -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TypeConversions.testEnforceRangeLongLong Mozilla TypeConversions.testEnforceRangeLongLong documentation> 
 getTestEnforceRangeLongLong ::
                             (MonadIO m) => TypeConversions -> m Int64
 getTestEnforceRangeLongLong self
-  = liftIO
-      (round <$>
-         (js_getTestEnforceRangeLongLong (unTypeConversions self)))
+  = liftIO (round <$> (js_getTestEnforceRangeLongLong (self)))
  
 foreign import javascript unsafe
         "$1[\"testUnsignedLongLong\"] = $2;" js_setTestUnsignedLongLong ::
-        JSRef TypeConversions -> Double -> IO ()
+        TypeConversions -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TypeConversions.testUnsignedLongLong Mozilla TypeConversions.testUnsignedLongLong documentation> 
 setTestUnsignedLongLong ::
                         (MonadIO m) => TypeConversions -> Word64 -> m ()
 setTestUnsignedLongLong self val
-  = liftIO
-      (js_setTestUnsignedLongLong (unTypeConversions self)
-         (fromIntegral val))
+  = liftIO (js_setTestUnsignedLongLong (self) (fromIntegral val))
  
 foreign import javascript unsafe "$1[\"testUnsignedLongLong\"]"
-        js_getTestUnsignedLongLong :: JSRef TypeConversions -> IO Double
+        js_getTestUnsignedLongLong :: TypeConversions -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TypeConversions.testUnsignedLongLong Mozilla TypeConversions.testUnsignedLongLong documentation> 
 getTestUnsignedLongLong ::
                         (MonadIO m) => TypeConversions -> m Word64
 getTestUnsignedLongLong self
-  = liftIO
-      (round <$> (js_getTestUnsignedLongLong (unTypeConversions self)))
+  = liftIO (round <$> (js_getTestUnsignedLongLong (self)))
  
 foreign import javascript unsafe
         "$1[\"testEnforceRangeUnsignedLongLong\"] = $2;"
         js_setTestEnforceRangeUnsignedLongLong ::
-        JSRef TypeConversions -> Double -> IO ()
+        TypeConversions -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TypeConversions.testEnforceRangeUnsignedLongLong Mozilla TypeConversions.testEnforceRangeUnsignedLongLong documentation> 
 setTestEnforceRangeUnsignedLongLong ::
                                     (MonadIO m) => TypeConversions -> Word64 -> m ()
 setTestEnforceRangeUnsignedLongLong self val
   = liftIO
-      (js_setTestEnforceRangeUnsignedLongLong (unTypeConversions self)
-         (fromIntegral val))
+      (js_setTestEnforceRangeUnsignedLongLong (self) (fromIntegral val))
  
 foreign import javascript unsafe
         "$1[\"testEnforceRangeUnsignedLongLong\"]"
         js_getTestEnforceRangeUnsignedLongLong ::
-        JSRef TypeConversions -> IO Double
+        TypeConversions -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TypeConversions.testEnforceRangeUnsignedLongLong Mozilla TypeConversions.testEnforceRangeUnsignedLongLong documentation> 
 getTestEnforceRangeUnsignedLongLong ::
                                     (MonadIO m) => TypeConversions -> m Word64
 getTestEnforceRangeUnsignedLongLong self
   = liftIO
-      (round <$>
-         (js_getTestEnforceRangeUnsignedLongLong (unTypeConversions self)))
+      (round <$> (js_getTestEnforceRangeUnsignedLongLong (self)))
  
 foreign import javascript unsafe "$1[\"testByte\"] = $2;"
-        js_setTestByte :: JSRef TypeConversions -> Int -> IO ()
+        js_setTestByte :: TypeConversions -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TypeConversions.testByte Mozilla TypeConversions.testByte documentation> 
 setTestByte :: (MonadIO m) => TypeConversions -> Int -> m ()
-setTestByte self val
-  = liftIO (js_setTestByte (unTypeConversions self) val)
+setTestByte self val = liftIO (js_setTestByte (self) val)
  
 foreign import javascript unsafe "$1[\"testByte\"]" js_getTestByte
-        :: JSRef TypeConversions -> IO Int
+        :: TypeConversions -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TypeConversions.testByte Mozilla TypeConversions.testByte documentation> 
 getTestByte :: (MonadIO m) => TypeConversions -> m Int
-getTestByte self = liftIO (js_getTestByte (unTypeConversions self))
+getTestByte self = liftIO (js_getTestByte (self))
  
 foreign import javascript unsafe
         "$1[\"testEnforceRangeByte\"] = $2;" js_setTestEnforceRangeByte ::
-        JSRef TypeConversions -> Int -> IO ()
+        TypeConversions -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TypeConversions.testEnforceRangeByte Mozilla TypeConversions.testEnforceRangeByte documentation> 
 setTestEnforceRangeByte ::
                         (MonadIO m) => TypeConversions -> Int -> m ()
 setTestEnforceRangeByte self val
-  = liftIO (js_setTestEnforceRangeByte (unTypeConversions self) val)
+  = liftIO (js_setTestEnforceRangeByte (self) val)
  
 foreign import javascript unsafe "$1[\"testEnforceRangeByte\"]"
-        js_getTestEnforceRangeByte :: JSRef TypeConversions -> IO Int
+        js_getTestEnforceRangeByte :: TypeConversions -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TypeConversions.testEnforceRangeByte Mozilla TypeConversions.testEnforceRangeByte documentation> 
 getTestEnforceRangeByte :: (MonadIO m) => TypeConversions -> m Int
 getTestEnforceRangeByte self
-  = liftIO (js_getTestEnforceRangeByte (unTypeConversions self))
+  = liftIO (js_getTestEnforceRangeByte (self))
  
 foreign import javascript unsafe "$1[\"testOctet\"] = $2;"
-        js_setTestOctet :: JSRef TypeConversions -> Word -> IO ()
+        js_setTestOctet :: TypeConversions -> Word -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TypeConversions.testOctet Mozilla TypeConversions.testOctet documentation> 
 setTestOctet :: (MonadIO m) => TypeConversions -> Word -> m ()
-setTestOctet self val
-  = liftIO (js_setTestOctet (unTypeConversions self) val)
+setTestOctet self val = liftIO (js_setTestOctet (self) val)
  
 foreign import javascript unsafe "$1[\"testOctet\"]"
-        js_getTestOctet :: JSRef TypeConversions -> IO Word
+        js_getTestOctet :: TypeConversions -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TypeConversions.testOctet Mozilla TypeConversions.testOctet documentation> 
 getTestOctet :: (MonadIO m) => TypeConversions -> m Word
-getTestOctet self
-  = liftIO (js_getTestOctet (unTypeConversions self))
+getTestOctet self = liftIO (js_getTestOctet (self))
  
 foreign import javascript unsafe
         "$1[\"testEnforceRangeOctet\"] = $2;" js_setTestEnforceRangeOctet
-        :: JSRef TypeConversions -> Word -> IO ()
+        :: TypeConversions -> Word -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TypeConversions.testEnforceRangeOctet Mozilla TypeConversions.testEnforceRangeOctet documentation> 
 setTestEnforceRangeOctet ::
                          (MonadIO m) => TypeConversions -> Word -> m ()
 setTestEnforceRangeOctet self val
-  = liftIO (js_setTestEnforceRangeOctet (unTypeConversions self) val)
+  = liftIO (js_setTestEnforceRangeOctet (self) val)
  
 foreign import javascript unsafe "$1[\"testEnforceRangeOctet\"]"
-        js_getTestEnforceRangeOctet :: JSRef TypeConversions -> IO Word
+        js_getTestEnforceRangeOctet :: TypeConversions -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TypeConversions.testEnforceRangeOctet Mozilla TypeConversions.testEnforceRangeOctet documentation> 
 getTestEnforceRangeOctet ::
                          (MonadIO m) => TypeConversions -> m Word
 getTestEnforceRangeOctet self
-  = liftIO (js_getTestEnforceRangeOctet (unTypeConversions self))
+  = liftIO (js_getTestEnforceRangeOctet (self))
  
 foreign import javascript unsafe "$1[\"testShort\"] = $2;"
-        js_setTestShort :: JSRef TypeConversions -> Int -> IO ()
+        js_setTestShort :: TypeConversions -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TypeConversions.testShort Mozilla TypeConversions.testShort documentation> 
 setTestShort :: (MonadIO m) => TypeConversions -> Int -> m ()
-setTestShort self val
-  = liftIO (js_setTestShort (unTypeConversions self) val)
+setTestShort self val = liftIO (js_setTestShort (self) val)
  
 foreign import javascript unsafe "$1[\"testShort\"]"
-        js_getTestShort :: JSRef TypeConversions -> IO Int
+        js_getTestShort :: TypeConversions -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TypeConversions.testShort Mozilla TypeConversions.testShort documentation> 
 getTestShort :: (MonadIO m) => TypeConversions -> m Int
-getTestShort self
-  = liftIO (js_getTestShort (unTypeConversions self))
+getTestShort self = liftIO (js_getTestShort (self))
  
 foreign import javascript unsafe
         "$1[\"testEnforceRangeShort\"] = $2;" js_setTestEnforceRangeShort
-        :: JSRef TypeConversions -> Int -> IO ()
+        :: TypeConversions -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TypeConversions.testEnforceRangeShort Mozilla TypeConversions.testEnforceRangeShort documentation> 
 setTestEnforceRangeShort ::
                          (MonadIO m) => TypeConversions -> Int -> m ()
 setTestEnforceRangeShort self val
-  = liftIO (js_setTestEnforceRangeShort (unTypeConversions self) val)
+  = liftIO (js_setTestEnforceRangeShort (self) val)
  
 foreign import javascript unsafe "$1[\"testEnforceRangeShort\"]"
-        js_getTestEnforceRangeShort :: JSRef TypeConversions -> IO Int
+        js_getTestEnforceRangeShort :: TypeConversions -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TypeConversions.testEnforceRangeShort Mozilla TypeConversions.testEnforceRangeShort documentation> 
 getTestEnforceRangeShort :: (MonadIO m) => TypeConversions -> m Int
 getTestEnforceRangeShort self
-  = liftIO (js_getTestEnforceRangeShort (unTypeConversions self))
+  = liftIO (js_getTestEnforceRangeShort (self))
  
 foreign import javascript unsafe "$1[\"testUnsignedShort\"] = $2;"
-        js_setTestUnsignedShort :: JSRef TypeConversions -> Word -> IO ()
+        js_setTestUnsignedShort :: TypeConversions -> Word -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TypeConversions.testUnsignedShort Mozilla TypeConversions.testUnsignedShort documentation> 
 setTestUnsignedShort ::
                      (MonadIO m) => TypeConversions -> Word -> m ()
 setTestUnsignedShort self val
-  = liftIO (js_setTestUnsignedShort (unTypeConversions self) val)
+  = liftIO (js_setTestUnsignedShort (self) val)
  
 foreign import javascript unsafe "$1[\"testUnsignedShort\"]"
-        js_getTestUnsignedShort :: JSRef TypeConversions -> IO Word
+        js_getTestUnsignedShort :: TypeConversions -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TypeConversions.testUnsignedShort Mozilla TypeConversions.testUnsignedShort documentation> 
 getTestUnsignedShort :: (MonadIO m) => TypeConversions -> m Word
-getTestUnsignedShort self
-  = liftIO (js_getTestUnsignedShort (unTypeConversions self))
+getTestUnsignedShort self = liftIO (js_getTestUnsignedShort (self))
  
 foreign import javascript unsafe
         "$1[\"testEnforceRangeUnsignedShort\"] = $2;"
         js_setTestEnforceRangeUnsignedShort ::
-        JSRef TypeConversions -> Word -> IO ()
+        TypeConversions -> Word -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TypeConversions.testEnforceRangeUnsignedShort Mozilla TypeConversions.testEnforceRangeUnsignedShort documentation> 
 setTestEnforceRangeUnsignedShort ::
                                  (MonadIO m) => TypeConversions -> Word -> m ()
 setTestEnforceRangeUnsignedShort self val
-  = liftIO
-      (js_setTestEnforceRangeUnsignedShort (unTypeConversions self) val)
+  = liftIO (js_setTestEnforceRangeUnsignedShort (self) val)
  
 foreign import javascript unsafe
         "$1[\"testEnforceRangeUnsignedShort\"]"
-        js_getTestEnforceRangeUnsignedShort ::
-        JSRef TypeConversions -> IO Word
+        js_getTestEnforceRangeUnsignedShort :: TypeConversions -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/TypeConversions.testEnforceRangeUnsignedShort Mozilla TypeConversions.testEnforceRangeUnsignedShort documentation> 
 getTestEnforceRangeUnsignedShort ::
                                  (MonadIO m) => TypeConversions -> m Word
 getTestEnforceRangeUnsignedShort self
-  = liftIO
-      (js_getTestEnforceRangeUnsignedShort (unTypeConversions self))
+  = liftIO (js_getTestEnforceRangeUnsignedShort (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/UIEvent.hs b/src/GHCJS/DOM/JSFFI/Generated/UIEvent.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/UIEvent.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/UIEvent.hs
@@ -8,7 +8,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -22,8 +22,8 @@
  
 foreign import javascript unsafe
         "$1[\"initUIEvent\"]($2, $3, $4,\n$5, $6)" js_initUIEvent ::
-        JSRef UIEvent ->
-          JSString -> Bool -> Bool -> JSRef Window -> Int -> IO ()
+        UIEvent ->
+          JSString -> Bool -> Bool -> Nullable Window -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/UIEvent.initUIEvent Mozilla UIEvent.initUIEvent documentation> 
 initUIEvent ::
@@ -31,74 +31,71 @@
               self -> type' -> Bool -> Bool -> Maybe Window -> Int -> m ()
 initUIEvent self type' canBubble cancelable view detail
   = liftIO
-      (js_initUIEvent (unUIEvent (toUIEvent self)) (toJSString type')
-         canBubble
+      (js_initUIEvent (toUIEvent self) (toJSString type') canBubble
          cancelable
-         (maybe jsNull pToJSRef view)
+         (maybeToNullable view)
          detail)
  
 foreign import javascript unsafe "$1[\"view\"]" js_getView ::
-        JSRef UIEvent -> IO (JSRef Window)
+        UIEvent -> IO (Nullable Window)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/UIEvent.view Mozilla UIEvent.view documentation> 
 getView :: (MonadIO m, IsUIEvent self) => self -> m (Maybe Window)
 getView self
-  = liftIO ((js_getView (unUIEvent (toUIEvent self))) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getView (toUIEvent self)))
  
 foreign import javascript unsafe "$1[\"detail\"]" js_getDetail ::
-        JSRef UIEvent -> IO Int
+        UIEvent -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/UIEvent.detail Mozilla UIEvent.detail documentation> 
 getDetail :: (MonadIO m, IsUIEvent self) => self -> m Int
-getDetail self = liftIO (js_getDetail (unUIEvent (toUIEvent self)))
+getDetail self = liftIO (js_getDetail (toUIEvent self))
  
 foreign import javascript unsafe "$1[\"keyCode\"]" js_getKeyCode ::
-        JSRef UIEvent -> IO Int
+        UIEvent -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/UIEvent.keyCode Mozilla UIEvent.keyCode documentation> 
 getKeyCode :: (MonadIO m, IsUIEvent self) => self -> m Int
-getKeyCode self
-  = liftIO (js_getKeyCode (unUIEvent (toUIEvent self)))
+getKeyCode self = liftIO (js_getKeyCode (toUIEvent self))
  
 foreign import javascript unsafe "$1[\"charCode\"]" js_getCharCode
-        :: JSRef UIEvent -> IO Int
+        :: UIEvent -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/UIEvent.charCode Mozilla UIEvent.charCode documentation> 
 getCharCode :: (MonadIO m, IsUIEvent self) => self -> m Int
-getCharCode self
-  = liftIO (js_getCharCode (unUIEvent (toUIEvent self)))
+getCharCode self = liftIO (js_getCharCode (toUIEvent self))
  
 foreign import javascript unsafe "$1[\"layerX\"]" js_getLayerX ::
-        JSRef UIEvent -> IO Int
+        UIEvent -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/UIEvent.layerX Mozilla UIEvent.layerX documentation> 
 getLayerX :: (MonadIO m, IsUIEvent self) => self -> m Int
-getLayerX self = liftIO (js_getLayerX (unUIEvent (toUIEvent self)))
+getLayerX self = liftIO (js_getLayerX (toUIEvent self))
  
 foreign import javascript unsafe "$1[\"layerY\"]" js_getLayerY ::
-        JSRef UIEvent -> IO Int
+        UIEvent -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/UIEvent.layerY Mozilla UIEvent.layerY documentation> 
 getLayerY :: (MonadIO m, IsUIEvent self) => self -> m Int
-getLayerY self = liftIO (js_getLayerY (unUIEvent (toUIEvent self)))
+getLayerY self = liftIO (js_getLayerY (toUIEvent self))
  
 foreign import javascript unsafe "$1[\"pageX\"]" js_getPageX ::
-        JSRef UIEvent -> IO Int
+        UIEvent -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/UIEvent.pageX Mozilla UIEvent.pageX documentation> 
 getPageX :: (MonadIO m, IsUIEvent self) => self -> m Int
-getPageX self = liftIO (js_getPageX (unUIEvent (toUIEvent self)))
+getPageX self = liftIO (js_getPageX (toUIEvent self))
  
 foreign import javascript unsafe "$1[\"pageY\"]" js_getPageY ::
-        JSRef UIEvent -> IO Int
+        UIEvent -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/UIEvent.pageY Mozilla UIEvent.pageY documentation> 
 getPageY :: (MonadIO m, IsUIEvent self) => self -> m Int
-getPageY self = liftIO (js_getPageY (unUIEvent (toUIEvent self)))
+getPageY self = liftIO (js_getPageY (toUIEvent self))
  
 foreign import javascript unsafe "$1[\"which\"]" js_getWhich ::
-        JSRef UIEvent -> IO Int
+        UIEvent -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/UIEvent.which Mozilla UIEvent.which documentation> 
 getWhich :: (MonadIO m, IsUIEvent self) => self -> m Int
-getWhich self = liftIO (js_getWhich (unUIEvent (toUIEvent self)))
+getWhich self = liftIO (js_getWhich (toUIEvent self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/UIRequestEvent.hs b/src/GHCJS/DOM/JSFFI/Generated/UIRequestEvent.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/UIRequestEvent.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/UIRequestEvent.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,10 +19,10 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"receiver\"]" js_getReceiver
-        :: JSRef UIRequestEvent -> IO (JSRef EventTarget)
+        :: UIRequestEvent -> IO (Nullable EventTarget)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/UIRequestEvent.receiver Mozilla UIRequestEvent.receiver documentation> 
 getReceiver ::
             (MonadIO m) => UIRequestEvent -> m (Maybe EventTarget)
 getReceiver self
-  = liftIO ((js_getReceiver (unUIRequestEvent self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getReceiver (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/URL.hs b/src/GHCJS/DOM/JSFFI/Generated/URL.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/URL.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/URL.hs
@@ -8,7 +8,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -22,39 +22,34 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "new window[\"URL\"]($1)"
-        js_newURL :: JSString -> IO (JSRef URL)
+        js_newURL :: JSString -> IO URL
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/URL Mozilla URL documentation> 
 newURL :: (MonadIO m, ToJSString url) => url -> m URL
-newURL url
-  = liftIO (js_newURL (toJSString url) >>= fromJSRefUnchecked)
+newURL url = liftIO (js_newURL (toJSString url))
  
 foreign import javascript unsafe "new window[\"URL\"]($1, $2)"
-        js_newURL' :: JSString -> JSString -> IO (JSRef URL)
+        js_newURL' :: JSString -> JSString -> IO URL
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/URL Mozilla URL documentation> 
 newURL' ::
         (MonadIO m, ToJSString url, ToJSString base) =>
           url -> base -> m URL
 newURL' url base
-  = liftIO
-      (js_newURL' (toJSString url) (toJSString base) >>=
-         fromJSRefUnchecked)
+  = liftIO (js_newURL' (toJSString url) (toJSString base))
  
 foreign import javascript unsafe "new window[\"URL\"]($1, $2)"
-        js_newURL'' :: JSString -> JSRef URL -> IO (JSRef URL)
+        js_newURL'' :: JSString -> Nullable URL -> IO URL
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/URL Mozilla URL documentation> 
 newURL'' ::
          (MonadIO m, ToJSString url) => url -> Maybe URL -> m URL
 newURL'' url base
-  = liftIO
-      (js_newURL'' (toJSString url) (maybe jsNull pToJSRef base) >>=
-         fromJSRefUnchecked)
+  = liftIO (js_newURL'' (toJSString url) (maybeToNullable base))
  
 foreign import javascript unsafe "$1[\"createObjectURL\"]($2)"
         js_createObjectURL ::
-        JSRef URL -> JSRef Blob -> IO (JSRef (Maybe JSString))
+        URL -> Nullable Blob -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/URL.createObjectURL Mozilla URL.createObjectURL documentation> 
 createObjectURL ::
@@ -63,21 +58,20 @@
 createObjectURL self blob
   = liftIO
       (fromMaybeJSString <$>
-         (js_createObjectURL (unURL self)
-            (maybe jsNull (unBlob . toBlob) blob)))
+         (js_createObjectURL (self) (maybeToNullable (fmap toBlob blob))))
  
 foreign import javascript unsafe "$1[\"revokeObjectURL\"]($2)"
-        js_revokeObjectURL :: JSRef URL -> JSString -> IO ()
+        js_revokeObjectURL :: URL -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/URL.revokeObjectURL Mozilla URL.revokeObjectURL documentation> 
 revokeObjectURL ::
                 (MonadIO m, ToJSString url) => URL -> url -> m ()
 revokeObjectURL self url
-  = liftIO (js_revokeObjectURL (unURL self) (toJSString url))
+  = liftIO (js_revokeObjectURL (self) (toJSString url))
  
 foreign import javascript unsafe "$1[\"createObjectURL\"]($2)"
         js_createObjectURLSource ::
-        JSRef URL -> JSRef MediaSource -> IO (JSRef (Maybe JSString))
+        URL -> Nullable MediaSource -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/URL.createObjectURL Mozilla URL.createObjectURL documentation> 
 createObjectURLSource ::
@@ -86,12 +80,11 @@
 createObjectURLSource self source
   = liftIO
       (fromMaybeJSString <$>
-         (js_createObjectURLSource (unURL self)
-            (maybe jsNull pToJSRef source)))
+         (js_createObjectURLSource (self) (maybeToNullable source)))
  
 foreign import javascript unsafe "$1[\"createObjectURL\"]($2)"
         js_createObjectURLStream ::
-        JSRef URL -> JSRef MediaStream -> IO (JSRef (Maybe JSString))
+        URL -> Nullable MediaStream -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/URL.createObjectURL Mozilla URL.createObjectURL documentation> 
 createObjectURLStream ::
@@ -100,5 +93,4 @@
 createObjectURLStream self stream
   = liftIO
       (fromMaybeJSString <$>
-         (js_createObjectURLStream (unURL self)
-            (maybe jsNull pToJSRef stream)))
+         (js_createObjectURLStream (self) (maybeToNullable stream)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/URLUtils.hs b/src/GHCJS/DOM/JSFFI/Generated/URLUtils.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/URLUtils.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/URLUtils.hs
@@ -13,7 +13,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -27,197 +27,187 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"toString\"]()" js_toString
-        :: JSRef URLUtils -> IO JSString
+        :: URLUtils -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/URLUtils.toString Mozilla URLUtils.toString documentation> 
 toString ::
          (MonadIO m, FromJSString result) => URLUtils -> m result
-toString self
-  = liftIO (fromJSString <$> (js_toString (unURLUtils self)))
+toString self = liftIO (fromJSString <$> (js_toString (self)))
  
 foreign import javascript unsafe "$1[\"href\"] = $2;" js_setHref ::
-        JSRef URLUtils -> JSString -> IO ()
+        URLUtils -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/URLUtils.href Mozilla URLUtils.href documentation> 
 setHref :: (MonadIO m, ToJSString val) => URLUtils -> val -> m ()
-setHref self val
-  = liftIO (js_setHref (unURLUtils self) (toJSString val))
+setHref self val = liftIO (js_setHref (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"href\"]" js_getHref ::
-        JSRef URLUtils -> IO JSString
+        URLUtils -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/URLUtils.href Mozilla URLUtils.href documentation> 
 getHref :: (MonadIO m, FromJSString result) => URLUtils -> m result
-getHref self
-  = liftIO (fromJSString <$> (js_getHref (unURLUtils self)))
+getHref self = liftIO (fromJSString <$> (js_getHref (self)))
  
 foreign import javascript unsafe "$1[\"origin\"]" js_getOrigin ::
-        JSRef URLUtils -> IO JSString
+        URLUtils -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/URLUtils.origin Mozilla URLUtils.origin documentation> 
 getOrigin ::
           (MonadIO m, FromJSString result) => URLUtils -> m result
-getOrigin self
-  = liftIO (fromJSString <$> (js_getOrigin (unURLUtils self)))
+getOrigin self = liftIO (fromJSString <$> (js_getOrigin (self)))
  
 foreign import javascript unsafe "$1[\"protocol\"] = $2;"
-        js_setProtocol :: JSRef URLUtils -> JSRef (Maybe JSString) -> IO ()
+        js_setProtocol :: URLUtils -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/URLUtils.protocol Mozilla URLUtils.protocol documentation> 
 setProtocol ::
             (MonadIO m, ToJSString val) => URLUtils -> Maybe val -> m ()
 setProtocol self val
-  = liftIO (js_setProtocol (unURLUtils self) (toMaybeJSString val))
+  = liftIO (js_setProtocol (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"protocol\"]" js_getProtocol
-        :: JSRef URLUtils -> IO (JSRef (Maybe JSString))
+        :: URLUtils -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/URLUtils.protocol Mozilla URLUtils.protocol documentation> 
 getProtocol ::
             (MonadIO m, FromJSString result) => URLUtils -> m (Maybe result)
 getProtocol self
-  = liftIO (fromMaybeJSString <$> (js_getProtocol (unURLUtils self)))
+  = liftIO (fromMaybeJSString <$> (js_getProtocol (self)))
  
 foreign import javascript unsafe "$1[\"username\"] = $2;"
-        js_setUsername :: JSRef URLUtils -> JSRef (Maybe JSString) -> IO ()
+        js_setUsername :: URLUtils -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/URLUtils.username Mozilla URLUtils.username documentation> 
 setUsername ::
             (MonadIO m, ToJSString val) => URLUtils -> Maybe val -> m ()
 setUsername self val
-  = liftIO (js_setUsername (unURLUtils self) (toMaybeJSString val))
+  = liftIO (js_setUsername (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"username\"]" js_getUsername
-        :: JSRef URLUtils -> IO (JSRef (Maybe JSString))
+        :: URLUtils -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/URLUtils.username Mozilla URLUtils.username documentation> 
 getUsername ::
             (MonadIO m, FromJSString result) => URLUtils -> m (Maybe result)
 getUsername self
-  = liftIO (fromMaybeJSString <$> (js_getUsername (unURLUtils self)))
+  = liftIO (fromMaybeJSString <$> (js_getUsername (self)))
  
 foreign import javascript unsafe "$1[\"password\"] = $2;"
-        js_setPassword :: JSRef URLUtils -> JSRef (Maybe JSString) -> IO ()
+        js_setPassword :: URLUtils -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/URLUtils.password Mozilla URLUtils.password documentation> 
 setPassword ::
             (MonadIO m, ToJSString val) => URLUtils -> Maybe val -> m ()
 setPassword self val
-  = liftIO (js_setPassword (unURLUtils self) (toMaybeJSString val))
+  = liftIO (js_setPassword (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"password\"]" js_getPassword
-        :: JSRef URLUtils -> IO (JSRef (Maybe JSString))
+        :: URLUtils -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/URLUtils.password Mozilla URLUtils.password documentation> 
 getPassword ::
             (MonadIO m, FromJSString result) => URLUtils -> m (Maybe result)
 getPassword self
-  = liftIO (fromMaybeJSString <$> (js_getPassword (unURLUtils self)))
+  = liftIO (fromMaybeJSString <$> (js_getPassword (self)))
  
 foreign import javascript unsafe "$1[\"host\"] = $2;" js_setHost ::
-        JSRef URLUtils -> JSRef (Maybe JSString) -> IO ()
+        URLUtils -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/URLUtils.host Mozilla URLUtils.host documentation> 
 setHost ::
         (MonadIO m, ToJSString val) => URLUtils -> Maybe val -> m ()
-setHost self val
-  = liftIO (js_setHost (unURLUtils self) (toMaybeJSString val))
+setHost self val = liftIO (js_setHost (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"host\"]" js_getHost ::
-        JSRef URLUtils -> IO (JSRef (Maybe JSString))
+        URLUtils -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/URLUtils.host Mozilla URLUtils.host documentation> 
 getHost ::
         (MonadIO m, FromJSString result) => URLUtils -> m (Maybe result)
-getHost self
-  = liftIO (fromMaybeJSString <$> (js_getHost (unURLUtils self)))
+getHost self = liftIO (fromMaybeJSString <$> (js_getHost (self)))
  
 foreign import javascript unsafe "$1[\"hostname\"] = $2;"
-        js_setHostname :: JSRef URLUtils -> JSRef (Maybe JSString) -> IO ()
+        js_setHostname :: URLUtils -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/URLUtils.hostname Mozilla URLUtils.hostname documentation> 
 setHostname ::
             (MonadIO m, ToJSString val) => URLUtils -> Maybe val -> m ()
 setHostname self val
-  = liftIO (js_setHostname (unURLUtils self) (toMaybeJSString val))
+  = liftIO (js_setHostname (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"hostname\"]" js_getHostname
-        :: JSRef URLUtils -> IO (JSRef (Maybe JSString))
+        :: URLUtils -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/URLUtils.hostname Mozilla URLUtils.hostname documentation> 
 getHostname ::
             (MonadIO m, FromJSString result) => URLUtils -> m (Maybe result)
 getHostname self
-  = liftIO (fromMaybeJSString <$> (js_getHostname (unURLUtils self)))
+  = liftIO (fromMaybeJSString <$> (js_getHostname (self)))
  
 foreign import javascript unsafe "$1[\"port\"] = $2;" js_setPort ::
-        JSRef URLUtils -> JSRef (Maybe JSString) -> IO ()
+        URLUtils -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/URLUtils.port Mozilla URLUtils.port documentation> 
 setPort ::
         (MonadIO m, ToJSString val) => URLUtils -> Maybe val -> m ()
-setPort self val
-  = liftIO (js_setPort (unURLUtils self) (toMaybeJSString val))
+setPort self val = liftIO (js_setPort (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"port\"]" js_getPort ::
-        JSRef URLUtils -> IO (JSRef (Maybe JSString))
+        URLUtils -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/URLUtils.port Mozilla URLUtils.port documentation> 
 getPort ::
         (MonadIO m, FromJSString result) => URLUtils -> m (Maybe result)
-getPort self
-  = liftIO (fromMaybeJSString <$> (js_getPort (unURLUtils self)))
+getPort self = liftIO (fromMaybeJSString <$> (js_getPort (self)))
  
 foreign import javascript unsafe "$1[\"pathname\"] = $2;"
-        js_setPathname :: JSRef URLUtils -> JSRef (Maybe JSString) -> IO ()
+        js_setPathname :: URLUtils -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/URLUtils.pathname Mozilla URLUtils.pathname documentation> 
 setPathname ::
             (MonadIO m, ToJSString val) => URLUtils -> Maybe val -> m ()
 setPathname self val
-  = liftIO (js_setPathname (unURLUtils self) (toMaybeJSString val))
+  = liftIO (js_setPathname (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"pathname\"]" js_getPathname
-        :: JSRef URLUtils -> IO (JSRef (Maybe JSString))
+        :: URLUtils -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/URLUtils.pathname Mozilla URLUtils.pathname documentation> 
 getPathname ::
             (MonadIO m, FromJSString result) => URLUtils -> m (Maybe result)
 getPathname self
-  = liftIO (fromMaybeJSString <$> (js_getPathname (unURLUtils self)))
+  = liftIO (fromMaybeJSString <$> (js_getPathname (self)))
  
 foreign import javascript unsafe "$1[\"search\"] = $2;"
-        js_setSearch :: JSRef URLUtils -> JSRef (Maybe JSString) -> IO ()
+        js_setSearch :: URLUtils -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/URLUtils.search Mozilla URLUtils.search documentation> 
 setSearch ::
           (MonadIO m, ToJSString val) => URLUtils -> Maybe val -> m ()
 setSearch self val
-  = liftIO (js_setSearch (unURLUtils self) (toMaybeJSString val))
+  = liftIO (js_setSearch (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"search\"]" js_getSearch ::
-        JSRef URLUtils -> IO (JSRef (Maybe JSString))
+        URLUtils -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/URLUtils.search Mozilla URLUtils.search documentation> 
 getSearch ::
           (MonadIO m, FromJSString result) => URLUtils -> m (Maybe result)
 getSearch self
-  = liftIO (fromMaybeJSString <$> (js_getSearch (unURLUtils self)))
+  = liftIO (fromMaybeJSString <$> (js_getSearch (self)))
  
 foreign import javascript unsafe "$1[\"hash\"] = $2;" js_setHash ::
-        JSRef URLUtils -> JSRef (Maybe JSString) -> IO ()
+        URLUtils -> Nullable JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/URLUtils.hash Mozilla URLUtils.hash documentation> 
 setHash ::
         (MonadIO m, ToJSString val) => URLUtils -> Maybe val -> m ()
-setHash self val
-  = liftIO (js_setHash (unURLUtils self) (toMaybeJSString val))
+setHash self val = liftIO (js_setHash (self) (toMaybeJSString val))
  
 foreign import javascript unsafe "$1[\"hash\"]" js_getHash ::
-        JSRef URLUtils -> IO (JSRef (Maybe JSString))
+        URLUtils -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/URLUtils.hash Mozilla URLUtils.hash documentation> 
 getHash ::
         (MonadIO m, FromJSString result) => URLUtils -> m (Maybe result)
-getHash self
-  = liftIO (fromMaybeJSString <$> (js_getHash (unURLUtils self)))
+getHash self = liftIO (fromMaybeJSString <$> (js_getHash (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/UserMessageHandler.hs b/src/GHCJS/DOM/JSFFI/Generated/UserMessageHandler.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/UserMessageHandler.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/UserMessageHandler.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,7 +20,7 @@
  
 foreign import javascript unsafe "$1[\"postMessage\"]($2)"
         js_postMessage ::
-        JSRef UserMessageHandler -> JSRef SerializedScriptValue -> IO ()
+        UserMessageHandler -> Nullable SerializedScriptValue -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/UserMessageHandler.postMessage Mozilla UserMessageHandler.postMessage documentation> 
 postMessage ::
@@ -28,6 +28,5 @@
               UserMessageHandler -> Maybe message -> m ()
 postMessage self message
   = liftIO
-      (js_postMessage (unUserMessageHandler self)
-         (maybe jsNull (unSerializedScriptValue . toSerializedScriptValue)
-            message))
+      (js_postMessage (self)
+         (maybeToNullable (fmap toSerializedScriptValue message)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/VTTCue.hs b/src/GHCJS/DOM/JSFFI/Generated/VTTCue.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/VTTCue.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/VTTCue.hs
@@ -12,7 +12,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -27,144 +27,137 @@
  
 foreign import javascript unsafe
         "new window[\"VTTCue\"]($1, $2, $3)" js_newVTTCue ::
-        Double -> Double -> JSString -> IO (JSRef VTTCue)
+        Double -> Double -> JSString -> IO VTTCue
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VTTCue Mozilla VTTCue documentation> 
 newVTTCue ::
           (MonadIO m, ToJSString text) =>
             Double -> Double -> text -> m VTTCue
 newVTTCue startTime endTime text
-  = liftIO
-      (js_newVTTCue startTime endTime (toJSString text) >>=
-         fromJSRefUnchecked)
+  = liftIO (js_newVTTCue startTime endTime (toJSString text))
  
 foreign import javascript unsafe "$1[\"getCueAsHTML\"]()"
-        js_getCueAsHTML :: JSRef VTTCue -> IO (JSRef DocumentFragment)
+        js_getCueAsHTML :: VTTCue -> IO (Nullable DocumentFragment)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VTTCue.getCueAsHTML Mozilla VTTCue.getCueAsHTML documentation> 
 getCueAsHTML :: (MonadIO m) => VTTCue -> m (Maybe DocumentFragment)
 getCueAsHTML self
-  = liftIO ((js_getCueAsHTML (unVTTCue self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getCueAsHTML (self)))
  
 foreign import javascript unsafe "$1[\"vertical\"] = $2;"
-        js_setVertical :: JSRef VTTCue -> JSString -> IO ()
+        js_setVertical :: VTTCue -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VTTCue.vertical Mozilla VTTCue.vertical documentation> 
 setVertical :: (MonadIO m, ToJSString val) => VTTCue -> val -> m ()
 setVertical self val
-  = liftIO (js_setVertical (unVTTCue self) (toJSString val))
+  = liftIO (js_setVertical (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"vertical\"]" js_getVertical
-        :: JSRef VTTCue -> IO JSString
+        :: VTTCue -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VTTCue.vertical Mozilla VTTCue.vertical documentation> 
 getVertical ::
             (MonadIO m, FromJSString result) => VTTCue -> m result
 getVertical self
-  = liftIO (fromJSString <$> (js_getVertical (unVTTCue self)))
+  = liftIO (fromJSString <$> (js_getVertical (self)))
  
 foreign import javascript unsafe "$1[\"snapToLines\"] = $2;"
-        js_setSnapToLines :: JSRef VTTCue -> Bool -> IO ()
+        js_setSnapToLines :: VTTCue -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VTTCue.snapToLines Mozilla VTTCue.snapToLines documentation> 
 setSnapToLines :: (MonadIO m) => VTTCue -> Bool -> m ()
-setSnapToLines self val
-  = liftIO (js_setSnapToLines (unVTTCue self) val)
+setSnapToLines self val = liftIO (js_setSnapToLines (self) val)
  
 foreign import javascript unsafe "($1[\"snapToLines\"] ? 1 : 0)"
-        js_getSnapToLines :: JSRef VTTCue -> IO Bool
+        js_getSnapToLines :: VTTCue -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VTTCue.snapToLines Mozilla VTTCue.snapToLines documentation> 
 getSnapToLines :: (MonadIO m) => VTTCue -> m Bool
-getSnapToLines self = liftIO (js_getSnapToLines (unVTTCue self))
+getSnapToLines self = liftIO (js_getSnapToLines (self))
  
 foreign import javascript unsafe "$1[\"line\"] = $2;" js_setLine ::
-        JSRef VTTCue -> Double -> IO ()
+        VTTCue -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VTTCue.line Mozilla VTTCue.line documentation> 
 setLine :: (MonadIO m) => VTTCue -> Double -> m ()
-setLine self val = liftIO (js_setLine (unVTTCue self) val)
+setLine self val = liftIO (js_setLine (self) val)
  
 foreign import javascript unsafe "$1[\"line\"]" js_getLine ::
-        JSRef VTTCue -> IO Double
+        VTTCue -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VTTCue.line Mozilla VTTCue.line documentation> 
 getLine :: (MonadIO m) => VTTCue -> m Double
-getLine self = liftIO (js_getLine (unVTTCue self))
+getLine self = liftIO (js_getLine (self))
  
 foreign import javascript unsafe "$1[\"position\"] = $2;"
-        js_setPosition :: JSRef VTTCue -> Double -> IO ()
+        js_setPosition :: VTTCue -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VTTCue.position Mozilla VTTCue.position documentation> 
 setPosition :: (MonadIO m) => VTTCue -> Double -> m ()
-setPosition self val = liftIO (js_setPosition (unVTTCue self) val)
+setPosition self val = liftIO (js_setPosition (self) val)
  
 foreign import javascript unsafe "$1[\"position\"]" js_getPosition
-        :: JSRef VTTCue -> IO Double
+        :: VTTCue -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VTTCue.position Mozilla VTTCue.position documentation> 
 getPosition :: (MonadIO m) => VTTCue -> m Double
-getPosition self = liftIO (js_getPosition (unVTTCue self))
+getPosition self = liftIO (js_getPosition (self))
  
 foreign import javascript unsafe "$1[\"size\"] = $2;" js_setSize ::
-        JSRef VTTCue -> Double -> IO ()
+        VTTCue -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VTTCue.size Mozilla VTTCue.size documentation> 
 setSize :: (MonadIO m) => VTTCue -> Double -> m ()
-setSize self val = liftIO (js_setSize (unVTTCue self) val)
+setSize self val = liftIO (js_setSize (self) val)
  
 foreign import javascript unsafe "$1[\"size\"]" js_getSize ::
-        JSRef VTTCue -> IO Double
+        VTTCue -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VTTCue.size Mozilla VTTCue.size documentation> 
 getSize :: (MonadIO m) => VTTCue -> m Double
-getSize self = liftIO (js_getSize (unVTTCue self))
+getSize self = liftIO (js_getSize (self))
  
 foreign import javascript unsafe "$1[\"align\"] = $2;" js_setAlign
-        :: JSRef VTTCue -> JSString -> IO ()
+        :: VTTCue -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VTTCue.align Mozilla VTTCue.align documentation> 
 setAlign :: (MonadIO m, ToJSString val) => VTTCue -> val -> m ()
-setAlign self val
-  = liftIO (js_setAlign (unVTTCue self) (toJSString val))
+setAlign self val = liftIO (js_setAlign (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"align\"]" js_getAlign ::
-        JSRef VTTCue -> IO JSString
+        VTTCue -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VTTCue.align Mozilla VTTCue.align documentation> 
 getAlign :: (MonadIO m, FromJSString result) => VTTCue -> m result
-getAlign self
-  = liftIO (fromJSString <$> (js_getAlign (unVTTCue self)))
+getAlign self = liftIO (fromJSString <$> (js_getAlign (self)))
  
 foreign import javascript unsafe "$1[\"text\"] = $2;" js_setText ::
-        JSRef VTTCue -> JSString -> IO ()
+        VTTCue -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VTTCue.text Mozilla VTTCue.text documentation> 
 setText :: (MonadIO m, ToJSString val) => VTTCue -> val -> m ()
-setText self val
-  = liftIO (js_setText (unVTTCue self) (toJSString val))
+setText self val = liftIO (js_setText (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"text\"]" js_getText ::
-        JSRef VTTCue -> IO JSString
+        VTTCue -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VTTCue.text Mozilla VTTCue.text documentation> 
 getText :: (MonadIO m, FromJSString result) => VTTCue -> m result
-getText self
-  = liftIO (fromJSString <$> (js_getText (unVTTCue self)))
+getText self = liftIO (fromJSString <$> (js_getText (self)))
  
 foreign import javascript unsafe "$1[\"regionId\"] = $2;"
-        js_setRegionId :: JSRef VTTCue -> JSString -> IO ()
+        js_setRegionId :: VTTCue -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VTTCue.regionId Mozilla VTTCue.regionId documentation> 
 setRegionId :: (MonadIO m, ToJSString val) => VTTCue -> val -> m ()
 setRegionId self val
-  = liftIO (js_setRegionId (unVTTCue self) (toJSString val))
+  = liftIO (js_setRegionId (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"regionId\"]" js_getRegionId
-        :: JSRef VTTCue -> IO JSString
+        :: VTTCue -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VTTCue.regionId Mozilla VTTCue.regionId documentation> 
 getRegionId ::
             (MonadIO m, FromJSString result) => VTTCue -> m result
 getRegionId self
-  = liftIO (fromJSString <$> (js_getRegionId (unVTTCue self)))
+  = liftIO (fromJSString <$> (js_getRegionId (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/VTTRegion.hs b/src/GHCJS/DOM/JSFFI/Generated/VTTRegion.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/VTTRegion.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/VTTRegion.hs
@@ -13,7 +13,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -27,142 +27,131 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "new window[\"VTTRegion\"]()"
-        js_newVTTRegion :: IO (JSRef VTTRegion)
+        js_newVTTRegion :: IO VTTRegion
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VTTRegion Mozilla VTTRegion documentation> 
 newVTTRegion :: (MonadIO m) => m VTTRegion
-newVTTRegion = liftIO (js_newVTTRegion >>= fromJSRefUnchecked)
+newVTTRegion = liftIO (js_newVTTRegion)
  
 foreign import javascript unsafe "$1[\"track\"]" js_getTrack ::
-        JSRef VTTRegion -> IO (JSRef TextTrack)
+        VTTRegion -> IO (Nullable TextTrack)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VTTRegion.track Mozilla VTTRegion.track documentation> 
 getTrack :: (MonadIO m) => VTTRegion -> m (Maybe TextTrack)
-getTrack self
-  = liftIO ((js_getTrack (unVTTRegion self)) >>= fromJSRef)
+getTrack self = liftIO (nullableToMaybe <$> (js_getTrack (self)))
  
 foreign import javascript unsafe "$1[\"id\"] = $2;" js_setId ::
-        JSRef VTTRegion -> JSString -> IO ()
+        VTTRegion -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VTTRegion.id Mozilla VTTRegion.id documentation> 
 setId :: (MonadIO m, ToJSString val) => VTTRegion -> val -> m ()
-setId self val
-  = liftIO (js_setId (unVTTRegion self) (toJSString val))
+setId self val = liftIO (js_setId (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"id\"]" js_getId ::
-        JSRef VTTRegion -> IO JSString
+        VTTRegion -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VTTRegion.id Mozilla VTTRegion.id documentation> 
 getId :: (MonadIO m, FromJSString result) => VTTRegion -> m result
-getId self
-  = liftIO (fromJSString <$> (js_getId (unVTTRegion self)))
+getId self = liftIO (fromJSString <$> (js_getId (self)))
  
 foreign import javascript unsafe "$1[\"width\"] = $2;" js_setWidth
-        :: JSRef VTTRegion -> Double -> IO ()
+        :: VTTRegion -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VTTRegion.width Mozilla VTTRegion.width documentation> 
 setWidth :: (MonadIO m) => VTTRegion -> Double -> m ()
-setWidth self val = liftIO (js_setWidth (unVTTRegion self) val)
+setWidth self val = liftIO (js_setWidth (self) val)
  
 foreign import javascript unsafe "$1[\"width\"]" js_getWidth ::
-        JSRef VTTRegion -> IO Double
+        VTTRegion -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VTTRegion.width Mozilla VTTRegion.width documentation> 
 getWidth :: (MonadIO m) => VTTRegion -> m Double
-getWidth self = liftIO (js_getWidth (unVTTRegion self))
+getWidth self = liftIO (js_getWidth (self))
  
 foreign import javascript unsafe "$1[\"height\"] = $2;"
-        js_setHeight :: JSRef VTTRegion -> Int -> IO ()
+        js_setHeight :: VTTRegion -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VTTRegion.height Mozilla VTTRegion.height documentation> 
 setHeight :: (MonadIO m) => VTTRegion -> Int -> m ()
-setHeight self val = liftIO (js_setHeight (unVTTRegion self) val)
+setHeight self val = liftIO (js_setHeight (self) val)
  
 foreign import javascript unsafe "$1[\"height\"]" js_getHeight ::
-        JSRef VTTRegion -> IO Int
+        VTTRegion -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VTTRegion.height Mozilla VTTRegion.height documentation> 
 getHeight :: (MonadIO m) => VTTRegion -> m Int
-getHeight self = liftIO (js_getHeight (unVTTRegion self))
+getHeight self = liftIO (js_getHeight (self))
  
 foreign import javascript unsafe "$1[\"regionAnchorX\"] = $2;"
-        js_setRegionAnchorX :: JSRef VTTRegion -> Double -> IO ()
+        js_setRegionAnchorX :: VTTRegion -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VTTRegion.regionAnchorX Mozilla VTTRegion.regionAnchorX documentation> 
 setRegionAnchorX :: (MonadIO m) => VTTRegion -> Double -> m ()
-setRegionAnchorX self val
-  = liftIO (js_setRegionAnchorX (unVTTRegion self) val)
+setRegionAnchorX self val = liftIO (js_setRegionAnchorX (self) val)
  
 foreign import javascript unsafe "$1[\"regionAnchorX\"]"
-        js_getRegionAnchorX :: JSRef VTTRegion -> IO Double
+        js_getRegionAnchorX :: VTTRegion -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VTTRegion.regionAnchorX Mozilla VTTRegion.regionAnchorX documentation> 
 getRegionAnchorX :: (MonadIO m) => VTTRegion -> m Double
-getRegionAnchorX self
-  = liftIO (js_getRegionAnchorX (unVTTRegion self))
+getRegionAnchorX self = liftIO (js_getRegionAnchorX (self))
  
 foreign import javascript unsafe "$1[\"regionAnchorY\"] = $2;"
-        js_setRegionAnchorY :: JSRef VTTRegion -> Double -> IO ()
+        js_setRegionAnchorY :: VTTRegion -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VTTRegion.regionAnchorY Mozilla VTTRegion.regionAnchorY documentation> 
 setRegionAnchorY :: (MonadIO m) => VTTRegion -> Double -> m ()
-setRegionAnchorY self val
-  = liftIO (js_setRegionAnchorY (unVTTRegion self) val)
+setRegionAnchorY self val = liftIO (js_setRegionAnchorY (self) val)
  
 foreign import javascript unsafe "$1[\"regionAnchorY\"]"
-        js_getRegionAnchorY :: JSRef VTTRegion -> IO Double
+        js_getRegionAnchorY :: VTTRegion -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VTTRegion.regionAnchorY Mozilla VTTRegion.regionAnchorY documentation> 
 getRegionAnchorY :: (MonadIO m) => VTTRegion -> m Double
-getRegionAnchorY self
-  = liftIO (js_getRegionAnchorY (unVTTRegion self))
+getRegionAnchorY self = liftIO (js_getRegionAnchorY (self))
  
 foreign import javascript unsafe "$1[\"viewportAnchorX\"] = $2;"
-        js_setViewportAnchorX :: JSRef VTTRegion -> Double -> IO ()
+        js_setViewportAnchorX :: VTTRegion -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VTTRegion.viewportAnchorX Mozilla VTTRegion.viewportAnchorX documentation> 
 setViewportAnchorX :: (MonadIO m) => VTTRegion -> Double -> m ()
 setViewportAnchorX self val
-  = liftIO (js_setViewportAnchorX (unVTTRegion self) val)
+  = liftIO (js_setViewportAnchorX (self) val)
  
 foreign import javascript unsafe "$1[\"viewportAnchorX\"]"
-        js_getViewportAnchorX :: JSRef VTTRegion -> IO Double
+        js_getViewportAnchorX :: VTTRegion -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VTTRegion.viewportAnchorX Mozilla VTTRegion.viewportAnchorX documentation> 
 getViewportAnchorX :: (MonadIO m) => VTTRegion -> m Double
-getViewportAnchorX self
-  = liftIO (js_getViewportAnchorX (unVTTRegion self))
+getViewportAnchorX self = liftIO (js_getViewportAnchorX (self))
  
 foreign import javascript unsafe "$1[\"viewportAnchorY\"] = $2;"
-        js_setViewportAnchorY :: JSRef VTTRegion -> Double -> IO ()
+        js_setViewportAnchorY :: VTTRegion -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VTTRegion.viewportAnchorY Mozilla VTTRegion.viewportAnchorY documentation> 
 setViewportAnchorY :: (MonadIO m) => VTTRegion -> Double -> m ()
 setViewportAnchorY self val
-  = liftIO (js_setViewportAnchorY (unVTTRegion self) val)
+  = liftIO (js_setViewportAnchorY (self) val)
  
 foreign import javascript unsafe "$1[\"viewportAnchorY\"]"
-        js_getViewportAnchorY :: JSRef VTTRegion -> IO Double
+        js_getViewportAnchorY :: VTTRegion -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VTTRegion.viewportAnchorY Mozilla VTTRegion.viewportAnchorY documentation> 
 getViewportAnchorY :: (MonadIO m) => VTTRegion -> m Double
-getViewportAnchorY self
-  = liftIO (js_getViewportAnchorY (unVTTRegion self))
+getViewportAnchorY self = liftIO (js_getViewportAnchorY (self))
  
 foreign import javascript unsafe "$1[\"scroll\"] = $2;"
-        js_setScroll :: JSRef VTTRegion -> JSString -> IO ()
+        js_setScroll :: VTTRegion -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VTTRegion.scroll Mozilla VTTRegion.scroll documentation> 
 setScroll ::
           (MonadIO m, ToJSString val) => VTTRegion -> val -> m ()
-setScroll self val
-  = liftIO (js_setScroll (unVTTRegion self) (toJSString val))
+setScroll self val = liftIO (js_setScroll (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"scroll\"]" js_getScroll ::
-        JSRef VTTRegion -> IO JSString
+        VTTRegion -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VTTRegion.scroll Mozilla VTTRegion.scroll documentation> 
 getScroll ::
           (MonadIO m, FromJSString result) => VTTRegion -> m result
-getScroll self
-  = liftIO (fromJSString <$> (js_getScroll (unVTTRegion self)))
+getScroll self = liftIO (fromJSString <$> (js_getScroll (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/VTTRegionList.hs b/src/GHCJS/DOM/JSFFI/Generated/VTTRegionList.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/VTTRegionList.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/VTTRegionList.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,16 +19,16 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"item\"]($2)" js_item ::
-        JSRef VTTRegionList -> Word -> IO (JSRef VTTRegion)
+        VTTRegionList -> Word -> IO (Nullable VTTRegion)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VTTRegionList.item Mozilla VTTRegionList.item documentation> 
 item :: (MonadIO m) => VTTRegionList -> Word -> m (Maybe VTTRegion)
 item self index
-  = liftIO ((js_item (unVTTRegionList self) index) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_item (self) index))
  
 foreign import javascript unsafe "$1[\"getRegionById\"]($2)"
         js_getRegionById ::
-        JSRef VTTRegionList -> JSString -> IO (JSRef VTTRegion)
+        VTTRegionList -> JSString -> IO (Nullable VTTRegion)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VTTRegionList.getRegionById Mozilla VTTRegionList.getRegionById documentation> 
 getRegionById ::
@@ -36,12 +36,11 @@
                 VTTRegionList -> id -> m (Maybe VTTRegion)
 getRegionById self id
   = liftIO
-      ((js_getRegionById (unVTTRegionList self) (toJSString id)) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_getRegionById (self) (toJSString id)))
  
 foreign import javascript unsafe "$1[\"length\"]" js_getLength ::
-        JSRef VTTRegionList -> IO Word
+        VTTRegionList -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VTTRegionList.length Mozilla VTTRegionList.length documentation> 
 getLength :: (MonadIO m) => VTTRegionList -> m Word
-getLength self = liftIO (js_getLength (unVTTRegionList self))
+getLength self = liftIO (js_getLength (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/ValidityState.hs b/src/GHCJS/DOM/JSFFI/Generated/ValidityState.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/ValidityState.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/ValidityState.hs
@@ -10,7 +10,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -24,79 +24,72 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "($1[\"valueMissing\"] ? 1 : 0)"
-        js_getValueMissing :: JSRef ValidityState -> IO Bool
+        js_getValueMissing :: ValidityState -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ValidityState.valueMissing Mozilla ValidityState.valueMissing documentation> 
 getValueMissing :: (MonadIO m) => ValidityState -> m Bool
-getValueMissing self
-  = liftIO (js_getValueMissing (unValidityState self))
+getValueMissing self = liftIO (js_getValueMissing (self))
  
 foreign import javascript unsafe "($1[\"typeMismatch\"] ? 1 : 0)"
-        js_getTypeMismatch :: JSRef ValidityState -> IO Bool
+        js_getTypeMismatch :: ValidityState -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ValidityState.typeMismatch Mozilla ValidityState.typeMismatch documentation> 
 getTypeMismatch :: (MonadIO m) => ValidityState -> m Bool
-getTypeMismatch self
-  = liftIO (js_getTypeMismatch (unValidityState self))
+getTypeMismatch self = liftIO (js_getTypeMismatch (self))
  
 foreign import javascript unsafe
         "($1[\"patternMismatch\"] ? 1 : 0)" js_getPatternMismatch ::
-        JSRef ValidityState -> IO Bool
+        ValidityState -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ValidityState.patternMismatch Mozilla ValidityState.patternMismatch documentation> 
 getPatternMismatch :: (MonadIO m) => ValidityState -> m Bool
-getPatternMismatch self
-  = liftIO (js_getPatternMismatch (unValidityState self))
+getPatternMismatch self = liftIO (js_getPatternMismatch (self))
  
 foreign import javascript unsafe "($1[\"tooLong\"] ? 1 : 0)"
-        js_getTooLong :: JSRef ValidityState -> IO Bool
+        js_getTooLong :: ValidityState -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ValidityState.tooLong Mozilla ValidityState.tooLong documentation> 
 getTooLong :: (MonadIO m) => ValidityState -> m Bool
-getTooLong self = liftIO (js_getTooLong (unValidityState self))
+getTooLong self = liftIO (js_getTooLong (self))
  
 foreign import javascript unsafe "($1[\"rangeUnderflow\"] ? 1 : 0)"
-        js_getRangeUnderflow :: JSRef ValidityState -> IO Bool
+        js_getRangeUnderflow :: ValidityState -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ValidityState.rangeUnderflow Mozilla ValidityState.rangeUnderflow documentation> 
 getRangeUnderflow :: (MonadIO m) => ValidityState -> m Bool
-getRangeUnderflow self
-  = liftIO (js_getRangeUnderflow (unValidityState self))
+getRangeUnderflow self = liftIO (js_getRangeUnderflow (self))
  
 foreign import javascript unsafe "($1[\"rangeOverflow\"] ? 1 : 0)"
-        js_getRangeOverflow :: JSRef ValidityState -> IO Bool
+        js_getRangeOverflow :: ValidityState -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ValidityState.rangeOverflow Mozilla ValidityState.rangeOverflow documentation> 
 getRangeOverflow :: (MonadIO m) => ValidityState -> m Bool
-getRangeOverflow self
-  = liftIO (js_getRangeOverflow (unValidityState self))
+getRangeOverflow self = liftIO (js_getRangeOverflow (self))
  
 foreign import javascript unsafe "($1[\"stepMismatch\"] ? 1 : 0)"
-        js_getStepMismatch :: JSRef ValidityState -> IO Bool
+        js_getStepMismatch :: ValidityState -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ValidityState.stepMismatch Mozilla ValidityState.stepMismatch documentation> 
 getStepMismatch :: (MonadIO m) => ValidityState -> m Bool
-getStepMismatch self
-  = liftIO (js_getStepMismatch (unValidityState self))
+getStepMismatch self = liftIO (js_getStepMismatch (self))
  
 foreign import javascript unsafe "($1[\"badInput\"] ? 1 : 0)"
-        js_getBadInput :: JSRef ValidityState -> IO Bool
+        js_getBadInput :: ValidityState -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ValidityState.badInput Mozilla ValidityState.badInput documentation> 
 getBadInput :: (MonadIO m) => ValidityState -> m Bool
-getBadInput self = liftIO (js_getBadInput (unValidityState self))
+getBadInput self = liftIO (js_getBadInput (self))
  
 foreign import javascript unsafe "($1[\"customError\"] ? 1 : 0)"
-        js_getCustomError :: JSRef ValidityState -> IO Bool
+        js_getCustomError :: ValidityState -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ValidityState.customError Mozilla ValidityState.customError documentation> 
 getCustomError :: (MonadIO m) => ValidityState -> m Bool
-getCustomError self
-  = liftIO (js_getCustomError (unValidityState self))
+getCustomError self = liftIO (js_getCustomError (self))
  
 foreign import javascript unsafe "($1[\"valid\"] ? 1 : 0)"
-        js_getValid :: JSRef ValidityState -> IO Bool
+        js_getValid :: ValidityState -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/ValidityState.valid Mozilla ValidityState.valid documentation> 
 getValid :: (MonadIO m) => ValidityState -> m Bool
-getValid self = liftIO (js_getValid (unValidityState self))
+getValid self = liftIO (js_getValid (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/VideoPlaybackQuality.hs b/src/GHCJS/DOM/JSFFI/Generated/VideoPlaybackQuality.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/VideoPlaybackQuality.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/VideoPlaybackQuality.hs
@@ -9,7 +9,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -23,45 +23,42 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"creationTime\"]"
-        js_getCreationTime :: JSRef VideoPlaybackQuality -> IO Double
+        js_getCreationTime :: VideoPlaybackQuality -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VideoPlaybackQuality.creationTime Mozilla VideoPlaybackQuality.creationTime documentation> 
 getCreationTime :: (MonadIO m) => VideoPlaybackQuality -> m Double
-getCreationTime self
-  = liftIO (js_getCreationTime (unVideoPlaybackQuality self))
+getCreationTime self = liftIO (js_getCreationTime (self))
  
 foreign import javascript unsafe "$1[\"totalVideoFrames\"]"
-        js_getTotalVideoFrames :: JSRef VideoPlaybackQuality -> IO Word
+        js_getTotalVideoFrames :: VideoPlaybackQuality -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VideoPlaybackQuality.totalVideoFrames Mozilla VideoPlaybackQuality.totalVideoFrames documentation> 
 getTotalVideoFrames ::
                     (MonadIO m) => VideoPlaybackQuality -> m Word
-getTotalVideoFrames self
-  = liftIO (js_getTotalVideoFrames (unVideoPlaybackQuality self))
+getTotalVideoFrames self = liftIO (js_getTotalVideoFrames (self))
  
 foreign import javascript unsafe "$1[\"droppedVideoFrames\"]"
-        js_getDroppedVideoFrames :: JSRef VideoPlaybackQuality -> IO Word
+        js_getDroppedVideoFrames :: VideoPlaybackQuality -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VideoPlaybackQuality.droppedVideoFrames Mozilla VideoPlaybackQuality.droppedVideoFrames documentation> 
 getDroppedVideoFrames ::
                       (MonadIO m) => VideoPlaybackQuality -> m Word
 getDroppedVideoFrames self
-  = liftIO (js_getDroppedVideoFrames (unVideoPlaybackQuality self))
+  = liftIO (js_getDroppedVideoFrames (self))
  
 foreign import javascript unsafe "$1[\"corruptedVideoFrames\"]"
-        js_getCorruptedVideoFrames :: JSRef VideoPlaybackQuality -> IO Word
+        js_getCorruptedVideoFrames :: VideoPlaybackQuality -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VideoPlaybackQuality.corruptedVideoFrames Mozilla VideoPlaybackQuality.corruptedVideoFrames documentation> 
 getCorruptedVideoFrames ::
                         (MonadIO m) => VideoPlaybackQuality -> m Word
 getCorruptedVideoFrames self
-  = liftIO (js_getCorruptedVideoFrames (unVideoPlaybackQuality self))
+  = liftIO (js_getCorruptedVideoFrames (self))
  
 foreign import javascript unsafe "$1[\"totalFrameDelay\"]"
-        js_getTotalFrameDelay :: JSRef VideoPlaybackQuality -> IO Double
+        js_getTotalFrameDelay :: VideoPlaybackQuality -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VideoPlaybackQuality.totalFrameDelay Mozilla VideoPlaybackQuality.totalFrameDelay documentation> 
 getTotalFrameDelay ::
                    (MonadIO m) => VideoPlaybackQuality -> m Double
-getTotalFrameDelay self
-  = liftIO (js_getTotalFrameDelay (unVideoPlaybackQuality self))
+getTotalFrameDelay self = liftIO (js_getTotalFrameDelay (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/VideoStreamTrack.hs b/src/GHCJS/DOM/JSFFI/Generated/VideoStreamTrack.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/VideoStreamTrack.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/VideoStreamTrack.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,7 +20,7 @@
  
 foreign import javascript unsafe
         "new window[\"VideoStreamTrack\"]($1)" js_newVideoStreamTrack ::
-        JSRef Dictionary -> IO (JSRef VideoStreamTrack)
+        Nullable Dictionary -> IO VideoStreamTrack
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VideoStreamTrack Mozilla VideoStreamTrack documentation> 
 newVideoStreamTrack ::
@@ -29,5 +29,4 @@
 newVideoStreamTrack videoConstraints
   = liftIO
       (js_newVideoStreamTrack
-         (maybe jsNull (unDictionary . toDictionary) videoConstraints)
-         >>= fromJSRefUnchecked)
+         (maybeToNullable (fmap toDictionary videoConstraints)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/VideoTrack.hs b/src/GHCJS/DOM/JSFFI/Generated/VideoTrack.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/VideoTrack.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/VideoTrack.hs
@@ -8,7 +8,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -22,77 +22,72 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"id\"]" js_getId ::
-        JSRef VideoTrack -> IO JSString
+        VideoTrack -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VideoTrack.id Mozilla VideoTrack.id documentation> 
 getId :: (MonadIO m, FromJSString result) => VideoTrack -> m result
-getId self
-  = liftIO (fromJSString <$> (js_getId (unVideoTrack self)))
+getId self = liftIO (fromJSString <$> (js_getId (self)))
  
 foreign import javascript unsafe "$1[\"kind\"] = $2;" js_setKind ::
-        JSRef VideoTrack -> JSString -> IO ()
+        VideoTrack -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VideoTrack.kind Mozilla VideoTrack.kind documentation> 
 setKind :: (MonadIO m, ToJSString val) => VideoTrack -> val -> m ()
-setKind self val
-  = liftIO (js_setKind (unVideoTrack self) (toJSString val))
+setKind self val = liftIO (js_setKind (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"kind\"]" js_getKind ::
-        JSRef VideoTrack -> IO JSString
+        VideoTrack -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VideoTrack.kind Mozilla VideoTrack.kind documentation> 
 getKind ::
         (MonadIO m, FromJSString result) => VideoTrack -> m result
-getKind self
-  = liftIO (fromJSString <$> (js_getKind (unVideoTrack self)))
+getKind self = liftIO (fromJSString <$> (js_getKind (self)))
  
 foreign import javascript unsafe "$1[\"label\"]" js_getLabel ::
-        JSRef VideoTrack -> IO JSString
+        VideoTrack -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VideoTrack.label Mozilla VideoTrack.label documentation> 
 getLabel ::
          (MonadIO m, FromJSString result) => VideoTrack -> m result
-getLabel self
-  = liftIO (fromJSString <$> (js_getLabel (unVideoTrack self)))
+getLabel self = liftIO (fromJSString <$> (js_getLabel (self)))
  
 foreign import javascript unsafe "$1[\"language\"] = $2;"
-        js_setLanguage :: JSRef VideoTrack -> JSString -> IO ()
+        js_setLanguage :: VideoTrack -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VideoTrack.language Mozilla VideoTrack.language documentation> 
 setLanguage ::
             (MonadIO m, ToJSString val) => VideoTrack -> val -> m ()
 setLanguage self val
-  = liftIO (js_setLanguage (unVideoTrack self) (toJSString val))
+  = liftIO (js_setLanguage (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"language\"]" js_getLanguage
-        :: JSRef VideoTrack -> IO JSString
+        :: VideoTrack -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VideoTrack.language Mozilla VideoTrack.language documentation> 
 getLanguage ::
             (MonadIO m, FromJSString result) => VideoTrack -> m result
 getLanguage self
-  = liftIO (fromJSString <$> (js_getLanguage (unVideoTrack self)))
+  = liftIO (fromJSString <$> (js_getLanguage (self)))
  
 foreign import javascript unsafe "$1[\"selected\"] = $2;"
-        js_setSelected :: JSRef VideoTrack -> Bool -> IO ()
+        js_setSelected :: VideoTrack -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VideoTrack.selected Mozilla VideoTrack.selected documentation> 
 setSelected :: (MonadIO m) => VideoTrack -> Bool -> m ()
-setSelected self val
-  = liftIO (js_setSelected (unVideoTrack self) val)
+setSelected self val = liftIO (js_setSelected (self) val)
  
 foreign import javascript unsafe "($1[\"selected\"] ? 1 : 0)"
-        js_getSelected :: JSRef VideoTrack -> IO Bool
+        js_getSelected :: VideoTrack -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VideoTrack.selected Mozilla VideoTrack.selected documentation> 
 getSelected :: (MonadIO m) => VideoTrack -> m Bool
-getSelected self = liftIO (js_getSelected (unVideoTrack self))
+getSelected self = liftIO (js_getSelected (self))
  
 foreign import javascript unsafe "$1[\"sourceBuffer\"]"
-        js_getSourceBuffer :: JSRef VideoTrack -> IO (JSRef SourceBuffer)
+        js_getSourceBuffer :: VideoTrack -> IO (Nullable SourceBuffer)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VideoTrack.sourceBuffer Mozilla VideoTrack.sourceBuffer documentation> 
 getSourceBuffer ::
                 (MonadIO m) => VideoTrack -> m (Maybe SourceBuffer)
 getSourceBuffer self
-  = liftIO ((js_getSourceBuffer (unVideoTrack self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getSourceBuffer (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/VideoTrackList.hs b/src/GHCJS/DOM/JSFFI/Generated/VideoTrackList.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/VideoTrackList.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/VideoTrackList.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -21,17 +21,17 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"item\"]($2)" js_item ::
-        JSRef VideoTrackList -> Word -> IO (JSRef VideoTrack)
+        VideoTrackList -> Word -> IO (Nullable VideoTrack)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VideoTrackList.item Mozilla VideoTrackList.item documentation> 
 item ::
      (MonadIO m) => VideoTrackList -> Word -> m (Maybe VideoTrack)
 item self index
-  = liftIO ((js_item (unVideoTrackList self) index) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_item (self) index))
  
 foreign import javascript unsafe "$1[\"getTrackById\"]($2)"
         js_getTrackById ::
-        JSRef VideoTrackList -> JSString -> IO (JSRef VideoTrack)
+        VideoTrackList -> JSString -> IO (Nullable VideoTrack)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VideoTrackList.getTrackById Mozilla VideoTrackList.getTrackById documentation> 
 getTrackById ::
@@ -39,23 +39,21 @@
                VideoTrackList -> id -> m (Maybe VideoTrack)
 getTrackById self id
   = liftIO
-      ((js_getTrackById (unVideoTrackList self) (toJSString id)) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_getTrackById (self) (toJSString id)))
  
 foreign import javascript unsafe "$1[\"length\"]" js_getLength ::
-        JSRef VideoTrackList -> IO Word
+        VideoTrackList -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VideoTrackList.length Mozilla VideoTrackList.length documentation> 
 getLength :: (MonadIO m) => VideoTrackList -> m Word
-getLength self = liftIO (js_getLength (unVideoTrackList self))
+getLength self = liftIO (js_getLength (self))
  
 foreign import javascript unsafe "$1[\"selectedIndex\"]"
-        js_getSelectedIndex :: JSRef VideoTrackList -> IO Int
+        js_getSelectedIndex :: VideoTrackList -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VideoTrackList.selectedIndex Mozilla VideoTrackList.selectedIndex documentation> 
 getSelectedIndex :: (MonadIO m) => VideoTrackList -> m Int
-getSelectedIndex self
-  = liftIO (js_getSelectedIndex (unVideoTrackList self))
+getSelectedIndex self = liftIO (js_getSelectedIndex (self))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VideoTrackList.onchange Mozilla VideoTrackList.onchange documentation> 
 change :: EventName VideoTrackList Event
diff --git a/src/GHCJS/DOM/JSFFI/Generated/VoidCallback.hs b/src/GHCJS/DOM/JSFFI/Generated/VoidCallback.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/VoidCallback.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/VoidCallback.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -21,13 +21,14 @@
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VoidCallback Mozilla VoidCallback documentation> 
 newVoidCallback :: (MonadIO m) => IO () -> m VoidCallback
 newVoidCallback callback
-  = liftIO (syncCallback ThrowWouldBlock callback)
+  = liftIO (VoidCallback <$> syncCallback ThrowWouldBlock callback)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VoidCallback Mozilla VoidCallback documentation> 
 newVoidCallbackSync :: (MonadIO m) => IO () -> m VoidCallback
 newVoidCallbackSync callback
-  = liftIO (syncCallback ContinueAsync callback)
+  = liftIO (VoidCallback <$> syncCallback ContinueAsync callback)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/VoidCallback Mozilla VoidCallback documentation> 
 newVoidCallbackAsync :: (MonadIO m) => IO () -> m VoidCallback
-newVoidCallbackAsync callback = liftIO (asyncCallback callback)
+newVoidCallbackAsync callback
+  = liftIO (VoidCallback <$> asyncCallback callback)
diff --git a/src/GHCJS/DOM/JSFFI/Generated/WaveShaperNode.hs b/src/GHCJS/DOM/JSFFI/Generated/WaveShaperNode.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/WaveShaperNode.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/WaveShaperNode.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,7 +20,7 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"curve\"] = $2;" js_setCurve
-        :: JSRef WaveShaperNode -> JSRef Float32Array -> IO ()
+        :: WaveShaperNode -> Nullable Float32Array -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WaveShaperNode.curve Mozilla WaveShaperNode.curve documentation> 
 setCurve ::
@@ -28,33 +28,28 @@
            WaveShaperNode -> Maybe val -> m ()
 setCurve self val
   = liftIO
-      (js_setCurve (unWaveShaperNode self)
-         (maybe jsNull (unFloat32Array . toFloat32Array) val))
+      (js_setCurve (self) (maybeToNullable (fmap toFloat32Array val)))
  
 foreign import javascript unsafe "$1[\"curve\"]" js_getCurve ::
-        JSRef WaveShaperNode -> IO (JSRef Float32Array)
+        WaveShaperNode -> IO (Nullable Float32Array)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WaveShaperNode.curve Mozilla WaveShaperNode.curve documentation> 
 getCurve :: (MonadIO m) => WaveShaperNode -> m (Maybe Float32Array)
-getCurve self
-  = liftIO ((js_getCurve (unWaveShaperNode self)) >>= fromJSRef)
+getCurve self = liftIO (nullableToMaybe <$> (js_getCurve (self)))
  
 foreign import javascript unsafe "$1[\"oversample\"] = $2;"
-        js_setOversample ::
-        JSRef WaveShaperNode -> JSRef OverSampleType -> IO ()
+        js_setOversample :: WaveShaperNode -> JSRef -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WaveShaperNode.oversample Mozilla WaveShaperNode.oversample documentation> 
 setOversample ::
               (MonadIO m) => WaveShaperNode -> OverSampleType -> m ()
 setOversample self val
-  = liftIO (js_setOversample (unWaveShaperNode self) (pToJSRef val))
+  = liftIO (js_setOversample (self) (pToJSRef val))
  
 foreign import javascript unsafe "$1[\"oversample\"]"
-        js_getOversample ::
-        JSRef WaveShaperNode -> IO (JSRef OverSampleType)
+        js_getOversample :: WaveShaperNode -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WaveShaperNode.oversample Mozilla WaveShaperNode.oversample documentation> 
 getOversample :: (MonadIO m) => WaveShaperNode -> m OverSampleType
 getOversample self
-  = liftIO
-      ((js_getOversample (unWaveShaperNode self)) >>= fromJSRefUnchecked)
+  = liftIO ((js_getOversample (self)) >>= fromJSRefUnchecked)
diff --git a/src/GHCJS/DOM/JSFFI/Generated/WebGL2RenderingContext.hs b/src/GHCJS/DOM/JSFFI/Generated/WebGL2RenderingContext.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/WebGL2RenderingContext.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/WebGL2RenderingContext.hs
@@ -216,7 +216,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -232,7 +232,7 @@
 foreign import javascript unsafe
         "$1[\"copyBufferSubData\"]($2, $3,\n$4, $5, $6)"
         js_copyBufferSubData ::
-        JSRef WebGL2RenderingContext ->
+        WebGL2RenderingContext ->
           GLenum -> GLenum -> Double -> Double -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.copyBufferSubData Mozilla WebGL2RenderingContext.copyBufferSubData documentation> 
@@ -243,16 +243,15 @@
 copyBufferSubData self readTarget writeTarget readOffset
   writeOffset size
   = liftIO
-      (js_copyBufferSubData (unWebGL2RenderingContext self) readTarget
-         writeTarget
+      (js_copyBufferSubData (self) readTarget writeTarget
          (fromIntegral readOffset)
          (fromIntegral writeOffset)
          (fromIntegral size))
  
 foreign import javascript unsafe
         "$1[\"getBufferSubData\"]($2, $3,\n$4)" js_getBufferSubDataView ::
-        JSRef WebGL2RenderingContext ->
-          GLenum -> Double -> JSRef ArrayBufferView -> IO ()
+        WebGL2RenderingContext ->
+          GLenum -> Double -> Nullable ArrayBufferView -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.getBufferSubData Mozilla WebGL2RenderingContext.getBufferSubData documentation> 
 getBufferSubDataView ::
@@ -261,15 +260,13 @@
                          GLenum -> GLintptr -> Maybe returnedData -> m ()
 getBufferSubDataView self target offset returnedData
   = liftIO
-      (js_getBufferSubDataView (unWebGL2RenderingContext self) target
-         (fromIntegral offset)
-         (maybe jsNull (unArrayBufferView . toArrayBufferView)
-            returnedData))
+      (js_getBufferSubDataView (self) target (fromIntegral offset)
+         (maybeToNullable (fmap toArrayBufferView returnedData)))
  
 foreign import javascript unsafe
         "$1[\"getBufferSubData\"]($2, $3,\n$4)" js_getBufferSubData ::
-        JSRef WebGL2RenderingContext ->
-          GLenum -> Double -> JSRef ArrayBuffer -> IO ()
+        WebGL2RenderingContext ->
+          GLenum -> Double -> Nullable ArrayBuffer -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.getBufferSubData Mozilla WebGL2RenderingContext.getBufferSubData documentation> 
 getBufferSubData ::
@@ -278,33 +275,27 @@
                      GLenum -> GLintptr -> Maybe returnedData -> m ()
 getBufferSubData self target offset returnedData
   = liftIO
-      (js_getBufferSubData (unWebGL2RenderingContext self) target
-         (fromIntegral offset)
-         (maybe jsNull (unArrayBuffer . toArrayBuffer) returnedData))
+      (js_getBufferSubData (self) target (fromIntegral offset)
+         (maybeToNullable (fmap toArrayBuffer returnedData)))
  
 foreign import javascript unsafe
         "$1[\"getFramebufferAttachmentParameter\"]($2,\n$3, $4)"
         js_getFramebufferAttachmentParameter ::
-        JSRef WebGL2RenderingContext ->
-          GLenum -> GLenum -> GLenum -> IO (JSRef a)
+        WebGL2RenderingContext -> GLenum -> GLenum -> GLenum -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.getFramebufferAttachmentParameter Mozilla WebGL2RenderingContext.getFramebufferAttachmentParameter documentation> 
 getFramebufferAttachmentParameter ::
                                   (MonadIO m) =>
-                                    WebGL2RenderingContext ->
-                                      GLenum -> GLenum -> GLenum -> m (JSRef a)
+                                    WebGL2RenderingContext -> GLenum -> GLenum -> GLenum -> m JSRef
 getFramebufferAttachmentParameter self target attachment pname
   = liftIO
-      (js_getFramebufferAttachmentParameter
-         (unWebGL2RenderingContext self)
-         target
-         attachment
+      (js_getFramebufferAttachmentParameter (self) target attachment
          pname)
  
 foreign import javascript unsafe
         "$1[\"blitFramebuffer\"]($2, $3,\n$4, $5, $6, $7, $8, $9, $10,\n$11)"
         js_blitFramebuffer ::
-        JSRef WebGL2RenderingContext ->
+        WebGL2RenderingContext ->
           GLint ->
             GLint ->
               GLint ->
@@ -323,11 +314,7 @@
 blitFramebuffer self srcX0 srcY0 srcX1 srcY1 dstX0 dstY0 dstX1
   dstY1 mask filter
   = liftIO
-      (js_blitFramebuffer (unWebGL2RenderingContext self) srcX0 srcY0
-         srcX1
-         srcY1
-         dstX0
-         dstY0
+      (js_blitFramebuffer (self) srcX0 srcY0 srcX1 srcY1 dstX0 dstY0
          dstX1
          dstY1
          mask
@@ -336,7 +323,7 @@
 foreign import javascript unsafe
         "$1[\"framebufferTextureLayer\"]($2,\n$3, $4, $5, $6)"
         js_framebufferTextureLayer ::
-        JSRef WebGL2RenderingContext ->
+        WebGL2RenderingContext ->
           GLenum -> GLenum -> GLuint -> GLint -> GLint -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.framebufferTextureLayer Mozilla WebGL2RenderingContext.framebufferTextureLayer documentation> 
@@ -346,33 +333,25 @@
                             GLenum -> GLenum -> GLuint -> GLint -> GLint -> m ()
 framebufferTextureLayer self target attachment texture level layer
   = liftIO
-      (js_framebufferTextureLayer (unWebGL2RenderingContext self) target
-         attachment
-         texture
-         level
+      (js_framebufferTextureLayer (self) target attachment texture level
          layer)
  
 foreign import javascript unsafe
         "$1[\"getInternalformatParameter\"]($2,\n$3, $4)"
         js_getInternalformatParameter ::
-        JSRef WebGL2RenderingContext ->
-          GLenum -> GLenum -> GLenum -> IO (JSRef a)
+        WebGL2RenderingContext -> GLenum -> GLenum -> GLenum -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.getInternalformatParameter Mozilla WebGL2RenderingContext.getInternalformatParameter documentation> 
 getInternalformatParameter ::
                            (MonadIO m) =>
-                             WebGL2RenderingContext -> GLenum -> GLenum -> GLenum -> m (JSRef a)
+                             WebGL2RenderingContext -> GLenum -> GLenum -> GLenum -> m JSRef
 getInternalformatParameter self target internalformat pname
   = liftIO
-      (js_getInternalformatParameter (unWebGL2RenderingContext self)
-         target
-         internalformat
-         pname)
+      (js_getInternalformatParameter (self) target internalformat pname)
  
 foreign import javascript unsafe
         "$1[\"invalidateFramebuffer\"]($2,\n$3)" js_invalidateFramebuffer
-        ::
-        JSRef WebGL2RenderingContext -> GLenum -> JSRef [GLenum] -> IO ()
+        :: WebGL2RenderingContext -> GLenum -> JSRef -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.invalidateFramebuffer Mozilla WebGL2RenderingContext.invalidateFramebuffer documentation> 
 invalidateFramebuffer ::
@@ -381,15 +360,13 @@
   = liftIO
       (toJSRef attachments >>=
          \ attachments' ->
-           js_invalidateFramebuffer (unWebGL2RenderingContext self) target
-             attachments')
+           js_invalidateFramebuffer (self) target attachments')
  
 foreign import javascript unsafe
         "$1[\"invalidateSubFramebuffer\"]($2,\n$3, $4, $5, $6, $7)"
         js_invalidateSubFramebuffer ::
-        JSRef WebGL2RenderingContext ->
-          GLenum ->
-            JSRef [GLenum] -> GLint -> GLint -> GLsizei -> GLsizei -> IO ()
+        WebGL2RenderingContext ->
+          GLenum -> JSRef -> GLint -> GLint -> GLsizei -> GLsizei -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.invalidateSubFramebuffer Mozilla WebGL2RenderingContext.invalidateSubFramebuffer documentation> 
 invalidateSubFramebuffer ::
@@ -400,26 +377,24 @@
   = liftIO
       (toJSRef attachments >>=
          \ attachments' ->
-           js_invalidateSubFramebuffer (unWebGL2RenderingContext self) target
-             attachments'
+           js_invalidateSubFramebuffer (self) target attachments'
          x
          y
          width
          height)
  
 foreign import javascript unsafe "$1[\"readBuffer\"]($2)"
-        js_readBuffer :: JSRef WebGL2RenderingContext -> GLenum -> IO ()
+        js_readBuffer :: WebGL2RenderingContext -> GLenum -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.readBuffer Mozilla WebGL2RenderingContext.readBuffer documentation> 
 readBuffer ::
            (MonadIO m) => WebGL2RenderingContext -> GLenum -> m ()
-readBuffer self src
-  = liftIO (js_readBuffer (unWebGL2RenderingContext self) src)
+readBuffer self src = liftIO (js_readBuffer (self) src)
  
 foreign import javascript unsafe
         "$1[\"renderbufferStorageMultisample\"]($2,\n$3, $4, $5, $6)"
         js_renderbufferStorageMultisample ::
-        JSRef WebGL2RenderingContext ->
+        WebGL2RenderingContext ->
           GLenum -> GLsizei -> GLenum -> GLsizei -> GLsizei -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.renderbufferStorageMultisample Mozilla WebGL2RenderingContext.renderbufferStorageMultisample documentation> 
@@ -430,16 +405,14 @@
 renderbufferStorageMultisample self target samples internalformat
   width height
   = liftIO
-      (js_renderbufferStorageMultisample (unWebGL2RenderingContext self)
-         target
-         samples
+      (js_renderbufferStorageMultisample (self) target samples
          internalformat
          width
          height)
  
 foreign import javascript unsafe
         "$1[\"texStorage2D\"]($2, $3, $4,\n$5, $6)" js_texStorage2D ::
-        JSRef WebGL2RenderingContext ->
+        WebGL2RenderingContext ->
           GLenum -> GLsizei -> GLenum -> GLsizei -> GLsizei -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.texStorage2D Mozilla WebGL2RenderingContext.texStorage2D documentation> 
@@ -449,14 +422,11 @@
                  GLenum -> GLsizei -> GLenum -> GLsizei -> GLsizei -> m ()
 texStorage2D self target levels internalformat width height
   = liftIO
-      (js_texStorage2D (unWebGL2RenderingContext self) target levels
-         internalformat
-         width
-         height)
+      (js_texStorage2D (self) target levels internalformat width height)
  
 foreign import javascript unsafe
         "$1[\"texStorage3D\"]($2, $3, $4,\n$5, $6, $7)" js_texStorage3D ::
-        JSRef WebGL2RenderingContext ->
+        WebGL2RenderingContext ->
           GLenum ->
             GLsizei -> GLenum -> GLsizei -> GLsizei -> GLsizei -> IO ()
 
@@ -468,23 +438,20 @@
                    GLsizei -> GLenum -> GLsizei -> GLsizei -> GLsizei -> m ()
 texStorage3D self target levels internalformat width height depth
   = liftIO
-      (js_texStorage3D (unWebGL2RenderingContext self) target levels
-         internalformat
-         width
-         height
+      (js_texStorage3D (self) target levels internalformat width height
          depth)
  
 foreign import javascript unsafe
         "$1[\"texImage3D\"]($2, $3, $4, $5,\n$6, $7, $8, $9, $10, $11)"
         js_texImage3D ::
-        JSRef WebGL2RenderingContext ->
+        WebGL2RenderingContext ->
           GLenum ->
             GLint ->
               GLint ->
                 GLsizei ->
                   GLsizei ->
                     GLsizei ->
-                      GLint -> GLenum -> GLenum -> JSRef ArrayBufferView -> IO ()
+                      GLint -> GLenum -> GLenum -> Nullable ArrayBufferView -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.texImage3D Mozilla WebGL2RenderingContext.texImage3D documentation> 
 texImage3D ::
@@ -499,20 +466,17 @@
 texImage3D self target level internalformat width height depth
   border format type' pixels
   = liftIO
-      (js_texImage3D (unWebGL2RenderingContext self) target level
-         internalformat
-         width
-         height
+      (js_texImage3D (self) target level internalformat width height
          depth
          border
          format
          type'
-         (maybe jsNull (unArrayBufferView . toArrayBufferView) pixels))
+         (maybeToNullable (fmap toArrayBufferView pixels)))
  
 foreign import javascript unsafe
         "$1[\"texSubImage3D\"]($2, $3, $4,\n$5, $6, $7, $8, $9, $10, $11,\n$12)"
         js_texSubImage3DView ::
-        JSRef WebGL2RenderingContext ->
+        WebGL2RenderingContext ->
           GLenum ->
             GLint ->
               GLint ->
@@ -520,7 +484,7 @@
                   GLint ->
                     GLsizei ->
                       GLsizei ->
-                        GLsizei -> GLenum -> GLenum -> JSRef ArrayBufferView -> IO ()
+                        GLsizei -> GLenum -> GLenum -> Nullable ArrayBufferView -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.texSubImage3D Mozilla WebGL2RenderingContext.texSubImage3D documentation> 
 texSubImage3DView ::
@@ -536,25 +500,22 @@
 texSubImage3DView self target level xoffset yoffset zoffset width
   height depth format type' pixels
   = liftIO
-      (js_texSubImage3DView (unWebGL2RenderingContext self) target level
-         xoffset
-         yoffset
-         zoffset
+      (js_texSubImage3DView (self) target level xoffset yoffset zoffset
          width
          height
          depth
          format
          type'
-         (maybe jsNull (unArrayBufferView . toArrayBufferView) pixels))
+         (maybeToNullable (fmap toArrayBufferView pixels)))
  
 foreign import javascript unsafe
         "$1[\"texSubImage3D\"]($2, $3, $4,\n$5, $6, $7, $8, $9)"
         js_texSubImage3DData ::
-        JSRef WebGL2RenderingContext ->
+        WebGL2RenderingContext ->
           GLenum ->
             GLint ->
               GLint ->
-                GLint -> GLint -> GLenum -> GLenum -> JSRef ImageData -> IO ()
+                GLint -> GLint -> GLenum -> GLenum -> Nullable ImageData -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.texSubImage3D Mozilla WebGL2RenderingContext.texSubImage3D documentation> 
 texSubImage3DData ::
@@ -567,23 +528,20 @@
 texSubImage3DData self target level xoffset yoffset zoffset format
   type' source
   = liftIO
-      (js_texSubImage3DData (unWebGL2RenderingContext self) target level
-         xoffset
-         yoffset
-         zoffset
+      (js_texSubImage3DData (self) target level xoffset yoffset zoffset
          format
          type'
-         (maybe jsNull pToJSRef source))
+         (maybeToNullable source))
  
 foreign import javascript unsafe
         "$1[\"texSubImage3D\"]($2, $3, $4,\n$5, $6, $7, $8, $9)"
         js_texSubImage3D ::
-        JSRef WebGL2RenderingContext ->
+        WebGL2RenderingContext ->
           GLenum ->
             GLint ->
               GLint ->
                 GLint ->
-                  GLint -> GLenum -> GLenum -> JSRef HTMLImageElement -> IO ()
+                  GLint -> GLenum -> GLenum -> Nullable HTMLImageElement -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.texSubImage3D Mozilla WebGL2RenderingContext.texSubImage3D documentation> 
 texSubImage3D ::
@@ -597,23 +555,20 @@
 texSubImage3D self target level xoffset yoffset zoffset format
   type' source
   = liftIO
-      (js_texSubImage3D (unWebGL2RenderingContext self) target level
-         xoffset
-         yoffset
-         zoffset
+      (js_texSubImage3D (self) target level xoffset yoffset zoffset
          format
          type'
-         (maybe jsNull pToJSRef source))
+         (maybeToNullable source))
  
 foreign import javascript unsafe
         "$1[\"texSubImage3D\"]($2, $3, $4,\n$5, $6, $7, $8, $9)"
         js_texSubImage3DCanvas ::
-        JSRef WebGL2RenderingContext ->
+        WebGL2RenderingContext ->
           GLenum ->
             GLint ->
               GLint ->
                 GLint ->
-                  GLint -> GLenum -> GLenum -> JSRef HTMLCanvasElement -> IO ()
+                  GLint -> GLenum -> GLenum -> Nullable HTMLCanvasElement -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.texSubImage3D Mozilla WebGL2RenderingContext.texSubImage3D documentation> 
 texSubImage3DCanvas ::
@@ -627,24 +582,20 @@
 texSubImage3DCanvas self target level xoffset yoffset zoffset
   format type' source
   = liftIO
-      (js_texSubImage3DCanvas (unWebGL2RenderingContext self) target
-         level
-         xoffset
-         yoffset
-         zoffset
+      (js_texSubImage3DCanvas (self) target level xoffset yoffset zoffset
          format
          type'
-         (maybe jsNull pToJSRef source))
+         (maybeToNullable source))
  
 foreign import javascript unsafe
         "$1[\"texSubImage3D\"]($2, $3, $4,\n$5, $6, $7, $8, $9)"
         js_texSubImage3DVideo ::
-        JSRef WebGL2RenderingContext ->
+        WebGL2RenderingContext ->
           GLenum ->
             GLint ->
               GLint ->
                 GLint ->
-                  GLint -> GLenum -> GLenum -> JSRef HTMLVideoElement -> IO ()
+                  GLint -> GLenum -> GLenum -> Nullable HTMLVideoElement -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.texSubImage3D Mozilla WebGL2RenderingContext.texSubImage3D documentation> 
 texSubImage3DVideo ::
@@ -658,18 +609,15 @@
 texSubImage3DVideo self target level xoffset yoffset zoffset format
   type' source
   = liftIO
-      (js_texSubImage3DVideo (unWebGL2RenderingContext self) target level
-         xoffset
-         yoffset
-         zoffset
+      (js_texSubImage3DVideo (self) target level xoffset yoffset zoffset
          format
          type'
-         (maybe jsNull pToJSRef source))
+         (maybeToNullable source))
  
 foreign import javascript unsafe
         "$1[\"copyTexSubImage3D\"]($2, $3,\n$4, $5, $6, $7, $8, $9, $10)"
         js_copyTexSubImage3D ::
-        JSRef WebGL2RenderingContext ->
+        WebGL2RenderingContext ->
           GLenum ->
             GLint ->
               GLint ->
@@ -686,11 +634,7 @@
 copyTexSubImage3D self target level xoffset yoffset zoffset x y
   width height
   = liftIO
-      (js_copyTexSubImage3D (unWebGL2RenderingContext self) target level
-         xoffset
-         yoffset
-         zoffset
-         x
+      (js_copyTexSubImage3D (self) target level xoffset yoffset zoffset x
          y
          width
          height)
@@ -698,13 +642,13 @@
 foreign import javascript unsafe
         "$1[\"compressedTexImage3D\"]($2,\n$3, $4, $5, $6, $7, $8, $9, $10)"
         js_compressedTexImage3D ::
-        JSRef WebGL2RenderingContext ->
+        WebGL2RenderingContext ->
           GLenum ->
             GLint ->
               GLenum ->
                 GLsizei ->
                   GLsizei ->
-                    GLsizei -> GLint -> GLsizei -> JSRef ArrayBufferView -> IO ()
+                    GLsizei -> GLint -> GLsizei -> Nullable ArrayBufferView -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.compressedTexImage3D Mozilla WebGL2RenderingContext.compressedTexImage3D documentation> 
 compressedTexImage3D ::
@@ -718,20 +662,17 @@
 compressedTexImage3D self target level internalformat width height
   depth border imageSize data'
   = liftIO
-      (js_compressedTexImage3D (unWebGL2RenderingContext self) target
-         level
-         internalformat
-         width
+      (js_compressedTexImage3D (self) target level internalformat width
          height
          depth
          border
          imageSize
-         (maybe jsNull (unArrayBufferView . toArrayBufferView) data'))
+         (maybeToNullable (fmap toArrayBufferView data')))
  
 foreign import javascript unsafe
         "$1[\"compressedTexSubImage3D\"]($2,\n$3, $4, $5, $6, $7, $8, $9, $10,\n$11, $12)"
         js_compressedTexSubImage3D ::
-        JSRef WebGL2RenderingContext ->
+        WebGL2RenderingContext ->
           GLenum ->
             GLint ->
               GLint ->
@@ -739,7 +680,7 @@
                   GLint ->
                     GLsizei ->
                       GLsizei ->
-                        GLsizei -> GLenum -> GLsizei -> JSRef ArrayBufferView -> IO ()
+                        GLsizei -> GLenum -> GLsizei -> Nullable ArrayBufferView -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.compressedTexSubImage3D Mozilla WebGL2RenderingContext.compressedTexSubImage3D documentation> 
 compressedTexSubImage3D ::
@@ -756,22 +697,19 @@
 compressedTexSubImage3D self target level xoffset yoffset zoffset
   width height depth format imageSize data'
   = liftIO
-      (js_compressedTexSubImage3D (unWebGL2RenderingContext self) target
-         level
-         xoffset
-         yoffset
+      (js_compressedTexSubImage3D (self) target level xoffset yoffset
          zoffset
          width
          height
          depth
          format
          imageSize
-         (maybe jsNull (unArrayBufferView . toArrayBufferView) data'))
+         (maybeToNullable (fmap toArrayBufferView data')))
  
 foreign import javascript unsafe
         "$1[\"getFragDataLocation\"]($2,\n$3)" js_getFragDataLocation ::
-        JSRef WebGL2RenderingContext ->
-          JSRef WebGLProgram -> JSString -> IO GLint
+        WebGL2RenderingContext ->
+          Nullable WebGLProgram -> JSString -> IO GLint
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.getFragDataLocation Mozilla WebGL2RenderingContext.getFragDataLocation documentation> 
 getFragDataLocation ::
@@ -779,14 +717,13 @@
                       WebGL2RenderingContext -> Maybe WebGLProgram -> name -> m GLint
 getFragDataLocation self program name
   = liftIO
-      (js_getFragDataLocation (unWebGL2RenderingContext self)
-         (maybe jsNull pToJSRef program)
+      (js_getFragDataLocation (self) (maybeToNullable program)
          (toJSString name))
  
 foreign import javascript unsafe "$1[\"uniform1ui\"]($2, $3)"
         js_uniform1ui ::
-        JSRef WebGL2RenderingContext ->
-          JSRef WebGLUniformLocation -> GLuint -> IO ()
+        WebGL2RenderingContext ->
+          Nullable WebGLUniformLocation -> GLuint -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.uniform1ui Mozilla WebGL2RenderingContext.uniform1ui documentation> 
 uniform1ui ::
@@ -794,15 +731,12 @@
              WebGL2RenderingContext ->
                Maybe WebGLUniformLocation -> GLuint -> m ()
 uniform1ui self location v0
-  = liftIO
-      (js_uniform1ui (unWebGL2RenderingContext self)
-         (maybe jsNull pToJSRef location)
-         v0)
+  = liftIO (js_uniform1ui (self) (maybeToNullable location) v0)
  
 foreign import javascript unsafe "$1[\"uniform2ui\"]($2, $3, $4)"
         js_uniform2ui ::
-        JSRef WebGL2RenderingContext ->
-          JSRef WebGLUniformLocation -> GLuint -> GLuint -> IO ()
+        WebGL2RenderingContext ->
+          Nullable WebGLUniformLocation -> GLuint -> GLuint -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.uniform2ui Mozilla WebGL2RenderingContext.uniform2ui documentation> 
 uniform2ui ::
@@ -810,16 +744,13 @@
              WebGL2RenderingContext ->
                Maybe WebGLUniformLocation -> GLuint -> GLuint -> m ()
 uniform2ui self location v0 v1
-  = liftIO
-      (js_uniform2ui (unWebGL2RenderingContext self)
-         (maybe jsNull pToJSRef location)
-         v0
-         v1)
+  = liftIO (js_uniform2ui (self) (maybeToNullable location) v0 v1)
  
 foreign import javascript unsafe
         "$1[\"uniform3ui\"]($2, $3, $4, $5)" js_uniform3ui ::
-        JSRef WebGL2RenderingContext ->
-          JSRef WebGLUniformLocation -> GLuint -> GLuint -> GLuint -> IO ()
+        WebGL2RenderingContext ->
+          Nullable WebGLUniformLocation ->
+            GLuint -> GLuint -> GLuint -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.uniform3ui Mozilla WebGL2RenderingContext.uniform3ui documentation> 
 uniform3ui ::
@@ -827,17 +758,12 @@
              WebGL2RenderingContext ->
                Maybe WebGLUniformLocation -> GLuint -> GLuint -> GLuint -> m ()
 uniform3ui self location v0 v1 v2
-  = liftIO
-      (js_uniform3ui (unWebGL2RenderingContext self)
-         (maybe jsNull pToJSRef location)
-         v0
-         v1
-         v2)
+  = liftIO (js_uniform3ui (self) (maybeToNullable location) v0 v1 v2)
  
 foreign import javascript unsafe
         "$1[\"uniform4ui\"]($2, $3, $4, $5,\n$6)" js_uniform4ui ::
-        JSRef WebGL2RenderingContext ->
-          JSRef WebGLUniformLocation ->
+        WebGL2RenderingContext ->
+          Nullable WebGLUniformLocation ->
             GLuint -> GLuint -> GLuint -> GLuint -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.uniform4ui Mozilla WebGL2RenderingContext.uniform4ui documentation> 
@@ -848,17 +774,12 @@
                  GLuint -> GLuint -> GLuint -> GLuint -> m ()
 uniform4ui self location v0 v1 v2 v3
   = liftIO
-      (js_uniform4ui (unWebGL2RenderingContext self)
-         (maybe jsNull pToJSRef location)
-         v0
-         v1
-         v2
-         v3)
+      (js_uniform4ui (self) (maybeToNullable location) v0 v1 v2 v3)
  
 foreign import javascript unsafe "$1[\"uniform1uiv\"]($2, $3)"
         js_uniform1uiv ::
-        JSRef WebGL2RenderingContext ->
-          JSRef WebGLUniformLocation -> JSRef Uint32Array -> IO ()
+        WebGL2RenderingContext ->
+          Nullable WebGLUniformLocation -> Nullable Uint32Array -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.uniform1uiv Mozilla WebGL2RenderingContext.uniform1uiv documentation> 
 uniform1uiv ::
@@ -867,14 +788,13 @@
                 Maybe WebGLUniformLocation -> Maybe value -> m ()
 uniform1uiv self location value
   = liftIO
-      (js_uniform1uiv (unWebGL2RenderingContext self)
-         (maybe jsNull pToJSRef location)
-         (maybe jsNull (unUint32Array . toUint32Array) value))
+      (js_uniform1uiv (self) (maybeToNullable location)
+         (maybeToNullable (fmap toUint32Array value)))
  
 foreign import javascript unsafe "$1[\"uniform2uiv\"]($2, $3)"
         js_uniform2uiv ::
-        JSRef WebGL2RenderingContext ->
-          JSRef WebGLUniformLocation -> JSRef Uint32Array -> IO ()
+        WebGL2RenderingContext ->
+          Nullable WebGLUniformLocation -> Nullable Uint32Array -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.uniform2uiv Mozilla WebGL2RenderingContext.uniform2uiv documentation> 
 uniform2uiv ::
@@ -883,14 +803,13 @@
                 Maybe WebGLUniformLocation -> Maybe value -> m ()
 uniform2uiv self location value
   = liftIO
-      (js_uniform2uiv (unWebGL2RenderingContext self)
-         (maybe jsNull pToJSRef location)
-         (maybe jsNull (unUint32Array . toUint32Array) value))
+      (js_uniform2uiv (self) (maybeToNullable location)
+         (maybeToNullable (fmap toUint32Array value)))
  
 foreign import javascript unsafe "$1[\"uniform3uiv\"]($2, $3)"
         js_uniform3uiv ::
-        JSRef WebGL2RenderingContext ->
-          JSRef WebGLUniformLocation -> JSRef Uint32Array -> IO ()
+        WebGL2RenderingContext ->
+          Nullable WebGLUniformLocation -> Nullable Uint32Array -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.uniform3uiv Mozilla WebGL2RenderingContext.uniform3uiv documentation> 
 uniform3uiv ::
@@ -899,14 +818,13 @@
                 Maybe WebGLUniformLocation -> Maybe value -> m ()
 uniform3uiv self location value
   = liftIO
-      (js_uniform3uiv (unWebGL2RenderingContext self)
-         (maybe jsNull pToJSRef location)
-         (maybe jsNull (unUint32Array . toUint32Array) value))
+      (js_uniform3uiv (self) (maybeToNullable location)
+         (maybeToNullable (fmap toUint32Array value)))
  
 foreign import javascript unsafe "$1[\"uniform4uiv\"]($2, $3)"
         js_uniform4uiv ::
-        JSRef WebGL2RenderingContext ->
-          JSRef WebGLUniformLocation -> JSRef Uint32Array -> IO ()
+        WebGL2RenderingContext ->
+          Nullable WebGLUniformLocation -> Nullable Uint32Array -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.uniform4uiv Mozilla WebGL2RenderingContext.uniform4uiv documentation> 
 uniform4uiv ::
@@ -915,15 +833,14 @@
                 Maybe WebGLUniformLocation -> Maybe value -> m ()
 uniform4uiv self location value
   = liftIO
-      (js_uniform4uiv (unWebGL2RenderingContext self)
-         (maybe jsNull pToJSRef location)
-         (maybe jsNull (unUint32Array . toUint32Array) value))
+      (js_uniform4uiv (self) (maybeToNullable location)
+         (maybeToNullable (fmap toUint32Array value)))
  
 foreign import javascript unsafe
         "$1[\"uniformMatrix2x3fv\"]($2, $3,\n$4)" js_uniformMatrix2x3fv ::
-        JSRef WebGL2RenderingContext ->
-          JSRef WebGLUniformLocation ->
-            GLboolean -> JSRef Float32Array -> IO ()
+        WebGL2RenderingContext ->
+          Nullable WebGLUniformLocation ->
+            GLboolean -> Nullable Float32Array -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.uniformMatrix2x3fv Mozilla WebGL2RenderingContext.uniformMatrix2x3fv documentation> 
 uniformMatrix2x3fv ::
@@ -932,16 +849,14 @@
                        Maybe WebGLUniformLocation -> GLboolean -> Maybe value -> m ()
 uniformMatrix2x3fv self location transpose value
   = liftIO
-      (js_uniformMatrix2x3fv (unWebGL2RenderingContext self)
-         (maybe jsNull pToJSRef location)
-         transpose
-         (maybe jsNull (unFloat32Array . toFloat32Array) value))
+      (js_uniformMatrix2x3fv (self) (maybeToNullable location) transpose
+         (maybeToNullable (fmap toFloat32Array value)))
  
 foreign import javascript unsafe
         "$1[\"uniformMatrix3x2fv\"]($2, $3,\n$4)" js_uniformMatrix3x2fv ::
-        JSRef WebGL2RenderingContext ->
-          JSRef WebGLUniformLocation ->
-            GLboolean -> JSRef Float32Array -> IO ()
+        WebGL2RenderingContext ->
+          Nullable WebGLUniformLocation ->
+            GLboolean -> Nullable Float32Array -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.uniformMatrix3x2fv Mozilla WebGL2RenderingContext.uniformMatrix3x2fv documentation> 
 uniformMatrix3x2fv ::
@@ -950,16 +865,14 @@
                        Maybe WebGLUniformLocation -> GLboolean -> Maybe value -> m ()
 uniformMatrix3x2fv self location transpose value
   = liftIO
-      (js_uniformMatrix3x2fv (unWebGL2RenderingContext self)
-         (maybe jsNull pToJSRef location)
-         transpose
-         (maybe jsNull (unFloat32Array . toFloat32Array) value))
+      (js_uniformMatrix3x2fv (self) (maybeToNullable location) transpose
+         (maybeToNullable (fmap toFloat32Array value)))
  
 foreign import javascript unsafe
         "$1[\"uniformMatrix2x4fv\"]($2, $3,\n$4)" js_uniformMatrix2x4fv ::
-        JSRef WebGL2RenderingContext ->
-          JSRef WebGLUniformLocation ->
-            GLboolean -> JSRef Float32Array -> IO ()
+        WebGL2RenderingContext ->
+          Nullable WebGLUniformLocation ->
+            GLboolean -> Nullable Float32Array -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.uniformMatrix2x4fv Mozilla WebGL2RenderingContext.uniformMatrix2x4fv documentation> 
 uniformMatrix2x4fv ::
@@ -968,16 +881,14 @@
                        Maybe WebGLUniformLocation -> GLboolean -> Maybe value -> m ()
 uniformMatrix2x4fv self location transpose value
   = liftIO
-      (js_uniformMatrix2x4fv (unWebGL2RenderingContext self)
-         (maybe jsNull pToJSRef location)
-         transpose
-         (maybe jsNull (unFloat32Array . toFloat32Array) value))
+      (js_uniformMatrix2x4fv (self) (maybeToNullable location) transpose
+         (maybeToNullable (fmap toFloat32Array value)))
  
 foreign import javascript unsafe
         "$1[\"uniformMatrix4x2fv\"]($2, $3,\n$4)" js_uniformMatrix4x2fv ::
-        JSRef WebGL2RenderingContext ->
-          JSRef WebGLUniformLocation ->
-            GLboolean -> JSRef Float32Array -> IO ()
+        WebGL2RenderingContext ->
+          Nullable WebGLUniformLocation ->
+            GLboolean -> Nullable Float32Array -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.uniformMatrix4x2fv Mozilla WebGL2RenderingContext.uniformMatrix4x2fv documentation> 
 uniformMatrix4x2fv ::
@@ -986,16 +897,14 @@
                        Maybe WebGLUniformLocation -> GLboolean -> Maybe value -> m ()
 uniformMatrix4x2fv self location transpose value
   = liftIO
-      (js_uniformMatrix4x2fv (unWebGL2RenderingContext self)
-         (maybe jsNull pToJSRef location)
-         transpose
-         (maybe jsNull (unFloat32Array . toFloat32Array) value))
+      (js_uniformMatrix4x2fv (self) (maybeToNullable location) transpose
+         (maybeToNullable (fmap toFloat32Array value)))
  
 foreign import javascript unsafe
         "$1[\"uniformMatrix3x4fv\"]($2, $3,\n$4)" js_uniformMatrix3x4fv ::
-        JSRef WebGL2RenderingContext ->
-          JSRef WebGLUniformLocation ->
-            GLboolean -> JSRef Float32Array -> IO ()
+        WebGL2RenderingContext ->
+          Nullable WebGLUniformLocation ->
+            GLboolean -> Nullable Float32Array -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.uniformMatrix3x4fv Mozilla WebGL2RenderingContext.uniformMatrix3x4fv documentation> 
 uniformMatrix3x4fv ::
@@ -1004,16 +913,14 @@
                        Maybe WebGLUniformLocation -> GLboolean -> Maybe value -> m ()
 uniformMatrix3x4fv self location transpose value
   = liftIO
-      (js_uniformMatrix3x4fv (unWebGL2RenderingContext self)
-         (maybe jsNull pToJSRef location)
-         transpose
-         (maybe jsNull (unFloat32Array . toFloat32Array) value))
+      (js_uniformMatrix3x4fv (self) (maybeToNullable location) transpose
+         (maybeToNullable (fmap toFloat32Array value)))
  
 foreign import javascript unsafe
         "$1[\"uniformMatrix4x3fv\"]($2, $3,\n$4)" js_uniformMatrix4x3fv ::
-        JSRef WebGL2RenderingContext ->
-          JSRef WebGLUniformLocation ->
-            GLboolean -> JSRef Float32Array -> IO ()
+        WebGL2RenderingContext ->
+          Nullable WebGLUniformLocation ->
+            GLboolean -> Nullable Float32Array -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.uniformMatrix4x3fv Mozilla WebGL2RenderingContext.uniformMatrix4x3fv documentation> 
 uniformMatrix4x3fv ::
@@ -1022,15 +929,13 @@
                        Maybe WebGLUniformLocation -> GLboolean -> Maybe value -> m ()
 uniformMatrix4x3fv self location transpose value
   = liftIO
-      (js_uniformMatrix4x3fv (unWebGL2RenderingContext self)
-         (maybe jsNull pToJSRef location)
-         transpose
-         (maybe jsNull (unFloat32Array . toFloat32Array) value))
+      (js_uniformMatrix4x3fv (self) (maybeToNullable location) transpose
+         (maybeToNullable (fmap toFloat32Array value)))
  
 foreign import javascript unsafe
         "$1[\"vertexAttribI4i\"]($2, $3,\n$4, $5, $6)" js_vertexAttribI4i
         ::
-        JSRef WebGL2RenderingContext ->
+        WebGL2RenderingContext ->
           GLuint -> GLint -> GLint -> GLint -> GLint -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.vertexAttribI4i Mozilla WebGL2RenderingContext.vertexAttribI4i documentation> 
@@ -1039,12 +944,11 @@
                   WebGL2RenderingContext ->
                     GLuint -> GLint -> GLint -> GLint -> GLint -> m ()
 vertexAttribI4i self index x y z w
-  = liftIO
-      (js_vertexAttribI4i (unWebGL2RenderingContext self) index x y z w)
+  = liftIO (js_vertexAttribI4i (self) index x y z w)
  
 foreign import javascript unsafe "$1[\"vertexAttribI4iv\"]($2, $3)"
         js_vertexAttribI4iv ::
-        JSRef WebGL2RenderingContext -> GLuint -> JSRef Int32Array -> IO ()
+        WebGL2RenderingContext -> GLuint -> Nullable Int32Array -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.vertexAttribI4iv Mozilla WebGL2RenderingContext.vertexAttribI4iv documentation> 
 vertexAttribI4iv ::
@@ -1052,13 +956,13 @@
                    WebGL2RenderingContext -> GLuint -> Maybe v -> m ()
 vertexAttribI4iv self index v
   = liftIO
-      (js_vertexAttribI4iv (unWebGL2RenderingContext self) index
-         (maybe jsNull (unInt32Array . toInt32Array) v))
+      (js_vertexAttribI4iv (self) index
+         (maybeToNullable (fmap toInt32Array v)))
  
 foreign import javascript unsafe
         "$1[\"vertexAttribI4ui\"]($2, $3,\n$4, $5, $6)" js_vertexAttribI4ui
         ::
-        JSRef WebGL2RenderingContext ->
+        WebGL2RenderingContext ->
           GLuint -> GLuint -> GLuint -> GLuint -> GLuint -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.vertexAttribI4ui Mozilla WebGL2RenderingContext.vertexAttribI4ui documentation> 
@@ -1067,13 +971,11 @@
                    WebGL2RenderingContext ->
                      GLuint -> GLuint -> GLuint -> GLuint -> GLuint -> m ()
 vertexAttribI4ui self index x y z w
-  = liftIO
-      (js_vertexAttribI4ui (unWebGL2RenderingContext self) index x y z w)
+  = liftIO (js_vertexAttribI4ui (self) index x y z w)
  
 foreign import javascript unsafe
         "$1[\"vertexAttribI4uiv\"]($2, $3)" js_vertexAttribI4uiv ::
-        JSRef WebGL2RenderingContext ->
-          GLuint -> JSRef Uint32Array -> IO ()
+        WebGL2RenderingContext -> GLuint -> Nullable Uint32Array -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.vertexAttribI4uiv Mozilla WebGL2RenderingContext.vertexAttribI4uiv documentation> 
 vertexAttribI4uiv ::
@@ -1081,13 +983,13 @@
                     WebGL2RenderingContext -> GLuint -> Maybe v -> m ()
 vertexAttribI4uiv self index v
   = liftIO
-      (js_vertexAttribI4uiv (unWebGL2RenderingContext self) index
-         (maybe jsNull (unUint32Array . toUint32Array) v))
+      (js_vertexAttribI4uiv (self) index
+         (maybeToNullable (fmap toUint32Array v)))
  
 foreign import javascript unsafe
         "$1[\"vertexAttribIPointer\"]($2,\n$3, $4, $5, $6)"
         js_vertexAttribIPointer ::
-        JSRef WebGL2RenderingContext ->
+        WebGL2RenderingContext ->
           GLuint -> GLint -> GLenum -> GLsizei -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.vertexAttribIPointer Mozilla WebGL2RenderingContext.vertexAttribIPointer documentation> 
@@ -1097,27 +999,23 @@
                          GLuint -> GLint -> GLenum -> GLsizei -> GLintptr -> m ()
 vertexAttribIPointer self index size type' stride offset
   = liftIO
-      (js_vertexAttribIPointer (unWebGL2RenderingContext self) index size
-         type'
-         stride
+      (js_vertexAttribIPointer (self) index size type' stride
          (fromIntegral offset))
  
 foreign import javascript unsafe
         "$1[\"vertexAttribDivisor\"]($2,\n$3)" js_vertexAttribDivisor ::
-        JSRef WebGL2RenderingContext -> GLuint -> GLuint -> IO ()
+        WebGL2RenderingContext -> GLuint -> GLuint -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.vertexAttribDivisor Mozilla WebGL2RenderingContext.vertexAttribDivisor documentation> 
 vertexAttribDivisor ::
                     (MonadIO m) => WebGL2RenderingContext -> GLuint -> GLuint -> m ()
 vertexAttribDivisor self index divisor
-  = liftIO
-      (js_vertexAttribDivisor (unWebGL2RenderingContext self) index
-         divisor)
+  = liftIO (js_vertexAttribDivisor (self) index divisor)
  
 foreign import javascript unsafe
         "$1[\"drawArraysInstanced\"]($2,\n$3, $4, $5)"
         js_drawArraysInstanced ::
-        JSRef WebGL2RenderingContext ->
+        WebGL2RenderingContext ->
           GLenum -> GLint -> GLsizei -> GLsizei -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.drawArraysInstanced Mozilla WebGL2RenderingContext.drawArraysInstanced documentation> 
@@ -1127,14 +1025,12 @@
                         GLenum -> GLint -> GLsizei -> GLsizei -> m ()
 drawArraysInstanced self mode first count instanceCount
   = liftIO
-      (js_drawArraysInstanced (unWebGL2RenderingContext self) mode first
-         count
-         instanceCount)
+      (js_drawArraysInstanced (self) mode first count instanceCount)
  
 foreign import javascript unsafe
         "$1[\"drawElementsInstanced\"]($2,\n$3, $4, $5, $6)"
         js_drawElementsInstanced ::
-        JSRef WebGL2RenderingContext ->
+        WebGL2RenderingContext ->
           GLenum -> GLsizei -> GLenum -> Double -> GLsizei -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.drawElementsInstanced Mozilla WebGL2RenderingContext.drawElementsInstanced documentation> 
@@ -1144,16 +1040,14 @@
                           GLenum -> GLsizei -> GLenum -> GLintptr -> GLsizei -> m ()
 drawElementsInstanced self mode count type' offset instanceCount
   = liftIO
-      (js_drawElementsInstanced (unWebGL2RenderingContext self) mode
-         count
-         type'
+      (js_drawElementsInstanced (self) mode count type'
          (fromIntegral offset)
          instanceCount)
  
 foreign import javascript unsafe
         "$1[\"drawRangeElements\"]($2, $3,\n$4, $5, $6, $7)"
         js_drawRangeElements ::
-        JSRef WebGL2RenderingContext ->
+        WebGL2RenderingContext ->
           GLenum -> GLuint -> GLuint -> GLsizei -> GLenum -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.drawRangeElements Mozilla WebGL2RenderingContext.drawRangeElements documentation> 
@@ -1163,29 +1057,23 @@
                       GLenum -> GLuint -> GLuint -> GLsizei -> GLenum -> GLintptr -> m ()
 drawRangeElements self mode start end count type' offset
   = liftIO
-      (js_drawRangeElements (unWebGL2RenderingContext self) mode start
-         end
-         count
-         type'
+      (js_drawRangeElements (self) mode start end count type'
          (fromIntegral offset))
  
 foreign import javascript unsafe "$1[\"drawBuffers\"]($2)"
-        js_drawBuffers ::
-        JSRef WebGL2RenderingContext -> JSRef [GLenum] -> IO ()
+        js_drawBuffers :: WebGL2RenderingContext -> JSRef -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.drawBuffers Mozilla WebGL2RenderingContext.drawBuffers documentation> 
 drawBuffers ::
             (MonadIO m) => WebGL2RenderingContext -> [GLenum] -> m ()
 drawBuffers self buffers
   = liftIO
-      (toJSRef buffers >>=
-         \ buffers' ->
-           js_drawBuffers (unWebGL2RenderingContext self) buffers')
+      (toJSRef buffers >>= \ buffers' -> js_drawBuffers (self) buffers')
  
 foreign import javascript unsafe
         "$1[\"clearBufferiv\"]($2, $3, $4)" js_clearBufferiv ::
-        JSRef WebGL2RenderingContext ->
-          GLenum -> GLint -> JSRef Int32Array -> IO ()
+        WebGL2RenderingContext ->
+          GLenum -> GLint -> Nullable Int32Array -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.clearBufferiv Mozilla WebGL2RenderingContext.clearBufferiv documentation> 
 clearBufferiv ::
@@ -1193,13 +1081,13 @@
                 WebGL2RenderingContext -> GLenum -> GLint -> Maybe value -> m ()
 clearBufferiv self buffer drawbuffer value
   = liftIO
-      (js_clearBufferiv (unWebGL2RenderingContext self) buffer drawbuffer
-         (maybe jsNull (unInt32Array . toInt32Array) value))
+      (js_clearBufferiv (self) buffer drawbuffer
+         (maybeToNullable (fmap toInt32Array value)))
  
 foreign import javascript unsafe
         "$1[\"clearBufferuiv\"]($2, $3, $4)" js_clearBufferuiv ::
-        JSRef WebGL2RenderingContext ->
-          GLenum -> GLint -> JSRef Uint32Array -> IO ()
+        WebGL2RenderingContext ->
+          GLenum -> GLint -> Nullable Uint32Array -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.clearBufferuiv Mozilla WebGL2RenderingContext.clearBufferuiv documentation> 
 clearBufferuiv ::
@@ -1207,14 +1095,13 @@
                  WebGL2RenderingContext -> GLenum -> GLint -> Maybe value -> m ()
 clearBufferuiv self buffer drawbuffer value
   = liftIO
-      (js_clearBufferuiv (unWebGL2RenderingContext self) buffer
-         drawbuffer
-         (maybe jsNull (unUint32Array . toUint32Array) value))
+      (js_clearBufferuiv (self) buffer drawbuffer
+         (maybeToNullable (fmap toUint32Array value)))
  
 foreign import javascript unsafe
         "$1[\"clearBufferfv\"]($2, $3, $4)" js_clearBufferfv ::
-        JSRef WebGL2RenderingContext ->
-          GLenum -> GLint -> JSRef Float32Array -> IO ()
+        WebGL2RenderingContext ->
+          GLenum -> GLint -> Nullable Float32Array -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.clearBufferfv Mozilla WebGL2RenderingContext.clearBufferfv documentation> 
 clearBufferfv ::
@@ -1222,12 +1109,12 @@
                 WebGL2RenderingContext -> GLenum -> GLint -> Maybe value -> m ()
 clearBufferfv self buffer drawbuffer value
   = liftIO
-      (js_clearBufferfv (unWebGL2RenderingContext self) buffer drawbuffer
-         (maybe jsNull (unFloat32Array . toFloat32Array) value))
+      (js_clearBufferfv (self) buffer drawbuffer
+         (maybeToNullable (fmap toFloat32Array value)))
  
 foreign import javascript unsafe
         "$1[\"clearBufferfi\"]($2, $3, $4,\n$5)" js_clearBufferfi ::
-        JSRef WebGL2RenderingContext ->
+        WebGL2RenderingContext ->
           GLenum -> GLint -> GLfloat -> GLint -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.clearBufferfi Mozilla WebGL2RenderingContext.clearBufferfi documentation> 
@@ -1236,150 +1123,126 @@
                 WebGL2RenderingContext ->
                   GLenum -> GLint -> GLfloat -> GLint -> m ()
 clearBufferfi self buffer drawbuffer depth stencil
-  = liftIO
-      (js_clearBufferfi (unWebGL2RenderingContext self) buffer drawbuffer
-         depth
-         stencil)
+  = liftIO (js_clearBufferfi (self) buffer drawbuffer depth stencil)
  
 foreign import javascript unsafe "$1[\"createQuery\"]()"
         js_createQuery ::
-        JSRef WebGL2RenderingContext -> IO (JSRef WebGLQuery)
+        WebGL2RenderingContext -> IO (Nullable WebGLQuery)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.createQuery Mozilla WebGL2RenderingContext.createQuery documentation> 
 createQuery ::
             (MonadIO m) => WebGL2RenderingContext -> m (Maybe WebGLQuery)
 createQuery self
-  = liftIO
-      ((js_createQuery (unWebGL2RenderingContext self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_createQuery (self)))
  
 foreign import javascript unsafe "$1[\"deleteQuery\"]($2)"
         js_deleteQuery ::
-        JSRef WebGL2RenderingContext -> JSRef WebGLQuery -> IO ()
+        WebGL2RenderingContext -> Nullable WebGLQuery -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.deleteQuery Mozilla WebGL2RenderingContext.deleteQuery documentation> 
 deleteQuery ::
             (MonadIO m) => WebGL2RenderingContext -> Maybe WebGLQuery -> m ()
 deleteQuery self query
-  = liftIO
-      (js_deleteQuery (unWebGL2RenderingContext self)
-         (maybe jsNull pToJSRef query))
+  = liftIO (js_deleteQuery (self) (maybeToNullable query))
  
 foreign import javascript unsafe "$1[\"isQuery\"]($2)" js_isQuery
-        :: JSRef WebGL2RenderingContext -> JSRef WebGLQuery -> IO GLboolean
+        :: WebGL2RenderingContext -> Nullable WebGLQuery -> IO GLboolean
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.isQuery Mozilla WebGL2RenderingContext.isQuery documentation> 
 isQuery ::
         (MonadIO m) =>
           WebGL2RenderingContext -> Maybe WebGLQuery -> m GLboolean
 isQuery self query
-  = liftIO
-      (js_isQuery (unWebGL2RenderingContext self)
-         (maybe jsNull pToJSRef query))
+  = liftIO (js_isQuery (self) (maybeToNullable query))
  
 foreign import javascript unsafe "$1[\"beginQuery\"]($2, $3)"
         js_beginQuery ::
-        JSRef WebGL2RenderingContext -> GLenum -> JSRef WebGLQuery -> IO ()
+        WebGL2RenderingContext -> GLenum -> Nullable WebGLQuery -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.beginQuery Mozilla WebGL2RenderingContext.beginQuery documentation> 
 beginQuery ::
            (MonadIO m) =>
              WebGL2RenderingContext -> GLenum -> Maybe WebGLQuery -> m ()
 beginQuery self target query
-  = liftIO
-      (js_beginQuery (unWebGL2RenderingContext self) target
-         (maybe jsNull pToJSRef query))
+  = liftIO (js_beginQuery (self) target (maybeToNullable query))
  
 foreign import javascript unsafe "$1[\"endQuery\"]($2)" js_endQuery
-        :: JSRef WebGL2RenderingContext -> GLenum -> IO ()
+        :: WebGL2RenderingContext -> GLenum -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.endQuery Mozilla WebGL2RenderingContext.endQuery documentation> 
 endQuery :: (MonadIO m) => WebGL2RenderingContext -> GLenum -> m ()
-endQuery self target
-  = liftIO (js_endQuery (unWebGL2RenderingContext self) target)
+endQuery self target = liftIO (js_endQuery (self) target)
  
 foreign import javascript unsafe "$1[\"getQuery\"]($2, $3)"
         js_getQuery ::
-        JSRef WebGL2RenderingContext ->
-          GLenum -> GLenum -> IO (JSRef WebGLQuery)
+        WebGL2RenderingContext ->
+          GLenum -> GLenum -> IO (Nullable WebGLQuery)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.getQuery Mozilla WebGL2RenderingContext.getQuery documentation> 
 getQuery ::
          (MonadIO m) =>
            WebGL2RenderingContext -> GLenum -> GLenum -> m (Maybe WebGLQuery)
 getQuery self target pname
-  = liftIO
-      ((js_getQuery (unWebGL2RenderingContext self) target pname) >>=
-         fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getQuery (self) target pname))
  
 foreign import javascript unsafe
         "$1[\"getQueryParameter\"]($2, $3)" js_getQueryParameter ::
-        JSRef WebGL2RenderingContext ->
-          JSRef WebGLQuery -> GLenum -> IO (JSRef a)
+        WebGL2RenderingContext -> Nullable WebGLQuery -> GLenum -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.getQueryParameter Mozilla WebGL2RenderingContext.getQueryParameter documentation> 
 getQueryParameter ::
                   (MonadIO m) =>
-                    WebGL2RenderingContext -> Maybe WebGLQuery -> GLenum -> m (JSRef a)
+                    WebGL2RenderingContext -> Maybe WebGLQuery -> GLenum -> m JSRef
 getQueryParameter self query pname
   = liftIO
-      (js_getQueryParameter (unWebGL2RenderingContext self)
-         (maybe jsNull pToJSRef query)
-         pname)
+      (js_getQueryParameter (self) (maybeToNullable query) pname)
  
 foreign import javascript unsafe "$1[\"createSampler\"]()"
         js_createSampler ::
-        JSRef WebGL2RenderingContext -> IO (JSRef WebGLSampler)
+        WebGL2RenderingContext -> IO (Nullable WebGLSampler)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.createSampler Mozilla WebGL2RenderingContext.createSampler documentation> 
 createSampler ::
               (MonadIO m) => WebGL2RenderingContext -> m (Maybe WebGLSampler)
 createSampler self
-  = liftIO
-      ((js_createSampler (unWebGL2RenderingContext self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_createSampler (self)))
  
 foreign import javascript unsafe "$1[\"deleteSampler\"]($2)"
         js_deleteSampler ::
-        JSRef WebGL2RenderingContext -> JSRef WebGLSampler -> IO ()
+        WebGL2RenderingContext -> Nullable WebGLSampler -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.deleteSampler Mozilla WebGL2RenderingContext.deleteSampler documentation> 
 deleteSampler ::
               (MonadIO m) => WebGL2RenderingContext -> Maybe WebGLSampler -> m ()
 deleteSampler self sampler
-  = liftIO
-      (js_deleteSampler (unWebGL2RenderingContext self)
-         (maybe jsNull pToJSRef sampler))
+  = liftIO (js_deleteSampler (self) (maybeToNullable sampler))
  
 foreign import javascript unsafe "$1[\"isSampler\"]($2)"
         js_isSampler ::
-        JSRef WebGL2RenderingContext -> JSRef WebGLSampler -> IO GLboolean
+        WebGL2RenderingContext -> Nullable WebGLSampler -> IO GLboolean
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.isSampler Mozilla WebGL2RenderingContext.isSampler documentation> 
 isSampler ::
           (MonadIO m) =>
             WebGL2RenderingContext -> Maybe WebGLSampler -> m GLboolean
 isSampler self sampler
-  = liftIO
-      (js_isSampler (unWebGL2RenderingContext self)
-         (maybe jsNull pToJSRef sampler))
+  = liftIO (js_isSampler (self) (maybeToNullable sampler))
  
 foreign import javascript unsafe "$1[\"bindSampler\"]($2, $3)"
         js_bindSampler ::
-        JSRef WebGL2RenderingContext ->
-          GLuint -> JSRef WebGLSampler -> IO ()
+        WebGL2RenderingContext -> GLuint -> Nullable WebGLSampler -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.bindSampler Mozilla WebGL2RenderingContext.bindSampler documentation> 
 bindSampler ::
             (MonadIO m) =>
               WebGL2RenderingContext -> GLuint -> Maybe WebGLSampler -> m ()
 bindSampler self unit sampler
-  = liftIO
-      (js_bindSampler (unWebGL2RenderingContext self) unit
-         (maybe jsNull pToJSRef sampler))
+  = liftIO (js_bindSampler (self) unit (maybeToNullable sampler))
  
 foreign import javascript unsafe
         "$1[\"samplerParameteri\"]($2, $3,\n$4)" js_samplerParameteri ::
-        JSRef WebGL2RenderingContext ->
-          JSRef WebGLSampler -> GLenum -> GLint -> IO ()
+        WebGL2RenderingContext ->
+          Nullable WebGLSampler -> GLenum -> GLint -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.samplerParameteri Mozilla WebGL2RenderingContext.samplerParameteri documentation> 
 samplerParameteri ::
@@ -1388,15 +1251,12 @@
                       Maybe WebGLSampler -> GLenum -> GLint -> m ()
 samplerParameteri self sampler pname param
   = liftIO
-      (js_samplerParameteri (unWebGL2RenderingContext self)
-         (maybe jsNull pToJSRef sampler)
-         pname
-         param)
+      (js_samplerParameteri (self) (maybeToNullable sampler) pname param)
  
 foreign import javascript unsafe
         "$1[\"samplerParameterf\"]($2, $3,\n$4)" js_samplerParameterf ::
-        JSRef WebGL2RenderingContext ->
-          JSRef WebGLSampler -> GLenum -> GLfloat -> IO ()
+        WebGL2RenderingContext ->
+          Nullable WebGLSampler -> GLenum -> GLfloat -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.samplerParameterf Mozilla WebGL2RenderingContext.samplerParameterf documentation> 
 samplerParameterf ::
@@ -1405,31 +1265,25 @@
                       Maybe WebGLSampler -> GLenum -> GLfloat -> m ()
 samplerParameterf self sampler pname param
   = liftIO
-      (js_samplerParameterf (unWebGL2RenderingContext self)
-         (maybe jsNull pToJSRef sampler)
-         pname
-         param)
+      (js_samplerParameterf (self) (maybeToNullable sampler) pname param)
  
 foreign import javascript unsafe
         "$1[\"getSamplerParameter\"]($2,\n$3)" js_getSamplerParameter ::
-        JSRef WebGL2RenderingContext ->
-          JSRef WebGLSampler -> GLenum -> IO (JSRef a)
+        WebGL2RenderingContext ->
+          Nullable WebGLSampler -> GLenum -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.getSamplerParameter Mozilla WebGL2RenderingContext.getSamplerParameter documentation> 
 getSamplerParameter ::
                     (MonadIO m) =>
-                      WebGL2RenderingContext ->
-                        Maybe WebGLSampler -> GLenum -> m (JSRef a)
+                      WebGL2RenderingContext -> Maybe WebGLSampler -> GLenum -> m JSRef
 getSamplerParameter self sampler pname
   = liftIO
-      (js_getSamplerParameter (unWebGL2RenderingContext self)
-         (maybe jsNull pToJSRef sampler)
-         pname)
+      (js_getSamplerParameter (self) (maybeToNullable sampler) pname)
  
 foreign import javascript unsafe "$1[\"fenceSync\"]($2, $3)"
         js_fenceSync ::
-        JSRef WebGL2RenderingContext ->
-          GLenum -> GLbitfield -> IO (JSRef WebGLSync)
+        WebGL2RenderingContext ->
+          GLenum -> GLbitfield -> IO (Nullable WebGLSync)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.fenceSync Mozilla WebGL2RenderingContext.fenceSync documentation> 
 fenceSync ::
@@ -1438,37 +1292,31 @@
               GLenum -> GLbitfield -> m (Maybe WebGLSync)
 fenceSync self condition flags
   = liftIO
-      ((js_fenceSync (unWebGL2RenderingContext self) condition flags) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_fenceSync (self) condition flags))
  
 foreign import javascript unsafe "$1[\"isSync\"]($2)" js_isSync ::
-        JSRef WebGL2RenderingContext -> JSRef WebGLSync -> IO GLboolean
+        WebGL2RenderingContext -> Nullable WebGLSync -> IO GLboolean
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.isSync Mozilla WebGL2RenderingContext.isSync documentation> 
 isSync ::
        (MonadIO m) =>
          WebGL2RenderingContext -> Maybe WebGLSync -> m GLboolean
-isSync self sync
-  = liftIO
-      (js_isSync (unWebGL2RenderingContext self)
-         (maybe jsNull pToJSRef sync))
+isSync self sync = liftIO (js_isSync (self) (maybeToNullable sync))
  
 foreign import javascript unsafe "$1[\"deleteSync\"]($2)"
         js_deleteSync ::
-        JSRef WebGL2RenderingContext -> JSRef WebGLSync -> IO ()
+        WebGL2RenderingContext -> Nullable WebGLSync -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.deleteSync Mozilla WebGL2RenderingContext.deleteSync documentation> 
 deleteSync ::
            (MonadIO m) => WebGL2RenderingContext -> Maybe WebGLSync -> m ()
 deleteSync self sync
-  = liftIO
-      (js_deleteSync (unWebGL2RenderingContext self)
-         (maybe jsNull pToJSRef sync))
+  = liftIO (js_deleteSync (self) (maybeToNullable sync))
  
 foreign import javascript unsafe
         "$1[\"clientWaitSync\"]($2, $3, $4)" js_clientWaitSync ::
-        JSRef WebGL2RenderingContext ->
-          JSRef WebGLSync -> GLbitfield -> Double -> IO GLenum
+        WebGL2RenderingContext ->
+          Nullable WebGLSync -> GLbitfield -> Double -> IO GLenum
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.clientWaitSync Mozilla WebGL2RenderingContext.clientWaitSync documentation> 
 clientWaitSync ::
@@ -1477,15 +1325,13 @@
                    Maybe WebGLSync -> GLbitfield -> GLuint64 -> m GLenum
 clientWaitSync self sync flags timeout
   = liftIO
-      (js_clientWaitSync (unWebGL2RenderingContext self)
-         (maybe jsNull pToJSRef sync)
-         flags
+      (js_clientWaitSync (self) (maybeToNullable sync) flags
          (fromIntegral timeout))
  
 foreign import javascript unsafe "$1[\"waitSync\"]($2, $3, $4)"
         js_waitSync ::
-        JSRef WebGL2RenderingContext ->
-          JSRef WebGLSync -> GLbitfield -> Double -> IO ()
+        WebGL2RenderingContext ->
+          Nullable WebGLSync -> GLbitfield -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.waitSync Mozilla WebGL2RenderingContext.waitSync documentation> 
 waitSync ::
@@ -1494,57 +1340,46 @@
              Maybe WebGLSync -> GLbitfield -> GLuint64 -> m ()
 waitSync self sync flags timeout
   = liftIO
-      (js_waitSync (unWebGL2RenderingContext self)
-         (maybe jsNull pToJSRef sync)
-         flags
+      (js_waitSync (self) (maybeToNullable sync) flags
          (fromIntegral timeout))
  
 foreign import javascript unsafe "$1[\"getSyncParameter\"]($2, $3)"
         js_getSyncParameter ::
-        JSRef WebGL2RenderingContext ->
-          JSRef WebGLSync -> GLenum -> IO (JSRef a)
+        WebGL2RenderingContext -> Nullable WebGLSync -> GLenum -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.getSyncParameter Mozilla WebGL2RenderingContext.getSyncParameter documentation> 
 getSyncParameter ::
                  (MonadIO m) =>
-                   WebGL2RenderingContext -> Maybe WebGLSync -> GLenum -> m (JSRef a)
+                   WebGL2RenderingContext -> Maybe WebGLSync -> GLenum -> m JSRef
 getSyncParameter self sync pname
-  = liftIO
-      (js_getSyncParameter (unWebGL2RenderingContext self)
-         (maybe jsNull pToJSRef sync)
-         pname)
+  = liftIO (js_getSyncParameter (self) (maybeToNullable sync) pname)
  
 foreign import javascript unsafe
         "$1[\"createTransformFeedback\"]()" js_createTransformFeedback ::
-        JSRef WebGL2RenderingContext -> IO (JSRef WebGLTransformFeedback)
+        WebGL2RenderingContext -> IO (Nullable WebGLTransformFeedback)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.createTransformFeedback Mozilla WebGL2RenderingContext.createTransformFeedback documentation> 
 createTransformFeedback ::
                         (MonadIO m) =>
                           WebGL2RenderingContext -> m (Maybe WebGLTransformFeedback)
 createTransformFeedback self
-  = liftIO
-      ((js_createTransformFeedback (unWebGL2RenderingContext self)) >>=
-         fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_createTransformFeedback (self)))
  
 foreign import javascript unsafe
         "$1[\"deleteTransformFeedback\"]($2)" js_deleteTransformFeedback ::
-        JSRef WebGL2RenderingContext ->
-          JSRef WebGLTransformFeedback -> IO ()
+        WebGL2RenderingContext -> Nullable WebGLTransformFeedback -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.deleteTransformFeedback Mozilla WebGL2RenderingContext.deleteTransformFeedback documentation> 
 deleteTransformFeedback ::
                         (MonadIO m) =>
                           WebGL2RenderingContext -> Maybe WebGLTransformFeedback -> m ()
 deleteTransformFeedback self id
-  = liftIO
-      (js_deleteTransformFeedback (unWebGL2RenderingContext self)
-         (maybe jsNull pToJSRef id))
+  = liftIO (js_deleteTransformFeedback (self) (maybeToNullable id))
  
 foreign import javascript unsafe "$1[\"isTransformFeedback\"]($2)"
         js_isTransformFeedback ::
-        JSRef WebGL2RenderingContext ->
-          JSRef WebGLTransformFeedback -> IO GLboolean
+        WebGL2RenderingContext ->
+          Nullable WebGLTransformFeedback -> IO GLboolean
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.isTransformFeedback Mozilla WebGL2RenderingContext.isTransformFeedback documentation> 
 isTransformFeedback ::
@@ -1552,15 +1387,13 @@
                       WebGL2RenderingContext ->
                         Maybe WebGLTransformFeedback -> m GLboolean
 isTransformFeedback self id
-  = liftIO
-      (js_isTransformFeedback (unWebGL2RenderingContext self)
-         (maybe jsNull pToJSRef id))
+  = liftIO (js_isTransformFeedback (self) (maybeToNullable id))
  
 foreign import javascript unsafe
         "$1[\"bindTransformFeedback\"]($2,\n$3)" js_bindTransformFeedback
         ::
-        JSRef WebGL2RenderingContext ->
-          GLenum -> JSRef WebGLTransformFeedback -> IO ()
+        WebGL2RenderingContext ->
+          GLenum -> Nullable WebGLTransformFeedback -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.bindTransformFeedback Mozilla WebGL2RenderingContext.bindTransformFeedback documentation> 
 bindTransformFeedback ::
@@ -1569,35 +1402,31 @@
                           GLenum -> Maybe WebGLTransformFeedback -> m ()
 bindTransformFeedback self target id
   = liftIO
-      (js_bindTransformFeedback (unWebGL2RenderingContext self) target
-         (maybe jsNull pToJSRef id))
+      (js_bindTransformFeedback (self) target (maybeToNullable id))
  
 foreign import javascript unsafe
         "$1[\"beginTransformFeedback\"]($2)" js_beginTransformFeedback ::
-        JSRef WebGL2RenderingContext -> GLenum -> IO ()
+        WebGL2RenderingContext -> GLenum -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.beginTransformFeedback Mozilla WebGL2RenderingContext.beginTransformFeedback documentation> 
 beginTransformFeedback ::
                        (MonadIO m) => WebGL2RenderingContext -> GLenum -> m ()
 beginTransformFeedback self primitiveMode
-  = liftIO
-      (js_beginTransformFeedback (unWebGL2RenderingContext self)
-         primitiveMode)
+  = liftIO (js_beginTransformFeedback (self) primitiveMode)
  
 foreign import javascript unsafe "$1[\"endTransformFeedback\"]()"
-        js_endTransformFeedback :: JSRef WebGL2RenderingContext -> IO ()
+        js_endTransformFeedback :: WebGL2RenderingContext -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.endTransformFeedback Mozilla WebGL2RenderingContext.endTransformFeedback documentation> 
 endTransformFeedback ::
                      (MonadIO m) => WebGL2RenderingContext -> m ()
-endTransformFeedback self
-  = liftIO (js_endTransformFeedback (unWebGL2RenderingContext self))
+endTransformFeedback self = liftIO (js_endTransformFeedback (self))
  
 foreign import javascript unsafe
         "$1[\"transformFeedbackVaryings\"]($2,\n$3, $4)"
         js_transformFeedbackVaryings ::
-        JSRef WebGL2RenderingContext ->
-          JSRef WebGLProgram -> JSRef [varyings] -> GLenum -> IO ()
+        WebGL2RenderingContext ->
+          Nullable WebGLProgram -> JSRef -> GLenum -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.transformFeedbackVaryings Mozilla WebGL2RenderingContext.transformFeedbackVaryings documentation> 
 transformFeedbackVaryings ::
@@ -1608,16 +1437,15 @@
   = liftIO
       (toJSRef varyings >>=
          \ varyings' ->
-           js_transformFeedbackVaryings (unWebGL2RenderingContext self)
-             (maybe jsNull pToJSRef program)
+           js_transformFeedbackVaryings (self) (maybeToNullable program)
              varyings'
          bufferMode)
  
 foreign import javascript unsafe
         "$1[\"getTransformFeedbackVarying\"]($2,\n$3)"
         js_getTransformFeedbackVarying ::
-        JSRef WebGL2RenderingContext ->
-          JSRef WebGLProgram -> GLuint -> IO (JSRef WebGLActiveInfo)
+        WebGL2RenderingContext ->
+          Nullable WebGLProgram -> GLuint -> IO (Nullable WebGLActiveInfo)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.getTransformFeedbackVarying Mozilla WebGL2RenderingContext.getTransformFeedbackVarying documentation> 
 getTransformFeedbackVarying ::
@@ -1626,36 +1454,33 @@
                                 Maybe WebGLProgram -> GLuint -> m (Maybe WebGLActiveInfo)
 getTransformFeedbackVarying self program index
   = liftIO
-      ((js_getTransformFeedbackVarying (unWebGL2RenderingContext self)
-          (maybe jsNull pToJSRef program)
-          index)
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_getTransformFeedbackVarying (self) (maybeToNullable program)
+            index))
  
 foreign import javascript unsafe "$1[\"pauseTransformFeedback\"]()"
-        js_pauseTransformFeedback :: JSRef WebGL2RenderingContext -> IO ()
+        js_pauseTransformFeedback :: WebGL2RenderingContext -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.pauseTransformFeedback Mozilla WebGL2RenderingContext.pauseTransformFeedback documentation> 
 pauseTransformFeedback ::
                        (MonadIO m) => WebGL2RenderingContext -> m ()
 pauseTransformFeedback self
-  = liftIO
-      (js_pauseTransformFeedback (unWebGL2RenderingContext self))
+  = liftIO (js_pauseTransformFeedback (self))
  
 foreign import javascript unsafe
         "$1[\"resumeTransformFeedback\"]()" js_resumeTransformFeedback ::
-        JSRef WebGL2RenderingContext -> IO ()
+        WebGL2RenderingContext -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.resumeTransformFeedback Mozilla WebGL2RenderingContext.resumeTransformFeedback documentation> 
 resumeTransformFeedback ::
                         (MonadIO m) => WebGL2RenderingContext -> m ()
 resumeTransformFeedback self
-  = liftIO
-      (js_resumeTransformFeedback (unWebGL2RenderingContext self))
+  = liftIO (js_resumeTransformFeedback (self))
  
 foreign import javascript unsafe
         "$1[\"bindBufferBase\"]($2, $3, $4)" js_bindBufferBase ::
-        JSRef WebGL2RenderingContext ->
-          GLenum -> GLuint -> JSRef WebGLBuffer -> IO ()
+        WebGL2RenderingContext ->
+          GLenum -> GLuint -> Nullable WebGLBuffer -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.bindBufferBase Mozilla WebGL2RenderingContext.bindBufferBase documentation> 
 bindBufferBase ::
@@ -1664,14 +1489,14 @@
                    GLenum -> GLuint -> Maybe WebGLBuffer -> m ()
 bindBufferBase self target index buffer
   = liftIO
-      (js_bindBufferBase (unWebGL2RenderingContext self) target index
-         (maybe jsNull pToJSRef buffer))
+      (js_bindBufferBase (self) target index (maybeToNullable buffer))
  
 foreign import javascript unsafe
         "$1[\"bindBufferRange\"]($2, $3,\n$4, $5, $6)" js_bindBufferRange
         ::
-        JSRef WebGL2RenderingContext ->
-          GLenum -> GLuint -> JSRef WebGLBuffer -> Double -> Double -> IO ()
+        WebGL2RenderingContext ->
+          GLenum ->
+            GLuint -> Nullable WebGLBuffer -> Double -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.bindBufferRange Mozilla WebGL2RenderingContext.bindBufferRange documentation> 
 bindBufferRange ::
@@ -1681,29 +1506,25 @@
                       GLuint -> Maybe WebGLBuffer -> GLintptr -> GLsizeiptr -> m ()
 bindBufferRange self target index buffer offset size
   = liftIO
-      (js_bindBufferRange (unWebGL2RenderingContext self) target index
-         (maybe jsNull pToJSRef buffer)
+      (js_bindBufferRange (self) target index (maybeToNullable buffer)
          (fromIntegral offset)
          (fromIntegral size))
  
 foreign import javascript unsafe
         "$1[\"getIndexedParameter\"]($2,\n$3)" js_getIndexedParameter ::
-        JSRef WebGL2RenderingContext -> GLenum -> GLuint -> IO (JSRef a)
+        WebGL2RenderingContext -> GLenum -> GLuint -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.getIndexedParameter Mozilla WebGL2RenderingContext.getIndexedParameter documentation> 
 getIndexedParameter ::
                     (MonadIO m) =>
-                      WebGL2RenderingContext -> GLenum -> GLuint -> m (JSRef a)
+                      WebGL2RenderingContext -> GLenum -> GLuint -> m JSRef
 getIndexedParameter self target index
-  = liftIO
-      (js_getIndexedParameter (unWebGL2RenderingContext self) target
-         index)
+  = liftIO (js_getIndexedParameter (self) target index)
  
 foreign import javascript unsafe
         "$1[\"getUniformIndices\"]($2, $3)" js_getUniformIndices ::
-        JSRef WebGL2RenderingContext ->
-          JSRef WebGLProgram ->
-            JSRef [uniformNames] -> IO (JSRef Uint32Array)
+        WebGL2RenderingContext ->
+          Nullable WebGLProgram -> JSRef -> IO (Nullable Uint32Array)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.getUniformIndices Mozilla WebGL2RenderingContext.getUniformIndices documentation> 
 getUniformIndices ::
@@ -1712,18 +1533,17 @@
                       Maybe WebGLProgram -> [uniformNames] -> m (Maybe Uint32Array)
 getUniformIndices self program uniformNames
   = liftIO
-      ((toJSRef uniformNames >>=
-          \ uniformNames' ->
-            js_getUniformIndices (unWebGL2RenderingContext self)
-              (maybe jsNull pToJSRef program)
-              uniformNames')
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (toJSRef uniformNames >>=
+            \ uniformNames' ->
+              js_getUniformIndices (self) (maybeToNullable program)
+                uniformNames'))
  
 foreign import javascript unsafe
         "$1[\"getActiveUniforms\"]($2, $3,\n$4)" js_getActiveUniforms ::
-        JSRef WebGL2RenderingContext ->
-          JSRef WebGLProgram ->
-            JSRef Uint32Array -> GLenum -> IO (JSRef Int32Array)
+        WebGL2RenderingContext ->
+          Nullable WebGLProgram ->
+            Nullable Uint32Array -> GLenum -> IO (Nullable Int32Array)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.getActiveUniforms Mozilla WebGL2RenderingContext.getActiveUniforms documentation> 
 getActiveUniforms ::
@@ -1733,16 +1553,15 @@
                         Maybe uniformIndices -> GLenum -> m (Maybe Int32Array)
 getActiveUniforms self program uniformIndices pname
   = liftIO
-      ((js_getActiveUniforms (unWebGL2RenderingContext self)
-          (maybe jsNull pToJSRef program)
-          (maybe jsNull (unUint32Array . toUint32Array) uniformIndices)
-          pname)
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_getActiveUniforms (self) (maybeToNullable program)
+            (maybeToNullable (fmap toUint32Array uniformIndices))
+            pname))
  
 foreign import javascript unsafe
         "$1[\"getUniformBlockIndex\"]($2,\n$3)" js_getUniformBlockIndex ::
-        JSRef WebGL2RenderingContext ->
-          JSRef WebGLProgram -> JSString -> IO GLuint
+        WebGL2RenderingContext ->
+          Nullable WebGLProgram -> JSString -> IO GLuint
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.getUniformBlockIndex Mozilla WebGL2RenderingContext.getUniformBlockIndex documentation> 
 getUniformBlockIndex ::
@@ -1751,50 +1570,46 @@
                          Maybe WebGLProgram -> uniformBlockName -> m GLuint
 getUniformBlockIndex self program uniformBlockName
   = liftIO
-      (js_getUniformBlockIndex (unWebGL2RenderingContext self)
-         (maybe jsNull pToJSRef program)
+      (js_getUniformBlockIndex (self) (maybeToNullable program)
          (toJSString uniformBlockName))
  
 foreign import javascript unsafe
         "$1[\"getActiveUniformBlockParameter\"]($2,\n$3, $4)"
         js_getActiveUniformBlockParameter ::
-        JSRef WebGL2RenderingContext ->
-          JSRef WebGLProgram -> GLuint -> GLenum -> IO (JSRef a)
+        WebGL2RenderingContext ->
+          Nullable WebGLProgram -> GLuint -> GLenum -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.getActiveUniformBlockParameter Mozilla WebGL2RenderingContext.getActiveUniformBlockParameter documentation> 
 getActiveUniformBlockParameter ::
                                (MonadIO m) =>
                                  WebGL2RenderingContext ->
-                                   Maybe WebGLProgram -> GLuint -> GLenum -> m (JSRef a)
+                                   Maybe WebGLProgram -> GLuint -> GLenum -> m JSRef
 getActiveUniformBlockParameter self program uniformBlockIndex pname
   = liftIO
-      (js_getActiveUniformBlockParameter (unWebGL2RenderingContext self)
-         (maybe jsNull pToJSRef program)
+      (js_getActiveUniformBlockParameter (self) (maybeToNullable program)
          uniformBlockIndex
          pname)
  
 foreign import javascript unsafe
         "$1[\"getActiveUniformBlockName\"]($2,\n$3)"
         js_getActiveUniformBlockName ::
-        JSRef WebGL2RenderingContext ->
-          JSRef WebGLProgram -> GLuint -> IO (JSRef a)
+        WebGL2RenderingContext ->
+          Nullable WebGLProgram -> GLuint -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.getActiveUniformBlockName Mozilla WebGL2RenderingContext.getActiveUniformBlockName documentation> 
 getActiveUniformBlockName ::
                           (MonadIO m) =>
-                            WebGL2RenderingContext ->
-                              Maybe WebGLProgram -> GLuint -> m (JSRef a)
+                            WebGL2RenderingContext -> Maybe WebGLProgram -> GLuint -> m JSRef
 getActiveUniformBlockName self program uniformBlockIndex
   = liftIO
-      (js_getActiveUniformBlockName (unWebGL2RenderingContext self)
-         (maybe jsNull pToJSRef program)
+      (js_getActiveUniformBlockName (self) (maybeToNullable program)
          uniformBlockIndex)
  
 foreign import javascript unsafe
         "$1[\"uniformBlockBinding\"]($2,\n$3, $4)" js_uniformBlockBinding
         ::
-        JSRef WebGL2RenderingContext ->
-          JSRef WebGLProgram -> GLuint -> GLuint -> IO ()
+        WebGL2RenderingContext ->
+          Nullable WebGLProgram -> GLuint -> GLuint -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.uniformBlockBinding Mozilla WebGL2RenderingContext.uniformBlockBinding documentation> 
 uniformBlockBinding ::
@@ -1804,28 +1619,24 @@
 uniformBlockBinding self program uniformBlockIndex
   uniformBlockBinding
   = liftIO
-      (js_uniformBlockBinding (unWebGL2RenderingContext self)
-         (maybe jsNull pToJSRef program)
+      (js_uniformBlockBinding (self) (maybeToNullable program)
          uniformBlockIndex
          uniformBlockBinding)
  
 foreign import javascript unsafe "$1[\"createVertexArray\"]()"
         js_createVertexArray ::
-        JSRef WebGL2RenderingContext -> IO (JSRef WebGLVertexArrayObject)
+        WebGL2RenderingContext -> IO (Nullable WebGLVertexArrayObject)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.createVertexArray Mozilla WebGL2RenderingContext.createVertexArray documentation> 
 createVertexArray ::
                   (MonadIO m) =>
                     WebGL2RenderingContext -> m (Maybe WebGLVertexArrayObject)
 createVertexArray self
-  = liftIO
-      ((js_createVertexArray (unWebGL2RenderingContext self)) >>=
-         fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_createVertexArray (self)))
  
 foreign import javascript unsafe "$1[\"deleteVertexArray\"]($2)"
         js_deleteVertexArray ::
-        JSRef WebGL2RenderingContext ->
-          JSRef WebGLVertexArrayObject -> IO ()
+        WebGL2RenderingContext -> Nullable WebGLVertexArrayObject -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.deleteVertexArray Mozilla WebGL2RenderingContext.deleteVertexArray documentation> 
 deleteVertexArray ::
@@ -1833,13 +1644,12 @@
                     WebGL2RenderingContext -> Maybe WebGLVertexArrayObject -> m ()
 deleteVertexArray self vertexArray
   = liftIO
-      (js_deleteVertexArray (unWebGL2RenderingContext self)
-         (maybe jsNull pToJSRef vertexArray))
+      (js_deleteVertexArray (self) (maybeToNullable vertexArray))
  
 foreign import javascript unsafe "$1[\"isVertexArray\"]($2)"
         js_isVertexArray ::
-        JSRef WebGL2RenderingContext ->
-          JSRef WebGLVertexArrayObject -> IO GLboolean
+        WebGL2RenderingContext ->
+          Nullable WebGLVertexArrayObject -> IO GLboolean
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.isVertexArray Mozilla WebGL2RenderingContext.isVertexArray documentation> 
 isVertexArray ::
@@ -1847,23 +1657,18 @@
                 WebGL2RenderingContext ->
                   Maybe WebGLVertexArrayObject -> m GLboolean
 isVertexArray self vertexArray
-  = liftIO
-      (js_isVertexArray (unWebGL2RenderingContext self)
-         (maybe jsNull pToJSRef vertexArray))
+  = liftIO (js_isVertexArray (self) (maybeToNullable vertexArray))
  
 foreign import javascript unsafe "$1[\"bindVertexArray\"]($2)"
         js_bindVertexArray ::
-        JSRef WebGL2RenderingContext ->
-          JSRef WebGLVertexArrayObject -> IO ()
+        WebGL2RenderingContext -> Nullable WebGLVertexArrayObject -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext.bindVertexArray Mozilla WebGL2RenderingContext.bindVertexArray documentation> 
 bindVertexArray ::
                 (MonadIO m) =>
                   WebGL2RenderingContext -> Maybe WebGLVertexArrayObject -> m ()
 bindVertexArray self vertexArray
-  = liftIO
-      (js_bindVertexArray (unWebGL2RenderingContext self)
-         (maybe jsNull pToJSRef vertexArray))
+  = liftIO (js_bindVertexArray (self) (maybeToNullable vertexArray))
 pattern READ_BUFFER = 3074
 pattern UNPACK_ROW_LENGTH = 3314
 pattern UNPACK_SKIP_ROWS = 3315
diff --git a/src/GHCJS/DOM/JSFFI/Generated/WebGLActiveInfo.hs b/src/GHCJS/DOM/JSFFI/Generated/WebGLActiveInfo.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/WebGLActiveInfo.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/WebGLActiveInfo.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,24 +19,23 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"size\"]" js_getSize ::
-        JSRef WebGLActiveInfo -> IO Int
+        WebGLActiveInfo -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLActiveInfo.size Mozilla WebGLActiveInfo.size documentation> 
 getSize :: (MonadIO m) => WebGLActiveInfo -> m Int
-getSize self = liftIO (js_getSize (unWebGLActiveInfo self))
+getSize self = liftIO (js_getSize (self))
  
 foreign import javascript unsafe "$1[\"type\"]" js_getType ::
-        JSRef WebGLActiveInfo -> IO Word
+        WebGLActiveInfo -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLActiveInfo.type Mozilla WebGLActiveInfo.type documentation> 
 getType :: (MonadIO m) => WebGLActiveInfo -> m Word
-getType self = liftIO (js_getType (unWebGLActiveInfo self))
+getType self = liftIO (js_getType (self))
  
 foreign import javascript unsafe "$1[\"name\"]" js_getName ::
-        JSRef WebGLActiveInfo -> IO JSString
+        WebGLActiveInfo -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLActiveInfo.name Mozilla WebGLActiveInfo.name documentation> 
 getName ::
         (MonadIO m, FromJSString result) => WebGLActiveInfo -> m result
-getName self
-  = liftIO (fromJSString <$> (js_getName (unWebGLActiveInfo self)))
+getName self = liftIO (fromJSString <$> (js_getName (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/WebGLCompressedTextureATC.hs b/src/GHCJS/DOM/JSFFI/Generated/WebGLCompressedTextureATC.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/WebGLCompressedTextureATC.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/WebGLCompressedTextureATC.hs
@@ -8,7 +8,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/WebGLCompressedTexturePVRTC.hs b/src/GHCJS/DOM/JSFFI/Generated/WebGLCompressedTexturePVRTC.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/WebGLCompressedTexturePVRTC.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/WebGLCompressedTexturePVRTC.hs
@@ -9,7 +9,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/WebGLCompressedTextureS3TC.hs b/src/GHCJS/DOM/JSFFI/Generated/WebGLCompressedTextureS3TC.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/WebGLCompressedTextureS3TC.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/WebGLCompressedTextureS3TC.hs
@@ -8,7 +8,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/WebGLContextAttributes.hs b/src/GHCJS/DOM/JSFFI/Generated/WebGLContextAttributes.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/WebGLContextAttributes.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/WebGLContextAttributes.hs
@@ -12,7 +12,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -26,110 +26,97 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"alpha\"] = $2;" js_setAlpha
-        :: JSRef WebGLContextAttributes -> Bool -> IO ()
+        :: WebGLContextAttributes -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLContextAttributes.alpha Mozilla WebGLContextAttributes.alpha documentation> 
 setAlpha :: (MonadIO m) => WebGLContextAttributes -> Bool -> m ()
-setAlpha self val
-  = liftIO (js_setAlpha (unWebGLContextAttributes self) val)
+setAlpha self val = liftIO (js_setAlpha (self) val)
  
 foreign import javascript unsafe "($1[\"alpha\"] ? 1 : 0)"
-        js_getAlpha :: JSRef WebGLContextAttributes -> IO Bool
+        js_getAlpha :: WebGLContextAttributes -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLContextAttributes.alpha Mozilla WebGLContextAttributes.alpha documentation> 
 getAlpha :: (MonadIO m) => WebGLContextAttributes -> m Bool
-getAlpha self
-  = liftIO (js_getAlpha (unWebGLContextAttributes self))
+getAlpha self = liftIO (js_getAlpha (self))
  
 foreign import javascript unsafe "$1[\"depth\"] = $2;" js_setDepth
-        :: JSRef WebGLContextAttributes -> Bool -> IO ()
+        :: WebGLContextAttributes -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLContextAttributes.depth Mozilla WebGLContextAttributes.depth documentation> 
 setDepth :: (MonadIO m) => WebGLContextAttributes -> Bool -> m ()
-setDepth self val
-  = liftIO (js_setDepth (unWebGLContextAttributes self) val)
+setDepth self val = liftIO (js_setDepth (self) val)
  
 foreign import javascript unsafe "($1[\"depth\"] ? 1 : 0)"
-        js_getDepth :: JSRef WebGLContextAttributes -> IO Bool
+        js_getDepth :: WebGLContextAttributes -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLContextAttributes.depth Mozilla WebGLContextAttributes.depth documentation> 
 getDepth :: (MonadIO m) => WebGLContextAttributes -> m Bool
-getDepth self
-  = liftIO (js_getDepth (unWebGLContextAttributes self))
+getDepth self = liftIO (js_getDepth (self))
  
 foreign import javascript unsafe "$1[\"stencil\"] = $2;"
-        js_setStencil :: JSRef WebGLContextAttributes -> Bool -> IO ()
+        js_setStencil :: WebGLContextAttributes -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLContextAttributes.stencil Mozilla WebGLContextAttributes.stencil documentation> 
 setStencil :: (MonadIO m) => WebGLContextAttributes -> Bool -> m ()
-setStencil self val
-  = liftIO (js_setStencil (unWebGLContextAttributes self) val)
+setStencil self val = liftIO (js_setStencil (self) val)
  
 foreign import javascript unsafe "($1[\"stencil\"] ? 1 : 0)"
-        js_getStencil :: JSRef WebGLContextAttributes -> IO Bool
+        js_getStencil :: WebGLContextAttributes -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLContextAttributes.stencil Mozilla WebGLContextAttributes.stencil documentation> 
 getStencil :: (MonadIO m) => WebGLContextAttributes -> m Bool
-getStencil self
-  = liftIO (js_getStencil (unWebGLContextAttributes self))
+getStencil self = liftIO (js_getStencil (self))
  
 foreign import javascript unsafe "$1[\"antialias\"] = $2;"
-        js_setAntialias :: JSRef WebGLContextAttributes -> Bool -> IO ()
+        js_setAntialias :: WebGLContextAttributes -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLContextAttributes.antialias Mozilla WebGLContextAttributes.antialias documentation> 
 setAntialias ::
              (MonadIO m) => WebGLContextAttributes -> Bool -> m ()
-setAntialias self val
-  = liftIO (js_setAntialias (unWebGLContextAttributes self) val)
+setAntialias self val = liftIO (js_setAntialias (self) val)
  
 foreign import javascript unsafe "($1[\"antialias\"] ? 1 : 0)"
-        js_getAntialias :: JSRef WebGLContextAttributes -> IO Bool
+        js_getAntialias :: WebGLContextAttributes -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLContextAttributes.antialias Mozilla WebGLContextAttributes.antialias documentation> 
 getAntialias :: (MonadIO m) => WebGLContextAttributes -> m Bool
-getAntialias self
-  = liftIO (js_getAntialias (unWebGLContextAttributes self))
+getAntialias self = liftIO (js_getAntialias (self))
  
 foreign import javascript unsafe "$1[\"premultipliedAlpha\"] = $2;"
-        js_setPremultipliedAlpha ::
-        JSRef WebGLContextAttributes -> Bool -> IO ()
+        js_setPremultipliedAlpha :: WebGLContextAttributes -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLContextAttributes.premultipliedAlpha Mozilla WebGLContextAttributes.premultipliedAlpha documentation> 
 setPremultipliedAlpha ::
                       (MonadIO m) => WebGLContextAttributes -> Bool -> m ()
 setPremultipliedAlpha self val
-  = liftIO
-      (js_setPremultipliedAlpha (unWebGLContextAttributes self) val)
+  = liftIO (js_setPremultipliedAlpha (self) val)
  
 foreign import javascript unsafe
         "($1[\"premultipliedAlpha\"] ? 1 : 0)" js_getPremultipliedAlpha ::
-        JSRef WebGLContextAttributes -> IO Bool
+        WebGLContextAttributes -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLContextAttributes.premultipliedAlpha Mozilla WebGLContextAttributes.premultipliedAlpha documentation> 
 getPremultipliedAlpha ::
                       (MonadIO m) => WebGLContextAttributes -> m Bool
 getPremultipliedAlpha self
-  = liftIO (js_getPremultipliedAlpha (unWebGLContextAttributes self))
+  = liftIO (js_getPremultipliedAlpha (self))
  
 foreign import javascript unsafe
         "$1[\"preserveDrawingBuffer\"] = $2;" js_setPreserveDrawingBuffer
-        :: JSRef WebGLContextAttributes -> Bool -> IO ()
+        :: WebGLContextAttributes -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLContextAttributes.preserveDrawingBuffer Mozilla WebGLContextAttributes.preserveDrawingBuffer documentation> 
 setPreserveDrawingBuffer ::
                          (MonadIO m) => WebGLContextAttributes -> Bool -> m ()
 setPreserveDrawingBuffer self val
-  = liftIO
-      (js_setPreserveDrawingBuffer (unWebGLContextAttributes self) val)
+  = liftIO (js_setPreserveDrawingBuffer (self) val)
  
 foreign import javascript unsafe
         "($1[\"preserveDrawingBuffer\"] ? 1 : 0)"
-        js_getPreserveDrawingBuffer ::
-        JSRef WebGLContextAttributes -> IO Bool
+        js_getPreserveDrawingBuffer :: WebGLContextAttributes -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLContextAttributes.preserveDrawingBuffer Mozilla WebGLContextAttributes.preserveDrawingBuffer documentation> 
 getPreserveDrawingBuffer ::
                          (MonadIO m) => WebGLContextAttributes -> m Bool
 getPreserveDrawingBuffer self
-  = liftIO
-      (js_getPreserveDrawingBuffer (unWebGLContextAttributes self))
+  = liftIO (js_getPreserveDrawingBuffer (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/WebGLContextEvent.hs b/src/GHCJS/DOM/JSFFI/Generated/WebGLContextEvent.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/WebGLContextEvent.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/WebGLContextEvent.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,11 +19,10 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"statusMessage\"]"
-        js_getStatusMessage :: JSRef WebGLContextEvent -> IO JSString
+        js_getStatusMessage :: WebGLContextEvent -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLContextEvent.statusMessage Mozilla WebGLContextEvent.statusMessage documentation> 
 getStatusMessage ::
                  (MonadIO m, FromJSString result) => WebGLContextEvent -> m result
 getStatusMessage self
-  = liftIO
-      (fromJSString <$> (js_getStatusMessage (unWebGLContextEvent self)))
+  = liftIO (fromJSString <$> (js_getStatusMessage (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/WebGLDebugRendererInfo.hs b/src/GHCJS/DOM/JSFFI/Generated/WebGLDebugRendererInfo.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/WebGLDebugRendererInfo.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/WebGLDebugRendererInfo.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/WebGLDebugShaders.hs b/src/GHCJS/DOM/JSFFI/Generated/WebGLDebugShaders.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/WebGLDebugShaders.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/WebGLDebugShaders.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -21,8 +21,7 @@
 foreign import javascript unsafe
         "$1[\"getTranslatedShaderSource\"]($2)"
         js_getTranslatedShaderSource ::
-        JSRef WebGLDebugShaders ->
-          JSRef WebGLShader -> IO (JSRef (Maybe JSString))
+        WebGLDebugShaders -> Nullable WebGLShader -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLDebugShaders.getTranslatedShaderSource Mozilla WebGLDebugShaders.getTranslatedShaderSource documentation> 
 getTranslatedShaderSource ::
@@ -31,5 +30,4 @@
 getTranslatedShaderSource self shader
   = liftIO
       (fromMaybeJSString <$>
-         (js_getTranslatedShaderSource (unWebGLDebugShaders self)
-            (maybe jsNull pToJSRef shader)))
+         (js_getTranslatedShaderSource (self) (maybeToNullable shader)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/WebGLDepthTexture.hs b/src/GHCJS/DOM/JSFFI/Generated/WebGLDepthTexture.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/WebGLDepthTexture.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/WebGLDepthTexture.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/WebGLDrawBuffers.hs b/src/GHCJS/DOM/JSFFI/Generated/WebGLDrawBuffers.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/WebGLDrawBuffers.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/WebGLDrawBuffers.hs
@@ -23,7 +23,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -37,8 +37,7 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"drawBuffersWEBGL\"]($2)"
-        js_drawBuffersWEBGL ::
-        JSRef WebGLDrawBuffers -> JSRef [GLenum] -> IO ()
+        js_drawBuffersWEBGL :: WebGLDrawBuffers -> JSRef -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLDrawBuffers.drawBuffersWEBGL Mozilla WebGLDrawBuffers.drawBuffersWEBGL documentation> 
 drawBuffersWEBGL ::
@@ -46,8 +45,7 @@
 drawBuffersWEBGL self buffers
   = liftIO
       (toJSRef buffers >>=
-         \ buffers' ->
-           js_drawBuffersWEBGL (unWebGLDrawBuffers self) buffers')
+         \ buffers' -> js_drawBuffersWEBGL (self) buffers')
 pattern COLOR_ATTACHMENT0_WEBGL = 36064
 pattern COLOR_ATTACHMENT1_WEBGL = 36065
 pattern COLOR_ATTACHMENT2_WEBGL = 36066
diff --git a/src/GHCJS/DOM/JSFFI/Generated/WebGLLoseContext.hs b/src/GHCJS/DOM/JSFFI/Generated/WebGLLoseContext.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/WebGLLoseContext.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/WebGLLoseContext.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,17 +19,15 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"loseContext\"]()"
-        js_loseContext :: JSRef WebGLLoseContext -> IO ()
+        js_loseContext :: WebGLLoseContext -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLLoseContext.loseContext Mozilla WebGLLoseContext.loseContext documentation> 
 loseContext :: (MonadIO m) => WebGLLoseContext -> m ()
-loseContext self
-  = liftIO (js_loseContext (unWebGLLoseContext self))
+loseContext self = liftIO (js_loseContext (self))
  
 foreign import javascript unsafe "$1[\"restoreContext\"]()"
-        js_restoreContext :: JSRef WebGLLoseContext -> IO ()
+        js_restoreContext :: WebGLLoseContext -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLLoseContext.restoreContext Mozilla WebGLLoseContext.restoreContext documentation> 
 restoreContext :: (MonadIO m) => WebGLLoseContext -> m ()
-restoreContext self
-  = liftIO (js_restoreContext (unWebGLLoseContext self))
+restoreContext self = liftIO (js_restoreContext (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/WebGLRenderingContextBase.hs b/src/GHCJS/DOM/JSFFI/Generated/WebGLRenderingContextBase.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/WebGLRenderingContextBase.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/WebGLRenderingContextBase.hs
@@ -230,2890 +230,2572 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
-import GHCJS.Foreign (jsNull)
-import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
-import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
-import GHCJS.Marshal.Pure (PToJSRef(..), PFromJSRef(..))
-import Control.Monad.IO.Class (MonadIO(..))
-import Data.Int (Int64)
-import Data.Word (Word, Word64)
-import GHCJS.DOM.Types
-import Control.Applicative ((<$>))
-import GHCJS.DOM.EventTargetClosures (EventName, unsafeEventName)
-import GHCJS.DOM.Enums
- 
-foreign import javascript unsafe "$1[\"activeTexture\"]($2)"
-        js_activeTexture ::
-        JSRef WebGLRenderingContextBase -> GLenum -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.activeTexture Mozilla WebGLRenderingContextBase.activeTexture documentation> 
-activeTexture ::
-              (MonadIO m, IsWebGLRenderingContextBase self) =>
-                self -> GLenum -> m ()
-activeTexture self texture
-  = liftIO
-      (js_activeTexture
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         texture)
- 
-foreign import javascript unsafe "$1[\"attachShader\"]($2, $3)"
-        js_attachShader ::
-        JSRef WebGLRenderingContextBase ->
-          JSRef WebGLProgram -> JSRef WebGLShader -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.attachShader Mozilla WebGLRenderingContextBase.attachShader documentation> 
-attachShader ::
-             (MonadIO m, IsWebGLRenderingContextBase self) =>
-               self -> Maybe WebGLProgram -> Maybe WebGLShader -> m ()
-attachShader self program shader
-  = liftIO
-      (js_attachShader
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         (maybe jsNull pToJSRef program)
-         (maybe jsNull pToJSRef shader))
- 
-foreign import javascript unsafe
-        "$1[\"bindAttribLocation\"]($2, $3,\n$4)" js_bindAttribLocation ::
-        JSRef WebGLRenderingContextBase ->
-          JSRef WebGLProgram -> GLuint -> JSString -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.bindAttribLocation Mozilla WebGLRenderingContextBase.bindAttribLocation documentation> 
-bindAttribLocation ::
-                   (MonadIO m, IsWebGLRenderingContextBase self, ToJSString name) =>
-                     self -> Maybe WebGLProgram -> GLuint -> name -> m ()
-bindAttribLocation self program index name
-  = liftIO
-      (js_bindAttribLocation
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         (maybe jsNull pToJSRef program)
-         index
-         (toJSString name))
- 
-foreign import javascript unsafe "$1[\"bindBuffer\"]($2, $3)"
-        js_bindBuffer ::
-        JSRef WebGLRenderingContextBase ->
-          GLenum -> JSRef WebGLBuffer -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.bindBuffer Mozilla WebGLRenderingContextBase.bindBuffer documentation> 
-bindBuffer ::
-           (MonadIO m, IsWebGLRenderingContextBase self) =>
-             self -> GLenum -> Maybe WebGLBuffer -> m ()
-bindBuffer self target buffer
-  = liftIO
-      (js_bindBuffer
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         target
-         (maybe jsNull pToJSRef buffer))
- 
-foreign import javascript unsafe "$1[\"bindFramebuffer\"]($2, $3)"
-        js_bindFramebuffer ::
-        JSRef WebGLRenderingContextBase ->
-          GLenum -> JSRef WebGLFramebuffer -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.bindFramebuffer Mozilla WebGLRenderingContextBase.bindFramebuffer documentation> 
-bindFramebuffer ::
-                (MonadIO m, IsWebGLRenderingContextBase self) =>
-                  self -> GLenum -> Maybe WebGLFramebuffer -> m ()
-bindFramebuffer self target framebuffer
-  = liftIO
-      (js_bindFramebuffer
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         target
-         (maybe jsNull pToJSRef framebuffer))
- 
-foreign import javascript unsafe "$1[\"bindRenderbuffer\"]($2, $3)"
-        js_bindRenderbuffer ::
-        JSRef WebGLRenderingContextBase ->
-          GLenum -> JSRef WebGLRenderbuffer -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.bindRenderbuffer Mozilla WebGLRenderingContextBase.bindRenderbuffer documentation> 
-bindRenderbuffer ::
-                 (MonadIO m, IsWebGLRenderingContextBase self) =>
-                   self -> GLenum -> Maybe WebGLRenderbuffer -> m ()
-bindRenderbuffer self target renderbuffer
-  = liftIO
-      (js_bindRenderbuffer
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         target
-         (maybe jsNull pToJSRef renderbuffer))
- 
-foreign import javascript unsafe "$1[\"bindTexture\"]($2, $3)"
-        js_bindTexture ::
-        JSRef WebGLRenderingContextBase ->
-          GLenum -> JSRef WebGLTexture -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.bindTexture Mozilla WebGLRenderingContextBase.bindTexture documentation> 
-bindTexture ::
-            (MonadIO m, IsWebGLRenderingContextBase self) =>
-              self -> GLenum -> Maybe WebGLTexture -> m ()
-bindTexture self target texture
-  = liftIO
-      (js_bindTexture
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         target
-         (maybe jsNull pToJSRef texture))
- 
-foreign import javascript unsafe
-        "$1[\"blendColor\"]($2, $3, $4, $5)" js_blendColor ::
-        JSRef WebGLRenderingContextBase ->
-          GLclampf -> GLclampf -> GLclampf -> GLclampf -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.blendColor Mozilla WebGLRenderingContextBase.blendColor documentation> 
-blendColor ::
-           (MonadIO m, IsWebGLRenderingContextBase self) =>
-             self -> GLclampf -> GLclampf -> GLclampf -> GLclampf -> m ()
-blendColor self red green blue alpha
-  = liftIO
-      (js_blendColor
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         red
-         green
-         blue
-         alpha)
- 
-foreign import javascript unsafe "$1[\"blendEquation\"]($2)"
-        js_blendEquation ::
-        JSRef WebGLRenderingContextBase -> GLenum -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.blendEquation Mozilla WebGLRenderingContextBase.blendEquation documentation> 
-blendEquation ::
-              (MonadIO m, IsWebGLRenderingContextBase self) =>
-                self -> GLenum -> m ()
-blendEquation self mode
-  = liftIO
-      (js_blendEquation
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         mode)
- 
-foreign import javascript unsafe
-        "$1[\"blendEquationSeparate\"]($2,\n$3)" js_blendEquationSeparate
-        :: JSRef WebGLRenderingContextBase -> GLenum -> GLenum -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.blendEquationSeparate Mozilla WebGLRenderingContextBase.blendEquationSeparate documentation> 
-blendEquationSeparate ::
-                      (MonadIO m, IsWebGLRenderingContextBase self) =>
-                        self -> GLenum -> GLenum -> m ()
-blendEquationSeparate self modeRGB modeAlpha
-  = liftIO
-      (js_blendEquationSeparate
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         modeRGB
-         modeAlpha)
- 
-foreign import javascript unsafe "$1[\"blendFunc\"]($2, $3)"
-        js_blendFunc ::
-        JSRef WebGLRenderingContextBase -> GLenum -> GLenum -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.blendFunc Mozilla WebGLRenderingContextBase.blendFunc documentation> 
-blendFunc ::
-          (MonadIO m, IsWebGLRenderingContextBase self) =>
-            self -> GLenum -> GLenum -> m ()
-blendFunc self sfactor dfactor
-  = liftIO
-      (js_blendFunc
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         sfactor
-         dfactor)
- 
-foreign import javascript unsafe
-        "$1[\"blendFuncSeparate\"]($2, $3,\n$4, $5)" js_blendFuncSeparate
-        ::
-        JSRef WebGLRenderingContextBase ->
-          GLenum -> GLenum -> GLenum -> GLenum -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.blendFuncSeparate Mozilla WebGLRenderingContextBase.blendFuncSeparate documentation> 
-blendFuncSeparate ::
-                  (MonadIO m, IsWebGLRenderingContextBase self) =>
-                    self -> GLenum -> GLenum -> GLenum -> GLenum -> m ()
-blendFuncSeparate self srcRGB dstRGB srcAlpha dstAlpha
-  = liftIO
-      (js_blendFuncSeparate
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         srcRGB
-         dstRGB
-         srcAlpha
-         dstAlpha)
- 
-foreign import javascript unsafe "$1[\"bufferData\"]($2, $3, $4)"
-        js_bufferData ::
-        JSRef WebGLRenderingContextBase ->
-          GLenum -> JSRef ArrayBuffer -> GLenum -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.bufferData Mozilla WebGLRenderingContextBase.bufferData documentation> 
-bufferData ::
-           (MonadIO m, IsWebGLRenderingContextBase self,
-            IsArrayBuffer data') =>
-             self -> GLenum -> Maybe data' -> GLenum -> m ()
-bufferData self target data' usage
-  = liftIO
-      (js_bufferData
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         target
-         (maybe jsNull (unArrayBuffer . toArrayBuffer) data')
-         usage)
- 
-foreign import javascript unsafe "$1[\"bufferData\"]($2, $3, $4)"
-        js_bufferDataView ::
-        JSRef WebGLRenderingContextBase ->
-          GLenum -> JSRef ArrayBufferView -> GLenum -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.bufferData Mozilla WebGLRenderingContextBase.bufferData documentation> 
-bufferDataView ::
-               (MonadIO m, IsWebGLRenderingContextBase self,
-                IsArrayBufferView data') =>
-                 self -> GLenum -> Maybe data' -> GLenum -> m ()
-bufferDataView self target data' usage
-  = liftIO
-      (js_bufferDataView
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         target
-         (maybe jsNull (unArrayBufferView . toArrayBufferView) data')
-         usage)
- 
-foreign import javascript unsafe "$1[\"bufferData\"]($2, $3, $4)"
-        js_bufferDataPtr ::
-        JSRef WebGLRenderingContextBase ->
-          GLenum -> Double -> GLenum -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.bufferData Mozilla WebGLRenderingContextBase.bufferData documentation> 
-bufferDataPtr ::
-              (MonadIO m, IsWebGLRenderingContextBase self) =>
-                self -> GLenum -> GLsizeiptr -> GLenum -> m ()
-bufferDataPtr self target size usage
-  = liftIO
-      (js_bufferDataPtr
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         target
-         (fromIntegral size)
-         usage)
- 
-foreign import javascript unsafe
-        "$1[\"bufferSubData\"]($2, $3, $4)" js_bufferSubData ::
-        JSRef WebGLRenderingContextBase ->
-          GLenum -> Double -> JSRef ArrayBuffer -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.bufferSubData Mozilla WebGLRenderingContextBase.bufferSubData documentation> 
-bufferSubData ::
-              (MonadIO m, IsWebGLRenderingContextBase self,
-               IsArrayBuffer data') =>
-                self -> GLenum -> GLintptr -> Maybe data' -> m ()
-bufferSubData self target offset data'
-  = liftIO
-      (js_bufferSubData
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         target
-         (fromIntegral offset)
-         (maybe jsNull (unArrayBuffer . toArrayBuffer) data'))
- 
-foreign import javascript unsafe
-        "$1[\"bufferSubData\"]($2, $3, $4)" js_bufferSubDataView ::
-        JSRef WebGLRenderingContextBase ->
-          GLenum -> Double -> JSRef ArrayBufferView -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.bufferSubData Mozilla WebGLRenderingContextBase.bufferSubData documentation> 
-bufferSubDataView ::
-                  (MonadIO m, IsWebGLRenderingContextBase self,
-                   IsArrayBufferView data') =>
-                    self -> GLenum -> GLintptr -> Maybe data' -> m ()
-bufferSubDataView self target offset data'
-  = liftIO
-      (js_bufferSubDataView
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         target
-         (fromIntegral offset)
-         (maybe jsNull (unArrayBufferView . toArrayBufferView) data'))
- 
-foreign import javascript unsafe
-        "$1[\"checkFramebufferStatus\"]($2)" js_checkFramebufferStatus ::
-        JSRef WebGLRenderingContextBase -> GLenum -> IO GLenum
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.checkFramebufferStatus Mozilla WebGLRenderingContextBase.checkFramebufferStatus documentation> 
-checkFramebufferStatus ::
-                       (MonadIO m, IsWebGLRenderingContextBase self) =>
-                         self -> GLenum -> m GLenum
-checkFramebufferStatus self target
-  = liftIO
-      (js_checkFramebufferStatus
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         target)
- 
-foreign import javascript unsafe "$1[\"clear\"]($2)" js_clear ::
-        JSRef WebGLRenderingContextBase -> GLbitfield -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.clear Mozilla WebGLRenderingContextBase.clear documentation> 
-clear ::
-      (MonadIO m, IsWebGLRenderingContextBase self) =>
-        self -> GLbitfield -> m ()
-clear self mask
-  = liftIO
-      (js_clear
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         mask)
- 
-foreign import javascript unsafe
-        "$1[\"clearColor\"]($2, $3, $4, $5)" js_clearColor ::
-        JSRef WebGLRenderingContextBase ->
-          GLclampf -> GLclampf -> GLclampf -> GLclampf -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.clearColor Mozilla WebGLRenderingContextBase.clearColor documentation> 
-clearColor ::
-           (MonadIO m, IsWebGLRenderingContextBase self) =>
-             self -> GLclampf -> GLclampf -> GLclampf -> GLclampf -> m ()
-clearColor self red green blue alpha
-  = liftIO
-      (js_clearColor
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         red
-         green
-         blue
-         alpha)
- 
-foreign import javascript unsafe "$1[\"clearDepth\"]($2)"
-        js_clearDepth ::
-        JSRef WebGLRenderingContextBase -> GLclampf -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.clearDepth Mozilla WebGLRenderingContextBase.clearDepth documentation> 
-clearDepth ::
-           (MonadIO m, IsWebGLRenderingContextBase self) =>
-             self -> GLclampf -> m ()
-clearDepth self depth
-  = liftIO
-      (js_clearDepth
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         depth)
- 
-foreign import javascript unsafe "$1[\"clearStencil\"]($2)"
-        js_clearStencil ::
-        JSRef WebGLRenderingContextBase -> GLint -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.clearStencil Mozilla WebGLRenderingContextBase.clearStencil documentation> 
-clearStencil ::
-             (MonadIO m, IsWebGLRenderingContextBase self) =>
-               self -> GLint -> m ()
-clearStencil self s
-  = liftIO
-      (js_clearStencil
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         s)
- 
-foreign import javascript unsafe
-        "$1[\"colorMask\"]($2, $3, $4, $5)" js_colorMask ::
-        JSRef WebGLRenderingContextBase ->
-          GLboolean -> GLboolean -> GLboolean -> GLboolean -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.colorMask Mozilla WebGLRenderingContextBase.colorMask documentation> 
-colorMask ::
-          (MonadIO m, IsWebGLRenderingContextBase self) =>
-            self -> GLboolean -> GLboolean -> GLboolean -> GLboolean -> m ()
-colorMask self red green blue alpha
-  = liftIO
-      (js_colorMask
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         red
-         green
-         blue
-         alpha)
- 
-foreign import javascript unsafe "$1[\"compileShader\"]($2)"
-        js_compileShader ::
-        JSRef WebGLRenderingContextBase -> JSRef WebGLShader -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.compileShader Mozilla WebGLRenderingContextBase.compileShader documentation> 
-compileShader ::
-              (MonadIO m, IsWebGLRenderingContextBase self) =>
-                self -> Maybe WebGLShader -> m ()
-compileShader self shader
-  = liftIO
-      (js_compileShader
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         (maybe jsNull pToJSRef shader))
- 
-foreign import javascript unsafe
-        "$1[\"compressedTexImage2D\"]($2,\n$3, $4, $5, $6, $7, $8)"
-        js_compressedTexImage2D ::
-        JSRef WebGLRenderingContextBase ->
-          GLenum ->
-            GLint ->
-              GLenum ->
-                GLsizei -> GLsizei -> GLint -> JSRef ArrayBufferView -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.compressedTexImage2D Mozilla WebGLRenderingContextBase.compressedTexImage2D documentation> 
-compressedTexImage2D ::
-                     (MonadIO m, IsWebGLRenderingContextBase self,
-                      IsArrayBufferView data') =>
-                       self ->
-                         GLenum ->
-                           GLint ->
-                             GLenum -> GLsizei -> GLsizei -> GLint -> Maybe data' -> m ()
-compressedTexImage2D self target level internalformat width height
-  border data'
-  = liftIO
-      (js_compressedTexImage2D
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         target
-         level
-         internalformat
-         width
-         height
-         border
-         (maybe jsNull (unArrayBufferView . toArrayBufferView) data'))
- 
-foreign import javascript unsafe
-        "$1[\"compressedTexSubImage2D\"]($2,\n$3, $4, $5, $6, $7, $8, $9)"
-        js_compressedTexSubImage2D ::
-        JSRef WebGLRenderingContextBase ->
-          GLenum ->
-            GLint ->
-              GLint ->
-                GLint ->
-                  GLsizei -> GLsizei -> GLenum -> JSRef ArrayBufferView -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.compressedTexSubImage2D Mozilla WebGLRenderingContextBase.compressedTexSubImage2D documentation> 
-compressedTexSubImage2D ::
-                        (MonadIO m, IsWebGLRenderingContextBase self,
-                         IsArrayBufferView data') =>
-                          self ->
-                            GLenum ->
-                              GLint ->
-                                GLint ->
-                                  GLint -> GLsizei -> GLsizei -> GLenum -> Maybe data' -> m ()
-compressedTexSubImage2D self target level xoffset yoffset width
-  height format data'
-  = liftIO
-      (js_compressedTexSubImage2D
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         target
-         level
-         xoffset
-         yoffset
-         width
-         height
-         format
-         (maybe jsNull (unArrayBufferView . toArrayBufferView) data'))
- 
-foreign import javascript unsafe
-        "$1[\"copyTexImage2D\"]($2, $3, $4,\n$5, $6, $7, $8, $9)"
-        js_copyTexImage2D ::
-        JSRef WebGLRenderingContextBase ->
-          GLenum ->
-            GLint ->
-              GLenum -> GLint -> GLint -> GLsizei -> GLsizei -> GLint -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.copyTexImage2D Mozilla WebGLRenderingContextBase.copyTexImage2D documentation> 
-copyTexImage2D ::
-               (MonadIO m, IsWebGLRenderingContextBase self) =>
-                 self ->
-                   GLenum ->
-                     GLint ->
-                       GLenum -> GLint -> GLint -> GLsizei -> GLsizei -> GLint -> m ()
-copyTexImage2D self target level internalformat x y width height
-  border
-  = liftIO
-      (js_copyTexImage2D
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         target
-         level
-         internalformat
-         x
-         y
-         width
-         height
-         border)
- 
-foreign import javascript unsafe
-        "$1[\"copyTexSubImage2D\"]($2, $3,\n$4, $5, $6, $7, $8, $9)"
-        js_copyTexSubImage2D ::
-        JSRef WebGLRenderingContextBase ->
-          GLenum ->
-            GLint ->
-              GLint -> GLint -> GLint -> GLint -> GLsizei -> GLsizei -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.copyTexSubImage2D Mozilla WebGLRenderingContextBase.copyTexSubImage2D documentation> 
-copyTexSubImage2D ::
-                  (MonadIO m, IsWebGLRenderingContextBase self) =>
-                    self ->
-                      GLenum ->
-                        GLint ->
-                          GLint -> GLint -> GLint -> GLint -> GLsizei -> GLsizei -> m ()
-copyTexSubImage2D self target level xoffset yoffset x y width
-  height
-  = liftIO
-      (js_copyTexSubImage2D
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         target
-         level
-         xoffset
-         yoffset
-         x
-         y
-         width
-         height)
- 
-foreign import javascript unsafe "$1[\"createBuffer\"]()"
-        js_createBuffer ::
-        JSRef WebGLRenderingContextBase -> IO (JSRef WebGLBuffer)
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.createBuffer Mozilla WebGLRenderingContextBase.createBuffer documentation> 
-createBuffer ::
-             (MonadIO m, IsWebGLRenderingContextBase self) =>
-               self -> m (Maybe WebGLBuffer)
-createBuffer self
-  = liftIO
-      ((js_createBuffer
-          (unWebGLRenderingContextBase (toWebGLRenderingContextBase self)))
-         >>= fromJSRef)
- 
-foreign import javascript unsafe "$1[\"createFramebuffer\"]()"
-        js_createFramebuffer ::
-        JSRef WebGLRenderingContextBase -> IO (JSRef WebGLFramebuffer)
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.createFramebuffer Mozilla WebGLRenderingContextBase.createFramebuffer documentation> 
-createFramebuffer ::
-                  (MonadIO m, IsWebGLRenderingContextBase self) =>
-                    self -> m (Maybe WebGLFramebuffer)
-createFramebuffer self
-  = liftIO
-      ((js_createFramebuffer
-          (unWebGLRenderingContextBase (toWebGLRenderingContextBase self)))
-         >>= fromJSRef)
- 
-foreign import javascript unsafe "$1[\"createProgram\"]()"
-        js_createProgram ::
-        JSRef WebGLRenderingContextBase -> IO (JSRef WebGLProgram)
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.createProgram Mozilla WebGLRenderingContextBase.createProgram documentation> 
-createProgram ::
-              (MonadIO m, IsWebGLRenderingContextBase self) =>
-                self -> m (Maybe WebGLProgram)
-createProgram self
-  = liftIO
-      ((js_createProgram
-          (unWebGLRenderingContextBase (toWebGLRenderingContextBase self)))
-         >>= fromJSRef)
- 
-foreign import javascript unsafe "$1[\"createRenderbuffer\"]()"
-        js_createRenderbuffer ::
-        JSRef WebGLRenderingContextBase -> IO (JSRef WebGLRenderbuffer)
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.createRenderbuffer Mozilla WebGLRenderingContextBase.createRenderbuffer documentation> 
-createRenderbuffer ::
-                   (MonadIO m, IsWebGLRenderingContextBase self) =>
-                     self -> m (Maybe WebGLRenderbuffer)
-createRenderbuffer self
-  = liftIO
-      ((js_createRenderbuffer
-          (unWebGLRenderingContextBase (toWebGLRenderingContextBase self)))
-         >>= fromJSRef)
- 
-foreign import javascript unsafe "$1[\"createShader\"]($2)"
-        js_createShader ::
-        JSRef WebGLRenderingContextBase -> GLenum -> IO (JSRef WebGLShader)
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.createShader Mozilla WebGLRenderingContextBase.createShader documentation> 
-createShader ::
-             (MonadIO m, IsWebGLRenderingContextBase self) =>
-               self -> GLenum -> m (Maybe WebGLShader)
-createShader self type'
-  = liftIO
-      ((js_createShader
-          (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-          type')
-         >>= fromJSRef)
- 
-foreign import javascript unsafe "$1[\"createTexture\"]()"
-        js_createTexture ::
-        JSRef WebGLRenderingContextBase -> IO (JSRef WebGLTexture)
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.createTexture Mozilla WebGLRenderingContextBase.createTexture documentation> 
-createTexture ::
-              (MonadIO m, IsWebGLRenderingContextBase self) =>
-                self -> m (Maybe WebGLTexture)
-createTexture self
-  = liftIO
-      ((js_createTexture
-          (unWebGLRenderingContextBase (toWebGLRenderingContextBase self)))
-         >>= fromJSRef)
- 
-foreign import javascript unsafe "$1[\"cullFace\"]($2)" js_cullFace
-        :: JSRef WebGLRenderingContextBase -> GLenum -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.cullFace Mozilla WebGLRenderingContextBase.cullFace documentation> 
-cullFace ::
-         (MonadIO m, IsWebGLRenderingContextBase self) =>
-           self -> GLenum -> m ()
-cullFace self mode
-  = liftIO
-      (js_cullFace
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         mode)
- 
-foreign import javascript unsafe "$1[\"deleteBuffer\"]($2)"
-        js_deleteBuffer ::
-        JSRef WebGLRenderingContextBase -> JSRef WebGLBuffer -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.deleteBuffer Mozilla WebGLRenderingContextBase.deleteBuffer documentation> 
-deleteBuffer ::
-             (MonadIO m, IsWebGLRenderingContextBase self) =>
-               self -> Maybe WebGLBuffer -> m ()
-deleteBuffer self buffer
-  = liftIO
-      (js_deleteBuffer
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         (maybe jsNull pToJSRef buffer))
- 
-foreign import javascript unsafe "$1[\"deleteFramebuffer\"]($2)"
-        js_deleteFramebuffer ::
-        JSRef WebGLRenderingContextBase -> JSRef WebGLFramebuffer -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.deleteFramebuffer Mozilla WebGLRenderingContextBase.deleteFramebuffer documentation> 
-deleteFramebuffer ::
-                  (MonadIO m, IsWebGLRenderingContextBase self) =>
-                    self -> Maybe WebGLFramebuffer -> m ()
-deleteFramebuffer self framebuffer
-  = liftIO
-      (js_deleteFramebuffer
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         (maybe jsNull pToJSRef framebuffer))
- 
-foreign import javascript unsafe "$1[\"deleteProgram\"]($2)"
-        js_deleteProgram ::
-        JSRef WebGLRenderingContextBase -> JSRef WebGLProgram -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.deleteProgram Mozilla WebGLRenderingContextBase.deleteProgram documentation> 
-deleteProgram ::
-              (MonadIO m, IsWebGLRenderingContextBase self) =>
-                self -> Maybe WebGLProgram -> m ()
-deleteProgram self program
-  = liftIO
-      (js_deleteProgram
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         (maybe jsNull pToJSRef program))
- 
-foreign import javascript unsafe "$1[\"deleteRenderbuffer\"]($2)"
-        js_deleteRenderbuffer ::
-        JSRef WebGLRenderingContextBase -> JSRef WebGLRenderbuffer -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.deleteRenderbuffer Mozilla WebGLRenderingContextBase.deleteRenderbuffer documentation> 
-deleteRenderbuffer ::
-                   (MonadIO m, IsWebGLRenderingContextBase self) =>
-                     self -> Maybe WebGLRenderbuffer -> m ()
-deleteRenderbuffer self renderbuffer
-  = liftIO
-      (js_deleteRenderbuffer
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         (maybe jsNull pToJSRef renderbuffer))
- 
-foreign import javascript unsafe "$1[\"deleteShader\"]($2)"
-        js_deleteShader ::
-        JSRef WebGLRenderingContextBase -> JSRef WebGLShader -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.deleteShader Mozilla WebGLRenderingContextBase.deleteShader documentation> 
-deleteShader ::
-             (MonadIO m, IsWebGLRenderingContextBase self) =>
-               self -> Maybe WebGLShader -> m ()
-deleteShader self shader
-  = liftIO
-      (js_deleteShader
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         (maybe jsNull pToJSRef shader))
- 
-foreign import javascript unsafe "$1[\"deleteTexture\"]($2)"
-        js_deleteTexture ::
-        JSRef WebGLRenderingContextBase -> JSRef WebGLTexture -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.deleteTexture Mozilla WebGLRenderingContextBase.deleteTexture documentation> 
-deleteTexture ::
-              (MonadIO m, IsWebGLRenderingContextBase self) =>
-                self -> Maybe WebGLTexture -> m ()
-deleteTexture self texture
-  = liftIO
-      (js_deleteTexture
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         (maybe jsNull pToJSRef texture))
- 
-foreign import javascript unsafe "$1[\"depthFunc\"]($2)"
-        js_depthFunc :: JSRef WebGLRenderingContextBase -> GLenum -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.depthFunc Mozilla WebGLRenderingContextBase.depthFunc documentation> 
-depthFunc ::
-          (MonadIO m, IsWebGLRenderingContextBase self) =>
-            self -> GLenum -> m ()
-depthFunc self func
-  = liftIO
-      (js_depthFunc
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         func)
- 
-foreign import javascript unsafe "$1[\"depthMask\"]($2)"
-        js_depthMask ::
-        JSRef WebGLRenderingContextBase -> GLboolean -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.depthMask Mozilla WebGLRenderingContextBase.depthMask documentation> 
-depthMask ::
-          (MonadIO m, IsWebGLRenderingContextBase self) =>
-            self -> GLboolean -> m ()
-depthMask self flag
-  = liftIO
-      (js_depthMask
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         flag)
- 
-foreign import javascript unsafe "$1[\"depthRange\"]($2, $3)"
-        js_depthRange ::
-        JSRef WebGLRenderingContextBase -> GLclampf -> GLclampf -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.depthRange Mozilla WebGLRenderingContextBase.depthRange documentation> 
-depthRange ::
-           (MonadIO m, IsWebGLRenderingContextBase self) =>
-             self -> GLclampf -> GLclampf -> m ()
-depthRange self zNear zFar
-  = liftIO
-      (js_depthRange
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         zNear
-         zFar)
- 
-foreign import javascript unsafe "$1[\"detachShader\"]($2, $3)"
-        js_detachShader ::
-        JSRef WebGLRenderingContextBase ->
-          JSRef WebGLProgram -> JSRef WebGLShader -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.detachShader Mozilla WebGLRenderingContextBase.detachShader documentation> 
-detachShader ::
-             (MonadIO m, IsWebGLRenderingContextBase self) =>
-               self -> Maybe WebGLProgram -> Maybe WebGLShader -> m ()
-detachShader self program shader
-  = liftIO
-      (js_detachShader
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         (maybe jsNull pToJSRef program)
-         (maybe jsNull pToJSRef shader))
- 
-foreign import javascript unsafe "$1[\"disable\"]($2)" js_disable
-        :: JSRef WebGLRenderingContextBase -> GLenum -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.disable Mozilla WebGLRenderingContextBase.disable documentation> 
-disable ::
-        (MonadIO m, IsWebGLRenderingContextBase self) =>
-          self -> GLenum -> m ()
-disable self cap
-  = liftIO
-      (js_disable
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         cap)
- 
-foreign import javascript unsafe
-        "$1[\"disableVertexAttribArray\"]($2)" js_disableVertexAttribArray
-        :: JSRef WebGLRenderingContextBase -> GLuint -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.disableVertexAttribArray Mozilla WebGLRenderingContextBase.disableVertexAttribArray documentation> 
-disableVertexAttribArray ::
-                         (MonadIO m, IsWebGLRenderingContextBase self) =>
-                           self -> GLuint -> m ()
-disableVertexAttribArray self index
-  = liftIO
-      (js_disableVertexAttribArray
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         index)
- 
-foreign import javascript unsafe "$1[\"drawArrays\"]($2, $3, $4)"
-        js_drawArrays ::
-        JSRef WebGLRenderingContextBase ->
-          GLenum -> GLint -> GLsizei -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.drawArrays Mozilla WebGLRenderingContextBase.drawArrays documentation> 
-drawArrays ::
-           (MonadIO m, IsWebGLRenderingContextBase self) =>
-             self -> GLenum -> GLint -> GLsizei -> m ()
-drawArrays self mode first count
-  = liftIO
-      (js_drawArrays
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         mode
-         first
-         count)
- 
-foreign import javascript unsafe
-        "$1[\"drawElements\"]($2, $3, $4,\n$5)" js_drawElements ::
-        JSRef WebGLRenderingContextBase ->
-          GLenum -> GLsizei -> GLenum -> Double -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.drawElements Mozilla WebGLRenderingContextBase.drawElements documentation> 
-drawElements ::
-             (MonadIO m, IsWebGLRenderingContextBase self) =>
-               self -> GLenum -> GLsizei -> GLenum -> GLintptr -> m ()
-drawElements self mode count type' offset
-  = liftIO
-      (js_drawElements
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         mode
-         count
-         type'
-         (fromIntegral offset))
- 
-foreign import javascript unsafe "$1[\"enable\"]($2)" js_enable ::
-        JSRef WebGLRenderingContextBase -> GLenum -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.enable Mozilla WebGLRenderingContextBase.enable documentation> 
-enable ::
-       (MonadIO m, IsWebGLRenderingContextBase self) =>
-         self -> GLenum -> m ()
-enable self cap
-  = liftIO
-      (js_enable
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         cap)
- 
-foreign import javascript unsafe
-        "$1[\"enableVertexAttribArray\"]($2)" js_enableVertexAttribArray ::
-        JSRef WebGLRenderingContextBase -> GLuint -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.enableVertexAttribArray Mozilla WebGLRenderingContextBase.enableVertexAttribArray documentation> 
-enableVertexAttribArray ::
-                        (MonadIO m, IsWebGLRenderingContextBase self) =>
-                          self -> GLuint -> m ()
-enableVertexAttribArray self index
-  = liftIO
-      (js_enableVertexAttribArray
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         index)
- 
-foreign import javascript unsafe "$1[\"finish\"]()" js_finish ::
-        JSRef WebGLRenderingContextBase -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.finish Mozilla WebGLRenderingContextBase.finish documentation> 
-finish ::
-       (MonadIO m, IsWebGLRenderingContextBase self) => self -> m ()
-finish self
-  = liftIO
-      (js_finish
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self)))
- 
-foreign import javascript unsafe "$1[\"flush\"]()" js_flush ::
-        JSRef WebGLRenderingContextBase -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.flush Mozilla WebGLRenderingContextBase.flush documentation> 
-flush ::
-      (MonadIO m, IsWebGLRenderingContextBase self) => self -> m ()
-flush self
-  = liftIO
-      (js_flush
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self)))
- 
-foreign import javascript unsafe
-        "$1[\"framebufferRenderbuffer\"]($2,\n$3, $4, $5)"
-        js_framebufferRenderbuffer ::
-        JSRef WebGLRenderingContextBase ->
-          GLenum -> GLenum -> GLenum -> JSRef WebGLRenderbuffer -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.framebufferRenderbuffer Mozilla WebGLRenderingContextBase.framebufferRenderbuffer documentation> 
-framebufferRenderbuffer ::
-                        (MonadIO m, IsWebGLRenderingContextBase self) =>
-                          self ->
-                            GLenum -> GLenum -> GLenum -> Maybe WebGLRenderbuffer -> m ()
-framebufferRenderbuffer self target attachment renderbuffertarget
-  renderbuffer
-  = liftIO
-      (js_framebufferRenderbuffer
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         target
-         attachment
-         renderbuffertarget
-         (maybe jsNull pToJSRef renderbuffer))
- 
-foreign import javascript unsafe
-        "$1[\"framebufferTexture2D\"]($2,\n$3, $4, $5, $6)"
-        js_framebufferTexture2D ::
-        JSRef WebGLRenderingContextBase ->
-          GLenum -> GLenum -> GLenum -> JSRef WebGLTexture -> GLint -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.framebufferTexture2D Mozilla WebGLRenderingContextBase.framebufferTexture2D documentation> 
-framebufferTexture2D ::
-                     (MonadIO m, IsWebGLRenderingContextBase self) =>
-                       self ->
-                         GLenum -> GLenum -> GLenum -> Maybe WebGLTexture -> GLint -> m ()
-framebufferTexture2D self target attachment textarget texture level
-  = liftIO
-      (js_framebufferTexture2D
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         target
-         attachment
-         textarget
-         (maybe jsNull pToJSRef texture)
-         level)
- 
-foreign import javascript unsafe "$1[\"frontFace\"]($2)"
-        js_frontFace :: JSRef WebGLRenderingContextBase -> GLenum -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.frontFace Mozilla WebGLRenderingContextBase.frontFace documentation> 
-frontFace ::
-          (MonadIO m, IsWebGLRenderingContextBase self) =>
-            self -> GLenum -> m ()
-frontFace self mode
-  = liftIO
-      (js_frontFace
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         mode)
- 
-foreign import javascript unsafe "$1[\"generateMipmap\"]($2)"
-        js_generateMipmap ::
-        JSRef WebGLRenderingContextBase -> GLenum -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.generateMipmap Mozilla WebGLRenderingContextBase.generateMipmap documentation> 
-generateMipmap ::
-               (MonadIO m, IsWebGLRenderingContextBase self) =>
-                 self -> GLenum -> m ()
-generateMipmap self target
-  = liftIO
-      (js_generateMipmap
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         target)
- 
-foreign import javascript unsafe "$1[\"getActiveAttrib\"]($2, $3)"
-        js_getActiveAttrib ::
-        JSRef WebGLRenderingContextBase ->
-          JSRef WebGLProgram -> GLuint -> IO (JSRef WebGLActiveInfo)
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.getActiveAttrib Mozilla WebGLRenderingContextBase.getActiveAttrib documentation> 
-getActiveAttrib ::
-                (MonadIO m, IsWebGLRenderingContextBase self) =>
-                  self -> Maybe WebGLProgram -> GLuint -> m (Maybe WebGLActiveInfo)
-getActiveAttrib self program index
-  = liftIO
-      ((js_getActiveAttrib
-          (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-          (maybe jsNull pToJSRef program)
-          index)
-         >>= fromJSRef)
- 
-foreign import javascript unsafe "$1[\"getActiveUniform\"]($2, $3)"
-        js_getActiveUniform ::
-        JSRef WebGLRenderingContextBase ->
-          JSRef WebGLProgram -> GLuint -> IO (JSRef WebGLActiveInfo)
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.getActiveUniform Mozilla WebGLRenderingContextBase.getActiveUniform documentation> 
-getActiveUniform ::
-                 (MonadIO m, IsWebGLRenderingContextBase self) =>
-                   self -> Maybe WebGLProgram -> GLuint -> m (Maybe WebGLActiveInfo)
-getActiveUniform self program index
-  = liftIO
-      ((js_getActiveUniform
-          (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-          (maybe jsNull pToJSRef program)
-          index)
-         >>= fromJSRef)
- 
-foreign import javascript unsafe "$1[\"getAttachedShaders\"]($2)"
-        js_getAttachedShaders ::
-        JSRef WebGLRenderingContextBase -> JSRef WebGLProgram -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.getAttachedShaders Mozilla WebGLRenderingContextBase.getAttachedShaders documentation> 
-getAttachedShaders ::
-                   (MonadIO m, IsWebGLRenderingContextBase self) =>
-                     self -> Maybe WebGLProgram -> m ()
-getAttachedShaders self program
-  = liftIO
-      (js_getAttachedShaders
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         (maybe jsNull pToJSRef program))
- 
-foreign import javascript unsafe
-        "$1[\"getAttribLocation\"]($2, $3)" js_getAttribLocation ::
-        JSRef WebGLRenderingContextBase ->
-          JSRef WebGLProgram -> JSString -> IO GLint
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.getAttribLocation Mozilla WebGLRenderingContextBase.getAttribLocation documentation> 
-getAttribLocation ::
-                  (MonadIO m, IsWebGLRenderingContextBase self, ToJSString name) =>
-                    self -> Maybe WebGLProgram -> name -> m GLint
-getAttribLocation self program name
-  = liftIO
-      (js_getAttribLocation
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         (maybe jsNull pToJSRef program)
-         (toJSString name))
- 
-foreign import javascript unsafe
-        "$1[\"getBufferParameter\"]($2, $3)" js_getBufferParameter ::
-        JSRef WebGLRenderingContextBase -> GLenum -> GLenum -> IO (JSRef a)
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.getBufferParameter Mozilla WebGLRenderingContextBase.getBufferParameter documentation> 
-getBufferParameter ::
-                   (MonadIO m, IsWebGLRenderingContextBase self) =>
-                     self -> GLenum -> GLenum -> m (JSRef a)
-getBufferParameter self target pname
-  = liftIO
-      (js_getBufferParameter
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         target
-         pname)
- 
-foreign import javascript unsafe "$1[\"getContextAttributes\"]()"
-        js_getContextAttributes ::
-        JSRef WebGLRenderingContextBase ->
-          IO (JSRef WebGLContextAttributes)
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.getContextAttributes Mozilla WebGLRenderingContextBase.getContextAttributes documentation> 
-getContextAttributes ::
-                     (MonadIO m, IsWebGLRenderingContextBase self) =>
-                       self -> m (Maybe WebGLContextAttributes)
-getContextAttributes self
-  = liftIO
-      ((js_getContextAttributes
-          (unWebGLRenderingContextBase (toWebGLRenderingContextBase self)))
-         >>= fromJSRef)
- 
-foreign import javascript unsafe "$1[\"getError\"]()" js_getError
-        :: JSRef WebGLRenderingContextBase -> IO GLenum
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.getError Mozilla WebGLRenderingContextBase.getError documentation> 
-getError ::
-         (MonadIO m, IsWebGLRenderingContextBase self) => self -> m GLenum
-getError self
-  = liftIO
-      (js_getError
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self)))
- 
-foreign import javascript unsafe "$1[\"getExtension\"]($2)"
-        js_getExtension ::
-        JSRef WebGLRenderingContextBase -> JSString -> IO (JSRef a)
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.getExtension Mozilla WebGLRenderingContextBase.getExtension documentation> 
-getExtension ::
-             (MonadIO m, IsWebGLRenderingContextBase self, ToJSString name) =>
-               self -> name -> m (JSRef a)
-getExtension self name
-  = liftIO
-      (js_getExtension
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         (toJSString name))
- 
-foreign import javascript unsafe
-        "$1[\"getFramebufferAttachmentParameter\"]($2,\n$3, $4)"
-        js_getFramebufferAttachmentParameter ::
-        JSRef WebGLRenderingContextBase ->
-          GLenum -> GLenum -> GLenum -> IO (JSRef a)
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.getFramebufferAttachmentParameter Mozilla WebGLRenderingContextBase.getFramebufferAttachmentParameter documentation> 
-getFramebufferAttachmentParameter ::
-                                  (MonadIO m, IsWebGLRenderingContextBase self) =>
-                                    self -> GLenum -> GLenum -> GLenum -> m (JSRef a)
-getFramebufferAttachmentParameter self target attachment pname
-  = liftIO
-      (js_getFramebufferAttachmentParameter
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         target
-         attachment
-         pname)
- 
-foreign import javascript unsafe "$1[\"getParameter\"]($2)"
-        js_getParameter ::
-        JSRef WebGLRenderingContextBase -> GLenum -> IO (JSRef a)
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.getParameter Mozilla WebGLRenderingContextBase.getParameter documentation> 
-getParameter ::
-             (MonadIO m, IsWebGLRenderingContextBase self) =>
-               self -> GLenum -> m (JSRef a)
-getParameter self pname
-  = liftIO
-      (js_getParameter
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         pname)
- 
-foreign import javascript unsafe
-        "$1[\"getProgramParameter\"]($2,\n$3)" js_getProgramParameter ::
-        JSRef WebGLRenderingContextBase ->
-          JSRef WebGLProgram -> GLenum -> IO (JSRef a)
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.getProgramParameter Mozilla WebGLRenderingContextBase.getProgramParameter documentation> 
-getProgramParameter ::
-                    (MonadIO m, IsWebGLRenderingContextBase self) =>
-                      self -> Maybe WebGLProgram -> GLenum -> m (JSRef a)
-getProgramParameter self program pname
-  = liftIO
-      (js_getProgramParameter
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         (maybe jsNull pToJSRef program)
-         pname)
- 
-foreign import javascript unsafe "$1[\"getProgramInfoLog\"]($2)"
-        js_getProgramInfoLog ::
-        JSRef WebGLRenderingContextBase ->
-          JSRef WebGLProgram -> IO (JSRef (Maybe JSString))
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.getProgramInfoLog Mozilla WebGLRenderingContextBase.getProgramInfoLog documentation> 
-getProgramInfoLog ::
-                  (MonadIO m, IsWebGLRenderingContextBase self,
-                   FromJSString result) =>
-                    self -> Maybe WebGLProgram -> m (Maybe result)
-getProgramInfoLog self program
-  = liftIO
-      (fromMaybeJSString <$>
-         (js_getProgramInfoLog
-            (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-            (maybe jsNull pToJSRef program)))
- 
-foreign import javascript unsafe
-        "$1[\"getRenderbufferParameter\"]($2,\n$3)"
-        js_getRenderbufferParameter ::
-        JSRef WebGLRenderingContextBase -> GLenum -> GLenum -> IO (JSRef a)
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.getRenderbufferParameter Mozilla WebGLRenderingContextBase.getRenderbufferParameter documentation> 
-getRenderbufferParameter ::
-                         (MonadIO m, IsWebGLRenderingContextBase self) =>
-                           self -> GLenum -> GLenum -> m (JSRef a)
-getRenderbufferParameter self target pname
-  = liftIO
-      (js_getRenderbufferParameter
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         target
-         pname)
- 
-foreign import javascript unsafe
-        "$1[\"getShaderParameter\"]($2, $3)" js_getShaderParameter ::
-        JSRef WebGLRenderingContextBase ->
-          JSRef WebGLShader -> GLenum -> IO (JSRef a)
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.getShaderParameter Mozilla WebGLRenderingContextBase.getShaderParameter documentation> 
-getShaderParameter ::
-                   (MonadIO m, IsWebGLRenderingContextBase self) =>
-                     self -> Maybe WebGLShader -> GLenum -> m (JSRef a)
-getShaderParameter self shader pname
-  = liftIO
-      (js_getShaderParameter
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         (maybe jsNull pToJSRef shader)
-         pname)
- 
-foreign import javascript unsafe "$1[\"getShaderInfoLog\"]($2)"
-        js_getShaderInfoLog ::
-        JSRef WebGLRenderingContextBase ->
-          JSRef WebGLShader -> IO (JSRef (Maybe JSString))
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.getShaderInfoLog Mozilla WebGLRenderingContextBase.getShaderInfoLog documentation> 
-getShaderInfoLog ::
-                 (MonadIO m, IsWebGLRenderingContextBase self,
-                  FromJSString result) =>
-                   self -> Maybe WebGLShader -> m (Maybe result)
-getShaderInfoLog self shader
-  = liftIO
-      (fromMaybeJSString <$>
-         (js_getShaderInfoLog
-            (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-            (maybe jsNull pToJSRef shader)))
- 
-foreign import javascript unsafe
-        "$1[\"getShaderPrecisionFormat\"]($2,\n$3)"
-        js_getShaderPrecisionFormat ::
-        JSRef WebGLRenderingContextBase ->
-          GLenum -> GLenum -> IO (JSRef WebGLShaderPrecisionFormat)
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.getShaderPrecisionFormat Mozilla WebGLRenderingContextBase.getShaderPrecisionFormat documentation> 
-getShaderPrecisionFormat ::
-                         (MonadIO m, IsWebGLRenderingContextBase self) =>
-                           self -> GLenum -> GLenum -> m (Maybe WebGLShaderPrecisionFormat)
-getShaderPrecisionFormat self shadertype precisiontype
-  = liftIO
-      ((js_getShaderPrecisionFormat
-          (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-          shadertype
-          precisiontype)
-         >>= fromJSRef)
- 
-foreign import javascript unsafe "$1[\"getShaderSource\"]($2)"
-        js_getShaderSource ::
-        JSRef WebGLRenderingContextBase ->
-          JSRef WebGLShader -> IO (JSRef (Maybe JSString))
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.getShaderSource Mozilla WebGLRenderingContextBase.getShaderSource documentation> 
-getShaderSource ::
-                (MonadIO m, IsWebGLRenderingContextBase self,
-                 FromJSString result) =>
-                  self -> Maybe WebGLShader -> m (Maybe result)
-getShaderSource self shader
-  = liftIO
-      (fromMaybeJSString <$>
-         (js_getShaderSource
-            (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-            (maybe jsNull pToJSRef shader)))
- 
-foreign import javascript unsafe "$1[\"getSupportedExtensions\"]()"
-        js_getSupportedExtensions ::
-        JSRef WebGLRenderingContextBase -> IO (JSRef [result])
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.getSupportedExtensions Mozilla WebGLRenderingContextBase.getSupportedExtensions documentation> 
-getSupportedExtensions ::
-                       (MonadIO m, IsWebGLRenderingContextBase self,
-                        FromJSString result) =>
-                         self -> m [result]
-getSupportedExtensions self
-  = liftIO
-      ((js_getSupportedExtensions
-          (unWebGLRenderingContextBase (toWebGLRenderingContextBase self)))
-         >>= fromJSRefUnchecked)
- 
-foreign import javascript unsafe "$1[\"getTexParameter\"]($2, $3)"
-        js_getTexParameter ::
-        JSRef WebGLRenderingContextBase -> GLenum -> GLenum -> IO (JSRef a)
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.getTexParameter Mozilla WebGLRenderingContextBase.getTexParameter documentation> 
-getTexParameter ::
-                (MonadIO m, IsWebGLRenderingContextBase self) =>
-                  self -> GLenum -> GLenum -> m (JSRef a)
-getTexParameter self target pname
-  = liftIO
-      (js_getTexParameter
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         target
-         pname)
- 
-foreign import javascript unsafe "$1[\"getUniform\"]($2, $3)"
-        js_getUniform ::
-        JSRef WebGLRenderingContextBase ->
-          JSRef WebGLProgram -> JSRef WebGLUniformLocation -> IO (JSRef a)
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.getUniform Mozilla WebGLRenderingContextBase.getUniform documentation> 
-getUniform ::
-           (MonadIO m, IsWebGLRenderingContextBase self) =>
-             self ->
-               Maybe WebGLProgram -> Maybe WebGLUniformLocation -> m (JSRef a)
-getUniform self program location
-  = liftIO
-      (js_getUniform
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         (maybe jsNull pToJSRef program)
-         (maybe jsNull pToJSRef location))
- 
-foreign import javascript unsafe
-        "$1[\"getUniformLocation\"]($2, $3)" js_getUniformLocation ::
-        JSRef WebGLRenderingContextBase ->
-          JSRef WebGLProgram -> JSString -> IO (JSRef WebGLUniformLocation)
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.getUniformLocation Mozilla WebGLRenderingContextBase.getUniformLocation documentation> 
-getUniformLocation ::
-                   (MonadIO m, IsWebGLRenderingContextBase self, ToJSString name) =>
-                     self ->
-                       Maybe WebGLProgram -> name -> m (Maybe WebGLUniformLocation)
-getUniformLocation self program name
-  = liftIO
-      ((js_getUniformLocation
-          (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-          (maybe jsNull pToJSRef program)
-          (toJSString name))
-         >>= fromJSRef)
- 
-foreign import javascript unsafe "$1[\"getVertexAttrib\"]($2, $3)"
-        js_getVertexAttrib ::
-        JSRef WebGLRenderingContextBase -> GLuint -> GLenum -> IO (JSRef a)
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.getVertexAttrib Mozilla WebGLRenderingContextBase.getVertexAttrib documentation> 
-getVertexAttrib ::
-                (MonadIO m, IsWebGLRenderingContextBase self) =>
-                  self -> GLuint -> GLenum -> m (JSRef a)
-getVertexAttrib self index pname
-  = liftIO
-      (js_getVertexAttrib
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         index
-         pname)
- 
-foreign import javascript unsafe
-        "$1[\"getVertexAttribOffset\"]($2,\n$3)" js_getVertexAttribOffset
-        :: JSRef WebGLRenderingContextBase -> GLuint -> GLenum -> IO Double
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.getVertexAttribOffset Mozilla WebGLRenderingContextBase.getVertexAttribOffset documentation> 
-getVertexAttribOffset ::
-                      (MonadIO m, IsWebGLRenderingContextBase self) =>
-                        self -> GLuint -> GLenum -> m GLsizeiptr
-getVertexAttribOffset self index pname
-  = liftIO
-      (round <$>
-         (js_getVertexAttribOffset
-            (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-            index
-            pname))
- 
-foreign import javascript unsafe "$1[\"hint\"]($2, $3)" js_hint ::
-        JSRef WebGLRenderingContextBase -> GLenum -> GLenum -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.hint Mozilla WebGLRenderingContextBase.hint documentation> 
-hint ::
-     (MonadIO m, IsWebGLRenderingContextBase self) =>
-       self -> GLenum -> GLenum -> m ()
-hint self target mode
-  = liftIO
-      (js_hint
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         target
-         mode)
- 
-foreign import javascript unsafe "$1[\"isBuffer\"]($2)" js_isBuffer
-        ::
-        JSRef WebGLRenderingContextBase ->
-          JSRef WebGLBuffer -> IO GLboolean
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.isBuffer Mozilla WebGLRenderingContextBase.isBuffer documentation> 
-isBuffer ::
-         (MonadIO m, IsWebGLRenderingContextBase self) =>
-           self -> Maybe WebGLBuffer -> m GLboolean
-isBuffer self buffer
-  = liftIO
-      (js_isBuffer
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         (maybe jsNull pToJSRef buffer))
- 
-foreign import javascript unsafe "$1[\"isContextLost\"]()"
-        js_isContextLost :: JSRef WebGLRenderingContextBase -> IO GLboolean
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.isContextLost Mozilla WebGLRenderingContextBase.isContextLost documentation> 
-isContextLost ::
-              (MonadIO m, IsWebGLRenderingContextBase self) =>
-                self -> m GLboolean
-isContextLost self
-  = liftIO
-      (js_isContextLost
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self)))
- 
-foreign import javascript unsafe "$1[\"isEnabled\"]($2)"
-        js_isEnabled ::
-        JSRef WebGLRenderingContextBase -> GLenum -> IO GLboolean
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.isEnabled Mozilla WebGLRenderingContextBase.isEnabled documentation> 
-isEnabled ::
-          (MonadIO m, IsWebGLRenderingContextBase self) =>
-            self -> GLenum -> m GLboolean
-isEnabled self cap
-  = liftIO
-      (js_isEnabled
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         cap)
- 
-foreign import javascript unsafe "$1[\"isFramebuffer\"]($2)"
-        js_isFramebuffer ::
-        JSRef WebGLRenderingContextBase ->
-          JSRef WebGLFramebuffer -> IO GLboolean
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.isFramebuffer Mozilla WebGLRenderingContextBase.isFramebuffer documentation> 
-isFramebuffer ::
-              (MonadIO m, IsWebGLRenderingContextBase self) =>
-                self -> Maybe WebGLFramebuffer -> m GLboolean
-isFramebuffer self framebuffer
-  = liftIO
-      (js_isFramebuffer
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         (maybe jsNull pToJSRef framebuffer))
- 
-foreign import javascript unsafe "$1[\"isProgram\"]($2)"
-        js_isProgram ::
-        JSRef WebGLRenderingContextBase ->
-          JSRef WebGLProgram -> IO GLboolean
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.isProgram Mozilla WebGLRenderingContextBase.isProgram documentation> 
-isProgram ::
-          (MonadIO m, IsWebGLRenderingContextBase self) =>
-            self -> Maybe WebGLProgram -> m GLboolean
-isProgram self program
-  = liftIO
-      (js_isProgram
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         (maybe jsNull pToJSRef program))
- 
-foreign import javascript unsafe "$1[\"isRenderbuffer\"]($2)"
-        js_isRenderbuffer ::
-        JSRef WebGLRenderingContextBase ->
-          JSRef WebGLRenderbuffer -> IO GLboolean
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.isRenderbuffer Mozilla WebGLRenderingContextBase.isRenderbuffer documentation> 
-isRenderbuffer ::
-               (MonadIO m, IsWebGLRenderingContextBase self) =>
-                 self -> Maybe WebGLRenderbuffer -> m GLboolean
-isRenderbuffer self renderbuffer
-  = liftIO
-      (js_isRenderbuffer
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         (maybe jsNull pToJSRef renderbuffer))
- 
-foreign import javascript unsafe "$1[\"isShader\"]($2)" js_isShader
-        ::
-        JSRef WebGLRenderingContextBase ->
-          JSRef WebGLShader -> IO GLboolean
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.isShader Mozilla WebGLRenderingContextBase.isShader documentation> 
-isShader ::
-         (MonadIO m, IsWebGLRenderingContextBase self) =>
-           self -> Maybe WebGLShader -> m GLboolean
-isShader self shader
-  = liftIO
-      (js_isShader
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         (maybe jsNull pToJSRef shader))
- 
-foreign import javascript unsafe "$1[\"isTexture\"]($2)"
-        js_isTexture ::
-        JSRef WebGLRenderingContextBase ->
-          JSRef WebGLTexture -> IO GLboolean
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.isTexture Mozilla WebGLRenderingContextBase.isTexture documentation> 
-isTexture ::
-          (MonadIO m, IsWebGLRenderingContextBase self) =>
-            self -> Maybe WebGLTexture -> m GLboolean
-isTexture self texture
-  = liftIO
-      (js_isTexture
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         (maybe jsNull pToJSRef texture))
- 
-foreign import javascript unsafe "$1[\"lineWidth\"]($2)"
-        js_lineWidth :: JSRef WebGLRenderingContextBase -> GLfloat -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.lineWidth Mozilla WebGLRenderingContextBase.lineWidth documentation> 
-lineWidth ::
-          (MonadIO m, IsWebGLRenderingContextBase self) =>
-            self -> GLfloat -> m ()
-lineWidth self width
-  = liftIO
-      (js_lineWidth
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         width)
- 
-foreign import javascript unsafe "$1[\"linkProgram\"]($2)"
-        js_linkProgram ::
-        JSRef WebGLRenderingContextBase -> JSRef WebGLProgram -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.linkProgram Mozilla WebGLRenderingContextBase.linkProgram documentation> 
-linkProgram ::
-            (MonadIO m, IsWebGLRenderingContextBase self) =>
-              self -> Maybe WebGLProgram -> m ()
-linkProgram self program
-  = liftIO
-      (js_linkProgram
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         (maybe jsNull pToJSRef program))
- 
-foreign import javascript unsafe "$1[\"pixelStorei\"]($2, $3)"
-        js_pixelStorei ::
-        JSRef WebGLRenderingContextBase -> GLenum -> GLint -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.pixelStorei Mozilla WebGLRenderingContextBase.pixelStorei documentation> 
-pixelStorei ::
-            (MonadIO m, IsWebGLRenderingContextBase self) =>
-              self -> GLenum -> GLint -> m ()
-pixelStorei self pname param
-  = liftIO
-      (js_pixelStorei
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         pname
-         param)
- 
-foreign import javascript unsafe "$1[\"polygonOffset\"]($2, $3)"
-        js_polygonOffset ::
-        JSRef WebGLRenderingContextBase -> GLfloat -> GLfloat -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.polygonOffset Mozilla WebGLRenderingContextBase.polygonOffset documentation> 
-polygonOffset ::
-              (MonadIO m, IsWebGLRenderingContextBase self) =>
-                self -> GLfloat -> GLfloat -> m ()
-polygonOffset self factor units
-  = liftIO
-      (js_polygonOffset
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         factor
-         units)
- 
-foreign import javascript unsafe
-        "$1[\"readPixels\"]($2, $3, $4, $5,\n$6, $7, $8)" js_readPixels ::
-        JSRef WebGLRenderingContextBase ->
-          GLint ->
-            GLint ->
-              GLsizei ->
-                GLsizei -> GLenum -> GLenum -> JSRef ArrayBufferView -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.readPixels Mozilla WebGLRenderingContextBase.readPixels documentation> 
-readPixels ::
-           (MonadIO m, IsWebGLRenderingContextBase self,
-            IsArrayBufferView pixels) =>
-             self ->
-               GLint ->
-                 GLint ->
-                   GLsizei -> GLsizei -> GLenum -> GLenum -> Maybe pixels -> m ()
-readPixels self x y width height format type' pixels
-  = liftIO
-      (js_readPixels
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         x
-         y
-         width
-         height
-         format
-         type'
-         (maybe jsNull (unArrayBufferView . toArrayBufferView) pixels))
- 
-foreign import javascript unsafe "$1[\"releaseShaderCompiler\"]()"
-        js_releaseShaderCompiler ::
-        JSRef WebGLRenderingContextBase -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.releaseShaderCompiler Mozilla WebGLRenderingContextBase.releaseShaderCompiler documentation> 
-releaseShaderCompiler ::
-                      (MonadIO m, IsWebGLRenderingContextBase self) => self -> m ()
-releaseShaderCompiler self
-  = liftIO
-      (js_releaseShaderCompiler
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self)))
- 
-foreign import javascript unsafe
-        "$1[\"renderbufferStorage\"]($2,\n$3, $4, $5)"
-        js_renderbufferStorage ::
-        JSRef WebGLRenderingContextBase ->
-          GLenum -> GLenum -> GLsizei -> GLsizei -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.renderbufferStorage Mozilla WebGLRenderingContextBase.renderbufferStorage documentation> 
-renderbufferStorage ::
-                    (MonadIO m, IsWebGLRenderingContextBase self) =>
-                      self -> GLenum -> GLenum -> GLsizei -> GLsizei -> m ()
-renderbufferStorage self target internalformat width height
-  = liftIO
-      (js_renderbufferStorage
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         target
-         internalformat
-         width
-         height)
- 
-foreign import javascript unsafe "$1[\"sampleCoverage\"]($2, $3)"
-        js_sampleCoverage ::
-        JSRef WebGLRenderingContextBase -> GLclampf -> GLboolean -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.sampleCoverage Mozilla WebGLRenderingContextBase.sampleCoverage documentation> 
-sampleCoverage ::
-               (MonadIO m, IsWebGLRenderingContextBase self) =>
-                 self -> GLclampf -> GLboolean -> m ()
-sampleCoverage self value invert
-  = liftIO
-      (js_sampleCoverage
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         value
-         invert)
- 
-foreign import javascript unsafe "$1[\"scissor\"]($2, $3, $4, $5)"
-        js_scissor ::
-        JSRef WebGLRenderingContextBase ->
-          GLint -> GLint -> GLsizei -> GLsizei -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.scissor Mozilla WebGLRenderingContextBase.scissor documentation> 
-scissor ::
-        (MonadIO m, IsWebGLRenderingContextBase self) =>
-          self -> GLint -> GLint -> GLsizei -> GLsizei -> m ()
-scissor self x y width height
-  = liftIO
-      (js_scissor
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         x
-         y
-         width
-         height)
- 
-foreign import javascript unsafe "$1[\"shaderSource\"]($2, $3)"
-        js_shaderSource ::
-        JSRef WebGLRenderingContextBase ->
-          JSRef WebGLShader -> JSString -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.shaderSource Mozilla WebGLRenderingContextBase.shaderSource documentation> 
-shaderSource ::
-             (MonadIO m, IsWebGLRenderingContextBase self, ToJSString string) =>
-               self -> Maybe WebGLShader -> string -> m ()
-shaderSource self shader string
-  = liftIO
-      (js_shaderSource
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         (maybe jsNull pToJSRef shader)
-         (toJSString string))
- 
-foreign import javascript unsafe "$1[\"stencilFunc\"]($2, $3, $4)"
-        js_stencilFunc ::
-        JSRef WebGLRenderingContextBase ->
-          GLenum -> GLint -> GLuint -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.stencilFunc Mozilla WebGLRenderingContextBase.stencilFunc documentation> 
-stencilFunc ::
-            (MonadIO m, IsWebGLRenderingContextBase self) =>
-              self -> GLenum -> GLint -> GLuint -> m ()
-stencilFunc self func ref mask
-  = liftIO
-      (js_stencilFunc
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         func
-         ref
-         mask)
- 
-foreign import javascript unsafe
-        "$1[\"stencilFuncSeparate\"]($2,\n$3, $4, $5)"
-        js_stencilFuncSeparate ::
-        JSRef WebGLRenderingContextBase ->
-          GLenum -> GLenum -> GLint -> GLuint -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.stencilFuncSeparate Mozilla WebGLRenderingContextBase.stencilFuncSeparate documentation> 
-stencilFuncSeparate ::
-                    (MonadIO m, IsWebGLRenderingContextBase self) =>
-                      self -> GLenum -> GLenum -> GLint -> GLuint -> m ()
-stencilFuncSeparate self face func ref mask
-  = liftIO
-      (js_stencilFuncSeparate
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         face
-         func
-         ref
-         mask)
- 
-foreign import javascript unsafe "$1[\"stencilMask\"]($2)"
-        js_stencilMask ::
-        JSRef WebGLRenderingContextBase -> GLuint -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.stencilMask Mozilla WebGLRenderingContextBase.stencilMask documentation> 
-stencilMask ::
-            (MonadIO m, IsWebGLRenderingContextBase self) =>
-              self -> GLuint -> m ()
-stencilMask self mask
-  = liftIO
-      (js_stencilMask
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         mask)
- 
-foreign import javascript unsafe
-        "$1[\"stencilMaskSeparate\"]($2,\n$3)" js_stencilMaskSeparate ::
-        JSRef WebGLRenderingContextBase -> GLenum -> GLuint -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.stencilMaskSeparate Mozilla WebGLRenderingContextBase.stencilMaskSeparate documentation> 
-stencilMaskSeparate ::
-                    (MonadIO m, IsWebGLRenderingContextBase self) =>
-                      self -> GLenum -> GLuint -> m ()
-stencilMaskSeparate self face mask
-  = liftIO
-      (js_stencilMaskSeparate
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         face
-         mask)
- 
-foreign import javascript unsafe "$1[\"stencilOp\"]($2, $3, $4)"
-        js_stencilOp ::
-        JSRef WebGLRenderingContextBase ->
-          GLenum -> GLenum -> GLenum -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.stencilOp Mozilla WebGLRenderingContextBase.stencilOp documentation> 
-stencilOp ::
-          (MonadIO m, IsWebGLRenderingContextBase self) =>
-            self -> GLenum -> GLenum -> GLenum -> m ()
-stencilOp self fail zfail zpass
-  = liftIO
-      (js_stencilOp
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         fail
-         zfail
-         zpass)
- 
-foreign import javascript unsafe
-        "$1[\"stencilOpSeparate\"]($2, $3,\n$4, $5)" js_stencilOpSeparate
-        ::
-        JSRef WebGLRenderingContextBase ->
-          GLenum -> GLenum -> GLenum -> GLenum -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.stencilOpSeparate Mozilla WebGLRenderingContextBase.stencilOpSeparate documentation> 
-stencilOpSeparate ::
-                  (MonadIO m, IsWebGLRenderingContextBase self) =>
-                    self -> GLenum -> GLenum -> GLenum -> GLenum -> m ()
-stencilOpSeparate self face fail zfail zpass
-  = liftIO
-      (js_stencilOpSeparate
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         face
-         fail
-         zfail
-         zpass)
- 
-foreign import javascript unsafe
-        "$1[\"texParameterf\"]($2, $3, $4)" js_texParameterf ::
-        JSRef WebGLRenderingContextBase ->
-          GLenum -> GLenum -> GLfloat -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.texParameterf Mozilla WebGLRenderingContextBase.texParameterf documentation> 
-texParameterf ::
-              (MonadIO m, IsWebGLRenderingContextBase self) =>
-                self -> GLenum -> GLenum -> GLfloat -> m ()
-texParameterf self target pname param
-  = liftIO
-      (js_texParameterf
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         target
-         pname
-         param)
- 
-foreign import javascript unsafe
-        "$1[\"texParameteri\"]($2, $3, $4)" js_texParameteri ::
-        JSRef WebGLRenderingContextBase ->
-          GLenum -> GLenum -> GLint -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.texParameteri Mozilla WebGLRenderingContextBase.texParameteri documentation> 
-texParameteri ::
-              (MonadIO m, IsWebGLRenderingContextBase self) =>
-                self -> GLenum -> GLenum -> GLint -> m ()
-texParameteri self target pname param
-  = liftIO
-      (js_texParameteri
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         target
-         pname
-         param)
- 
-foreign import javascript unsafe
-        "$1[\"texImage2D\"]($2, $3, $4, $5,\n$6, $7, $8, $9, $10)"
-        js_texImage2DView ::
-        JSRef WebGLRenderingContextBase ->
-          GLenum ->
-            GLint ->
-              GLenum ->
-                GLsizei ->
-                  GLsizei ->
-                    GLint -> GLenum -> GLenum -> JSRef ArrayBufferView -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.texImage2D Mozilla WebGLRenderingContextBase.texImage2D documentation> 
-texImage2DView ::
-               (MonadIO m, IsWebGLRenderingContextBase self,
-                IsArrayBufferView pixels) =>
-                 self ->
-                   GLenum ->
-                     GLint ->
-                       GLenum ->
-                         GLsizei ->
-                           GLsizei -> GLint -> GLenum -> GLenum -> Maybe pixels -> m ()
-texImage2DView self target level internalformat width height border
-  format type' pixels
-  = liftIO
-      (js_texImage2DView
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         target
-         level
-         internalformat
-         width
-         height
-         border
-         format
-         type'
-         (maybe jsNull (unArrayBufferView . toArrayBufferView) pixels))
- 
-foreign import javascript unsafe
-        "$1[\"texImage2D\"]($2, $3, $4, $5,\n$6, $7)" js_texImage2DData ::
-        JSRef WebGLRenderingContextBase ->
-          GLenum ->
-            GLint -> GLenum -> GLenum -> GLenum -> JSRef ImageData -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.texImage2D Mozilla WebGLRenderingContextBase.texImage2D documentation> 
-texImage2DData ::
-               (MonadIO m, IsWebGLRenderingContextBase self) =>
-                 self ->
-                   GLenum ->
-                     GLint -> GLenum -> GLenum -> GLenum -> Maybe ImageData -> m ()
-texImage2DData self target level internalformat format type' pixels
-  = liftIO
-      (js_texImage2DData
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         target
-         level
-         internalformat
-         format
-         type'
-         (maybe jsNull pToJSRef pixels))
- 
-foreign import javascript unsafe
-        "$1[\"texImage2D\"]($2, $3, $4, $5,\n$6, $7)" js_texImage2D ::
-        JSRef WebGLRenderingContextBase ->
-          GLenum ->
-            GLint ->
-              GLenum -> GLenum -> GLenum -> JSRef HTMLImageElement -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.texImage2D Mozilla WebGLRenderingContextBase.texImage2D documentation> 
-texImage2D ::
-           (MonadIO m, IsWebGLRenderingContextBase self) =>
-             self ->
-               GLenum ->
-                 GLint ->
-                   GLenum -> GLenum -> GLenum -> Maybe HTMLImageElement -> m ()
-texImage2D self target level internalformat format type' image
-  = liftIO
-      (js_texImage2D
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         target
-         level
-         internalformat
-         format
-         type'
-         (maybe jsNull pToJSRef image))
- 
-foreign import javascript unsafe
-        "$1[\"texImage2D\"]($2, $3, $4, $5,\n$6, $7)" js_texImage2DCanvas
-        ::
-        JSRef WebGLRenderingContextBase ->
-          GLenum ->
-            GLint ->
-              GLenum -> GLenum -> GLenum -> JSRef HTMLCanvasElement -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.texImage2D Mozilla WebGLRenderingContextBase.texImage2D documentation> 
-texImage2DCanvas ::
-                 (MonadIO m, IsWebGLRenderingContextBase self) =>
-                   self ->
-                     GLenum ->
-                       GLint ->
-                         GLenum -> GLenum -> GLenum -> Maybe HTMLCanvasElement -> m ()
-texImage2DCanvas self target level internalformat format type'
-  canvas
-  = liftIO
-      (js_texImage2DCanvas
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         target
-         level
-         internalformat
-         format
-         type'
-         (maybe jsNull pToJSRef canvas))
- 
-foreign import javascript unsafe
-        "$1[\"texImage2D\"]($2, $3, $4, $5,\n$6, $7)" js_texImage2DVideo ::
-        JSRef WebGLRenderingContextBase ->
-          GLenum ->
-            GLint ->
-              GLenum -> GLenum -> GLenum -> JSRef HTMLVideoElement -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.texImage2D Mozilla WebGLRenderingContextBase.texImage2D documentation> 
-texImage2DVideo ::
-                (MonadIO m, IsWebGLRenderingContextBase self) =>
-                  self ->
-                    GLenum ->
-                      GLint ->
-                        GLenum -> GLenum -> GLenum -> Maybe HTMLVideoElement -> m ()
-texImage2DVideo self target level internalformat format type' video
-  = liftIO
-      (js_texImage2DVideo
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         target
-         level
-         internalformat
-         format
-         type'
-         (maybe jsNull pToJSRef video))
- 
-foreign import javascript unsafe
-        "$1[\"texSubImage2D\"]($2, $3, $4,\n$5, $6, $7, $8, $9, $10)"
-        js_texSubImage2DView ::
-        JSRef WebGLRenderingContextBase ->
-          GLenum ->
-            GLint ->
-              GLint ->
-                GLint ->
-                  GLsizei ->
-                    GLsizei -> GLenum -> GLenum -> JSRef ArrayBufferView -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.texSubImage2D Mozilla WebGLRenderingContextBase.texSubImage2D documentation> 
-texSubImage2DView ::
-                  (MonadIO m, IsWebGLRenderingContextBase self,
-                   IsArrayBufferView pixels) =>
-                    self ->
-                      GLenum ->
-                        GLint ->
-                          GLint ->
-                            GLint ->
-                              GLsizei -> GLsizei -> GLenum -> GLenum -> Maybe pixels -> m ()
-texSubImage2DView self target level xoffset yoffset width height
-  format type' pixels
-  = liftIO
-      (js_texSubImage2DView
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         target
-         level
-         xoffset
-         yoffset
-         width
-         height
-         format
-         type'
-         (maybe jsNull (unArrayBufferView . toArrayBufferView) pixels))
- 
-foreign import javascript unsafe
-        "$1[\"texSubImage2D\"]($2, $3, $4,\n$5, $6, $7, $8)"
-        js_texSubImage2DData ::
-        JSRef WebGLRenderingContextBase ->
-          GLenum ->
-            GLint ->
-              GLint -> GLint -> GLenum -> GLenum -> JSRef ImageData -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.texSubImage2D Mozilla WebGLRenderingContextBase.texSubImage2D documentation> 
-texSubImage2DData ::
-                  (MonadIO m, IsWebGLRenderingContextBase self) =>
-                    self ->
-                      GLenum ->
-                        GLint ->
-                          GLint -> GLint -> GLenum -> GLenum -> Maybe ImageData -> m ()
-texSubImage2DData self target level xoffset yoffset format type'
-  pixels
-  = liftIO
-      (js_texSubImage2DData
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         target
-         level
-         xoffset
-         yoffset
-         format
-         type'
-         (maybe jsNull pToJSRef pixels))
- 
-foreign import javascript unsafe
-        "$1[\"texSubImage2D\"]($2, $3, $4,\n$5, $6, $7, $8)"
-        js_texSubImage2D ::
-        JSRef WebGLRenderingContextBase ->
-          GLenum ->
-            GLint ->
-              GLint ->
-                GLint -> GLenum -> GLenum -> JSRef HTMLImageElement -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.texSubImage2D Mozilla WebGLRenderingContextBase.texSubImage2D documentation> 
-texSubImage2D ::
-              (MonadIO m, IsWebGLRenderingContextBase self) =>
-                self ->
-                  GLenum ->
-                    GLint ->
-                      GLint ->
-                        GLint -> GLenum -> GLenum -> Maybe HTMLImageElement -> m ()
-texSubImage2D self target level xoffset yoffset format type' image
-  = liftIO
-      (js_texSubImage2D
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         target
-         level
-         xoffset
-         yoffset
-         format
-         type'
-         (maybe jsNull pToJSRef image))
- 
-foreign import javascript unsafe
-        "$1[\"texSubImage2D\"]($2, $3, $4,\n$5, $6, $7, $8)"
-        js_texSubImage2DCanvas ::
-        JSRef WebGLRenderingContextBase ->
-          GLenum ->
-            GLint ->
-              GLint ->
-                GLint -> GLenum -> GLenum -> JSRef HTMLCanvasElement -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.texSubImage2D Mozilla WebGLRenderingContextBase.texSubImage2D documentation> 
-texSubImage2DCanvas ::
-                    (MonadIO m, IsWebGLRenderingContextBase self) =>
-                      self ->
-                        GLenum ->
-                          GLint ->
-                            GLint ->
-                              GLint -> GLenum -> GLenum -> Maybe HTMLCanvasElement -> m ()
-texSubImage2DCanvas self target level xoffset yoffset format type'
-  canvas
-  = liftIO
-      (js_texSubImage2DCanvas
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         target
-         level
-         xoffset
-         yoffset
-         format
-         type'
-         (maybe jsNull pToJSRef canvas))
- 
-foreign import javascript unsafe
-        "$1[\"texSubImage2D\"]($2, $3, $4,\n$5, $6, $7, $8)"
-        js_texSubImage2DVideo ::
-        JSRef WebGLRenderingContextBase ->
-          GLenum ->
-            GLint ->
-              GLint ->
-                GLint -> GLenum -> GLenum -> JSRef HTMLVideoElement -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.texSubImage2D Mozilla WebGLRenderingContextBase.texSubImage2D documentation> 
-texSubImage2DVideo ::
-                   (MonadIO m, IsWebGLRenderingContextBase self) =>
-                     self ->
-                       GLenum ->
-                         GLint ->
-                           GLint ->
-                             GLint -> GLenum -> GLenum -> Maybe HTMLVideoElement -> m ()
-texSubImage2DVideo self target level xoffset yoffset format type'
-  video
-  = liftIO
-      (js_texSubImage2DVideo
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         target
-         level
-         xoffset
-         yoffset
-         format
-         type'
-         (maybe jsNull pToJSRef video))
- 
-foreign import javascript unsafe "$1[\"uniform1f\"]($2, $3)"
-        js_uniform1f ::
-        JSRef WebGLRenderingContextBase ->
-          JSRef WebGLUniformLocation -> GLfloat -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.uniform1f Mozilla WebGLRenderingContextBase.uniform1f documentation> 
-uniform1f ::
-          (MonadIO m, IsWebGLRenderingContextBase self) =>
-            self -> Maybe WebGLUniformLocation -> GLfloat -> m ()
-uniform1f self location x
-  = liftIO
-      (js_uniform1f
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         (maybe jsNull pToJSRef location)
-         x)
- 
-foreign import javascript unsafe "$1[\"uniform1fv\"]($2, $3)"
-        js_uniform1fv ::
-        JSRef WebGLRenderingContextBase ->
-          JSRef WebGLUniformLocation -> JSRef Float32Array -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.uniform1fv Mozilla WebGLRenderingContextBase.uniform1fv documentation> 
-uniform1fv ::
-           (MonadIO m, IsWebGLRenderingContextBase self, IsFloat32Array v) =>
-             self -> Maybe WebGLUniformLocation -> Maybe v -> m ()
-uniform1fv self location v
-  = liftIO
-      (js_uniform1fv
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         (maybe jsNull pToJSRef location)
-         (maybe jsNull (unFloat32Array . toFloat32Array) v))
- 
-foreign import javascript unsafe "$1[\"uniform1i\"]($2, $3)"
-        js_uniform1i ::
-        JSRef WebGLRenderingContextBase ->
-          JSRef WebGLUniformLocation -> GLint -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.uniform1i Mozilla WebGLRenderingContextBase.uniform1i documentation> 
-uniform1i ::
-          (MonadIO m, IsWebGLRenderingContextBase self) =>
-            self -> Maybe WebGLUniformLocation -> GLint -> m ()
-uniform1i self location x
-  = liftIO
-      (js_uniform1i
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         (maybe jsNull pToJSRef location)
-         x)
- 
-foreign import javascript unsafe "$1[\"uniform1iv\"]($2, $3)"
-        js_uniform1iv ::
-        JSRef WebGLRenderingContextBase ->
-          JSRef WebGLUniformLocation -> JSRef Int32Array -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.uniform1iv Mozilla WebGLRenderingContextBase.uniform1iv documentation> 
-uniform1iv ::
-           (MonadIO m, IsWebGLRenderingContextBase self, IsInt32Array v) =>
-             self -> Maybe WebGLUniformLocation -> Maybe v -> m ()
-uniform1iv self location v
-  = liftIO
-      (js_uniform1iv
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         (maybe jsNull pToJSRef location)
-         (maybe jsNull (unInt32Array . toInt32Array) v))
- 
-foreign import javascript unsafe "$1[\"uniform2f\"]($2, $3, $4)"
-        js_uniform2f ::
-        JSRef WebGLRenderingContextBase ->
-          JSRef WebGLUniformLocation -> GLfloat -> GLfloat -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.uniform2f Mozilla WebGLRenderingContextBase.uniform2f documentation> 
-uniform2f ::
-          (MonadIO m, IsWebGLRenderingContextBase self) =>
-            self -> Maybe WebGLUniformLocation -> GLfloat -> GLfloat -> m ()
-uniform2f self location x y
-  = liftIO
-      (js_uniform2f
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         (maybe jsNull pToJSRef location)
-         x
-         y)
- 
-foreign import javascript unsafe "$1[\"uniform2fv\"]($2, $3)"
-        js_uniform2fv ::
-        JSRef WebGLRenderingContextBase ->
-          JSRef WebGLUniformLocation -> JSRef Float32Array -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.uniform2fv Mozilla WebGLRenderingContextBase.uniform2fv documentation> 
-uniform2fv ::
-           (MonadIO m, IsWebGLRenderingContextBase self, IsFloat32Array v) =>
-             self -> Maybe WebGLUniformLocation -> Maybe v -> m ()
-uniform2fv self location v
-  = liftIO
-      (js_uniform2fv
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         (maybe jsNull pToJSRef location)
-         (maybe jsNull (unFloat32Array . toFloat32Array) v))
- 
-foreign import javascript unsafe "$1[\"uniform2i\"]($2, $3, $4)"
-        js_uniform2i ::
-        JSRef WebGLRenderingContextBase ->
-          JSRef WebGLUniformLocation -> GLint -> GLint -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.uniform2i Mozilla WebGLRenderingContextBase.uniform2i documentation> 
-uniform2i ::
-          (MonadIO m, IsWebGLRenderingContextBase self) =>
-            self -> Maybe WebGLUniformLocation -> GLint -> GLint -> m ()
-uniform2i self location x y
-  = liftIO
-      (js_uniform2i
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         (maybe jsNull pToJSRef location)
-         x
-         y)
- 
-foreign import javascript unsafe "$1[\"uniform2iv\"]($2, $3)"
-        js_uniform2iv ::
-        JSRef WebGLRenderingContextBase ->
-          JSRef WebGLUniformLocation -> JSRef Int32Array -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.uniform2iv Mozilla WebGLRenderingContextBase.uniform2iv documentation> 
-uniform2iv ::
-           (MonadIO m, IsWebGLRenderingContextBase self, IsInt32Array v) =>
-             self -> Maybe WebGLUniformLocation -> Maybe v -> m ()
-uniform2iv self location v
-  = liftIO
-      (js_uniform2iv
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         (maybe jsNull pToJSRef location)
-         (maybe jsNull (unInt32Array . toInt32Array) v))
- 
-foreign import javascript unsafe
-        "$1[\"uniform3f\"]($2, $3, $4, $5)" js_uniform3f ::
-        JSRef WebGLRenderingContextBase ->
-          JSRef WebGLUniformLocation ->
-            GLfloat -> GLfloat -> GLfloat -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.uniform3f Mozilla WebGLRenderingContextBase.uniform3f documentation> 
-uniform3f ::
-          (MonadIO m, IsWebGLRenderingContextBase self) =>
-            self ->
-              Maybe WebGLUniformLocation -> GLfloat -> GLfloat -> GLfloat -> m ()
-uniform3f self location x y z
-  = liftIO
-      (js_uniform3f
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         (maybe jsNull pToJSRef location)
-         x
-         y
-         z)
- 
-foreign import javascript unsafe "$1[\"uniform3fv\"]($2, $3)"
-        js_uniform3fv ::
-        JSRef WebGLRenderingContextBase ->
-          JSRef WebGLUniformLocation -> JSRef Float32Array -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.uniform3fv Mozilla WebGLRenderingContextBase.uniform3fv documentation> 
-uniform3fv ::
-           (MonadIO m, IsWebGLRenderingContextBase self, IsFloat32Array v) =>
-             self -> Maybe WebGLUniformLocation -> Maybe v -> m ()
-uniform3fv self location v
-  = liftIO
-      (js_uniform3fv
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         (maybe jsNull pToJSRef location)
-         (maybe jsNull (unFloat32Array . toFloat32Array) v))
- 
-foreign import javascript unsafe
-        "$1[\"uniform3i\"]($2, $3, $4, $5)" js_uniform3i ::
-        JSRef WebGLRenderingContextBase ->
-          JSRef WebGLUniformLocation -> GLint -> GLint -> GLint -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.uniform3i Mozilla WebGLRenderingContextBase.uniform3i documentation> 
-uniform3i ::
-          (MonadIO m, IsWebGLRenderingContextBase self) =>
-            self ->
-              Maybe WebGLUniformLocation -> GLint -> GLint -> GLint -> m ()
-uniform3i self location x y z
-  = liftIO
-      (js_uniform3i
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         (maybe jsNull pToJSRef location)
-         x
-         y
-         z)
- 
-foreign import javascript unsafe "$1[\"uniform3iv\"]($2, $3)"
-        js_uniform3iv ::
-        JSRef WebGLRenderingContextBase ->
-          JSRef WebGLUniformLocation -> JSRef Int32Array -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.uniform3iv Mozilla WebGLRenderingContextBase.uniform3iv documentation> 
-uniform3iv ::
-           (MonadIO m, IsWebGLRenderingContextBase self, IsInt32Array v) =>
-             self -> Maybe WebGLUniformLocation -> Maybe v -> m ()
-uniform3iv self location v
-  = liftIO
-      (js_uniform3iv
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         (maybe jsNull pToJSRef location)
-         (maybe jsNull (unInt32Array . toInt32Array) v))
- 
-foreign import javascript unsafe
-        "$1[\"uniform4f\"]($2, $3, $4, $5,\n$6)" js_uniform4f ::
-        JSRef WebGLRenderingContextBase ->
-          JSRef WebGLUniformLocation ->
-            GLfloat -> GLfloat -> GLfloat -> GLfloat -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.uniform4f Mozilla WebGLRenderingContextBase.uniform4f documentation> 
-uniform4f ::
-          (MonadIO m, IsWebGLRenderingContextBase self) =>
-            self ->
-              Maybe WebGLUniformLocation ->
-                GLfloat -> GLfloat -> GLfloat -> GLfloat -> m ()
-uniform4f self location x y z w
-  = liftIO
-      (js_uniform4f
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         (maybe jsNull pToJSRef location)
-         x
-         y
-         z
-         w)
- 
-foreign import javascript unsafe "$1[\"uniform4fv\"]($2, $3)"
-        js_uniform4fv ::
-        JSRef WebGLRenderingContextBase ->
-          JSRef WebGLUniformLocation -> JSRef Float32Array -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.uniform4fv Mozilla WebGLRenderingContextBase.uniform4fv documentation> 
-uniform4fv ::
-           (MonadIO m, IsWebGLRenderingContextBase self, IsFloat32Array v) =>
-             self -> Maybe WebGLUniformLocation -> Maybe v -> m ()
-uniform4fv self location v
-  = liftIO
-      (js_uniform4fv
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         (maybe jsNull pToJSRef location)
-         (maybe jsNull (unFloat32Array . toFloat32Array) v))
- 
-foreign import javascript unsafe
-        "$1[\"uniform4i\"]($2, $3, $4, $5,\n$6)" js_uniform4i ::
-        JSRef WebGLRenderingContextBase ->
-          JSRef WebGLUniformLocation ->
-            GLint -> GLint -> GLint -> GLint -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.uniform4i Mozilla WebGLRenderingContextBase.uniform4i documentation> 
-uniform4i ::
-          (MonadIO m, IsWebGLRenderingContextBase self) =>
-            self ->
-              Maybe WebGLUniformLocation ->
-                GLint -> GLint -> GLint -> GLint -> m ()
-uniform4i self location x y z w
-  = liftIO
-      (js_uniform4i
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         (maybe jsNull pToJSRef location)
-         x
-         y
-         z
-         w)
- 
-foreign import javascript unsafe "$1[\"uniform4iv\"]($2, $3)"
-        js_uniform4iv ::
-        JSRef WebGLRenderingContextBase ->
-          JSRef WebGLUniformLocation -> JSRef Int32Array -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.uniform4iv Mozilla WebGLRenderingContextBase.uniform4iv documentation> 
-uniform4iv ::
-           (MonadIO m, IsWebGLRenderingContextBase self, IsInt32Array v) =>
-             self -> Maybe WebGLUniformLocation -> Maybe v -> m ()
-uniform4iv self location v
-  = liftIO
-      (js_uniform4iv
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         (maybe jsNull pToJSRef location)
-         (maybe jsNull (unInt32Array . toInt32Array) v))
- 
-foreign import javascript unsafe
-        "$1[\"uniformMatrix2fv\"]($2, $3,\n$4)" js_uniformMatrix2fv ::
-        JSRef WebGLRenderingContextBase ->
-          JSRef WebGLUniformLocation ->
-            GLboolean -> JSRef Float32Array -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.uniformMatrix2fv Mozilla WebGLRenderingContextBase.uniformMatrix2fv documentation> 
-uniformMatrix2fv ::
-                 (MonadIO m, IsWebGLRenderingContextBase self,
-                  IsFloat32Array array) =>
-                   self ->
-                     Maybe WebGLUniformLocation -> GLboolean -> Maybe array -> m ()
-uniformMatrix2fv self location transpose array
-  = liftIO
-      (js_uniformMatrix2fv
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         (maybe jsNull pToJSRef location)
-         transpose
-         (maybe jsNull (unFloat32Array . toFloat32Array) array))
- 
-foreign import javascript unsafe
-        "$1[\"uniformMatrix3fv\"]($2, $3,\n$4)" js_uniformMatrix3fv ::
-        JSRef WebGLRenderingContextBase ->
-          JSRef WebGLUniformLocation ->
-            GLboolean -> JSRef Float32Array -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.uniformMatrix3fv Mozilla WebGLRenderingContextBase.uniformMatrix3fv documentation> 
-uniformMatrix3fv ::
-                 (MonadIO m, IsWebGLRenderingContextBase self,
-                  IsFloat32Array array) =>
-                   self ->
-                     Maybe WebGLUniformLocation -> GLboolean -> Maybe array -> m ()
-uniformMatrix3fv self location transpose array
-  = liftIO
-      (js_uniformMatrix3fv
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         (maybe jsNull pToJSRef location)
-         transpose
-         (maybe jsNull (unFloat32Array . toFloat32Array) array))
- 
-foreign import javascript unsafe
-        "$1[\"uniformMatrix4fv\"]($2, $3,\n$4)" js_uniformMatrix4fv ::
-        JSRef WebGLRenderingContextBase ->
-          JSRef WebGLUniformLocation ->
-            GLboolean -> JSRef Float32Array -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.uniformMatrix4fv Mozilla WebGLRenderingContextBase.uniformMatrix4fv documentation> 
-uniformMatrix4fv ::
-                 (MonadIO m, IsWebGLRenderingContextBase self,
-                  IsFloat32Array array) =>
-                   self ->
-                     Maybe WebGLUniformLocation -> GLboolean -> Maybe array -> m ()
-uniformMatrix4fv self location transpose array
-  = liftIO
-      (js_uniformMatrix4fv
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         (maybe jsNull pToJSRef location)
-         transpose
-         (maybe jsNull (unFloat32Array . toFloat32Array) array))
- 
-foreign import javascript unsafe "$1[\"useProgram\"]($2)"
-        js_useProgram ::
-        JSRef WebGLRenderingContextBase -> JSRef WebGLProgram -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.useProgram Mozilla WebGLRenderingContextBase.useProgram documentation> 
-useProgram ::
-           (MonadIO m, IsWebGLRenderingContextBase self) =>
-             self -> Maybe WebGLProgram -> m ()
-useProgram self program
-  = liftIO
-      (js_useProgram
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         (maybe jsNull pToJSRef program))
- 
-foreign import javascript unsafe "$1[\"validateProgram\"]($2)"
-        js_validateProgram ::
-        JSRef WebGLRenderingContextBase -> JSRef WebGLProgram -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.validateProgram Mozilla WebGLRenderingContextBase.validateProgram documentation> 
-validateProgram ::
-                (MonadIO m, IsWebGLRenderingContextBase self) =>
-                  self -> Maybe WebGLProgram -> m ()
-validateProgram self program
-  = liftIO
-      (js_validateProgram
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         (maybe jsNull pToJSRef program))
- 
-foreign import javascript unsafe "$1[\"vertexAttrib1f\"]($2, $3)"
-        js_vertexAttrib1f ::
-        JSRef WebGLRenderingContextBase -> GLuint -> GLfloat -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.vertexAttrib1f Mozilla WebGLRenderingContextBase.vertexAttrib1f documentation> 
-vertexAttrib1f ::
-               (MonadIO m, IsWebGLRenderingContextBase self) =>
-                 self -> GLuint -> GLfloat -> m ()
-vertexAttrib1f self indx x
-  = liftIO
-      (js_vertexAttrib1f
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         indx
-         x)
- 
-foreign import javascript unsafe "$1[\"vertexAttrib1fv\"]($2, $3)"
-        js_vertexAttrib1fv ::
-        JSRef WebGLRenderingContextBase ->
-          GLuint -> JSRef Float32Array -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.vertexAttrib1fv Mozilla WebGLRenderingContextBase.vertexAttrib1fv documentation> 
-vertexAttrib1fv ::
-                (MonadIO m, IsWebGLRenderingContextBase self,
-                 IsFloat32Array values) =>
-                  self -> GLuint -> Maybe values -> m ()
-vertexAttrib1fv self indx values
-  = liftIO
-      (js_vertexAttrib1fv
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         indx
-         (maybe jsNull (unFloat32Array . toFloat32Array) values))
- 
-foreign import javascript unsafe
-        "$1[\"vertexAttrib2f\"]($2, $3, $4)" js_vertexAttrib2f ::
-        JSRef WebGLRenderingContextBase ->
-          GLuint -> GLfloat -> GLfloat -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.vertexAttrib2f Mozilla WebGLRenderingContextBase.vertexAttrib2f documentation> 
-vertexAttrib2f ::
-               (MonadIO m, IsWebGLRenderingContextBase self) =>
-                 self -> GLuint -> GLfloat -> GLfloat -> m ()
-vertexAttrib2f self indx x y
-  = liftIO
-      (js_vertexAttrib2f
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         indx
-         x
-         y)
- 
-foreign import javascript unsafe "$1[\"vertexAttrib2fv\"]($2, $3)"
-        js_vertexAttrib2fv ::
-        JSRef WebGLRenderingContextBase ->
-          GLuint -> JSRef Float32Array -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.vertexAttrib2fv Mozilla WebGLRenderingContextBase.vertexAttrib2fv documentation> 
-vertexAttrib2fv ::
-                (MonadIO m, IsWebGLRenderingContextBase self,
-                 IsFloat32Array values) =>
-                  self -> GLuint -> Maybe values -> m ()
-vertexAttrib2fv self indx values
-  = liftIO
-      (js_vertexAttrib2fv
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         indx
-         (maybe jsNull (unFloat32Array . toFloat32Array) values))
- 
-foreign import javascript unsafe
-        "$1[\"vertexAttrib3f\"]($2, $3, $4,\n$5)" js_vertexAttrib3f ::
-        JSRef WebGLRenderingContextBase ->
-          GLuint -> GLfloat -> GLfloat -> GLfloat -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.vertexAttrib3f Mozilla WebGLRenderingContextBase.vertexAttrib3f documentation> 
-vertexAttrib3f ::
-               (MonadIO m, IsWebGLRenderingContextBase self) =>
-                 self -> GLuint -> GLfloat -> GLfloat -> GLfloat -> m ()
-vertexAttrib3f self indx x y z
-  = liftIO
-      (js_vertexAttrib3f
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         indx
-         x
-         y
-         z)
- 
-foreign import javascript unsafe "$1[\"vertexAttrib3fv\"]($2, $3)"
-        js_vertexAttrib3fv ::
-        JSRef WebGLRenderingContextBase ->
-          GLuint -> JSRef Float32Array -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.vertexAttrib3fv Mozilla WebGLRenderingContextBase.vertexAttrib3fv documentation> 
-vertexAttrib3fv ::
-                (MonadIO m, IsWebGLRenderingContextBase self,
-                 IsFloat32Array values) =>
-                  self -> GLuint -> Maybe values -> m ()
-vertexAttrib3fv self indx values
-  = liftIO
-      (js_vertexAttrib3fv
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         indx
-         (maybe jsNull (unFloat32Array . toFloat32Array) values))
- 
-foreign import javascript unsafe
-        "$1[\"vertexAttrib4f\"]($2, $3, $4,\n$5, $6)" js_vertexAttrib4f ::
-        JSRef WebGLRenderingContextBase ->
-          GLuint -> GLfloat -> GLfloat -> GLfloat -> GLfloat -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.vertexAttrib4f Mozilla WebGLRenderingContextBase.vertexAttrib4f documentation> 
-vertexAttrib4f ::
-               (MonadIO m, IsWebGLRenderingContextBase self) =>
-                 self -> GLuint -> GLfloat -> GLfloat -> GLfloat -> GLfloat -> m ()
-vertexAttrib4f self indx x y z w
-  = liftIO
-      (js_vertexAttrib4f
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         indx
-         x
-         y
-         z
-         w)
- 
-foreign import javascript unsafe "$1[\"vertexAttrib4fv\"]($2, $3)"
-        js_vertexAttrib4fv ::
-        JSRef WebGLRenderingContextBase ->
-          GLuint -> JSRef Float32Array -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.vertexAttrib4fv Mozilla WebGLRenderingContextBase.vertexAttrib4fv documentation> 
-vertexAttrib4fv ::
-                (MonadIO m, IsWebGLRenderingContextBase self,
-                 IsFloat32Array values) =>
-                  self -> GLuint -> Maybe values -> m ()
-vertexAttrib4fv self indx values
-  = liftIO
-      (js_vertexAttrib4fv
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         indx
-         (maybe jsNull (unFloat32Array . toFloat32Array) values))
- 
-foreign import javascript unsafe
-        "$1[\"vertexAttribPointer\"]($2,\n$3, $4, $5, $6, $7)"
-        js_vertexAttribPointer ::
-        JSRef WebGLRenderingContextBase ->
-          GLuint ->
-            GLint -> GLenum -> GLboolean -> GLsizei -> Double -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.vertexAttribPointer Mozilla WebGLRenderingContextBase.vertexAttribPointer documentation> 
-vertexAttribPointer ::
-                    (MonadIO m, IsWebGLRenderingContextBase self) =>
-                      self ->
-                        GLuint ->
-                          GLint -> GLenum -> GLboolean -> GLsizei -> GLintptr -> m ()
-vertexAttribPointer self indx size type' normalized stride offset
-  = liftIO
-      (js_vertexAttribPointer
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         indx
-         size
-         type'
-         normalized
-         stride
-         (fromIntegral offset))
- 
-foreign import javascript unsafe "$1[\"viewport\"]($2, $3, $4, $5)"
-        js_viewport ::
-        JSRef WebGLRenderingContextBase ->
-          GLint -> GLint -> GLsizei -> GLsizei -> IO ()
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.viewport Mozilla WebGLRenderingContextBase.viewport documentation> 
-viewport ::
-         (MonadIO m, IsWebGLRenderingContextBase self) =>
-           self -> GLint -> GLint -> GLsizei -> GLsizei -> m ()
-viewport self x y width height
-  = liftIO
-      (js_viewport
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self))
-         x
-         y
-         width
-         height)
-pattern DEPTH_BUFFER_BIT = 256
-pattern STENCIL_BUFFER_BIT = 1024
-pattern COLOR_BUFFER_BIT = 16384
-pattern POINTS = 0
-pattern LINES = 1
-pattern LINE_LOOP = 2
-pattern LINE_STRIP = 3
-pattern TRIANGLES = 4
-pattern TRIANGLE_STRIP = 5
-pattern TRIANGLE_FAN = 6
-pattern ZERO = 0
-pattern ONE = 1
-pattern SRC_COLOR = 768
-pattern ONE_MINUS_SRC_COLOR = 769
-pattern SRC_ALPHA = 770
-pattern ONE_MINUS_SRC_ALPHA = 771
-pattern DST_ALPHA = 772
-pattern ONE_MINUS_DST_ALPHA = 773
-pattern DST_COLOR = 774
-pattern ONE_MINUS_DST_COLOR = 775
-pattern SRC_ALPHA_SATURATE = 776
-pattern FUNC_ADD = 32774
-pattern BLEND_EQUATION = 32777
-pattern BLEND_EQUATION_RGB = 32777
-pattern BLEND_EQUATION_ALPHA = 34877
-pattern FUNC_SUBTRACT = 32778
-pattern FUNC_REVERSE_SUBTRACT = 32779
-pattern BLEND_DST_RGB = 32968
-pattern BLEND_SRC_RGB = 32969
-pattern BLEND_DST_ALPHA = 32970
-pattern BLEND_SRC_ALPHA = 32971
-pattern CONSTANT_COLOR = 32769
-pattern ONE_MINUS_CONSTANT_COLOR = 32770
-pattern CONSTANT_ALPHA = 32771
-pattern ONE_MINUS_CONSTANT_ALPHA = 32772
-pattern BLEND_COLOR = 32773
-pattern ARRAY_BUFFER = 34962
-pattern ELEMENT_ARRAY_BUFFER = 34963
-pattern ARRAY_BUFFER_BINDING = 34964
-pattern ELEMENT_ARRAY_BUFFER_BINDING = 34965
-pattern STREAM_DRAW = 35040
-pattern STATIC_DRAW = 35044
-pattern DYNAMIC_DRAW = 35048
-pattern BUFFER_SIZE = 34660
-pattern BUFFER_USAGE = 34661
-pattern CURRENT_VERTEX_ATTRIB = 34342
-pattern FRONT = 1028
-pattern BACK = 1029
-pattern FRONT_AND_BACK = 1032
-pattern TEXTURE_2D = 3553
-pattern CULL_FACE = 2884
-pattern BLEND = 3042
-pattern DITHER = 3024
-pattern STENCIL_TEST = 2960
-pattern DEPTH_TEST = 2929
-pattern SCISSOR_TEST = 3089
-pattern POLYGON_OFFSET_FILL = 32823
-pattern SAMPLE_ALPHA_TO_COVERAGE = 32926
-pattern SAMPLE_COVERAGE = 32928
-pattern NO_ERROR = 0
-pattern INVALID_ENUM = 1280
-pattern INVALID_VALUE = 1281
-pattern INVALID_OPERATION = 1282
-pattern OUT_OF_MEMORY = 1285
-pattern CW = 2304
-pattern CCW = 2305
-pattern LINE_WIDTH = 2849
-pattern ALIASED_POINT_SIZE_RANGE = 33901
-pattern ALIASED_LINE_WIDTH_RANGE = 33902
-pattern CULL_FACE_MODE = 2885
-pattern FRONT_FACE = 2886
-pattern DEPTH_RANGE = 2928
-pattern DEPTH_WRITEMASK = 2930
-pattern DEPTH_CLEAR_VALUE = 2931
-pattern DEPTH_FUNC = 2932
-pattern STENCIL_CLEAR_VALUE = 2961
-pattern STENCIL_FUNC = 2962
-pattern STENCIL_FAIL = 2964
-pattern STENCIL_PASS_DEPTH_FAIL = 2965
-pattern STENCIL_PASS_DEPTH_PASS = 2966
-pattern STENCIL_REF = 2967
-pattern STENCIL_VALUE_MASK = 2963
-pattern STENCIL_WRITEMASK = 2968
-pattern STENCIL_BACK_FUNC = 34816
-pattern STENCIL_BACK_FAIL = 34817
-pattern STENCIL_BACK_PASS_DEPTH_FAIL = 34818
-pattern STENCIL_BACK_PASS_DEPTH_PASS = 34819
-pattern STENCIL_BACK_REF = 36003
-pattern STENCIL_BACK_VALUE_MASK = 36004
-pattern STENCIL_BACK_WRITEMASK = 36005
-pattern VIEWPORT = 2978
-pattern SCISSOR_BOX = 3088
-pattern COLOR_CLEAR_VALUE = 3106
-pattern COLOR_WRITEMASK = 3107
-pattern UNPACK_ALIGNMENT = 3317
-pattern PACK_ALIGNMENT = 3333
-pattern MAX_TEXTURE_SIZE = 3379
-pattern MAX_VIEWPORT_DIMS = 3386
-pattern SUBPIXEL_BITS = 3408
-pattern RED_BITS = 3410
-pattern GREEN_BITS = 3411
-pattern BLUE_BITS = 3412
-pattern ALPHA_BITS = 3413
-pattern DEPTH_BITS = 3414
-pattern STENCIL_BITS = 3415
-pattern POLYGON_OFFSET_UNITS = 10752
-pattern POLYGON_OFFSET_FACTOR = 32824
-pattern TEXTURE_BINDING_2D = 32873
-pattern SAMPLE_BUFFERS = 32936
-pattern SAMPLES = 32937
-pattern SAMPLE_COVERAGE_VALUE = 32938
-pattern SAMPLE_COVERAGE_INVERT = 32939
-pattern COMPRESSED_TEXTURE_FORMATS = 34467
-pattern DONT_CARE = 4352
-pattern FASTEST = 4353
-pattern NICEST = 4354
-pattern GENERATE_MIPMAP_HINT = 33170
-pattern BYTE = 5120
-pattern UNSIGNED_BYTE = 5121
-pattern SHORT = 5122
-pattern UNSIGNED_SHORT = 5123
-pattern INT = 5124
-pattern UNSIGNED_INT = 5125
-pattern FLOAT = 5126
-pattern DEPTH_COMPONENT = 6402
-pattern ALPHA = 6406
-pattern RGB = 6407
-pattern RGBA = 6408
-pattern LUMINANCE = 6409
-pattern LUMINANCE_ALPHA = 6410
-pattern UNSIGNED_SHORT_4_4_4_4 = 32819
-pattern UNSIGNED_SHORT_5_5_5_1 = 32820
-pattern UNSIGNED_SHORT_5_6_5 = 33635
-pattern FRAGMENT_SHADER = 35632
-pattern VERTEX_SHADER = 35633
-pattern MAX_VERTEX_ATTRIBS = 34921
-pattern MAX_VERTEX_UNIFORM_VECTORS = 36347
-pattern MAX_VARYING_VECTORS = 36348
-pattern MAX_COMBINED_TEXTURE_IMAGE_UNITS = 35661
-pattern MAX_VERTEX_TEXTURE_IMAGE_UNITS = 35660
-pattern MAX_TEXTURE_IMAGE_UNITS = 34930
-pattern MAX_FRAGMENT_UNIFORM_VECTORS = 36349
-pattern SHADER_TYPE = 35663
-pattern DELETE_STATUS = 35712
-pattern LINK_STATUS = 35714
-pattern VALIDATE_STATUS = 35715
-pattern ATTACHED_SHADERS = 35717
-pattern ACTIVE_UNIFORMS = 35718
-pattern ACTIVE_ATTRIBUTES = 35721
-pattern SHADING_LANGUAGE_VERSION = 35724
-pattern CURRENT_PROGRAM = 35725
-pattern NEVER = 512
-pattern LESS = 513
-pattern EQUAL = 514
-pattern LEQUAL = 515
-pattern GREATER = 516
-pattern NOTEQUAL = 517
-pattern GEQUAL = 518
-pattern ALWAYS = 519
-pattern KEEP = 7680
-pattern REPLACE = 7681
-pattern INCR = 7682
-pattern DECR = 7683
-pattern INVERT = 5386
-pattern INCR_WRAP = 34055
-pattern DECR_WRAP = 34056
-pattern VENDOR = 7936
-pattern RENDERER = 7937
-pattern VERSION = 7938
-pattern NEAREST = 9728
-pattern LINEAR = 9729
-pattern NEAREST_MIPMAP_NEAREST = 9984
-pattern LINEAR_MIPMAP_NEAREST = 9985
-pattern NEAREST_MIPMAP_LINEAR = 9986
-pattern LINEAR_MIPMAP_LINEAR = 9987
-pattern TEXTURE_MAG_FILTER = 10240
-pattern TEXTURE_MIN_FILTER = 10241
-pattern TEXTURE_WRAP_S = 10242
-pattern TEXTURE_WRAP_T = 10243
-pattern TEXTURE = 5890
-pattern TEXTURE_CUBE_MAP = 34067
-pattern TEXTURE_BINDING_CUBE_MAP = 34068
-pattern TEXTURE_CUBE_MAP_POSITIVE_X = 34069
-pattern TEXTURE_CUBE_MAP_NEGATIVE_X = 34070
-pattern TEXTURE_CUBE_MAP_POSITIVE_Y = 34071
-pattern TEXTURE_CUBE_MAP_NEGATIVE_Y = 34072
-pattern TEXTURE_CUBE_MAP_POSITIVE_Z = 34073
-pattern TEXTURE_CUBE_MAP_NEGATIVE_Z = 34074
-pattern MAX_CUBE_MAP_TEXTURE_SIZE = 34076
-pattern TEXTURE0 = 33984
-pattern TEXTURE1 = 33985
-pattern TEXTURE2 = 33986
-pattern TEXTURE3 = 33987
-pattern TEXTURE4 = 33988
-pattern TEXTURE5 = 33989
-pattern TEXTURE6 = 33990
-pattern TEXTURE7 = 33991
-pattern TEXTURE8 = 33992
-pattern TEXTURE9 = 33993
-pattern TEXTURE10 = 33994
-pattern TEXTURE11 = 33995
-pattern TEXTURE12 = 33996
-pattern TEXTURE13 = 33997
-pattern TEXTURE14 = 33998
-pattern TEXTURE15 = 33999
-pattern TEXTURE16 = 34000
-pattern TEXTURE17 = 34001
-pattern TEXTURE18 = 34002
-pattern TEXTURE19 = 34003
-pattern TEXTURE20 = 34004
-pattern TEXTURE21 = 34005
-pattern TEXTURE22 = 34006
-pattern TEXTURE23 = 34007
-pattern TEXTURE24 = 34008
-pattern TEXTURE25 = 34009
-pattern TEXTURE26 = 34010
-pattern TEXTURE27 = 34011
-pattern TEXTURE28 = 34012
-pattern TEXTURE29 = 34013
-pattern TEXTURE30 = 34014
-pattern TEXTURE31 = 34015
-pattern ACTIVE_TEXTURE = 34016
-pattern REPEAT = 10497
-pattern CLAMP_TO_EDGE = 33071
-pattern MIRRORED_REPEAT = 33648
-pattern FLOAT_VEC2 = 35664
-pattern FLOAT_VEC3 = 35665
-pattern FLOAT_VEC4 = 35666
-pattern INT_VEC2 = 35667
-pattern INT_VEC3 = 35668
-pattern INT_VEC4 = 35669
-pattern BOOL = 35670
-pattern BOOL_VEC2 = 35671
-pattern BOOL_VEC3 = 35672
-pattern BOOL_VEC4 = 35673
-pattern FLOAT_MAT2 = 35674
-pattern FLOAT_MAT3 = 35675
-pattern FLOAT_MAT4 = 35676
-pattern SAMPLER_2D = 35678
-pattern SAMPLER_CUBE = 35680
-pattern VERTEX_ATTRIB_ARRAY_ENABLED = 34338
-pattern VERTEX_ATTRIB_ARRAY_SIZE = 34339
-pattern VERTEX_ATTRIB_ARRAY_STRIDE = 34340
-pattern VERTEX_ATTRIB_ARRAY_TYPE = 34341
-pattern VERTEX_ATTRIB_ARRAY_NORMALIZED = 34922
-pattern VERTEX_ATTRIB_ARRAY_POINTER = 34373
-pattern VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 34975
-pattern IMPLEMENTATION_COLOR_READ_TYPE = 35738
-pattern IMPLEMENTATION_COLOR_READ_FORMAT = 35739
-pattern COMPILE_STATUS = 35713
-pattern LOW_FLOAT = 36336
-pattern MEDIUM_FLOAT = 36337
-pattern HIGH_FLOAT = 36338
-pattern LOW_INT = 36339
-pattern MEDIUM_INT = 36340
-pattern HIGH_INT = 36341
-pattern FRAMEBUFFER = 36160
-pattern RENDERBUFFER = 36161
-pattern RGBA4 = 32854
-pattern RGB5_A1 = 32855
-pattern RGB565 = 36194
-pattern DEPTH_COMPONENT16 = 33189
-pattern STENCIL_INDEX = 6401
-pattern STENCIL_INDEX8 = 36168
-pattern DEPTH_STENCIL = 34041
-pattern RENDERBUFFER_WIDTH = 36162
-pattern RENDERBUFFER_HEIGHT = 36163
-pattern RENDERBUFFER_INTERNAL_FORMAT = 36164
-pattern RENDERBUFFER_RED_SIZE = 36176
-pattern RENDERBUFFER_GREEN_SIZE = 36177
-pattern RENDERBUFFER_BLUE_SIZE = 36178
-pattern RENDERBUFFER_ALPHA_SIZE = 36179
-pattern RENDERBUFFER_DEPTH_SIZE = 36180
-pattern RENDERBUFFER_STENCIL_SIZE = 36181
-pattern FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = 36048
-pattern FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = 36049
-pattern FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = 36050
-pattern FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = 36051
-pattern COLOR_ATTACHMENT0 = 36064
-pattern DEPTH_ATTACHMENT = 36096
-pattern STENCIL_ATTACHMENT = 36128
-pattern DEPTH_STENCIL_ATTACHMENT = 33306
-pattern NONE = 0
-pattern FRAMEBUFFER_COMPLETE = 36053
-pattern FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 36054
-pattern FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 36055
-pattern FRAMEBUFFER_INCOMPLETE_DIMENSIONS = 36057
-pattern FRAMEBUFFER_UNSUPPORTED = 36061
-pattern FRAMEBUFFER_BINDING = 36006
-pattern RENDERBUFFER_BINDING = 36007
-pattern MAX_RENDERBUFFER_SIZE = 34024
-pattern INVALID_FRAMEBUFFER_OPERATION = 1286
-pattern UNPACK_FLIP_Y_WEBGL = 37440
-pattern UNPACK_PREMULTIPLY_ALPHA_WEBGL = 37441
-pattern CONTEXT_LOST_WEBGL = 37442
-pattern UNPACK_COLORSPACE_CONVERSION_WEBGL = 37443
-pattern BROWSER_DEFAULT_WEBGL = 37444
- 
-foreign import javascript unsafe "$1[\"drawingBufferWidth\"]"
-        js_getDrawingBufferWidth ::
-        JSRef WebGLRenderingContextBase -> IO GLsizei
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.drawingBufferWidth Mozilla WebGLRenderingContextBase.drawingBufferWidth documentation> 
-getDrawingBufferWidth ::
-                      (MonadIO m, IsWebGLRenderingContextBase self) => self -> m GLsizei
-getDrawingBufferWidth self
-  = liftIO
-      (js_getDrawingBufferWidth
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self)))
- 
-foreign import javascript unsafe "$1[\"drawingBufferHeight\"]"
-        js_getDrawingBufferHeight ::
-        JSRef WebGLRenderingContextBase -> IO GLsizei
-
--- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.drawingBufferHeight Mozilla WebGLRenderingContextBase.drawingBufferHeight documentation> 
-getDrawingBufferHeight ::
-                       (MonadIO m, IsWebGLRenderingContextBase self) => self -> m GLsizei
-getDrawingBufferHeight self
-  = liftIO
-      (js_getDrawingBufferHeight
-         (unWebGLRenderingContextBase (toWebGLRenderingContextBase self)))
+import GHCJS.Types (JSRef(..), JSString)
+import GHCJS.Foreign (jsNull)
+import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
+import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
+import GHCJS.Marshal.Pure (PToJSRef(..), PFromJSRef(..))
+import Control.Monad.IO.Class (MonadIO(..))
+import Data.Int (Int64)
+import Data.Word (Word, Word64)
+import GHCJS.DOM.Types
+import Control.Applicative ((<$>))
+import GHCJS.DOM.EventTargetClosures (EventName, unsafeEventName)
+import GHCJS.DOM.Enums
+ 
+foreign import javascript unsafe "$1[\"activeTexture\"]($2)"
+        js_activeTexture :: WebGLRenderingContextBase -> GLenum -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.activeTexture Mozilla WebGLRenderingContextBase.activeTexture documentation> 
+activeTexture ::
+              (MonadIO m, IsWebGLRenderingContextBase self) =>
+                self -> GLenum -> m ()
+activeTexture self texture
+  = liftIO
+      (js_activeTexture (toWebGLRenderingContextBase self) texture)
+ 
+foreign import javascript unsafe "$1[\"attachShader\"]($2, $3)"
+        js_attachShader ::
+        WebGLRenderingContextBase ->
+          Nullable WebGLProgram -> Nullable WebGLShader -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.attachShader Mozilla WebGLRenderingContextBase.attachShader documentation> 
+attachShader ::
+             (MonadIO m, IsWebGLRenderingContextBase self) =>
+               self -> Maybe WebGLProgram -> Maybe WebGLShader -> m ()
+attachShader self program shader
+  = liftIO
+      (js_attachShader (toWebGLRenderingContextBase self)
+         (maybeToNullable program)
+         (maybeToNullable shader))
+ 
+foreign import javascript unsafe
+        "$1[\"bindAttribLocation\"]($2, $3,\n$4)" js_bindAttribLocation ::
+        WebGLRenderingContextBase ->
+          Nullable WebGLProgram -> GLuint -> JSString -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.bindAttribLocation Mozilla WebGLRenderingContextBase.bindAttribLocation documentation> 
+bindAttribLocation ::
+                   (MonadIO m, IsWebGLRenderingContextBase self, ToJSString name) =>
+                     self -> Maybe WebGLProgram -> GLuint -> name -> m ()
+bindAttribLocation self program index name
+  = liftIO
+      (js_bindAttribLocation (toWebGLRenderingContextBase self)
+         (maybeToNullable program)
+         index
+         (toJSString name))
+ 
+foreign import javascript unsafe "$1[\"bindBuffer\"]($2, $3)"
+        js_bindBuffer ::
+        WebGLRenderingContextBase ->
+          GLenum -> Nullable WebGLBuffer -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.bindBuffer Mozilla WebGLRenderingContextBase.bindBuffer documentation> 
+bindBuffer ::
+           (MonadIO m, IsWebGLRenderingContextBase self) =>
+             self -> GLenum -> Maybe WebGLBuffer -> m ()
+bindBuffer self target buffer
+  = liftIO
+      (js_bindBuffer (toWebGLRenderingContextBase self) target
+         (maybeToNullable buffer))
+ 
+foreign import javascript unsafe "$1[\"bindFramebuffer\"]($2, $3)"
+        js_bindFramebuffer ::
+        WebGLRenderingContextBase ->
+          GLenum -> Nullable WebGLFramebuffer -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.bindFramebuffer Mozilla WebGLRenderingContextBase.bindFramebuffer documentation> 
+bindFramebuffer ::
+                (MonadIO m, IsWebGLRenderingContextBase self) =>
+                  self -> GLenum -> Maybe WebGLFramebuffer -> m ()
+bindFramebuffer self target framebuffer
+  = liftIO
+      (js_bindFramebuffer (toWebGLRenderingContextBase self) target
+         (maybeToNullable framebuffer))
+ 
+foreign import javascript unsafe "$1[\"bindRenderbuffer\"]($2, $3)"
+        js_bindRenderbuffer ::
+        WebGLRenderingContextBase ->
+          GLenum -> Nullable WebGLRenderbuffer -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.bindRenderbuffer Mozilla WebGLRenderingContextBase.bindRenderbuffer documentation> 
+bindRenderbuffer ::
+                 (MonadIO m, IsWebGLRenderingContextBase self) =>
+                   self -> GLenum -> Maybe WebGLRenderbuffer -> m ()
+bindRenderbuffer self target renderbuffer
+  = liftIO
+      (js_bindRenderbuffer (toWebGLRenderingContextBase self) target
+         (maybeToNullable renderbuffer))
+ 
+foreign import javascript unsafe "$1[\"bindTexture\"]($2, $3)"
+        js_bindTexture ::
+        WebGLRenderingContextBase ->
+          GLenum -> Nullable WebGLTexture -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.bindTexture Mozilla WebGLRenderingContextBase.bindTexture documentation> 
+bindTexture ::
+            (MonadIO m, IsWebGLRenderingContextBase self) =>
+              self -> GLenum -> Maybe WebGLTexture -> m ()
+bindTexture self target texture
+  = liftIO
+      (js_bindTexture (toWebGLRenderingContextBase self) target
+         (maybeToNullable texture))
+ 
+foreign import javascript unsafe
+        "$1[\"blendColor\"]($2, $3, $4, $5)" js_blendColor ::
+        WebGLRenderingContextBase ->
+          GLclampf -> GLclampf -> GLclampf -> GLclampf -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.blendColor Mozilla WebGLRenderingContextBase.blendColor documentation> 
+blendColor ::
+           (MonadIO m, IsWebGLRenderingContextBase self) =>
+             self -> GLclampf -> GLclampf -> GLclampf -> GLclampf -> m ()
+blendColor self red green blue alpha
+  = liftIO
+      (js_blendColor (toWebGLRenderingContextBase self) red green blue
+         alpha)
+ 
+foreign import javascript unsafe "$1[\"blendEquation\"]($2)"
+        js_blendEquation :: WebGLRenderingContextBase -> GLenum -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.blendEquation Mozilla WebGLRenderingContextBase.blendEquation documentation> 
+blendEquation ::
+              (MonadIO m, IsWebGLRenderingContextBase self) =>
+                self -> GLenum -> m ()
+blendEquation self mode
+  = liftIO (js_blendEquation (toWebGLRenderingContextBase self) mode)
+ 
+foreign import javascript unsafe
+        "$1[\"blendEquationSeparate\"]($2,\n$3)" js_blendEquationSeparate
+        :: WebGLRenderingContextBase -> GLenum -> GLenum -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.blendEquationSeparate Mozilla WebGLRenderingContextBase.blendEquationSeparate documentation> 
+blendEquationSeparate ::
+                      (MonadIO m, IsWebGLRenderingContextBase self) =>
+                        self -> GLenum -> GLenum -> m ()
+blendEquationSeparate self modeRGB modeAlpha
+  = liftIO
+      (js_blendEquationSeparate (toWebGLRenderingContextBase self)
+         modeRGB
+         modeAlpha)
+ 
+foreign import javascript unsafe "$1[\"blendFunc\"]($2, $3)"
+        js_blendFunc ::
+        WebGLRenderingContextBase -> GLenum -> GLenum -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.blendFunc Mozilla WebGLRenderingContextBase.blendFunc documentation> 
+blendFunc ::
+          (MonadIO m, IsWebGLRenderingContextBase self) =>
+            self -> GLenum -> GLenum -> m ()
+blendFunc self sfactor dfactor
+  = liftIO
+      (js_blendFunc (toWebGLRenderingContextBase self) sfactor dfactor)
+ 
+foreign import javascript unsafe
+        "$1[\"blendFuncSeparate\"]($2, $3,\n$4, $5)" js_blendFuncSeparate
+        ::
+        WebGLRenderingContextBase ->
+          GLenum -> GLenum -> GLenum -> GLenum -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.blendFuncSeparate Mozilla WebGLRenderingContextBase.blendFuncSeparate documentation> 
+blendFuncSeparate ::
+                  (MonadIO m, IsWebGLRenderingContextBase self) =>
+                    self -> GLenum -> GLenum -> GLenum -> GLenum -> m ()
+blendFuncSeparate self srcRGB dstRGB srcAlpha dstAlpha
+  = liftIO
+      (js_blendFuncSeparate (toWebGLRenderingContextBase self) srcRGB
+         dstRGB
+         srcAlpha
+         dstAlpha)
+ 
+foreign import javascript unsafe "$1[\"bufferData\"]($2, $3, $4)"
+        js_bufferData ::
+        WebGLRenderingContextBase ->
+          GLenum -> Nullable ArrayBuffer -> GLenum -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.bufferData Mozilla WebGLRenderingContextBase.bufferData documentation> 
+bufferData ::
+           (MonadIO m, IsWebGLRenderingContextBase self,
+            IsArrayBuffer data') =>
+             self -> GLenum -> Maybe data' -> GLenum -> m ()
+bufferData self target data' usage
+  = liftIO
+      (js_bufferData (toWebGLRenderingContextBase self) target
+         (maybeToNullable (fmap toArrayBuffer data'))
+         usage)
+ 
+foreign import javascript unsafe "$1[\"bufferData\"]($2, $3, $4)"
+        js_bufferDataView ::
+        WebGLRenderingContextBase ->
+          GLenum -> Nullable ArrayBufferView -> GLenum -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.bufferData Mozilla WebGLRenderingContextBase.bufferData documentation> 
+bufferDataView ::
+               (MonadIO m, IsWebGLRenderingContextBase self,
+                IsArrayBufferView data') =>
+                 self -> GLenum -> Maybe data' -> GLenum -> m ()
+bufferDataView self target data' usage
+  = liftIO
+      (js_bufferDataView (toWebGLRenderingContextBase self) target
+         (maybeToNullable (fmap toArrayBufferView data'))
+         usage)
+ 
+foreign import javascript unsafe "$1[\"bufferData\"]($2, $3, $4)"
+        js_bufferDataPtr ::
+        WebGLRenderingContextBase -> GLenum -> Double -> GLenum -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.bufferData Mozilla WebGLRenderingContextBase.bufferData documentation> 
+bufferDataPtr ::
+              (MonadIO m, IsWebGLRenderingContextBase self) =>
+                self -> GLenum -> GLsizeiptr -> GLenum -> m ()
+bufferDataPtr self target size usage
+  = liftIO
+      (js_bufferDataPtr (toWebGLRenderingContextBase self) target
+         (fromIntegral size)
+         usage)
+ 
+foreign import javascript unsafe
+        "$1[\"bufferSubData\"]($2, $3, $4)" js_bufferSubData ::
+        WebGLRenderingContextBase ->
+          GLenum -> Double -> Nullable ArrayBuffer -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.bufferSubData Mozilla WebGLRenderingContextBase.bufferSubData documentation> 
+bufferSubData ::
+              (MonadIO m, IsWebGLRenderingContextBase self,
+               IsArrayBuffer data') =>
+                self -> GLenum -> GLintptr -> Maybe data' -> m ()
+bufferSubData self target offset data'
+  = liftIO
+      (js_bufferSubData (toWebGLRenderingContextBase self) target
+         (fromIntegral offset)
+         (maybeToNullable (fmap toArrayBuffer data')))
+ 
+foreign import javascript unsafe
+        "$1[\"bufferSubData\"]($2, $3, $4)" js_bufferSubDataView ::
+        WebGLRenderingContextBase ->
+          GLenum -> Double -> Nullable ArrayBufferView -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.bufferSubData Mozilla WebGLRenderingContextBase.bufferSubData documentation> 
+bufferSubDataView ::
+                  (MonadIO m, IsWebGLRenderingContextBase self,
+                   IsArrayBufferView data') =>
+                    self -> GLenum -> GLintptr -> Maybe data' -> m ()
+bufferSubDataView self target offset data'
+  = liftIO
+      (js_bufferSubDataView (toWebGLRenderingContextBase self) target
+         (fromIntegral offset)
+         (maybeToNullable (fmap toArrayBufferView data')))
+ 
+foreign import javascript unsafe
+        "$1[\"checkFramebufferStatus\"]($2)" js_checkFramebufferStatus ::
+        WebGLRenderingContextBase -> GLenum -> IO GLenum
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.checkFramebufferStatus Mozilla WebGLRenderingContextBase.checkFramebufferStatus documentation> 
+checkFramebufferStatus ::
+                       (MonadIO m, IsWebGLRenderingContextBase self) =>
+                         self -> GLenum -> m GLenum
+checkFramebufferStatus self target
+  = liftIO
+      (js_checkFramebufferStatus (toWebGLRenderingContextBase self)
+         target)
+ 
+foreign import javascript unsafe "$1[\"clear\"]($2)" js_clear ::
+        WebGLRenderingContextBase -> GLbitfield -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.clear Mozilla WebGLRenderingContextBase.clear documentation> 
+clear ::
+      (MonadIO m, IsWebGLRenderingContextBase self) =>
+        self -> GLbitfield -> m ()
+clear self mask
+  = liftIO (js_clear (toWebGLRenderingContextBase self) mask)
+ 
+foreign import javascript unsafe
+        "$1[\"clearColor\"]($2, $3, $4, $5)" js_clearColor ::
+        WebGLRenderingContextBase ->
+          GLclampf -> GLclampf -> GLclampf -> GLclampf -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.clearColor Mozilla WebGLRenderingContextBase.clearColor documentation> 
+clearColor ::
+           (MonadIO m, IsWebGLRenderingContextBase self) =>
+             self -> GLclampf -> GLclampf -> GLclampf -> GLclampf -> m ()
+clearColor self red green blue alpha
+  = liftIO
+      (js_clearColor (toWebGLRenderingContextBase self) red green blue
+         alpha)
+ 
+foreign import javascript unsafe "$1[\"clearDepth\"]($2)"
+        js_clearDepth :: WebGLRenderingContextBase -> GLclampf -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.clearDepth Mozilla WebGLRenderingContextBase.clearDepth documentation> 
+clearDepth ::
+           (MonadIO m, IsWebGLRenderingContextBase self) =>
+             self -> GLclampf -> m ()
+clearDepth self depth
+  = liftIO (js_clearDepth (toWebGLRenderingContextBase self) depth)
+ 
+foreign import javascript unsafe "$1[\"clearStencil\"]($2)"
+        js_clearStencil :: WebGLRenderingContextBase -> GLint -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.clearStencil Mozilla WebGLRenderingContextBase.clearStencil documentation> 
+clearStencil ::
+             (MonadIO m, IsWebGLRenderingContextBase self) =>
+               self -> GLint -> m ()
+clearStencil self s
+  = liftIO (js_clearStencil (toWebGLRenderingContextBase self) s)
+ 
+foreign import javascript unsafe
+        "$1[\"colorMask\"]($2, $3, $4, $5)" js_colorMask ::
+        WebGLRenderingContextBase ->
+          GLboolean -> GLboolean -> GLboolean -> GLboolean -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.colorMask Mozilla WebGLRenderingContextBase.colorMask documentation> 
+colorMask ::
+          (MonadIO m, IsWebGLRenderingContextBase self) =>
+            self -> GLboolean -> GLboolean -> GLboolean -> GLboolean -> m ()
+colorMask self red green blue alpha
+  = liftIO
+      (js_colorMask (toWebGLRenderingContextBase self) red green blue
+         alpha)
+ 
+foreign import javascript unsafe "$1[\"compileShader\"]($2)"
+        js_compileShader ::
+        WebGLRenderingContextBase -> Nullable WebGLShader -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.compileShader Mozilla WebGLRenderingContextBase.compileShader documentation> 
+compileShader ::
+              (MonadIO m, IsWebGLRenderingContextBase self) =>
+                self -> Maybe WebGLShader -> m ()
+compileShader self shader
+  = liftIO
+      (js_compileShader (toWebGLRenderingContextBase self)
+         (maybeToNullable shader))
+ 
+foreign import javascript unsafe
+        "$1[\"compressedTexImage2D\"]($2,\n$3, $4, $5, $6, $7, $8)"
+        js_compressedTexImage2D ::
+        WebGLRenderingContextBase ->
+          GLenum ->
+            GLint ->
+              GLenum ->
+                GLsizei -> GLsizei -> GLint -> Nullable ArrayBufferView -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.compressedTexImage2D Mozilla WebGLRenderingContextBase.compressedTexImage2D documentation> 
+compressedTexImage2D ::
+                     (MonadIO m, IsWebGLRenderingContextBase self,
+                      IsArrayBufferView data') =>
+                       self ->
+                         GLenum ->
+                           GLint ->
+                             GLenum -> GLsizei -> GLsizei -> GLint -> Maybe data' -> m ()
+compressedTexImage2D self target level internalformat width height
+  border data'
+  = liftIO
+      (js_compressedTexImage2D (toWebGLRenderingContextBase self) target
+         level
+         internalformat
+         width
+         height
+         border
+         (maybeToNullable (fmap toArrayBufferView data')))
+ 
+foreign import javascript unsafe
+        "$1[\"compressedTexSubImage2D\"]($2,\n$3, $4, $5, $6, $7, $8, $9)"
+        js_compressedTexSubImage2D ::
+        WebGLRenderingContextBase ->
+          GLenum ->
+            GLint ->
+              GLint ->
+                GLint ->
+                  GLsizei -> GLsizei -> GLenum -> Nullable ArrayBufferView -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.compressedTexSubImage2D Mozilla WebGLRenderingContextBase.compressedTexSubImage2D documentation> 
+compressedTexSubImage2D ::
+                        (MonadIO m, IsWebGLRenderingContextBase self,
+                         IsArrayBufferView data') =>
+                          self ->
+                            GLenum ->
+                              GLint ->
+                                GLint ->
+                                  GLint -> GLsizei -> GLsizei -> GLenum -> Maybe data' -> m ()
+compressedTexSubImage2D self target level xoffset yoffset width
+  height format data'
+  = liftIO
+      (js_compressedTexSubImage2D (toWebGLRenderingContextBase self)
+         target
+         level
+         xoffset
+         yoffset
+         width
+         height
+         format
+         (maybeToNullable (fmap toArrayBufferView data')))
+ 
+foreign import javascript unsafe
+        "$1[\"copyTexImage2D\"]($2, $3, $4,\n$5, $6, $7, $8, $9)"
+        js_copyTexImage2D ::
+        WebGLRenderingContextBase ->
+          GLenum ->
+            GLint ->
+              GLenum -> GLint -> GLint -> GLsizei -> GLsizei -> GLint -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.copyTexImage2D Mozilla WebGLRenderingContextBase.copyTexImage2D documentation> 
+copyTexImage2D ::
+               (MonadIO m, IsWebGLRenderingContextBase self) =>
+                 self ->
+                   GLenum ->
+                     GLint ->
+                       GLenum -> GLint -> GLint -> GLsizei -> GLsizei -> GLint -> m ()
+copyTexImage2D self target level internalformat x y width height
+  border
+  = liftIO
+      (js_copyTexImage2D (toWebGLRenderingContextBase self) target level
+         internalformat
+         x
+         y
+         width
+         height
+         border)
+ 
+foreign import javascript unsafe
+        "$1[\"copyTexSubImage2D\"]($2, $3,\n$4, $5, $6, $7, $8, $9)"
+        js_copyTexSubImage2D ::
+        WebGLRenderingContextBase ->
+          GLenum ->
+            GLint ->
+              GLint -> GLint -> GLint -> GLint -> GLsizei -> GLsizei -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.copyTexSubImage2D Mozilla WebGLRenderingContextBase.copyTexSubImage2D documentation> 
+copyTexSubImage2D ::
+                  (MonadIO m, IsWebGLRenderingContextBase self) =>
+                    self ->
+                      GLenum ->
+                        GLint ->
+                          GLint -> GLint -> GLint -> GLint -> GLsizei -> GLsizei -> m ()
+copyTexSubImage2D self target level xoffset yoffset x y width
+  height
+  = liftIO
+      (js_copyTexSubImage2D (toWebGLRenderingContextBase self) target
+         level
+         xoffset
+         yoffset
+         x
+         y
+         width
+         height)
+ 
+foreign import javascript unsafe "$1[\"createBuffer\"]()"
+        js_createBuffer ::
+        WebGLRenderingContextBase -> IO (Nullable WebGLBuffer)
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.createBuffer Mozilla WebGLRenderingContextBase.createBuffer documentation> 
+createBuffer ::
+             (MonadIO m, IsWebGLRenderingContextBase self) =>
+               self -> m (Maybe WebGLBuffer)
+createBuffer self
+  = liftIO
+      (nullableToMaybe <$>
+         (js_createBuffer (toWebGLRenderingContextBase self)))
+ 
+foreign import javascript unsafe "$1[\"createFramebuffer\"]()"
+        js_createFramebuffer ::
+        WebGLRenderingContextBase -> IO (Nullable WebGLFramebuffer)
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.createFramebuffer Mozilla WebGLRenderingContextBase.createFramebuffer documentation> 
+createFramebuffer ::
+                  (MonadIO m, IsWebGLRenderingContextBase self) =>
+                    self -> m (Maybe WebGLFramebuffer)
+createFramebuffer self
+  = liftIO
+      (nullableToMaybe <$>
+         (js_createFramebuffer (toWebGLRenderingContextBase self)))
+ 
+foreign import javascript unsafe "$1[\"createProgram\"]()"
+        js_createProgram ::
+        WebGLRenderingContextBase -> IO (Nullable WebGLProgram)
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.createProgram Mozilla WebGLRenderingContextBase.createProgram documentation> 
+createProgram ::
+              (MonadIO m, IsWebGLRenderingContextBase self) =>
+                self -> m (Maybe WebGLProgram)
+createProgram self
+  = liftIO
+      (nullableToMaybe <$>
+         (js_createProgram (toWebGLRenderingContextBase self)))
+ 
+foreign import javascript unsafe "$1[\"createRenderbuffer\"]()"
+        js_createRenderbuffer ::
+        WebGLRenderingContextBase -> IO (Nullable WebGLRenderbuffer)
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.createRenderbuffer Mozilla WebGLRenderingContextBase.createRenderbuffer documentation> 
+createRenderbuffer ::
+                   (MonadIO m, IsWebGLRenderingContextBase self) =>
+                     self -> m (Maybe WebGLRenderbuffer)
+createRenderbuffer self
+  = liftIO
+      (nullableToMaybe <$>
+         (js_createRenderbuffer (toWebGLRenderingContextBase self)))
+ 
+foreign import javascript unsafe "$1[\"createShader\"]($2)"
+        js_createShader ::
+        WebGLRenderingContextBase -> GLenum -> IO (Nullable WebGLShader)
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.createShader Mozilla WebGLRenderingContextBase.createShader documentation> 
+createShader ::
+             (MonadIO m, IsWebGLRenderingContextBase self) =>
+               self -> GLenum -> m (Maybe WebGLShader)
+createShader self type'
+  = liftIO
+      (nullableToMaybe <$>
+         (js_createShader (toWebGLRenderingContextBase self) type'))
+ 
+foreign import javascript unsafe "$1[\"createTexture\"]()"
+        js_createTexture ::
+        WebGLRenderingContextBase -> IO (Nullable WebGLTexture)
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.createTexture Mozilla WebGLRenderingContextBase.createTexture documentation> 
+createTexture ::
+              (MonadIO m, IsWebGLRenderingContextBase self) =>
+                self -> m (Maybe WebGLTexture)
+createTexture self
+  = liftIO
+      (nullableToMaybe <$>
+         (js_createTexture (toWebGLRenderingContextBase self)))
+ 
+foreign import javascript unsafe "$1[\"cullFace\"]($2)" js_cullFace
+        :: WebGLRenderingContextBase -> GLenum -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.cullFace Mozilla WebGLRenderingContextBase.cullFace documentation> 
+cullFace ::
+         (MonadIO m, IsWebGLRenderingContextBase self) =>
+           self -> GLenum -> m ()
+cullFace self mode
+  = liftIO (js_cullFace (toWebGLRenderingContextBase self) mode)
+ 
+foreign import javascript unsafe "$1[\"deleteBuffer\"]($2)"
+        js_deleteBuffer ::
+        WebGLRenderingContextBase -> Nullable WebGLBuffer -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.deleteBuffer Mozilla WebGLRenderingContextBase.deleteBuffer documentation> 
+deleteBuffer ::
+             (MonadIO m, IsWebGLRenderingContextBase self) =>
+               self -> Maybe WebGLBuffer -> m ()
+deleteBuffer self buffer
+  = liftIO
+      (js_deleteBuffer (toWebGLRenderingContextBase self)
+         (maybeToNullable buffer))
+ 
+foreign import javascript unsafe "$1[\"deleteFramebuffer\"]($2)"
+        js_deleteFramebuffer ::
+        WebGLRenderingContextBase -> Nullable WebGLFramebuffer -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.deleteFramebuffer Mozilla WebGLRenderingContextBase.deleteFramebuffer documentation> 
+deleteFramebuffer ::
+                  (MonadIO m, IsWebGLRenderingContextBase self) =>
+                    self -> Maybe WebGLFramebuffer -> m ()
+deleteFramebuffer self framebuffer
+  = liftIO
+      (js_deleteFramebuffer (toWebGLRenderingContextBase self)
+         (maybeToNullable framebuffer))
+ 
+foreign import javascript unsafe "$1[\"deleteProgram\"]($2)"
+        js_deleteProgram ::
+        WebGLRenderingContextBase -> Nullable WebGLProgram -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.deleteProgram Mozilla WebGLRenderingContextBase.deleteProgram documentation> 
+deleteProgram ::
+              (MonadIO m, IsWebGLRenderingContextBase self) =>
+                self -> Maybe WebGLProgram -> m ()
+deleteProgram self program
+  = liftIO
+      (js_deleteProgram (toWebGLRenderingContextBase self)
+         (maybeToNullable program))
+ 
+foreign import javascript unsafe "$1[\"deleteRenderbuffer\"]($2)"
+        js_deleteRenderbuffer ::
+        WebGLRenderingContextBase -> Nullable WebGLRenderbuffer -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.deleteRenderbuffer Mozilla WebGLRenderingContextBase.deleteRenderbuffer documentation> 
+deleteRenderbuffer ::
+                   (MonadIO m, IsWebGLRenderingContextBase self) =>
+                     self -> Maybe WebGLRenderbuffer -> m ()
+deleteRenderbuffer self renderbuffer
+  = liftIO
+      (js_deleteRenderbuffer (toWebGLRenderingContextBase self)
+         (maybeToNullable renderbuffer))
+ 
+foreign import javascript unsafe "$1[\"deleteShader\"]($2)"
+        js_deleteShader ::
+        WebGLRenderingContextBase -> Nullable WebGLShader -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.deleteShader Mozilla WebGLRenderingContextBase.deleteShader documentation> 
+deleteShader ::
+             (MonadIO m, IsWebGLRenderingContextBase self) =>
+               self -> Maybe WebGLShader -> m ()
+deleteShader self shader
+  = liftIO
+      (js_deleteShader (toWebGLRenderingContextBase self)
+         (maybeToNullable shader))
+ 
+foreign import javascript unsafe "$1[\"deleteTexture\"]($2)"
+        js_deleteTexture ::
+        WebGLRenderingContextBase -> Nullable WebGLTexture -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.deleteTexture Mozilla WebGLRenderingContextBase.deleteTexture documentation> 
+deleteTexture ::
+              (MonadIO m, IsWebGLRenderingContextBase self) =>
+                self -> Maybe WebGLTexture -> m ()
+deleteTexture self texture
+  = liftIO
+      (js_deleteTexture (toWebGLRenderingContextBase self)
+         (maybeToNullable texture))
+ 
+foreign import javascript unsafe "$1[\"depthFunc\"]($2)"
+        js_depthFunc :: WebGLRenderingContextBase -> GLenum -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.depthFunc Mozilla WebGLRenderingContextBase.depthFunc documentation> 
+depthFunc ::
+          (MonadIO m, IsWebGLRenderingContextBase self) =>
+            self -> GLenum -> m ()
+depthFunc self func
+  = liftIO (js_depthFunc (toWebGLRenderingContextBase self) func)
+ 
+foreign import javascript unsafe "$1[\"depthMask\"]($2)"
+        js_depthMask :: WebGLRenderingContextBase -> GLboolean -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.depthMask Mozilla WebGLRenderingContextBase.depthMask documentation> 
+depthMask ::
+          (MonadIO m, IsWebGLRenderingContextBase self) =>
+            self -> GLboolean -> m ()
+depthMask self flag
+  = liftIO (js_depthMask (toWebGLRenderingContextBase self) flag)
+ 
+foreign import javascript unsafe "$1[\"depthRange\"]($2, $3)"
+        js_depthRange ::
+        WebGLRenderingContextBase -> GLclampf -> GLclampf -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.depthRange Mozilla WebGLRenderingContextBase.depthRange documentation> 
+depthRange ::
+           (MonadIO m, IsWebGLRenderingContextBase self) =>
+             self -> GLclampf -> GLclampf -> m ()
+depthRange self zNear zFar
+  = liftIO
+      (js_depthRange (toWebGLRenderingContextBase self) zNear zFar)
+ 
+foreign import javascript unsafe "$1[\"detachShader\"]($2, $3)"
+        js_detachShader ::
+        WebGLRenderingContextBase ->
+          Nullable WebGLProgram -> Nullable WebGLShader -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.detachShader Mozilla WebGLRenderingContextBase.detachShader documentation> 
+detachShader ::
+             (MonadIO m, IsWebGLRenderingContextBase self) =>
+               self -> Maybe WebGLProgram -> Maybe WebGLShader -> m ()
+detachShader self program shader
+  = liftIO
+      (js_detachShader (toWebGLRenderingContextBase self)
+         (maybeToNullable program)
+         (maybeToNullable shader))
+ 
+foreign import javascript unsafe "$1[\"disable\"]($2)" js_disable
+        :: WebGLRenderingContextBase -> GLenum -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.disable Mozilla WebGLRenderingContextBase.disable documentation> 
+disable ::
+        (MonadIO m, IsWebGLRenderingContextBase self) =>
+          self -> GLenum -> m ()
+disable self cap
+  = liftIO (js_disable (toWebGLRenderingContextBase self) cap)
+ 
+foreign import javascript unsafe
+        "$1[\"disableVertexAttribArray\"]($2)" js_disableVertexAttribArray
+        :: WebGLRenderingContextBase -> GLuint -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.disableVertexAttribArray Mozilla WebGLRenderingContextBase.disableVertexAttribArray documentation> 
+disableVertexAttribArray ::
+                         (MonadIO m, IsWebGLRenderingContextBase self) =>
+                           self -> GLuint -> m ()
+disableVertexAttribArray self index
+  = liftIO
+      (js_disableVertexAttribArray (toWebGLRenderingContextBase self)
+         index)
+ 
+foreign import javascript unsafe "$1[\"drawArrays\"]($2, $3, $4)"
+        js_drawArrays ::
+        WebGLRenderingContextBase -> GLenum -> GLint -> GLsizei -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.drawArrays Mozilla WebGLRenderingContextBase.drawArrays documentation> 
+drawArrays ::
+           (MonadIO m, IsWebGLRenderingContextBase self) =>
+             self -> GLenum -> GLint -> GLsizei -> m ()
+drawArrays self mode first count
+  = liftIO
+      (js_drawArrays (toWebGLRenderingContextBase self) mode first count)
+ 
+foreign import javascript unsafe
+        "$1[\"drawElements\"]($2, $3, $4,\n$5)" js_drawElements ::
+        WebGLRenderingContextBase ->
+          GLenum -> GLsizei -> GLenum -> Double -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.drawElements Mozilla WebGLRenderingContextBase.drawElements documentation> 
+drawElements ::
+             (MonadIO m, IsWebGLRenderingContextBase self) =>
+               self -> GLenum -> GLsizei -> GLenum -> GLintptr -> m ()
+drawElements self mode count type' offset
+  = liftIO
+      (js_drawElements (toWebGLRenderingContextBase self) mode count
+         type'
+         (fromIntegral offset))
+ 
+foreign import javascript unsafe "$1[\"enable\"]($2)" js_enable ::
+        WebGLRenderingContextBase -> GLenum -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.enable Mozilla WebGLRenderingContextBase.enable documentation> 
+enable ::
+       (MonadIO m, IsWebGLRenderingContextBase self) =>
+         self -> GLenum -> m ()
+enable self cap
+  = liftIO (js_enable (toWebGLRenderingContextBase self) cap)
+ 
+foreign import javascript unsafe
+        "$1[\"enableVertexAttribArray\"]($2)" js_enableVertexAttribArray ::
+        WebGLRenderingContextBase -> GLuint -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.enableVertexAttribArray Mozilla WebGLRenderingContextBase.enableVertexAttribArray documentation> 
+enableVertexAttribArray ::
+                        (MonadIO m, IsWebGLRenderingContextBase self) =>
+                          self -> GLuint -> m ()
+enableVertexAttribArray self index
+  = liftIO
+      (js_enableVertexAttribArray (toWebGLRenderingContextBase self)
+         index)
+ 
+foreign import javascript unsafe "$1[\"finish\"]()" js_finish ::
+        WebGLRenderingContextBase -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.finish Mozilla WebGLRenderingContextBase.finish documentation> 
+finish ::
+       (MonadIO m, IsWebGLRenderingContextBase self) => self -> m ()
+finish self = liftIO (js_finish (toWebGLRenderingContextBase self))
+ 
+foreign import javascript unsafe "$1[\"flush\"]()" js_flush ::
+        WebGLRenderingContextBase -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.flush Mozilla WebGLRenderingContextBase.flush documentation> 
+flush ::
+      (MonadIO m, IsWebGLRenderingContextBase self) => self -> m ()
+flush self = liftIO (js_flush (toWebGLRenderingContextBase self))
+ 
+foreign import javascript unsafe
+        "$1[\"framebufferRenderbuffer\"]($2,\n$3, $4, $5)"
+        js_framebufferRenderbuffer ::
+        WebGLRenderingContextBase ->
+          GLenum -> GLenum -> GLenum -> Nullable WebGLRenderbuffer -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.framebufferRenderbuffer Mozilla WebGLRenderingContextBase.framebufferRenderbuffer documentation> 
+framebufferRenderbuffer ::
+                        (MonadIO m, IsWebGLRenderingContextBase self) =>
+                          self ->
+                            GLenum -> GLenum -> GLenum -> Maybe WebGLRenderbuffer -> m ()
+framebufferRenderbuffer self target attachment renderbuffertarget
+  renderbuffer
+  = liftIO
+      (js_framebufferRenderbuffer (toWebGLRenderingContextBase self)
+         target
+         attachment
+         renderbuffertarget
+         (maybeToNullable renderbuffer))
+ 
+foreign import javascript unsafe
+        "$1[\"framebufferTexture2D\"]($2,\n$3, $4, $5, $6)"
+        js_framebufferTexture2D ::
+        WebGLRenderingContextBase ->
+          GLenum ->
+            GLenum -> GLenum -> Nullable WebGLTexture -> GLint -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.framebufferTexture2D Mozilla WebGLRenderingContextBase.framebufferTexture2D documentation> 
+framebufferTexture2D ::
+                     (MonadIO m, IsWebGLRenderingContextBase self) =>
+                       self ->
+                         GLenum -> GLenum -> GLenum -> Maybe WebGLTexture -> GLint -> m ()
+framebufferTexture2D self target attachment textarget texture level
+  = liftIO
+      (js_framebufferTexture2D (toWebGLRenderingContextBase self) target
+         attachment
+         textarget
+         (maybeToNullable texture)
+         level)
+ 
+foreign import javascript unsafe "$1[\"frontFace\"]($2)"
+        js_frontFace :: WebGLRenderingContextBase -> GLenum -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.frontFace Mozilla WebGLRenderingContextBase.frontFace documentation> 
+frontFace ::
+          (MonadIO m, IsWebGLRenderingContextBase self) =>
+            self -> GLenum -> m ()
+frontFace self mode
+  = liftIO (js_frontFace (toWebGLRenderingContextBase self) mode)
+ 
+foreign import javascript unsafe "$1[\"generateMipmap\"]($2)"
+        js_generateMipmap :: WebGLRenderingContextBase -> GLenum -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.generateMipmap Mozilla WebGLRenderingContextBase.generateMipmap documentation> 
+generateMipmap ::
+               (MonadIO m, IsWebGLRenderingContextBase self) =>
+                 self -> GLenum -> m ()
+generateMipmap self target
+  = liftIO
+      (js_generateMipmap (toWebGLRenderingContextBase self) target)
+ 
+foreign import javascript unsafe "$1[\"getActiveAttrib\"]($2, $3)"
+        js_getActiveAttrib ::
+        WebGLRenderingContextBase ->
+          Nullable WebGLProgram -> GLuint -> IO (Nullable WebGLActiveInfo)
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.getActiveAttrib Mozilla WebGLRenderingContextBase.getActiveAttrib documentation> 
+getActiveAttrib ::
+                (MonadIO m, IsWebGLRenderingContextBase self) =>
+                  self -> Maybe WebGLProgram -> GLuint -> m (Maybe WebGLActiveInfo)
+getActiveAttrib self program index
+  = liftIO
+      (nullableToMaybe <$>
+         (js_getActiveAttrib (toWebGLRenderingContextBase self)
+            (maybeToNullable program)
+            index))
+ 
+foreign import javascript unsafe "$1[\"getActiveUniform\"]($2, $3)"
+        js_getActiveUniform ::
+        WebGLRenderingContextBase ->
+          Nullable WebGLProgram -> GLuint -> IO (Nullable WebGLActiveInfo)
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.getActiveUniform Mozilla WebGLRenderingContextBase.getActiveUniform documentation> 
+getActiveUniform ::
+                 (MonadIO m, IsWebGLRenderingContextBase self) =>
+                   self -> Maybe WebGLProgram -> GLuint -> m (Maybe WebGLActiveInfo)
+getActiveUniform self program index
+  = liftIO
+      (nullableToMaybe <$>
+         (js_getActiveUniform (toWebGLRenderingContextBase self)
+            (maybeToNullable program)
+            index))
+ 
+foreign import javascript unsafe "$1[\"getAttachedShaders\"]($2)"
+        js_getAttachedShaders ::
+        WebGLRenderingContextBase -> Nullable WebGLProgram -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.getAttachedShaders Mozilla WebGLRenderingContextBase.getAttachedShaders documentation> 
+getAttachedShaders ::
+                   (MonadIO m, IsWebGLRenderingContextBase self) =>
+                     self -> Maybe WebGLProgram -> m ()
+getAttachedShaders self program
+  = liftIO
+      (js_getAttachedShaders (toWebGLRenderingContextBase self)
+         (maybeToNullable program))
+ 
+foreign import javascript unsafe
+        "$1[\"getAttribLocation\"]($2, $3)" js_getAttribLocation ::
+        WebGLRenderingContextBase ->
+          Nullable WebGLProgram -> JSString -> IO GLint
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.getAttribLocation Mozilla WebGLRenderingContextBase.getAttribLocation documentation> 
+getAttribLocation ::
+                  (MonadIO m, IsWebGLRenderingContextBase self, ToJSString name) =>
+                    self -> Maybe WebGLProgram -> name -> m GLint
+getAttribLocation self program name
+  = liftIO
+      (js_getAttribLocation (toWebGLRenderingContextBase self)
+         (maybeToNullable program)
+         (toJSString name))
+ 
+foreign import javascript unsafe
+        "$1[\"getBufferParameter\"]($2, $3)" js_getBufferParameter ::
+        WebGLRenderingContextBase -> GLenum -> GLenum -> IO JSRef
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.getBufferParameter Mozilla WebGLRenderingContextBase.getBufferParameter documentation> 
+getBufferParameter ::
+                   (MonadIO m, IsWebGLRenderingContextBase self) =>
+                     self -> GLenum -> GLenum -> m JSRef
+getBufferParameter self target pname
+  = liftIO
+      (js_getBufferParameter (toWebGLRenderingContextBase self) target
+         pname)
+ 
+foreign import javascript unsafe "$1[\"getContextAttributes\"]()"
+        js_getContextAttributes ::
+        WebGLRenderingContextBase -> IO (Nullable WebGLContextAttributes)
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.getContextAttributes Mozilla WebGLRenderingContextBase.getContextAttributes documentation> 
+getContextAttributes ::
+                     (MonadIO m, IsWebGLRenderingContextBase self) =>
+                       self -> m (Maybe WebGLContextAttributes)
+getContextAttributes self
+  = liftIO
+      (nullableToMaybe <$>
+         (js_getContextAttributes (toWebGLRenderingContextBase self)))
+ 
+foreign import javascript unsafe "$1[\"getError\"]()" js_getError
+        :: WebGLRenderingContextBase -> IO GLenum
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.getError Mozilla WebGLRenderingContextBase.getError documentation> 
+getError ::
+         (MonadIO m, IsWebGLRenderingContextBase self) => self -> m GLenum
+getError self
+  = liftIO (js_getError (toWebGLRenderingContextBase self))
+ 
+foreign import javascript unsafe "$1[\"getExtension\"]($2)"
+        js_getExtension ::
+        WebGLRenderingContextBase -> JSString -> IO JSRef
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.getExtension Mozilla WebGLRenderingContextBase.getExtension documentation> 
+getExtension ::
+             (MonadIO m, IsWebGLRenderingContextBase self, ToJSString name) =>
+               self -> name -> m JSRef
+getExtension self name
+  = liftIO
+      (js_getExtension (toWebGLRenderingContextBase self)
+         (toJSString name))
+ 
+foreign import javascript unsafe
+        "$1[\"getFramebufferAttachmentParameter\"]($2,\n$3, $4)"
+        js_getFramebufferAttachmentParameter ::
+        WebGLRenderingContextBase -> GLenum -> GLenum -> GLenum -> IO JSRef
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.getFramebufferAttachmentParameter Mozilla WebGLRenderingContextBase.getFramebufferAttachmentParameter documentation> 
+getFramebufferAttachmentParameter ::
+                                  (MonadIO m, IsWebGLRenderingContextBase self) =>
+                                    self -> GLenum -> GLenum -> GLenum -> m JSRef
+getFramebufferAttachmentParameter self target attachment pname
+  = liftIO
+      (js_getFramebufferAttachmentParameter
+         (toWebGLRenderingContextBase self)
+         target
+         attachment
+         pname)
+ 
+foreign import javascript unsafe "$1[\"getParameter\"]($2)"
+        js_getParameter :: WebGLRenderingContextBase -> GLenum -> IO JSRef
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.getParameter Mozilla WebGLRenderingContextBase.getParameter documentation> 
+getParameter ::
+             (MonadIO m, IsWebGLRenderingContextBase self) =>
+               self -> GLenum -> m JSRef
+getParameter self pname
+  = liftIO (js_getParameter (toWebGLRenderingContextBase self) pname)
+ 
+foreign import javascript unsafe
+        "$1[\"getProgramParameter\"]($2,\n$3)" js_getProgramParameter ::
+        WebGLRenderingContextBase ->
+          Nullable WebGLProgram -> GLenum -> IO JSRef
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.getProgramParameter Mozilla WebGLRenderingContextBase.getProgramParameter documentation> 
+getProgramParameter ::
+                    (MonadIO m, IsWebGLRenderingContextBase self) =>
+                      self -> Maybe WebGLProgram -> GLenum -> m JSRef
+getProgramParameter self program pname
+  = liftIO
+      (js_getProgramParameter (toWebGLRenderingContextBase self)
+         (maybeToNullable program)
+         pname)
+ 
+foreign import javascript unsafe "$1[\"getProgramInfoLog\"]($2)"
+        js_getProgramInfoLog ::
+        WebGLRenderingContextBase ->
+          Nullable WebGLProgram -> IO (Nullable JSString)
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.getProgramInfoLog Mozilla WebGLRenderingContextBase.getProgramInfoLog documentation> 
+getProgramInfoLog ::
+                  (MonadIO m, IsWebGLRenderingContextBase self,
+                   FromJSString result) =>
+                    self -> Maybe WebGLProgram -> m (Maybe result)
+getProgramInfoLog self program
+  = liftIO
+      (fromMaybeJSString <$>
+         (js_getProgramInfoLog (toWebGLRenderingContextBase self)
+            (maybeToNullable program)))
+ 
+foreign import javascript unsafe
+        "$1[\"getRenderbufferParameter\"]($2,\n$3)"
+        js_getRenderbufferParameter ::
+        WebGLRenderingContextBase -> GLenum -> GLenum -> IO JSRef
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.getRenderbufferParameter Mozilla WebGLRenderingContextBase.getRenderbufferParameter documentation> 
+getRenderbufferParameter ::
+                         (MonadIO m, IsWebGLRenderingContextBase self) =>
+                           self -> GLenum -> GLenum -> m JSRef
+getRenderbufferParameter self target pname
+  = liftIO
+      (js_getRenderbufferParameter (toWebGLRenderingContextBase self)
+         target
+         pname)
+ 
+foreign import javascript unsafe
+        "$1[\"getShaderParameter\"]($2, $3)" js_getShaderParameter ::
+        WebGLRenderingContextBase ->
+          Nullable WebGLShader -> GLenum -> IO JSRef
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.getShaderParameter Mozilla WebGLRenderingContextBase.getShaderParameter documentation> 
+getShaderParameter ::
+                   (MonadIO m, IsWebGLRenderingContextBase self) =>
+                     self -> Maybe WebGLShader -> GLenum -> m JSRef
+getShaderParameter self shader pname
+  = liftIO
+      (js_getShaderParameter (toWebGLRenderingContextBase self)
+         (maybeToNullable shader)
+         pname)
+ 
+foreign import javascript unsafe "$1[\"getShaderInfoLog\"]($2)"
+        js_getShaderInfoLog ::
+        WebGLRenderingContextBase ->
+          Nullable WebGLShader -> IO (Nullable JSString)
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.getShaderInfoLog Mozilla WebGLRenderingContextBase.getShaderInfoLog documentation> 
+getShaderInfoLog ::
+                 (MonadIO m, IsWebGLRenderingContextBase self,
+                  FromJSString result) =>
+                   self -> Maybe WebGLShader -> m (Maybe result)
+getShaderInfoLog self shader
+  = liftIO
+      (fromMaybeJSString <$>
+         (js_getShaderInfoLog (toWebGLRenderingContextBase self)
+            (maybeToNullable shader)))
+ 
+foreign import javascript unsafe
+        "$1[\"getShaderPrecisionFormat\"]($2,\n$3)"
+        js_getShaderPrecisionFormat ::
+        WebGLRenderingContextBase ->
+          GLenum -> GLenum -> IO (Nullable WebGLShaderPrecisionFormat)
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.getShaderPrecisionFormat Mozilla WebGLRenderingContextBase.getShaderPrecisionFormat documentation> 
+getShaderPrecisionFormat ::
+                         (MonadIO m, IsWebGLRenderingContextBase self) =>
+                           self -> GLenum -> GLenum -> m (Maybe WebGLShaderPrecisionFormat)
+getShaderPrecisionFormat self shadertype precisiontype
+  = liftIO
+      (nullableToMaybe <$>
+         (js_getShaderPrecisionFormat (toWebGLRenderingContextBase self)
+            shadertype
+            precisiontype))
+ 
+foreign import javascript unsafe "$1[\"getShaderSource\"]($2)"
+        js_getShaderSource ::
+        WebGLRenderingContextBase ->
+          Nullable WebGLShader -> IO (Nullable JSString)
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.getShaderSource Mozilla WebGLRenderingContextBase.getShaderSource documentation> 
+getShaderSource ::
+                (MonadIO m, IsWebGLRenderingContextBase self,
+                 FromJSString result) =>
+                  self -> Maybe WebGLShader -> m (Maybe result)
+getShaderSource self shader
+  = liftIO
+      (fromMaybeJSString <$>
+         (js_getShaderSource (toWebGLRenderingContextBase self)
+            (maybeToNullable shader)))
+ 
+foreign import javascript unsafe "$1[\"getSupportedExtensions\"]()"
+        js_getSupportedExtensions :: WebGLRenderingContextBase -> IO JSRef
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.getSupportedExtensions Mozilla WebGLRenderingContextBase.getSupportedExtensions documentation> 
+getSupportedExtensions ::
+                       (MonadIO m, IsWebGLRenderingContextBase self,
+                        FromJSString result) =>
+                         self -> m [result]
+getSupportedExtensions self
+  = liftIO
+      ((js_getSupportedExtensions (toWebGLRenderingContextBase self)) >>=
+         fromJSRefUnchecked)
+ 
+foreign import javascript unsafe "$1[\"getTexParameter\"]($2, $3)"
+        js_getTexParameter ::
+        WebGLRenderingContextBase -> GLenum -> GLenum -> IO JSRef
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.getTexParameter Mozilla WebGLRenderingContextBase.getTexParameter documentation> 
+getTexParameter ::
+                (MonadIO m, IsWebGLRenderingContextBase self) =>
+                  self -> GLenum -> GLenum -> m JSRef
+getTexParameter self target pname
+  = liftIO
+      (js_getTexParameter (toWebGLRenderingContextBase self) target
+         pname)
+ 
+foreign import javascript unsafe "$1[\"getUniform\"]($2, $3)"
+        js_getUniform ::
+        WebGLRenderingContextBase ->
+          Nullable WebGLProgram -> Nullable WebGLUniformLocation -> IO JSRef
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.getUniform Mozilla WebGLRenderingContextBase.getUniform documentation> 
+getUniform ::
+           (MonadIO m, IsWebGLRenderingContextBase self) =>
+             self -> Maybe WebGLProgram -> Maybe WebGLUniformLocation -> m JSRef
+getUniform self program location
+  = liftIO
+      (js_getUniform (toWebGLRenderingContextBase self)
+         (maybeToNullable program)
+         (maybeToNullable location))
+ 
+foreign import javascript unsafe
+        "$1[\"getUniformLocation\"]($2, $3)" js_getUniformLocation ::
+        WebGLRenderingContextBase ->
+          Nullable WebGLProgram ->
+            JSString -> IO (Nullable WebGLUniformLocation)
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.getUniformLocation Mozilla WebGLRenderingContextBase.getUniformLocation documentation> 
+getUniformLocation ::
+                   (MonadIO m, IsWebGLRenderingContextBase self, ToJSString name) =>
+                     self ->
+                       Maybe WebGLProgram -> name -> m (Maybe WebGLUniformLocation)
+getUniformLocation self program name
+  = liftIO
+      (nullableToMaybe <$>
+         (js_getUniformLocation (toWebGLRenderingContextBase self)
+            (maybeToNullable program)
+            (toJSString name)))
+ 
+foreign import javascript unsafe "$1[\"getVertexAttrib\"]($2, $3)"
+        js_getVertexAttrib ::
+        WebGLRenderingContextBase -> GLuint -> GLenum -> IO JSRef
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.getVertexAttrib Mozilla WebGLRenderingContextBase.getVertexAttrib documentation> 
+getVertexAttrib ::
+                (MonadIO m, IsWebGLRenderingContextBase self) =>
+                  self -> GLuint -> GLenum -> m JSRef
+getVertexAttrib self index pname
+  = liftIO
+      (js_getVertexAttrib (toWebGLRenderingContextBase self) index pname)
+ 
+foreign import javascript unsafe
+        "$1[\"getVertexAttribOffset\"]($2,\n$3)" js_getVertexAttribOffset
+        :: WebGLRenderingContextBase -> GLuint -> GLenum -> IO Double
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.getVertexAttribOffset Mozilla WebGLRenderingContextBase.getVertexAttribOffset documentation> 
+getVertexAttribOffset ::
+                      (MonadIO m, IsWebGLRenderingContextBase self) =>
+                        self -> GLuint -> GLenum -> m GLsizeiptr
+getVertexAttribOffset self index pname
+  = liftIO
+      (round <$>
+         (js_getVertexAttribOffset (toWebGLRenderingContextBase self) index
+            pname))
+ 
+foreign import javascript unsafe "$1[\"hint\"]($2, $3)" js_hint ::
+        WebGLRenderingContextBase -> GLenum -> GLenum -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.hint Mozilla WebGLRenderingContextBase.hint documentation> 
+hint ::
+     (MonadIO m, IsWebGLRenderingContextBase self) =>
+       self -> GLenum -> GLenum -> m ()
+hint self target mode
+  = liftIO (js_hint (toWebGLRenderingContextBase self) target mode)
+ 
+foreign import javascript unsafe "$1[\"isBuffer\"]($2)" js_isBuffer
+        ::
+        WebGLRenderingContextBase -> Nullable WebGLBuffer -> IO GLboolean
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.isBuffer Mozilla WebGLRenderingContextBase.isBuffer documentation> 
+isBuffer ::
+         (MonadIO m, IsWebGLRenderingContextBase self) =>
+           self -> Maybe WebGLBuffer -> m GLboolean
+isBuffer self buffer
+  = liftIO
+      (js_isBuffer (toWebGLRenderingContextBase self)
+         (maybeToNullable buffer))
+ 
+foreign import javascript unsafe "$1[\"isContextLost\"]()"
+        js_isContextLost :: WebGLRenderingContextBase -> IO GLboolean
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.isContextLost Mozilla WebGLRenderingContextBase.isContextLost documentation> 
+isContextLost ::
+              (MonadIO m, IsWebGLRenderingContextBase self) =>
+                self -> m GLboolean
+isContextLost self
+  = liftIO (js_isContextLost (toWebGLRenderingContextBase self))
+ 
+foreign import javascript unsafe "$1[\"isEnabled\"]($2)"
+        js_isEnabled :: WebGLRenderingContextBase -> GLenum -> IO GLboolean
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.isEnabled Mozilla WebGLRenderingContextBase.isEnabled documentation> 
+isEnabled ::
+          (MonadIO m, IsWebGLRenderingContextBase self) =>
+            self -> GLenum -> m GLboolean
+isEnabled self cap
+  = liftIO (js_isEnabled (toWebGLRenderingContextBase self) cap)
+ 
+foreign import javascript unsafe "$1[\"isFramebuffer\"]($2)"
+        js_isFramebuffer ::
+        WebGLRenderingContextBase ->
+          Nullable WebGLFramebuffer -> IO GLboolean
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.isFramebuffer Mozilla WebGLRenderingContextBase.isFramebuffer documentation> 
+isFramebuffer ::
+              (MonadIO m, IsWebGLRenderingContextBase self) =>
+                self -> Maybe WebGLFramebuffer -> m GLboolean
+isFramebuffer self framebuffer
+  = liftIO
+      (js_isFramebuffer (toWebGLRenderingContextBase self)
+         (maybeToNullable framebuffer))
+ 
+foreign import javascript unsafe "$1[\"isProgram\"]($2)"
+        js_isProgram ::
+        WebGLRenderingContextBase -> Nullable WebGLProgram -> IO GLboolean
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.isProgram Mozilla WebGLRenderingContextBase.isProgram documentation> 
+isProgram ::
+          (MonadIO m, IsWebGLRenderingContextBase self) =>
+            self -> Maybe WebGLProgram -> m GLboolean
+isProgram self program
+  = liftIO
+      (js_isProgram (toWebGLRenderingContextBase self)
+         (maybeToNullable program))
+ 
+foreign import javascript unsafe "$1[\"isRenderbuffer\"]($2)"
+        js_isRenderbuffer ::
+        WebGLRenderingContextBase ->
+          Nullable WebGLRenderbuffer -> IO GLboolean
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.isRenderbuffer Mozilla WebGLRenderingContextBase.isRenderbuffer documentation> 
+isRenderbuffer ::
+               (MonadIO m, IsWebGLRenderingContextBase self) =>
+                 self -> Maybe WebGLRenderbuffer -> m GLboolean
+isRenderbuffer self renderbuffer
+  = liftIO
+      (js_isRenderbuffer (toWebGLRenderingContextBase self)
+         (maybeToNullable renderbuffer))
+ 
+foreign import javascript unsafe "$1[\"isShader\"]($2)" js_isShader
+        ::
+        WebGLRenderingContextBase -> Nullable WebGLShader -> IO GLboolean
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.isShader Mozilla WebGLRenderingContextBase.isShader documentation> 
+isShader ::
+         (MonadIO m, IsWebGLRenderingContextBase self) =>
+           self -> Maybe WebGLShader -> m GLboolean
+isShader self shader
+  = liftIO
+      (js_isShader (toWebGLRenderingContextBase self)
+         (maybeToNullable shader))
+ 
+foreign import javascript unsafe "$1[\"isTexture\"]($2)"
+        js_isTexture ::
+        WebGLRenderingContextBase -> Nullable WebGLTexture -> IO GLboolean
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.isTexture Mozilla WebGLRenderingContextBase.isTexture documentation> 
+isTexture ::
+          (MonadIO m, IsWebGLRenderingContextBase self) =>
+            self -> Maybe WebGLTexture -> m GLboolean
+isTexture self texture
+  = liftIO
+      (js_isTexture (toWebGLRenderingContextBase self)
+         (maybeToNullable texture))
+ 
+foreign import javascript unsafe "$1[\"lineWidth\"]($2)"
+        js_lineWidth :: WebGLRenderingContextBase -> GLfloat -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.lineWidth Mozilla WebGLRenderingContextBase.lineWidth documentation> 
+lineWidth ::
+          (MonadIO m, IsWebGLRenderingContextBase self) =>
+            self -> GLfloat -> m ()
+lineWidth self width
+  = liftIO (js_lineWidth (toWebGLRenderingContextBase self) width)
+ 
+foreign import javascript unsafe "$1[\"linkProgram\"]($2)"
+        js_linkProgram ::
+        WebGLRenderingContextBase -> Nullable WebGLProgram -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.linkProgram Mozilla WebGLRenderingContextBase.linkProgram documentation> 
+linkProgram ::
+            (MonadIO m, IsWebGLRenderingContextBase self) =>
+              self -> Maybe WebGLProgram -> m ()
+linkProgram self program
+  = liftIO
+      (js_linkProgram (toWebGLRenderingContextBase self)
+         (maybeToNullable program))
+ 
+foreign import javascript unsafe "$1[\"pixelStorei\"]($2, $3)"
+        js_pixelStorei ::
+        WebGLRenderingContextBase -> GLenum -> GLint -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.pixelStorei Mozilla WebGLRenderingContextBase.pixelStorei documentation> 
+pixelStorei ::
+            (MonadIO m, IsWebGLRenderingContextBase self) =>
+              self -> GLenum -> GLint -> m ()
+pixelStorei self pname param
+  = liftIO
+      (js_pixelStorei (toWebGLRenderingContextBase self) pname param)
+ 
+foreign import javascript unsafe "$1[\"polygonOffset\"]($2, $3)"
+        js_polygonOffset ::
+        WebGLRenderingContextBase -> GLfloat -> GLfloat -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.polygonOffset Mozilla WebGLRenderingContextBase.polygonOffset documentation> 
+polygonOffset ::
+              (MonadIO m, IsWebGLRenderingContextBase self) =>
+                self -> GLfloat -> GLfloat -> m ()
+polygonOffset self factor units
+  = liftIO
+      (js_polygonOffset (toWebGLRenderingContextBase self) factor units)
+ 
+foreign import javascript unsafe
+        "$1[\"readPixels\"]($2, $3, $4, $5,\n$6, $7, $8)" js_readPixels ::
+        WebGLRenderingContextBase ->
+          GLint ->
+            GLint ->
+              GLsizei ->
+                GLsizei -> GLenum -> GLenum -> Nullable ArrayBufferView -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.readPixels Mozilla WebGLRenderingContextBase.readPixels documentation> 
+readPixels ::
+           (MonadIO m, IsWebGLRenderingContextBase self,
+            IsArrayBufferView pixels) =>
+             self ->
+               GLint ->
+                 GLint ->
+                   GLsizei -> GLsizei -> GLenum -> GLenum -> Maybe pixels -> m ()
+readPixels self x y width height format type' pixels
+  = liftIO
+      (js_readPixels (toWebGLRenderingContextBase self) x y width height
+         format
+         type'
+         (maybeToNullable (fmap toArrayBufferView pixels)))
+ 
+foreign import javascript unsafe "$1[\"releaseShaderCompiler\"]()"
+        js_releaseShaderCompiler :: WebGLRenderingContextBase -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.releaseShaderCompiler Mozilla WebGLRenderingContextBase.releaseShaderCompiler documentation> 
+releaseShaderCompiler ::
+                      (MonadIO m, IsWebGLRenderingContextBase self) => self -> m ()
+releaseShaderCompiler self
+  = liftIO
+      (js_releaseShaderCompiler (toWebGLRenderingContextBase self))
+ 
+foreign import javascript unsafe
+        "$1[\"renderbufferStorage\"]($2,\n$3, $4, $5)"
+        js_renderbufferStorage ::
+        WebGLRenderingContextBase ->
+          GLenum -> GLenum -> GLsizei -> GLsizei -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.renderbufferStorage Mozilla WebGLRenderingContextBase.renderbufferStorage documentation> 
+renderbufferStorage ::
+                    (MonadIO m, IsWebGLRenderingContextBase self) =>
+                      self -> GLenum -> GLenum -> GLsizei -> GLsizei -> m ()
+renderbufferStorage self target internalformat width height
+  = liftIO
+      (js_renderbufferStorage (toWebGLRenderingContextBase self) target
+         internalformat
+         width
+         height)
+ 
+foreign import javascript unsafe "$1[\"sampleCoverage\"]($2, $3)"
+        js_sampleCoverage ::
+        WebGLRenderingContextBase -> GLclampf -> GLboolean -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.sampleCoverage Mozilla WebGLRenderingContextBase.sampleCoverage documentation> 
+sampleCoverage ::
+               (MonadIO m, IsWebGLRenderingContextBase self) =>
+                 self -> GLclampf -> GLboolean -> m ()
+sampleCoverage self value invert
+  = liftIO
+      (js_sampleCoverage (toWebGLRenderingContextBase self) value invert)
+ 
+foreign import javascript unsafe "$1[\"scissor\"]($2, $3, $4, $5)"
+        js_scissor ::
+        WebGLRenderingContextBase ->
+          GLint -> GLint -> GLsizei -> GLsizei -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.scissor Mozilla WebGLRenderingContextBase.scissor documentation> 
+scissor ::
+        (MonadIO m, IsWebGLRenderingContextBase self) =>
+          self -> GLint -> GLint -> GLsizei -> GLsizei -> m ()
+scissor self x y width height
+  = liftIO
+      (js_scissor (toWebGLRenderingContextBase self) x y width height)
+ 
+foreign import javascript unsafe "$1[\"shaderSource\"]($2, $3)"
+        js_shaderSource ::
+        WebGLRenderingContextBase ->
+          Nullable WebGLShader -> JSString -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.shaderSource Mozilla WebGLRenderingContextBase.shaderSource documentation> 
+shaderSource ::
+             (MonadIO m, IsWebGLRenderingContextBase self, ToJSString string) =>
+               self -> Maybe WebGLShader -> string -> m ()
+shaderSource self shader string
+  = liftIO
+      (js_shaderSource (toWebGLRenderingContextBase self)
+         (maybeToNullable shader)
+         (toJSString string))
+ 
+foreign import javascript unsafe "$1[\"stencilFunc\"]($2, $3, $4)"
+        js_stencilFunc ::
+        WebGLRenderingContextBase -> GLenum -> GLint -> GLuint -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.stencilFunc Mozilla WebGLRenderingContextBase.stencilFunc documentation> 
+stencilFunc ::
+            (MonadIO m, IsWebGLRenderingContextBase self) =>
+              self -> GLenum -> GLint -> GLuint -> m ()
+stencilFunc self func ref mask
+  = liftIO
+      (js_stencilFunc (toWebGLRenderingContextBase self) func ref mask)
+ 
+foreign import javascript unsafe
+        "$1[\"stencilFuncSeparate\"]($2,\n$3, $4, $5)"
+        js_stencilFuncSeparate ::
+        WebGLRenderingContextBase ->
+          GLenum -> GLenum -> GLint -> GLuint -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.stencilFuncSeparate Mozilla WebGLRenderingContextBase.stencilFuncSeparate documentation> 
+stencilFuncSeparate ::
+                    (MonadIO m, IsWebGLRenderingContextBase self) =>
+                      self -> GLenum -> GLenum -> GLint -> GLuint -> m ()
+stencilFuncSeparate self face func ref mask
+  = liftIO
+      (js_stencilFuncSeparate (toWebGLRenderingContextBase self) face
+         func
+         ref
+         mask)
+ 
+foreign import javascript unsafe "$1[\"stencilMask\"]($2)"
+        js_stencilMask :: WebGLRenderingContextBase -> GLuint -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.stencilMask Mozilla WebGLRenderingContextBase.stencilMask documentation> 
+stencilMask ::
+            (MonadIO m, IsWebGLRenderingContextBase self) =>
+              self -> GLuint -> m ()
+stencilMask self mask
+  = liftIO (js_stencilMask (toWebGLRenderingContextBase self) mask)
+ 
+foreign import javascript unsafe
+        "$1[\"stencilMaskSeparate\"]($2,\n$3)" js_stencilMaskSeparate ::
+        WebGLRenderingContextBase -> GLenum -> GLuint -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.stencilMaskSeparate Mozilla WebGLRenderingContextBase.stencilMaskSeparate documentation> 
+stencilMaskSeparate ::
+                    (MonadIO m, IsWebGLRenderingContextBase self) =>
+                      self -> GLenum -> GLuint -> m ()
+stencilMaskSeparate self face mask
+  = liftIO
+      (js_stencilMaskSeparate (toWebGLRenderingContextBase self) face
+         mask)
+ 
+foreign import javascript unsafe "$1[\"stencilOp\"]($2, $3, $4)"
+        js_stencilOp ::
+        WebGLRenderingContextBase -> GLenum -> GLenum -> GLenum -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.stencilOp Mozilla WebGLRenderingContextBase.stencilOp documentation> 
+stencilOp ::
+          (MonadIO m, IsWebGLRenderingContextBase self) =>
+            self -> GLenum -> GLenum -> GLenum -> m ()
+stencilOp self fail zfail zpass
+  = liftIO
+      (js_stencilOp (toWebGLRenderingContextBase self) fail zfail zpass)
+ 
+foreign import javascript unsafe
+        "$1[\"stencilOpSeparate\"]($2, $3,\n$4, $5)" js_stencilOpSeparate
+        ::
+        WebGLRenderingContextBase ->
+          GLenum -> GLenum -> GLenum -> GLenum -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.stencilOpSeparate Mozilla WebGLRenderingContextBase.stencilOpSeparate documentation> 
+stencilOpSeparate ::
+                  (MonadIO m, IsWebGLRenderingContextBase self) =>
+                    self -> GLenum -> GLenum -> GLenum -> GLenum -> m ()
+stencilOpSeparate self face fail zfail zpass
+  = liftIO
+      (js_stencilOpSeparate (toWebGLRenderingContextBase self) face fail
+         zfail
+         zpass)
+ 
+foreign import javascript unsafe
+        "$1[\"texParameterf\"]($2, $3, $4)" js_texParameterf ::
+        WebGLRenderingContextBase -> GLenum -> GLenum -> GLfloat -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.texParameterf Mozilla WebGLRenderingContextBase.texParameterf documentation> 
+texParameterf ::
+              (MonadIO m, IsWebGLRenderingContextBase self) =>
+                self -> GLenum -> GLenum -> GLfloat -> m ()
+texParameterf self target pname param
+  = liftIO
+      (js_texParameterf (toWebGLRenderingContextBase self) target pname
+         param)
+ 
+foreign import javascript unsafe
+        "$1[\"texParameteri\"]($2, $3, $4)" js_texParameteri ::
+        WebGLRenderingContextBase -> GLenum -> GLenum -> GLint -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.texParameteri Mozilla WebGLRenderingContextBase.texParameteri documentation> 
+texParameteri ::
+              (MonadIO m, IsWebGLRenderingContextBase self) =>
+                self -> GLenum -> GLenum -> GLint -> m ()
+texParameteri self target pname param
+  = liftIO
+      (js_texParameteri (toWebGLRenderingContextBase self) target pname
+         param)
+ 
+foreign import javascript unsafe
+        "$1[\"texImage2D\"]($2, $3, $4, $5,\n$6, $7, $8, $9, $10)"
+        js_texImage2DView ::
+        WebGLRenderingContextBase ->
+          GLenum ->
+            GLint ->
+              GLenum ->
+                GLsizei ->
+                  GLsizei ->
+                    GLint -> GLenum -> GLenum -> Nullable ArrayBufferView -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.texImage2D Mozilla WebGLRenderingContextBase.texImage2D documentation> 
+texImage2DView ::
+               (MonadIO m, IsWebGLRenderingContextBase self,
+                IsArrayBufferView pixels) =>
+                 self ->
+                   GLenum ->
+                     GLint ->
+                       GLenum ->
+                         GLsizei ->
+                           GLsizei -> GLint -> GLenum -> GLenum -> Maybe pixels -> m ()
+texImage2DView self target level internalformat width height border
+  format type' pixels
+  = liftIO
+      (js_texImage2DView (toWebGLRenderingContextBase self) target level
+         internalformat
+         width
+         height
+         border
+         format
+         type'
+         (maybeToNullable (fmap toArrayBufferView pixels)))
+ 
+foreign import javascript unsafe
+        "$1[\"texImage2D\"]($2, $3, $4, $5,\n$6, $7)" js_texImage2DData ::
+        WebGLRenderingContextBase ->
+          GLenum ->
+            GLint -> GLenum -> GLenum -> GLenum -> Nullable ImageData -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.texImage2D Mozilla WebGLRenderingContextBase.texImage2D documentation> 
+texImage2DData ::
+               (MonadIO m, IsWebGLRenderingContextBase self) =>
+                 self ->
+                   GLenum ->
+                     GLint -> GLenum -> GLenum -> GLenum -> Maybe ImageData -> m ()
+texImage2DData self target level internalformat format type' pixels
+  = liftIO
+      (js_texImage2DData (toWebGLRenderingContextBase self) target level
+         internalformat
+         format
+         type'
+         (maybeToNullable pixels))
+ 
+foreign import javascript unsafe
+        "$1[\"texImage2D\"]($2, $3, $4, $5,\n$6, $7)" js_texImage2D ::
+        WebGLRenderingContextBase ->
+          GLenum ->
+            GLint ->
+              GLenum -> GLenum -> GLenum -> Nullable HTMLImageElement -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.texImage2D Mozilla WebGLRenderingContextBase.texImage2D documentation> 
+texImage2D ::
+           (MonadIO m, IsWebGLRenderingContextBase self) =>
+             self ->
+               GLenum ->
+                 GLint ->
+                   GLenum -> GLenum -> GLenum -> Maybe HTMLImageElement -> m ()
+texImage2D self target level internalformat format type' image
+  = liftIO
+      (js_texImage2D (toWebGLRenderingContextBase self) target level
+         internalformat
+         format
+         type'
+         (maybeToNullable image))
+ 
+foreign import javascript unsafe
+        "$1[\"texImage2D\"]($2, $3, $4, $5,\n$6, $7)" js_texImage2DCanvas
+        ::
+        WebGLRenderingContextBase ->
+          GLenum ->
+            GLint ->
+              GLenum -> GLenum -> GLenum -> Nullable HTMLCanvasElement -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.texImage2D Mozilla WebGLRenderingContextBase.texImage2D documentation> 
+texImage2DCanvas ::
+                 (MonadIO m, IsWebGLRenderingContextBase self) =>
+                   self ->
+                     GLenum ->
+                       GLint ->
+                         GLenum -> GLenum -> GLenum -> Maybe HTMLCanvasElement -> m ()
+texImage2DCanvas self target level internalformat format type'
+  canvas
+  = liftIO
+      (js_texImage2DCanvas (toWebGLRenderingContextBase self) target
+         level
+         internalformat
+         format
+         type'
+         (maybeToNullable canvas))
+ 
+foreign import javascript unsafe
+        "$1[\"texImage2D\"]($2, $3, $4, $5,\n$6, $7)" js_texImage2DVideo ::
+        WebGLRenderingContextBase ->
+          GLenum ->
+            GLint ->
+              GLenum -> GLenum -> GLenum -> Nullable HTMLVideoElement -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.texImage2D Mozilla WebGLRenderingContextBase.texImage2D documentation> 
+texImage2DVideo ::
+                (MonadIO m, IsWebGLRenderingContextBase self) =>
+                  self ->
+                    GLenum ->
+                      GLint ->
+                        GLenum -> GLenum -> GLenum -> Maybe HTMLVideoElement -> m ()
+texImage2DVideo self target level internalformat format type' video
+  = liftIO
+      (js_texImage2DVideo (toWebGLRenderingContextBase self) target level
+         internalformat
+         format
+         type'
+         (maybeToNullable video))
+ 
+foreign import javascript unsafe
+        "$1[\"texSubImage2D\"]($2, $3, $4,\n$5, $6, $7, $8, $9, $10)"
+        js_texSubImage2DView ::
+        WebGLRenderingContextBase ->
+          GLenum ->
+            GLint ->
+              GLint ->
+                GLint ->
+                  GLsizei ->
+                    GLsizei -> GLenum -> GLenum -> Nullable ArrayBufferView -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.texSubImage2D Mozilla WebGLRenderingContextBase.texSubImage2D documentation> 
+texSubImage2DView ::
+                  (MonadIO m, IsWebGLRenderingContextBase self,
+                   IsArrayBufferView pixels) =>
+                    self ->
+                      GLenum ->
+                        GLint ->
+                          GLint ->
+                            GLint ->
+                              GLsizei -> GLsizei -> GLenum -> GLenum -> Maybe pixels -> m ()
+texSubImage2DView self target level xoffset yoffset width height
+  format type' pixels
+  = liftIO
+      (js_texSubImage2DView (toWebGLRenderingContextBase self) target
+         level
+         xoffset
+         yoffset
+         width
+         height
+         format
+         type'
+         (maybeToNullable (fmap toArrayBufferView pixels)))
+ 
+foreign import javascript unsafe
+        "$1[\"texSubImage2D\"]($2, $3, $4,\n$5, $6, $7, $8)"
+        js_texSubImage2DData ::
+        WebGLRenderingContextBase ->
+          GLenum ->
+            GLint ->
+              GLint -> GLint -> GLenum -> GLenum -> Nullable ImageData -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.texSubImage2D Mozilla WebGLRenderingContextBase.texSubImage2D documentation> 
+texSubImage2DData ::
+                  (MonadIO m, IsWebGLRenderingContextBase self) =>
+                    self ->
+                      GLenum ->
+                        GLint ->
+                          GLint -> GLint -> GLenum -> GLenum -> Maybe ImageData -> m ()
+texSubImage2DData self target level xoffset yoffset format type'
+  pixels
+  = liftIO
+      (js_texSubImage2DData (toWebGLRenderingContextBase self) target
+         level
+         xoffset
+         yoffset
+         format
+         type'
+         (maybeToNullable pixels))
+ 
+foreign import javascript unsafe
+        "$1[\"texSubImage2D\"]($2, $3, $4,\n$5, $6, $7, $8)"
+        js_texSubImage2D ::
+        WebGLRenderingContextBase ->
+          GLenum ->
+            GLint ->
+              GLint ->
+                GLint -> GLenum -> GLenum -> Nullable HTMLImageElement -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.texSubImage2D Mozilla WebGLRenderingContextBase.texSubImage2D documentation> 
+texSubImage2D ::
+              (MonadIO m, IsWebGLRenderingContextBase self) =>
+                self ->
+                  GLenum ->
+                    GLint ->
+                      GLint ->
+                        GLint -> GLenum -> GLenum -> Maybe HTMLImageElement -> m ()
+texSubImage2D self target level xoffset yoffset format type' image
+  = liftIO
+      (js_texSubImage2D (toWebGLRenderingContextBase self) target level
+         xoffset
+         yoffset
+         format
+         type'
+         (maybeToNullable image))
+ 
+foreign import javascript unsafe
+        "$1[\"texSubImage2D\"]($2, $3, $4,\n$5, $6, $7, $8)"
+        js_texSubImage2DCanvas ::
+        WebGLRenderingContextBase ->
+          GLenum ->
+            GLint ->
+              GLint ->
+                GLint -> GLenum -> GLenum -> Nullable HTMLCanvasElement -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.texSubImage2D Mozilla WebGLRenderingContextBase.texSubImage2D documentation> 
+texSubImage2DCanvas ::
+                    (MonadIO m, IsWebGLRenderingContextBase self) =>
+                      self ->
+                        GLenum ->
+                          GLint ->
+                            GLint ->
+                              GLint -> GLenum -> GLenum -> Maybe HTMLCanvasElement -> m ()
+texSubImage2DCanvas self target level xoffset yoffset format type'
+  canvas
+  = liftIO
+      (js_texSubImage2DCanvas (toWebGLRenderingContextBase self) target
+         level
+         xoffset
+         yoffset
+         format
+         type'
+         (maybeToNullable canvas))
+ 
+foreign import javascript unsafe
+        "$1[\"texSubImage2D\"]($2, $3, $4,\n$5, $6, $7, $8)"
+        js_texSubImage2DVideo ::
+        WebGLRenderingContextBase ->
+          GLenum ->
+            GLint ->
+              GLint ->
+                GLint -> GLenum -> GLenum -> Nullable HTMLVideoElement -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.texSubImage2D Mozilla WebGLRenderingContextBase.texSubImage2D documentation> 
+texSubImage2DVideo ::
+                   (MonadIO m, IsWebGLRenderingContextBase self) =>
+                     self ->
+                       GLenum ->
+                         GLint ->
+                           GLint ->
+                             GLint -> GLenum -> GLenum -> Maybe HTMLVideoElement -> m ()
+texSubImage2DVideo self target level xoffset yoffset format type'
+  video
+  = liftIO
+      (js_texSubImage2DVideo (toWebGLRenderingContextBase self) target
+         level
+         xoffset
+         yoffset
+         format
+         type'
+         (maybeToNullable video))
+ 
+foreign import javascript unsafe "$1[\"uniform1f\"]($2, $3)"
+        js_uniform1f ::
+        WebGLRenderingContextBase ->
+          Nullable WebGLUniformLocation -> GLfloat -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.uniform1f Mozilla WebGLRenderingContextBase.uniform1f documentation> 
+uniform1f ::
+          (MonadIO m, IsWebGLRenderingContextBase self) =>
+            self -> Maybe WebGLUniformLocation -> GLfloat -> m ()
+uniform1f self location x
+  = liftIO
+      (js_uniform1f (toWebGLRenderingContextBase self)
+         (maybeToNullable location)
+         x)
+ 
+foreign import javascript unsafe "$1[\"uniform1fv\"]($2, $3)"
+        js_uniform1fv ::
+        WebGLRenderingContextBase ->
+          Nullable WebGLUniformLocation -> Nullable Float32Array -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.uniform1fv Mozilla WebGLRenderingContextBase.uniform1fv documentation> 
+uniform1fv ::
+           (MonadIO m, IsWebGLRenderingContextBase self, IsFloat32Array v) =>
+             self -> Maybe WebGLUniformLocation -> Maybe v -> m ()
+uniform1fv self location v
+  = liftIO
+      (js_uniform1fv (toWebGLRenderingContextBase self)
+         (maybeToNullable location)
+         (maybeToNullable (fmap toFloat32Array v)))
+ 
+foreign import javascript unsafe "$1[\"uniform1i\"]($2, $3)"
+        js_uniform1i ::
+        WebGLRenderingContextBase ->
+          Nullable WebGLUniformLocation -> GLint -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.uniform1i Mozilla WebGLRenderingContextBase.uniform1i documentation> 
+uniform1i ::
+          (MonadIO m, IsWebGLRenderingContextBase self) =>
+            self -> Maybe WebGLUniformLocation -> GLint -> m ()
+uniform1i self location x
+  = liftIO
+      (js_uniform1i (toWebGLRenderingContextBase self)
+         (maybeToNullable location)
+         x)
+ 
+foreign import javascript unsafe "$1[\"uniform1iv\"]($2, $3)"
+        js_uniform1iv ::
+        WebGLRenderingContextBase ->
+          Nullable WebGLUniformLocation -> Nullable Int32Array -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.uniform1iv Mozilla WebGLRenderingContextBase.uniform1iv documentation> 
+uniform1iv ::
+           (MonadIO m, IsWebGLRenderingContextBase self, IsInt32Array v) =>
+             self -> Maybe WebGLUniformLocation -> Maybe v -> m ()
+uniform1iv self location v
+  = liftIO
+      (js_uniform1iv (toWebGLRenderingContextBase self)
+         (maybeToNullable location)
+         (maybeToNullable (fmap toInt32Array v)))
+ 
+foreign import javascript unsafe "$1[\"uniform2f\"]($2, $3, $4)"
+        js_uniform2f ::
+        WebGLRenderingContextBase ->
+          Nullable WebGLUniformLocation -> GLfloat -> GLfloat -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.uniform2f Mozilla WebGLRenderingContextBase.uniform2f documentation> 
+uniform2f ::
+          (MonadIO m, IsWebGLRenderingContextBase self) =>
+            self -> Maybe WebGLUniformLocation -> GLfloat -> GLfloat -> m ()
+uniform2f self location x y
+  = liftIO
+      (js_uniform2f (toWebGLRenderingContextBase self)
+         (maybeToNullable location)
+         x
+         y)
+ 
+foreign import javascript unsafe "$1[\"uniform2fv\"]($2, $3)"
+        js_uniform2fv ::
+        WebGLRenderingContextBase ->
+          Nullable WebGLUniformLocation -> Nullable Float32Array -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.uniform2fv Mozilla WebGLRenderingContextBase.uniform2fv documentation> 
+uniform2fv ::
+           (MonadIO m, IsWebGLRenderingContextBase self, IsFloat32Array v) =>
+             self -> Maybe WebGLUniformLocation -> Maybe v -> m ()
+uniform2fv self location v
+  = liftIO
+      (js_uniform2fv (toWebGLRenderingContextBase self)
+         (maybeToNullable location)
+         (maybeToNullable (fmap toFloat32Array v)))
+ 
+foreign import javascript unsafe "$1[\"uniform2i\"]($2, $3, $4)"
+        js_uniform2i ::
+        WebGLRenderingContextBase ->
+          Nullable WebGLUniformLocation -> GLint -> GLint -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.uniform2i Mozilla WebGLRenderingContextBase.uniform2i documentation> 
+uniform2i ::
+          (MonadIO m, IsWebGLRenderingContextBase self) =>
+            self -> Maybe WebGLUniformLocation -> GLint -> GLint -> m ()
+uniform2i self location x y
+  = liftIO
+      (js_uniform2i (toWebGLRenderingContextBase self)
+         (maybeToNullable location)
+         x
+         y)
+ 
+foreign import javascript unsafe "$1[\"uniform2iv\"]($2, $3)"
+        js_uniform2iv ::
+        WebGLRenderingContextBase ->
+          Nullable WebGLUniformLocation -> Nullable Int32Array -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.uniform2iv Mozilla WebGLRenderingContextBase.uniform2iv documentation> 
+uniform2iv ::
+           (MonadIO m, IsWebGLRenderingContextBase self, IsInt32Array v) =>
+             self -> Maybe WebGLUniformLocation -> Maybe v -> m ()
+uniform2iv self location v
+  = liftIO
+      (js_uniform2iv (toWebGLRenderingContextBase self)
+         (maybeToNullable location)
+         (maybeToNullable (fmap toInt32Array v)))
+ 
+foreign import javascript unsafe
+        "$1[\"uniform3f\"]($2, $3, $4, $5)" js_uniform3f ::
+        WebGLRenderingContextBase ->
+          Nullable WebGLUniformLocation ->
+            GLfloat -> GLfloat -> GLfloat -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.uniform3f Mozilla WebGLRenderingContextBase.uniform3f documentation> 
+uniform3f ::
+          (MonadIO m, IsWebGLRenderingContextBase self) =>
+            self ->
+              Maybe WebGLUniformLocation -> GLfloat -> GLfloat -> GLfloat -> m ()
+uniform3f self location x y z
+  = liftIO
+      (js_uniform3f (toWebGLRenderingContextBase self)
+         (maybeToNullable location)
+         x
+         y
+         z)
+ 
+foreign import javascript unsafe "$1[\"uniform3fv\"]($2, $3)"
+        js_uniform3fv ::
+        WebGLRenderingContextBase ->
+          Nullable WebGLUniformLocation -> Nullable Float32Array -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.uniform3fv Mozilla WebGLRenderingContextBase.uniform3fv documentation> 
+uniform3fv ::
+           (MonadIO m, IsWebGLRenderingContextBase self, IsFloat32Array v) =>
+             self -> Maybe WebGLUniformLocation -> Maybe v -> m ()
+uniform3fv self location v
+  = liftIO
+      (js_uniform3fv (toWebGLRenderingContextBase self)
+         (maybeToNullable location)
+         (maybeToNullable (fmap toFloat32Array v)))
+ 
+foreign import javascript unsafe
+        "$1[\"uniform3i\"]($2, $3, $4, $5)" js_uniform3i ::
+        WebGLRenderingContextBase ->
+          Nullable WebGLUniformLocation -> GLint -> GLint -> GLint -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.uniform3i Mozilla WebGLRenderingContextBase.uniform3i documentation> 
+uniform3i ::
+          (MonadIO m, IsWebGLRenderingContextBase self) =>
+            self ->
+              Maybe WebGLUniformLocation -> GLint -> GLint -> GLint -> m ()
+uniform3i self location x y z
+  = liftIO
+      (js_uniform3i (toWebGLRenderingContextBase self)
+         (maybeToNullable location)
+         x
+         y
+         z)
+ 
+foreign import javascript unsafe "$1[\"uniform3iv\"]($2, $3)"
+        js_uniform3iv ::
+        WebGLRenderingContextBase ->
+          Nullable WebGLUniformLocation -> Nullable Int32Array -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.uniform3iv Mozilla WebGLRenderingContextBase.uniform3iv documentation> 
+uniform3iv ::
+           (MonadIO m, IsWebGLRenderingContextBase self, IsInt32Array v) =>
+             self -> Maybe WebGLUniformLocation -> Maybe v -> m ()
+uniform3iv self location v
+  = liftIO
+      (js_uniform3iv (toWebGLRenderingContextBase self)
+         (maybeToNullable location)
+         (maybeToNullable (fmap toInt32Array v)))
+ 
+foreign import javascript unsafe
+        "$1[\"uniform4f\"]($2, $3, $4, $5,\n$6)" js_uniform4f ::
+        WebGLRenderingContextBase ->
+          Nullable WebGLUniformLocation ->
+            GLfloat -> GLfloat -> GLfloat -> GLfloat -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.uniform4f Mozilla WebGLRenderingContextBase.uniform4f documentation> 
+uniform4f ::
+          (MonadIO m, IsWebGLRenderingContextBase self) =>
+            self ->
+              Maybe WebGLUniformLocation ->
+                GLfloat -> GLfloat -> GLfloat -> GLfloat -> m ()
+uniform4f self location x y z w
+  = liftIO
+      (js_uniform4f (toWebGLRenderingContextBase self)
+         (maybeToNullable location)
+         x
+         y
+         z
+         w)
+ 
+foreign import javascript unsafe "$1[\"uniform4fv\"]($2, $3)"
+        js_uniform4fv ::
+        WebGLRenderingContextBase ->
+          Nullable WebGLUniformLocation -> Nullable Float32Array -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.uniform4fv Mozilla WebGLRenderingContextBase.uniform4fv documentation> 
+uniform4fv ::
+           (MonadIO m, IsWebGLRenderingContextBase self, IsFloat32Array v) =>
+             self -> Maybe WebGLUniformLocation -> Maybe v -> m ()
+uniform4fv self location v
+  = liftIO
+      (js_uniform4fv (toWebGLRenderingContextBase self)
+         (maybeToNullable location)
+         (maybeToNullable (fmap toFloat32Array v)))
+ 
+foreign import javascript unsafe
+        "$1[\"uniform4i\"]($2, $3, $4, $5,\n$6)" js_uniform4i ::
+        WebGLRenderingContextBase ->
+          Nullable WebGLUniformLocation ->
+            GLint -> GLint -> GLint -> GLint -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.uniform4i Mozilla WebGLRenderingContextBase.uniform4i documentation> 
+uniform4i ::
+          (MonadIO m, IsWebGLRenderingContextBase self) =>
+            self ->
+              Maybe WebGLUniformLocation ->
+                GLint -> GLint -> GLint -> GLint -> m ()
+uniform4i self location x y z w
+  = liftIO
+      (js_uniform4i (toWebGLRenderingContextBase self)
+         (maybeToNullable location)
+         x
+         y
+         z
+         w)
+ 
+foreign import javascript unsafe "$1[\"uniform4iv\"]($2, $3)"
+        js_uniform4iv ::
+        WebGLRenderingContextBase ->
+          Nullable WebGLUniformLocation -> Nullable Int32Array -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.uniform4iv Mozilla WebGLRenderingContextBase.uniform4iv documentation> 
+uniform4iv ::
+           (MonadIO m, IsWebGLRenderingContextBase self, IsInt32Array v) =>
+             self -> Maybe WebGLUniformLocation -> Maybe v -> m ()
+uniform4iv self location v
+  = liftIO
+      (js_uniform4iv (toWebGLRenderingContextBase self)
+         (maybeToNullable location)
+         (maybeToNullable (fmap toInt32Array v)))
+ 
+foreign import javascript unsafe
+        "$1[\"uniformMatrix2fv\"]($2, $3,\n$4)" js_uniformMatrix2fv ::
+        WebGLRenderingContextBase ->
+          Nullable WebGLUniformLocation ->
+            GLboolean -> Nullable Float32Array -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.uniformMatrix2fv Mozilla WebGLRenderingContextBase.uniformMatrix2fv documentation> 
+uniformMatrix2fv ::
+                 (MonadIO m, IsWebGLRenderingContextBase self,
+                  IsFloat32Array array) =>
+                   self ->
+                     Maybe WebGLUniformLocation -> GLboolean -> Maybe array -> m ()
+uniformMatrix2fv self location transpose array
+  = liftIO
+      (js_uniformMatrix2fv (toWebGLRenderingContextBase self)
+         (maybeToNullable location)
+         transpose
+         (maybeToNullable (fmap toFloat32Array array)))
+ 
+foreign import javascript unsafe
+        "$1[\"uniformMatrix3fv\"]($2, $3,\n$4)" js_uniformMatrix3fv ::
+        WebGLRenderingContextBase ->
+          Nullable WebGLUniformLocation ->
+            GLboolean -> Nullable Float32Array -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.uniformMatrix3fv Mozilla WebGLRenderingContextBase.uniformMatrix3fv documentation> 
+uniformMatrix3fv ::
+                 (MonadIO m, IsWebGLRenderingContextBase self,
+                  IsFloat32Array array) =>
+                   self ->
+                     Maybe WebGLUniformLocation -> GLboolean -> Maybe array -> m ()
+uniformMatrix3fv self location transpose array
+  = liftIO
+      (js_uniformMatrix3fv (toWebGLRenderingContextBase self)
+         (maybeToNullable location)
+         transpose
+         (maybeToNullable (fmap toFloat32Array array)))
+ 
+foreign import javascript unsafe
+        "$1[\"uniformMatrix4fv\"]($2, $3,\n$4)" js_uniformMatrix4fv ::
+        WebGLRenderingContextBase ->
+          Nullable WebGLUniformLocation ->
+            GLboolean -> Nullable Float32Array -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.uniformMatrix4fv Mozilla WebGLRenderingContextBase.uniformMatrix4fv documentation> 
+uniformMatrix4fv ::
+                 (MonadIO m, IsWebGLRenderingContextBase self,
+                  IsFloat32Array array) =>
+                   self ->
+                     Maybe WebGLUniformLocation -> GLboolean -> Maybe array -> m ()
+uniformMatrix4fv self location transpose array
+  = liftIO
+      (js_uniformMatrix4fv (toWebGLRenderingContextBase self)
+         (maybeToNullable location)
+         transpose
+         (maybeToNullable (fmap toFloat32Array array)))
+ 
+foreign import javascript unsafe "$1[\"useProgram\"]($2)"
+        js_useProgram ::
+        WebGLRenderingContextBase -> Nullable WebGLProgram -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.useProgram Mozilla WebGLRenderingContextBase.useProgram documentation> 
+useProgram ::
+           (MonadIO m, IsWebGLRenderingContextBase self) =>
+             self -> Maybe WebGLProgram -> m ()
+useProgram self program
+  = liftIO
+      (js_useProgram (toWebGLRenderingContextBase self)
+         (maybeToNullable program))
+ 
+foreign import javascript unsafe "$1[\"validateProgram\"]($2)"
+        js_validateProgram ::
+        WebGLRenderingContextBase -> Nullable WebGLProgram -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.validateProgram Mozilla WebGLRenderingContextBase.validateProgram documentation> 
+validateProgram ::
+                (MonadIO m, IsWebGLRenderingContextBase self) =>
+                  self -> Maybe WebGLProgram -> m ()
+validateProgram self program
+  = liftIO
+      (js_validateProgram (toWebGLRenderingContextBase self)
+         (maybeToNullable program))
+ 
+foreign import javascript unsafe "$1[\"vertexAttrib1f\"]($2, $3)"
+        js_vertexAttrib1f ::
+        WebGLRenderingContextBase -> GLuint -> GLfloat -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.vertexAttrib1f Mozilla WebGLRenderingContextBase.vertexAttrib1f documentation> 
+vertexAttrib1f ::
+               (MonadIO m, IsWebGLRenderingContextBase self) =>
+                 self -> GLuint -> GLfloat -> m ()
+vertexAttrib1f self indx x
+  = liftIO
+      (js_vertexAttrib1f (toWebGLRenderingContextBase self) indx x)
+ 
+foreign import javascript unsafe "$1[\"vertexAttrib1fv\"]($2, $3)"
+        js_vertexAttrib1fv ::
+        WebGLRenderingContextBase ->
+          GLuint -> Nullable Float32Array -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.vertexAttrib1fv Mozilla WebGLRenderingContextBase.vertexAttrib1fv documentation> 
+vertexAttrib1fv ::
+                (MonadIO m, IsWebGLRenderingContextBase self,
+                 IsFloat32Array values) =>
+                  self -> GLuint -> Maybe values -> m ()
+vertexAttrib1fv self indx values
+  = liftIO
+      (js_vertexAttrib1fv (toWebGLRenderingContextBase self) indx
+         (maybeToNullable (fmap toFloat32Array values)))
+ 
+foreign import javascript unsafe
+        "$1[\"vertexAttrib2f\"]($2, $3, $4)" js_vertexAttrib2f ::
+        WebGLRenderingContextBase -> GLuint -> GLfloat -> GLfloat -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.vertexAttrib2f Mozilla WebGLRenderingContextBase.vertexAttrib2f documentation> 
+vertexAttrib2f ::
+               (MonadIO m, IsWebGLRenderingContextBase self) =>
+                 self -> GLuint -> GLfloat -> GLfloat -> m ()
+vertexAttrib2f self indx x y
+  = liftIO
+      (js_vertexAttrib2f (toWebGLRenderingContextBase self) indx x y)
+ 
+foreign import javascript unsafe "$1[\"vertexAttrib2fv\"]($2, $3)"
+        js_vertexAttrib2fv ::
+        WebGLRenderingContextBase ->
+          GLuint -> Nullable Float32Array -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.vertexAttrib2fv Mozilla WebGLRenderingContextBase.vertexAttrib2fv documentation> 
+vertexAttrib2fv ::
+                (MonadIO m, IsWebGLRenderingContextBase self,
+                 IsFloat32Array values) =>
+                  self -> GLuint -> Maybe values -> m ()
+vertexAttrib2fv self indx values
+  = liftIO
+      (js_vertexAttrib2fv (toWebGLRenderingContextBase self) indx
+         (maybeToNullable (fmap toFloat32Array values)))
+ 
+foreign import javascript unsafe
+        "$1[\"vertexAttrib3f\"]($2, $3, $4,\n$5)" js_vertexAttrib3f ::
+        WebGLRenderingContextBase ->
+          GLuint -> GLfloat -> GLfloat -> GLfloat -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.vertexAttrib3f Mozilla WebGLRenderingContextBase.vertexAttrib3f documentation> 
+vertexAttrib3f ::
+               (MonadIO m, IsWebGLRenderingContextBase self) =>
+                 self -> GLuint -> GLfloat -> GLfloat -> GLfloat -> m ()
+vertexAttrib3f self indx x y z
+  = liftIO
+      (js_vertexAttrib3f (toWebGLRenderingContextBase self) indx x y z)
+ 
+foreign import javascript unsafe "$1[\"vertexAttrib3fv\"]($2, $3)"
+        js_vertexAttrib3fv ::
+        WebGLRenderingContextBase ->
+          GLuint -> Nullable Float32Array -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.vertexAttrib3fv Mozilla WebGLRenderingContextBase.vertexAttrib3fv documentation> 
+vertexAttrib3fv ::
+                (MonadIO m, IsWebGLRenderingContextBase self,
+                 IsFloat32Array values) =>
+                  self -> GLuint -> Maybe values -> m ()
+vertexAttrib3fv self indx values
+  = liftIO
+      (js_vertexAttrib3fv (toWebGLRenderingContextBase self) indx
+         (maybeToNullable (fmap toFloat32Array values)))
+ 
+foreign import javascript unsafe
+        "$1[\"vertexAttrib4f\"]($2, $3, $4,\n$5, $6)" js_vertexAttrib4f ::
+        WebGLRenderingContextBase ->
+          GLuint -> GLfloat -> GLfloat -> GLfloat -> GLfloat -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.vertexAttrib4f Mozilla WebGLRenderingContextBase.vertexAttrib4f documentation> 
+vertexAttrib4f ::
+               (MonadIO m, IsWebGLRenderingContextBase self) =>
+                 self -> GLuint -> GLfloat -> GLfloat -> GLfloat -> GLfloat -> m ()
+vertexAttrib4f self indx x y z w
+  = liftIO
+      (js_vertexAttrib4f (toWebGLRenderingContextBase self) indx x y z w)
+ 
+foreign import javascript unsafe "$1[\"vertexAttrib4fv\"]($2, $3)"
+        js_vertexAttrib4fv ::
+        WebGLRenderingContextBase ->
+          GLuint -> Nullable Float32Array -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.vertexAttrib4fv Mozilla WebGLRenderingContextBase.vertexAttrib4fv documentation> 
+vertexAttrib4fv ::
+                (MonadIO m, IsWebGLRenderingContextBase self,
+                 IsFloat32Array values) =>
+                  self -> GLuint -> Maybe values -> m ()
+vertexAttrib4fv self indx values
+  = liftIO
+      (js_vertexAttrib4fv (toWebGLRenderingContextBase self) indx
+         (maybeToNullable (fmap toFloat32Array values)))
+ 
+foreign import javascript unsafe
+        "$1[\"vertexAttribPointer\"]($2,\n$3, $4, $5, $6, $7)"
+        js_vertexAttribPointer ::
+        WebGLRenderingContextBase ->
+          GLuint ->
+            GLint -> GLenum -> GLboolean -> GLsizei -> Double -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.vertexAttribPointer Mozilla WebGLRenderingContextBase.vertexAttribPointer documentation> 
+vertexAttribPointer ::
+                    (MonadIO m, IsWebGLRenderingContextBase self) =>
+                      self ->
+                        GLuint ->
+                          GLint -> GLenum -> GLboolean -> GLsizei -> GLintptr -> m ()
+vertexAttribPointer self indx size type' normalized stride offset
+  = liftIO
+      (js_vertexAttribPointer (toWebGLRenderingContextBase self) indx
+         size
+         type'
+         normalized
+         stride
+         (fromIntegral offset))
+ 
+foreign import javascript unsafe "$1[\"viewport\"]($2, $3, $4, $5)"
+        js_viewport ::
+        WebGLRenderingContextBase ->
+          GLint -> GLint -> GLsizei -> GLsizei -> IO ()
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.viewport Mozilla WebGLRenderingContextBase.viewport documentation> 
+viewport ::
+         (MonadIO m, IsWebGLRenderingContextBase self) =>
+           self -> GLint -> GLint -> GLsizei -> GLsizei -> m ()
+viewport self x y width height
+  = liftIO
+      (js_viewport (toWebGLRenderingContextBase self) x y width height)
+pattern DEPTH_BUFFER_BIT = 256
+pattern STENCIL_BUFFER_BIT = 1024
+pattern COLOR_BUFFER_BIT = 16384
+pattern POINTS = 0
+pattern LINES = 1
+pattern LINE_LOOP = 2
+pattern LINE_STRIP = 3
+pattern TRIANGLES = 4
+pattern TRIANGLE_STRIP = 5
+pattern TRIANGLE_FAN = 6
+pattern ZERO = 0
+pattern ONE = 1
+pattern SRC_COLOR = 768
+pattern ONE_MINUS_SRC_COLOR = 769
+pattern SRC_ALPHA = 770
+pattern ONE_MINUS_SRC_ALPHA = 771
+pattern DST_ALPHA = 772
+pattern ONE_MINUS_DST_ALPHA = 773
+pattern DST_COLOR = 774
+pattern ONE_MINUS_DST_COLOR = 775
+pattern SRC_ALPHA_SATURATE = 776
+pattern FUNC_ADD = 32774
+pattern BLEND_EQUATION = 32777
+pattern BLEND_EQUATION_RGB = 32777
+pattern BLEND_EQUATION_ALPHA = 34877
+pattern FUNC_SUBTRACT = 32778
+pattern FUNC_REVERSE_SUBTRACT = 32779
+pattern BLEND_DST_RGB = 32968
+pattern BLEND_SRC_RGB = 32969
+pattern BLEND_DST_ALPHA = 32970
+pattern BLEND_SRC_ALPHA = 32971
+pattern CONSTANT_COLOR = 32769
+pattern ONE_MINUS_CONSTANT_COLOR = 32770
+pattern CONSTANT_ALPHA = 32771
+pattern ONE_MINUS_CONSTANT_ALPHA = 32772
+pattern BLEND_COLOR = 32773
+pattern ARRAY_BUFFER = 34962
+pattern ELEMENT_ARRAY_BUFFER = 34963
+pattern ARRAY_BUFFER_BINDING = 34964
+pattern ELEMENT_ARRAY_BUFFER_BINDING = 34965
+pattern STREAM_DRAW = 35040
+pattern STATIC_DRAW = 35044
+pattern DYNAMIC_DRAW = 35048
+pattern BUFFER_SIZE = 34660
+pattern BUFFER_USAGE = 34661
+pattern CURRENT_VERTEX_ATTRIB = 34342
+pattern FRONT = 1028
+pattern BACK = 1029
+pattern FRONT_AND_BACK = 1032
+pattern TEXTURE_2D = 3553
+pattern CULL_FACE = 2884
+pattern BLEND = 3042
+pattern DITHER = 3024
+pattern STENCIL_TEST = 2960
+pattern DEPTH_TEST = 2929
+pattern SCISSOR_TEST = 3089
+pattern POLYGON_OFFSET_FILL = 32823
+pattern SAMPLE_ALPHA_TO_COVERAGE = 32926
+pattern SAMPLE_COVERAGE = 32928
+pattern NO_ERROR = 0
+pattern INVALID_ENUM = 1280
+pattern INVALID_VALUE = 1281
+pattern INVALID_OPERATION = 1282
+pattern OUT_OF_MEMORY = 1285
+pattern CW = 2304
+pattern CCW = 2305
+pattern LINE_WIDTH = 2849
+pattern ALIASED_POINT_SIZE_RANGE = 33901
+pattern ALIASED_LINE_WIDTH_RANGE = 33902
+pattern CULL_FACE_MODE = 2885
+pattern FRONT_FACE = 2886
+pattern DEPTH_RANGE = 2928
+pattern DEPTH_WRITEMASK = 2930
+pattern DEPTH_CLEAR_VALUE = 2931
+pattern DEPTH_FUNC = 2932
+pattern STENCIL_CLEAR_VALUE = 2961
+pattern STENCIL_FUNC = 2962
+pattern STENCIL_FAIL = 2964
+pattern STENCIL_PASS_DEPTH_FAIL = 2965
+pattern STENCIL_PASS_DEPTH_PASS = 2966
+pattern STENCIL_REF = 2967
+pattern STENCIL_VALUE_MASK = 2963
+pattern STENCIL_WRITEMASK = 2968
+pattern STENCIL_BACK_FUNC = 34816
+pattern STENCIL_BACK_FAIL = 34817
+pattern STENCIL_BACK_PASS_DEPTH_FAIL = 34818
+pattern STENCIL_BACK_PASS_DEPTH_PASS = 34819
+pattern STENCIL_BACK_REF = 36003
+pattern STENCIL_BACK_VALUE_MASK = 36004
+pattern STENCIL_BACK_WRITEMASK = 36005
+pattern VIEWPORT = 2978
+pattern SCISSOR_BOX = 3088
+pattern COLOR_CLEAR_VALUE = 3106
+pattern COLOR_WRITEMASK = 3107
+pattern UNPACK_ALIGNMENT = 3317
+pattern PACK_ALIGNMENT = 3333
+pattern MAX_TEXTURE_SIZE = 3379
+pattern MAX_VIEWPORT_DIMS = 3386
+pattern SUBPIXEL_BITS = 3408
+pattern RED_BITS = 3410
+pattern GREEN_BITS = 3411
+pattern BLUE_BITS = 3412
+pattern ALPHA_BITS = 3413
+pattern DEPTH_BITS = 3414
+pattern STENCIL_BITS = 3415
+pattern POLYGON_OFFSET_UNITS = 10752
+pattern POLYGON_OFFSET_FACTOR = 32824
+pattern TEXTURE_BINDING_2D = 32873
+pattern SAMPLE_BUFFERS = 32936
+pattern SAMPLES = 32937
+pattern SAMPLE_COVERAGE_VALUE = 32938
+pattern SAMPLE_COVERAGE_INVERT = 32939
+pattern COMPRESSED_TEXTURE_FORMATS = 34467
+pattern DONT_CARE = 4352
+pattern FASTEST = 4353
+pattern NICEST = 4354
+pattern GENERATE_MIPMAP_HINT = 33170
+pattern BYTE = 5120
+pattern UNSIGNED_BYTE = 5121
+pattern SHORT = 5122
+pattern UNSIGNED_SHORT = 5123
+pattern INT = 5124
+pattern UNSIGNED_INT = 5125
+pattern FLOAT = 5126
+pattern DEPTH_COMPONENT = 6402
+pattern ALPHA = 6406
+pattern RGB = 6407
+pattern RGBA = 6408
+pattern LUMINANCE = 6409
+pattern LUMINANCE_ALPHA = 6410
+pattern UNSIGNED_SHORT_4_4_4_4 = 32819
+pattern UNSIGNED_SHORT_5_5_5_1 = 32820
+pattern UNSIGNED_SHORT_5_6_5 = 33635
+pattern FRAGMENT_SHADER = 35632
+pattern VERTEX_SHADER = 35633
+pattern MAX_VERTEX_ATTRIBS = 34921
+pattern MAX_VERTEX_UNIFORM_VECTORS = 36347
+pattern MAX_VARYING_VECTORS = 36348
+pattern MAX_COMBINED_TEXTURE_IMAGE_UNITS = 35661
+pattern MAX_VERTEX_TEXTURE_IMAGE_UNITS = 35660
+pattern MAX_TEXTURE_IMAGE_UNITS = 34930
+pattern MAX_FRAGMENT_UNIFORM_VECTORS = 36349
+pattern SHADER_TYPE = 35663
+pattern DELETE_STATUS = 35712
+pattern LINK_STATUS = 35714
+pattern VALIDATE_STATUS = 35715
+pattern ATTACHED_SHADERS = 35717
+pattern ACTIVE_UNIFORMS = 35718
+pattern ACTIVE_ATTRIBUTES = 35721
+pattern SHADING_LANGUAGE_VERSION = 35724
+pattern CURRENT_PROGRAM = 35725
+pattern NEVER = 512
+pattern LESS = 513
+pattern EQUAL = 514
+pattern LEQUAL = 515
+pattern GREATER = 516
+pattern NOTEQUAL = 517
+pattern GEQUAL = 518
+pattern ALWAYS = 519
+pattern KEEP = 7680
+pattern REPLACE = 7681
+pattern INCR = 7682
+pattern DECR = 7683
+pattern INVERT = 5386
+pattern INCR_WRAP = 34055
+pattern DECR_WRAP = 34056
+pattern VENDOR = 7936
+pattern RENDERER = 7937
+pattern VERSION = 7938
+pattern NEAREST = 9728
+pattern LINEAR = 9729
+pattern NEAREST_MIPMAP_NEAREST = 9984
+pattern LINEAR_MIPMAP_NEAREST = 9985
+pattern NEAREST_MIPMAP_LINEAR = 9986
+pattern LINEAR_MIPMAP_LINEAR = 9987
+pattern TEXTURE_MAG_FILTER = 10240
+pattern TEXTURE_MIN_FILTER = 10241
+pattern TEXTURE_WRAP_S = 10242
+pattern TEXTURE_WRAP_T = 10243
+pattern TEXTURE = 5890
+pattern TEXTURE_CUBE_MAP = 34067
+pattern TEXTURE_BINDING_CUBE_MAP = 34068
+pattern TEXTURE_CUBE_MAP_POSITIVE_X = 34069
+pattern TEXTURE_CUBE_MAP_NEGATIVE_X = 34070
+pattern TEXTURE_CUBE_MAP_POSITIVE_Y = 34071
+pattern TEXTURE_CUBE_MAP_NEGATIVE_Y = 34072
+pattern TEXTURE_CUBE_MAP_POSITIVE_Z = 34073
+pattern TEXTURE_CUBE_MAP_NEGATIVE_Z = 34074
+pattern MAX_CUBE_MAP_TEXTURE_SIZE = 34076
+pattern TEXTURE0 = 33984
+pattern TEXTURE1 = 33985
+pattern TEXTURE2 = 33986
+pattern TEXTURE3 = 33987
+pattern TEXTURE4 = 33988
+pattern TEXTURE5 = 33989
+pattern TEXTURE6 = 33990
+pattern TEXTURE7 = 33991
+pattern TEXTURE8 = 33992
+pattern TEXTURE9 = 33993
+pattern TEXTURE10 = 33994
+pattern TEXTURE11 = 33995
+pattern TEXTURE12 = 33996
+pattern TEXTURE13 = 33997
+pattern TEXTURE14 = 33998
+pattern TEXTURE15 = 33999
+pattern TEXTURE16 = 34000
+pattern TEXTURE17 = 34001
+pattern TEXTURE18 = 34002
+pattern TEXTURE19 = 34003
+pattern TEXTURE20 = 34004
+pattern TEXTURE21 = 34005
+pattern TEXTURE22 = 34006
+pattern TEXTURE23 = 34007
+pattern TEXTURE24 = 34008
+pattern TEXTURE25 = 34009
+pattern TEXTURE26 = 34010
+pattern TEXTURE27 = 34011
+pattern TEXTURE28 = 34012
+pattern TEXTURE29 = 34013
+pattern TEXTURE30 = 34014
+pattern TEXTURE31 = 34015
+pattern ACTIVE_TEXTURE = 34016
+pattern REPEAT = 10497
+pattern CLAMP_TO_EDGE = 33071
+pattern MIRRORED_REPEAT = 33648
+pattern FLOAT_VEC2 = 35664
+pattern FLOAT_VEC3 = 35665
+pattern FLOAT_VEC4 = 35666
+pattern INT_VEC2 = 35667
+pattern INT_VEC3 = 35668
+pattern INT_VEC4 = 35669
+pattern BOOL = 35670
+pattern BOOL_VEC2 = 35671
+pattern BOOL_VEC3 = 35672
+pattern BOOL_VEC4 = 35673
+pattern FLOAT_MAT2 = 35674
+pattern FLOAT_MAT3 = 35675
+pattern FLOAT_MAT4 = 35676
+pattern SAMPLER_2D = 35678
+pattern SAMPLER_CUBE = 35680
+pattern VERTEX_ATTRIB_ARRAY_ENABLED = 34338
+pattern VERTEX_ATTRIB_ARRAY_SIZE = 34339
+pattern VERTEX_ATTRIB_ARRAY_STRIDE = 34340
+pattern VERTEX_ATTRIB_ARRAY_TYPE = 34341
+pattern VERTEX_ATTRIB_ARRAY_NORMALIZED = 34922
+pattern VERTEX_ATTRIB_ARRAY_POINTER = 34373
+pattern VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 34975
+pattern IMPLEMENTATION_COLOR_READ_TYPE = 35738
+pattern IMPLEMENTATION_COLOR_READ_FORMAT = 35739
+pattern COMPILE_STATUS = 35713
+pattern LOW_FLOAT = 36336
+pattern MEDIUM_FLOAT = 36337
+pattern HIGH_FLOAT = 36338
+pattern LOW_INT = 36339
+pattern MEDIUM_INT = 36340
+pattern HIGH_INT = 36341
+pattern FRAMEBUFFER = 36160
+pattern RENDERBUFFER = 36161
+pattern RGBA4 = 32854
+pattern RGB5_A1 = 32855
+pattern RGB565 = 36194
+pattern DEPTH_COMPONENT16 = 33189
+pattern STENCIL_INDEX = 6401
+pattern STENCIL_INDEX8 = 36168
+pattern DEPTH_STENCIL = 34041
+pattern RENDERBUFFER_WIDTH = 36162
+pattern RENDERBUFFER_HEIGHT = 36163
+pattern RENDERBUFFER_INTERNAL_FORMAT = 36164
+pattern RENDERBUFFER_RED_SIZE = 36176
+pattern RENDERBUFFER_GREEN_SIZE = 36177
+pattern RENDERBUFFER_BLUE_SIZE = 36178
+pattern RENDERBUFFER_ALPHA_SIZE = 36179
+pattern RENDERBUFFER_DEPTH_SIZE = 36180
+pattern RENDERBUFFER_STENCIL_SIZE = 36181
+pattern FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = 36048
+pattern FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = 36049
+pattern FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = 36050
+pattern FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = 36051
+pattern COLOR_ATTACHMENT0 = 36064
+pattern DEPTH_ATTACHMENT = 36096
+pattern STENCIL_ATTACHMENT = 36128
+pattern DEPTH_STENCIL_ATTACHMENT = 33306
+pattern NONE = 0
+pattern FRAMEBUFFER_COMPLETE = 36053
+pattern FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 36054
+pattern FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 36055
+pattern FRAMEBUFFER_INCOMPLETE_DIMENSIONS = 36057
+pattern FRAMEBUFFER_UNSUPPORTED = 36061
+pattern FRAMEBUFFER_BINDING = 36006
+pattern RENDERBUFFER_BINDING = 36007
+pattern MAX_RENDERBUFFER_SIZE = 34024
+pattern INVALID_FRAMEBUFFER_OPERATION = 1286
+pattern UNPACK_FLIP_Y_WEBGL = 37440
+pattern UNPACK_PREMULTIPLY_ALPHA_WEBGL = 37441
+pattern CONTEXT_LOST_WEBGL = 37442
+pattern UNPACK_COLORSPACE_CONVERSION_WEBGL = 37443
+pattern BROWSER_DEFAULT_WEBGL = 37444
+ 
+foreign import javascript unsafe "$1[\"drawingBufferWidth\"]"
+        js_getDrawingBufferWidth :: WebGLRenderingContextBase -> IO GLsizei
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.drawingBufferWidth Mozilla WebGLRenderingContextBase.drawingBufferWidth documentation> 
+getDrawingBufferWidth ::
+                      (MonadIO m, IsWebGLRenderingContextBase self) => self -> m GLsizei
+getDrawingBufferWidth self
+  = liftIO
+      (js_getDrawingBufferWidth (toWebGLRenderingContextBase self))
+ 
+foreign import javascript unsafe "$1[\"drawingBufferHeight\"]"
+        js_getDrawingBufferHeight ::
+        WebGLRenderingContextBase -> IO GLsizei
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase.drawingBufferHeight Mozilla WebGLRenderingContextBase.drawingBufferHeight documentation> 
+getDrawingBufferHeight ::
+                       (MonadIO m, IsWebGLRenderingContextBase self) => self -> m GLsizei
+getDrawingBufferHeight self
+  = liftIO
+      (js_getDrawingBufferHeight (toWebGLRenderingContextBase self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/WebGLShaderPrecisionFormat.hs b/src/GHCJS/DOM/JSFFI/Generated/WebGLShaderPrecisionFormat.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/WebGLShaderPrecisionFormat.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/WebGLShaderPrecisionFormat.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,25 +20,22 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"rangeMin\"]" js_getRangeMin
-        :: JSRef WebGLShaderPrecisionFormat -> IO Int
+        :: WebGLShaderPrecisionFormat -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLShaderPrecisionFormat.rangeMin Mozilla WebGLShaderPrecisionFormat.rangeMin documentation> 
 getRangeMin :: (MonadIO m) => WebGLShaderPrecisionFormat -> m Int
-getRangeMin self
-  = liftIO (js_getRangeMin (unWebGLShaderPrecisionFormat self))
+getRangeMin self = liftIO (js_getRangeMin (self))
  
 foreign import javascript unsafe "$1[\"rangeMax\"]" js_getRangeMax
-        :: JSRef WebGLShaderPrecisionFormat -> IO Int
+        :: WebGLShaderPrecisionFormat -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLShaderPrecisionFormat.rangeMax Mozilla WebGLShaderPrecisionFormat.rangeMax documentation> 
 getRangeMax :: (MonadIO m) => WebGLShaderPrecisionFormat -> m Int
-getRangeMax self
-  = liftIO (js_getRangeMax (unWebGLShaderPrecisionFormat self))
+getRangeMax self = liftIO (js_getRangeMax (self))
  
 foreign import javascript unsafe "$1[\"precision\"]"
-        js_getPrecision :: JSRef WebGLShaderPrecisionFormat -> IO Int
+        js_getPrecision :: WebGLShaderPrecisionFormat -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebGLShaderPrecisionFormat.precision Mozilla WebGLShaderPrecisionFormat.precision documentation> 
 getPrecision :: (MonadIO m) => WebGLShaderPrecisionFormat -> m Int
-getPrecision self
-  = liftIO (js_getPrecision (unWebGLShaderPrecisionFormat self))
+getPrecision self = liftIO (js_getPrecision (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/WebKitAnimationEvent.hs b/src/GHCJS/DOM/JSFFI/Generated/WebKitAnimationEvent.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/WebKitAnimationEvent.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/WebKitAnimationEvent.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,21 +20,18 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"animationName\"]"
-        js_getAnimationName :: JSRef WebKitAnimationEvent -> IO JSString
+        js_getAnimationName :: WebKitAnimationEvent -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitAnimationEvent.animationName Mozilla WebKitAnimationEvent.animationName documentation> 
 getAnimationName ::
                  (MonadIO m, FromJSString result) =>
                    WebKitAnimationEvent -> m result
 getAnimationName self
-  = liftIO
-      (fromJSString <$>
-         (js_getAnimationName (unWebKitAnimationEvent self)))
+  = liftIO (fromJSString <$> (js_getAnimationName (self)))
  
 foreign import javascript unsafe "$1[\"elapsedTime\"]"
-        js_getElapsedTime :: JSRef WebKitAnimationEvent -> IO Double
+        js_getElapsedTime :: WebKitAnimationEvent -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitAnimationEvent.elapsedTime Mozilla WebKitAnimationEvent.elapsedTime documentation> 
 getElapsedTime :: (MonadIO m) => WebKitAnimationEvent -> m Double
-getElapsedTime self
-  = liftIO (js_getElapsedTime (unWebKitAnimationEvent self))
+getElapsedTime self = liftIO (js_getElapsedTime (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/WebKitCSSFilterValue.hs b/src/GHCJS/DOM/JSFFI/Generated/WebKitCSSFilterValue.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/WebKitCSSFilterValue.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/WebKitCSSFilterValue.hs
@@ -11,7 +11,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -25,14 +25,13 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"_get\"]($2)" js__get ::
-        JSRef WebKitCSSFilterValue -> Word -> IO (JSRef CSSValue)
+        WebKitCSSFilterValue -> Word -> IO (Nullable CSSValue)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSFilterValue._get Mozilla WebKitCSSFilterValue._get documentation> 
 _get ::
      (MonadIO m) => WebKitCSSFilterValue -> Word -> m (Maybe CSSValue)
 _get self index
-  = liftIO
-      ((js__get (unWebKitCSSFilterValue self) index) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js__get (self) index))
 pattern CSS_FILTER_REFERENCE = 1
 pattern CSS_FILTER_GRAYSCALE = 2
 pattern CSS_FILTER_SEPIA = 3
@@ -46,9 +45,8 @@
 pattern CSS_FILTER_DROP_SHADOW = 11
  
 foreign import javascript unsafe "$1[\"operationType\"]"
-        js_getOperationType :: JSRef WebKitCSSFilterValue -> IO Word
+        js_getOperationType :: WebKitCSSFilterValue -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSFilterValue.operationType Mozilla WebKitCSSFilterValue.operationType documentation> 
 getOperationType :: (MonadIO m) => WebKitCSSFilterValue -> m Word
-getOperationType self
-  = liftIO (js_getOperationType (unWebKitCSSFilterValue self))
+getOperationType self = liftIO (js_getOperationType (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/WebKitCSSMatrix.hs b/src/GHCJS/DOM/JSFFI/Generated/WebKitCSSMatrix.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/WebKitCSSMatrix.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/WebKitCSSMatrix.hs
@@ -21,7 +21,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -36,30 +36,27 @@
  
 foreign import javascript unsafe
         "new window[\"WebKitCSSMatrix\"]($1)" js_newWebKitCSSMatrix ::
-        JSString -> IO (JSRef WebKitCSSMatrix)
+        JSString -> IO WebKitCSSMatrix
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSMatrix Mozilla WebKitCSSMatrix documentation> 
 newWebKitCSSMatrix ::
                    (MonadIO m, ToJSString cssValue) => cssValue -> m WebKitCSSMatrix
 newWebKitCSSMatrix cssValue
-  = liftIO
-      (js_newWebKitCSSMatrix (toJSString cssValue) >>=
-         fromJSRefUnchecked)
+  = liftIO (js_newWebKitCSSMatrix (toJSString cssValue))
  
 foreign import javascript unsafe "$1[\"setMatrixValue\"]($2)"
-        js_setMatrixValue :: JSRef WebKitCSSMatrix -> JSString -> IO ()
+        js_setMatrixValue :: WebKitCSSMatrix -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSMatrix.setMatrixValue Mozilla WebKitCSSMatrix.setMatrixValue documentation> 
 setMatrixValue ::
                (MonadIO m, ToJSString string) => WebKitCSSMatrix -> string -> m ()
 setMatrixValue self string
-  = liftIO
-      (js_setMatrixValue (unWebKitCSSMatrix self) (toJSString string))
+  = liftIO (js_setMatrixValue (self) (toJSString string))
  
 foreign import javascript unsafe "$1[\"multiply\"]($2)" js_multiply
         ::
-        JSRef WebKitCSSMatrix ->
-          JSRef WebKitCSSMatrix -> IO (JSRef WebKitCSSMatrix)
+        WebKitCSSMatrix ->
+          Nullable WebKitCSSMatrix -> IO (Nullable WebKitCSSMatrix)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSMatrix.multiply Mozilla WebKitCSSMatrix.multiply documentation> 
 multiply ::
@@ -68,23 +65,21 @@
              Maybe WebKitCSSMatrix -> m (Maybe WebKitCSSMatrix)
 multiply self secondMatrix
   = liftIO
-      ((js_multiply (unWebKitCSSMatrix self)
-          (maybe jsNull pToJSRef secondMatrix))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_multiply (self) (maybeToNullable secondMatrix)))
  
 foreign import javascript unsafe "$1[\"inverse\"]()" js_inverse ::
-        JSRef WebKitCSSMatrix -> IO (JSRef WebKitCSSMatrix)
+        WebKitCSSMatrix -> IO (Nullable WebKitCSSMatrix)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSMatrix.inverse Mozilla WebKitCSSMatrix.inverse documentation> 
 inverse ::
         (MonadIO m) => WebKitCSSMatrix -> m (Maybe WebKitCSSMatrix)
-inverse self
-  = liftIO ((js_inverse (unWebKitCSSMatrix self)) >>= fromJSRef)
+inverse self = liftIO (nullableToMaybe <$> (js_inverse (self)))
  
 foreign import javascript unsafe "$1[\"translate\"]($2, $3, $4)"
         js_translate ::
-        JSRef WebKitCSSMatrix ->
-          Double -> Double -> Double -> IO (JSRef WebKitCSSMatrix)
+        WebKitCSSMatrix ->
+          Double -> Double -> Double -> IO (Nullable WebKitCSSMatrix)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSMatrix.translate Mozilla WebKitCSSMatrix.translate documentation> 
 translate ::
@@ -92,13 +87,12 @@
             WebKitCSSMatrix ->
               Double -> Double -> Double -> m (Maybe WebKitCSSMatrix)
 translate self x y z
-  = liftIO
-      ((js_translate (unWebKitCSSMatrix self) x y z) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_translate (self) x y z))
  
 foreign import javascript unsafe "$1[\"scale\"]($2, $3, $4)"
         js_scale ::
-        JSRef WebKitCSSMatrix ->
-          Double -> Double -> Double -> IO (JSRef WebKitCSSMatrix)
+        WebKitCSSMatrix ->
+          Double -> Double -> Double -> IO (Nullable WebKitCSSMatrix)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSMatrix.scale Mozilla WebKitCSSMatrix.scale documentation> 
 scale ::
@@ -107,13 +101,12 @@
           Double -> Double -> Double -> m (Maybe WebKitCSSMatrix)
 scale self scaleX scaleY scaleZ
   = liftIO
-      ((js_scale (unWebKitCSSMatrix self) scaleX scaleY scaleZ) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_scale (self) scaleX scaleY scaleZ))
  
 foreign import javascript unsafe "$1[\"rotate\"]($2, $3, $4)"
         js_rotate ::
-        JSRef WebKitCSSMatrix ->
-          Double -> Double -> Double -> IO (JSRef WebKitCSSMatrix)
+        WebKitCSSMatrix ->
+          Double -> Double -> Double -> IO (Nullable WebKitCSSMatrix)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSMatrix.rotate Mozilla WebKitCSSMatrix.rotate documentation> 
 rotate ::
@@ -121,13 +114,13 @@
          WebKitCSSMatrix ->
            Double -> Double -> Double -> m (Maybe WebKitCSSMatrix)
 rotate self rotX rotY rotZ
-  = liftIO
-      ((js_rotate (unWebKitCSSMatrix self) rotX rotY rotZ) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_rotate (self) rotX rotY rotZ))
  
 foreign import javascript unsafe
         "$1[\"rotateAxisAngle\"]($2, $3,\n$4, $5)" js_rotateAxisAngle ::
-        JSRef WebKitCSSMatrix ->
-          Double -> Double -> Double -> Double -> IO (JSRef WebKitCSSMatrix)
+        WebKitCSSMatrix ->
+          Double ->
+            Double -> Double -> Double -> IO (Nullable WebKitCSSMatrix)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSMatrix.rotateAxisAngle Mozilla WebKitCSSMatrix.rotateAxisAngle documentation> 
 rotateAxisAngle ::
@@ -136,342 +129,340 @@
                     Double -> Double -> Double -> Double -> m (Maybe WebKitCSSMatrix)
 rotateAxisAngle self x y z angle
   = liftIO
-      ((js_rotateAxisAngle (unWebKitCSSMatrix self) x y z angle) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_rotateAxisAngle (self) x y z angle))
  
 foreign import javascript unsafe "$1[\"skewX\"]($2)" js_skewX ::
-        JSRef WebKitCSSMatrix -> Double -> IO (JSRef WebKitCSSMatrix)
+        WebKitCSSMatrix -> Double -> IO (Nullable WebKitCSSMatrix)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSMatrix.skewX Mozilla WebKitCSSMatrix.skewX documentation> 
 skewX ::
       (MonadIO m) =>
         WebKitCSSMatrix -> Double -> m (Maybe WebKitCSSMatrix)
 skewX self angle
-  = liftIO ((js_skewX (unWebKitCSSMatrix self) angle) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_skewX (self) angle))
  
 foreign import javascript unsafe "$1[\"skewY\"]($2)" js_skewY ::
-        JSRef WebKitCSSMatrix -> Double -> IO (JSRef WebKitCSSMatrix)
+        WebKitCSSMatrix -> Double -> IO (Nullable WebKitCSSMatrix)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSMatrix.skewY Mozilla WebKitCSSMatrix.skewY documentation> 
 skewY ::
       (MonadIO m) =>
         WebKitCSSMatrix -> Double -> m (Maybe WebKitCSSMatrix)
 skewY self angle
-  = liftIO ((js_skewY (unWebKitCSSMatrix self) angle) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_skewY (self) angle))
  
 foreign import javascript unsafe "$1[\"toString\"]()" js_toString
-        :: JSRef WebKitCSSMatrix -> IO JSString
+        :: WebKitCSSMatrix -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSMatrix.toString Mozilla WebKitCSSMatrix.toString documentation> 
 toString ::
          (MonadIO m, FromJSString result) => WebKitCSSMatrix -> m result
-toString self
-  = liftIO (fromJSString <$> (js_toString (unWebKitCSSMatrix self)))
+toString self = liftIO (fromJSString <$> (js_toString (self)))
  
 foreign import javascript unsafe "$1[\"a\"] = $2;" js_setA ::
-        JSRef WebKitCSSMatrix -> Double -> IO ()
+        WebKitCSSMatrix -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSMatrix.a Mozilla WebKitCSSMatrix.a documentation> 
 setA :: (MonadIO m) => WebKitCSSMatrix -> Double -> m ()
-setA self val = liftIO (js_setA (unWebKitCSSMatrix self) val)
+setA self val = liftIO (js_setA (self) val)
  
 foreign import javascript unsafe "$1[\"a\"]" js_getA ::
-        JSRef WebKitCSSMatrix -> IO Double
+        WebKitCSSMatrix -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSMatrix.a Mozilla WebKitCSSMatrix.a documentation> 
 getA :: (MonadIO m) => WebKitCSSMatrix -> m Double
-getA self = liftIO (js_getA (unWebKitCSSMatrix self))
+getA self = liftIO (js_getA (self))
  
 foreign import javascript unsafe "$1[\"b\"] = $2;" js_setB ::
-        JSRef WebKitCSSMatrix -> Double -> IO ()
+        WebKitCSSMatrix -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSMatrix.b Mozilla WebKitCSSMatrix.b documentation> 
 setB :: (MonadIO m) => WebKitCSSMatrix -> Double -> m ()
-setB self val = liftIO (js_setB (unWebKitCSSMatrix self) val)
+setB self val = liftIO (js_setB (self) val)
  
 foreign import javascript unsafe "$1[\"b\"]" js_getB ::
-        JSRef WebKitCSSMatrix -> IO Double
+        WebKitCSSMatrix -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSMatrix.b Mozilla WebKitCSSMatrix.b documentation> 
 getB :: (MonadIO m) => WebKitCSSMatrix -> m Double
-getB self = liftIO (js_getB (unWebKitCSSMatrix self))
+getB self = liftIO (js_getB (self))
  
 foreign import javascript unsafe "$1[\"c\"] = $2;" js_setC ::
-        JSRef WebKitCSSMatrix -> Double -> IO ()
+        WebKitCSSMatrix -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSMatrix.c Mozilla WebKitCSSMatrix.c documentation> 
 setC :: (MonadIO m) => WebKitCSSMatrix -> Double -> m ()
-setC self val = liftIO (js_setC (unWebKitCSSMatrix self) val)
+setC self val = liftIO (js_setC (self) val)
  
 foreign import javascript unsafe "$1[\"c\"]" js_getC ::
-        JSRef WebKitCSSMatrix -> IO Double
+        WebKitCSSMatrix -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSMatrix.c Mozilla WebKitCSSMatrix.c documentation> 
 getC :: (MonadIO m) => WebKitCSSMatrix -> m Double
-getC self = liftIO (js_getC (unWebKitCSSMatrix self))
+getC self = liftIO (js_getC (self))
  
 foreign import javascript unsafe "$1[\"d\"] = $2;" js_setD ::
-        JSRef WebKitCSSMatrix -> Double -> IO ()
+        WebKitCSSMatrix -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSMatrix.d Mozilla WebKitCSSMatrix.d documentation> 
 setD :: (MonadIO m) => WebKitCSSMatrix -> Double -> m ()
-setD self val = liftIO (js_setD (unWebKitCSSMatrix self) val)
+setD self val = liftIO (js_setD (self) val)
  
 foreign import javascript unsafe "$1[\"d\"]" js_getD ::
-        JSRef WebKitCSSMatrix -> IO Double
+        WebKitCSSMatrix -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSMatrix.d Mozilla WebKitCSSMatrix.d documentation> 
 getD :: (MonadIO m) => WebKitCSSMatrix -> m Double
-getD self = liftIO (js_getD (unWebKitCSSMatrix self))
+getD self = liftIO (js_getD (self))
  
 foreign import javascript unsafe "$1[\"e\"] = $2;" js_setE ::
-        JSRef WebKitCSSMatrix -> Double -> IO ()
+        WebKitCSSMatrix -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSMatrix.e Mozilla WebKitCSSMatrix.e documentation> 
 setE :: (MonadIO m) => WebKitCSSMatrix -> Double -> m ()
-setE self val = liftIO (js_setE (unWebKitCSSMatrix self) val)
+setE self val = liftIO (js_setE (self) val)
  
 foreign import javascript unsafe "$1[\"e\"]" js_getE ::
-        JSRef WebKitCSSMatrix -> IO Double
+        WebKitCSSMatrix -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSMatrix.e Mozilla WebKitCSSMatrix.e documentation> 
 getE :: (MonadIO m) => WebKitCSSMatrix -> m Double
-getE self = liftIO (js_getE (unWebKitCSSMatrix self))
+getE self = liftIO (js_getE (self))
  
 foreign import javascript unsafe "$1[\"f\"] = $2;" js_setF ::
-        JSRef WebKitCSSMatrix -> Double -> IO ()
+        WebKitCSSMatrix -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSMatrix.f Mozilla WebKitCSSMatrix.f documentation> 
 setF :: (MonadIO m) => WebKitCSSMatrix -> Double -> m ()
-setF self val = liftIO (js_setF (unWebKitCSSMatrix self) val)
+setF self val = liftIO (js_setF (self) val)
  
 foreign import javascript unsafe "$1[\"f\"]" js_getF ::
-        JSRef WebKitCSSMatrix -> IO Double
+        WebKitCSSMatrix -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSMatrix.f Mozilla WebKitCSSMatrix.f documentation> 
 getF :: (MonadIO m) => WebKitCSSMatrix -> m Double
-getF self = liftIO (js_getF (unWebKitCSSMatrix self))
+getF self = liftIO (js_getF (self))
  
 foreign import javascript unsafe "$1[\"m11\"] = $2;" js_setM11 ::
-        JSRef WebKitCSSMatrix -> Double -> IO ()
+        WebKitCSSMatrix -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSMatrix.m11 Mozilla WebKitCSSMatrix.m11 documentation> 
 setM11 :: (MonadIO m) => WebKitCSSMatrix -> Double -> m ()
-setM11 self val = liftIO (js_setM11 (unWebKitCSSMatrix self) val)
+setM11 self val = liftIO (js_setM11 (self) val)
  
 foreign import javascript unsafe "$1[\"m11\"]" js_getM11 ::
-        JSRef WebKitCSSMatrix -> IO Double
+        WebKitCSSMatrix -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSMatrix.m11 Mozilla WebKitCSSMatrix.m11 documentation> 
 getM11 :: (MonadIO m) => WebKitCSSMatrix -> m Double
-getM11 self = liftIO (js_getM11 (unWebKitCSSMatrix self))
+getM11 self = liftIO (js_getM11 (self))
  
 foreign import javascript unsafe "$1[\"m12\"] = $2;" js_setM12 ::
-        JSRef WebKitCSSMatrix -> Double -> IO ()
+        WebKitCSSMatrix -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSMatrix.m12 Mozilla WebKitCSSMatrix.m12 documentation> 
 setM12 :: (MonadIO m) => WebKitCSSMatrix -> Double -> m ()
-setM12 self val = liftIO (js_setM12 (unWebKitCSSMatrix self) val)
+setM12 self val = liftIO (js_setM12 (self) val)
  
 foreign import javascript unsafe "$1[\"m12\"]" js_getM12 ::
-        JSRef WebKitCSSMatrix -> IO Double
+        WebKitCSSMatrix -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSMatrix.m12 Mozilla WebKitCSSMatrix.m12 documentation> 
 getM12 :: (MonadIO m) => WebKitCSSMatrix -> m Double
-getM12 self = liftIO (js_getM12 (unWebKitCSSMatrix self))
+getM12 self = liftIO (js_getM12 (self))
  
 foreign import javascript unsafe "$1[\"m13\"] = $2;" js_setM13 ::
-        JSRef WebKitCSSMatrix -> Double -> IO ()
+        WebKitCSSMatrix -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSMatrix.m13 Mozilla WebKitCSSMatrix.m13 documentation> 
 setM13 :: (MonadIO m) => WebKitCSSMatrix -> Double -> m ()
-setM13 self val = liftIO (js_setM13 (unWebKitCSSMatrix self) val)
+setM13 self val = liftIO (js_setM13 (self) val)
  
 foreign import javascript unsafe "$1[\"m13\"]" js_getM13 ::
-        JSRef WebKitCSSMatrix -> IO Double
+        WebKitCSSMatrix -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSMatrix.m13 Mozilla WebKitCSSMatrix.m13 documentation> 
 getM13 :: (MonadIO m) => WebKitCSSMatrix -> m Double
-getM13 self = liftIO (js_getM13 (unWebKitCSSMatrix self))
+getM13 self = liftIO (js_getM13 (self))
  
 foreign import javascript unsafe "$1[\"m14\"] = $2;" js_setM14 ::
-        JSRef WebKitCSSMatrix -> Double -> IO ()
+        WebKitCSSMatrix -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSMatrix.m14 Mozilla WebKitCSSMatrix.m14 documentation> 
 setM14 :: (MonadIO m) => WebKitCSSMatrix -> Double -> m ()
-setM14 self val = liftIO (js_setM14 (unWebKitCSSMatrix self) val)
+setM14 self val = liftIO (js_setM14 (self) val)
  
 foreign import javascript unsafe "$1[\"m14\"]" js_getM14 ::
-        JSRef WebKitCSSMatrix -> IO Double
+        WebKitCSSMatrix -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSMatrix.m14 Mozilla WebKitCSSMatrix.m14 documentation> 
 getM14 :: (MonadIO m) => WebKitCSSMatrix -> m Double
-getM14 self = liftIO (js_getM14 (unWebKitCSSMatrix self))
+getM14 self = liftIO (js_getM14 (self))
  
 foreign import javascript unsafe "$1[\"m21\"] = $2;" js_setM21 ::
-        JSRef WebKitCSSMatrix -> Double -> IO ()
+        WebKitCSSMatrix -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSMatrix.m21 Mozilla WebKitCSSMatrix.m21 documentation> 
 setM21 :: (MonadIO m) => WebKitCSSMatrix -> Double -> m ()
-setM21 self val = liftIO (js_setM21 (unWebKitCSSMatrix self) val)
+setM21 self val = liftIO (js_setM21 (self) val)
  
 foreign import javascript unsafe "$1[\"m21\"]" js_getM21 ::
-        JSRef WebKitCSSMatrix -> IO Double
+        WebKitCSSMatrix -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSMatrix.m21 Mozilla WebKitCSSMatrix.m21 documentation> 
 getM21 :: (MonadIO m) => WebKitCSSMatrix -> m Double
-getM21 self = liftIO (js_getM21 (unWebKitCSSMatrix self))
+getM21 self = liftIO (js_getM21 (self))
  
 foreign import javascript unsafe "$1[\"m22\"] = $2;" js_setM22 ::
-        JSRef WebKitCSSMatrix -> Double -> IO ()
+        WebKitCSSMatrix -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSMatrix.m22 Mozilla WebKitCSSMatrix.m22 documentation> 
 setM22 :: (MonadIO m) => WebKitCSSMatrix -> Double -> m ()
-setM22 self val = liftIO (js_setM22 (unWebKitCSSMatrix self) val)
+setM22 self val = liftIO (js_setM22 (self) val)
  
 foreign import javascript unsafe "$1[\"m22\"]" js_getM22 ::
-        JSRef WebKitCSSMatrix -> IO Double
+        WebKitCSSMatrix -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSMatrix.m22 Mozilla WebKitCSSMatrix.m22 documentation> 
 getM22 :: (MonadIO m) => WebKitCSSMatrix -> m Double
-getM22 self = liftIO (js_getM22 (unWebKitCSSMatrix self))
+getM22 self = liftIO (js_getM22 (self))
  
 foreign import javascript unsafe "$1[\"m23\"] = $2;" js_setM23 ::
-        JSRef WebKitCSSMatrix -> Double -> IO ()
+        WebKitCSSMatrix -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSMatrix.m23 Mozilla WebKitCSSMatrix.m23 documentation> 
 setM23 :: (MonadIO m) => WebKitCSSMatrix -> Double -> m ()
-setM23 self val = liftIO (js_setM23 (unWebKitCSSMatrix self) val)
+setM23 self val = liftIO (js_setM23 (self) val)
  
 foreign import javascript unsafe "$1[\"m23\"]" js_getM23 ::
-        JSRef WebKitCSSMatrix -> IO Double
+        WebKitCSSMatrix -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSMatrix.m23 Mozilla WebKitCSSMatrix.m23 documentation> 
 getM23 :: (MonadIO m) => WebKitCSSMatrix -> m Double
-getM23 self = liftIO (js_getM23 (unWebKitCSSMatrix self))
+getM23 self = liftIO (js_getM23 (self))
  
 foreign import javascript unsafe "$1[\"m24\"] = $2;" js_setM24 ::
-        JSRef WebKitCSSMatrix -> Double -> IO ()
+        WebKitCSSMatrix -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSMatrix.m24 Mozilla WebKitCSSMatrix.m24 documentation> 
 setM24 :: (MonadIO m) => WebKitCSSMatrix -> Double -> m ()
-setM24 self val = liftIO (js_setM24 (unWebKitCSSMatrix self) val)
+setM24 self val = liftIO (js_setM24 (self) val)
  
 foreign import javascript unsafe "$1[\"m24\"]" js_getM24 ::
-        JSRef WebKitCSSMatrix -> IO Double
+        WebKitCSSMatrix -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSMatrix.m24 Mozilla WebKitCSSMatrix.m24 documentation> 
 getM24 :: (MonadIO m) => WebKitCSSMatrix -> m Double
-getM24 self = liftIO (js_getM24 (unWebKitCSSMatrix self))
+getM24 self = liftIO (js_getM24 (self))
  
 foreign import javascript unsafe "$1[\"m31\"] = $2;" js_setM31 ::
-        JSRef WebKitCSSMatrix -> Double -> IO ()
+        WebKitCSSMatrix -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSMatrix.m31 Mozilla WebKitCSSMatrix.m31 documentation> 
 setM31 :: (MonadIO m) => WebKitCSSMatrix -> Double -> m ()
-setM31 self val = liftIO (js_setM31 (unWebKitCSSMatrix self) val)
+setM31 self val = liftIO (js_setM31 (self) val)
  
 foreign import javascript unsafe "$1[\"m31\"]" js_getM31 ::
-        JSRef WebKitCSSMatrix -> IO Double
+        WebKitCSSMatrix -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSMatrix.m31 Mozilla WebKitCSSMatrix.m31 documentation> 
 getM31 :: (MonadIO m) => WebKitCSSMatrix -> m Double
-getM31 self = liftIO (js_getM31 (unWebKitCSSMatrix self))
+getM31 self = liftIO (js_getM31 (self))
  
 foreign import javascript unsafe "$1[\"m32\"] = $2;" js_setM32 ::
-        JSRef WebKitCSSMatrix -> Double -> IO ()
+        WebKitCSSMatrix -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSMatrix.m32 Mozilla WebKitCSSMatrix.m32 documentation> 
 setM32 :: (MonadIO m) => WebKitCSSMatrix -> Double -> m ()
-setM32 self val = liftIO (js_setM32 (unWebKitCSSMatrix self) val)
+setM32 self val = liftIO (js_setM32 (self) val)
  
 foreign import javascript unsafe "$1[\"m32\"]" js_getM32 ::
-        JSRef WebKitCSSMatrix -> IO Double
+        WebKitCSSMatrix -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSMatrix.m32 Mozilla WebKitCSSMatrix.m32 documentation> 
 getM32 :: (MonadIO m) => WebKitCSSMatrix -> m Double
-getM32 self = liftIO (js_getM32 (unWebKitCSSMatrix self))
+getM32 self = liftIO (js_getM32 (self))
  
 foreign import javascript unsafe "$1[\"m33\"] = $2;" js_setM33 ::
-        JSRef WebKitCSSMatrix -> Double -> IO ()
+        WebKitCSSMatrix -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSMatrix.m33 Mozilla WebKitCSSMatrix.m33 documentation> 
 setM33 :: (MonadIO m) => WebKitCSSMatrix -> Double -> m ()
-setM33 self val = liftIO (js_setM33 (unWebKitCSSMatrix self) val)
+setM33 self val = liftIO (js_setM33 (self) val)
  
 foreign import javascript unsafe "$1[\"m33\"]" js_getM33 ::
-        JSRef WebKitCSSMatrix -> IO Double
+        WebKitCSSMatrix -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSMatrix.m33 Mozilla WebKitCSSMatrix.m33 documentation> 
 getM33 :: (MonadIO m) => WebKitCSSMatrix -> m Double
-getM33 self = liftIO (js_getM33 (unWebKitCSSMatrix self))
+getM33 self = liftIO (js_getM33 (self))
  
 foreign import javascript unsafe "$1[\"m34\"] = $2;" js_setM34 ::
-        JSRef WebKitCSSMatrix -> Double -> IO ()
+        WebKitCSSMatrix -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSMatrix.m34 Mozilla WebKitCSSMatrix.m34 documentation> 
 setM34 :: (MonadIO m) => WebKitCSSMatrix -> Double -> m ()
-setM34 self val = liftIO (js_setM34 (unWebKitCSSMatrix self) val)
+setM34 self val = liftIO (js_setM34 (self) val)
  
 foreign import javascript unsafe "$1[\"m34\"]" js_getM34 ::
-        JSRef WebKitCSSMatrix -> IO Double
+        WebKitCSSMatrix -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSMatrix.m34 Mozilla WebKitCSSMatrix.m34 documentation> 
 getM34 :: (MonadIO m) => WebKitCSSMatrix -> m Double
-getM34 self = liftIO (js_getM34 (unWebKitCSSMatrix self))
+getM34 self = liftIO (js_getM34 (self))
  
 foreign import javascript unsafe "$1[\"m41\"] = $2;" js_setM41 ::
-        JSRef WebKitCSSMatrix -> Double -> IO ()
+        WebKitCSSMatrix -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSMatrix.m41 Mozilla WebKitCSSMatrix.m41 documentation> 
 setM41 :: (MonadIO m) => WebKitCSSMatrix -> Double -> m ()
-setM41 self val = liftIO (js_setM41 (unWebKitCSSMatrix self) val)
+setM41 self val = liftIO (js_setM41 (self) val)
  
 foreign import javascript unsafe "$1[\"m41\"]" js_getM41 ::
-        JSRef WebKitCSSMatrix -> IO Double
+        WebKitCSSMatrix -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSMatrix.m41 Mozilla WebKitCSSMatrix.m41 documentation> 
 getM41 :: (MonadIO m) => WebKitCSSMatrix -> m Double
-getM41 self = liftIO (js_getM41 (unWebKitCSSMatrix self))
+getM41 self = liftIO (js_getM41 (self))
  
 foreign import javascript unsafe "$1[\"m42\"] = $2;" js_setM42 ::
-        JSRef WebKitCSSMatrix -> Double -> IO ()
+        WebKitCSSMatrix -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSMatrix.m42 Mozilla WebKitCSSMatrix.m42 documentation> 
 setM42 :: (MonadIO m) => WebKitCSSMatrix -> Double -> m ()
-setM42 self val = liftIO (js_setM42 (unWebKitCSSMatrix self) val)
+setM42 self val = liftIO (js_setM42 (self) val)
  
 foreign import javascript unsafe "$1[\"m42\"]" js_getM42 ::
-        JSRef WebKitCSSMatrix -> IO Double
+        WebKitCSSMatrix -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSMatrix.m42 Mozilla WebKitCSSMatrix.m42 documentation> 
 getM42 :: (MonadIO m) => WebKitCSSMatrix -> m Double
-getM42 self = liftIO (js_getM42 (unWebKitCSSMatrix self))
+getM42 self = liftIO (js_getM42 (self))
  
 foreign import javascript unsafe "$1[\"m43\"] = $2;" js_setM43 ::
-        JSRef WebKitCSSMatrix -> Double -> IO ()
+        WebKitCSSMatrix -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSMatrix.m43 Mozilla WebKitCSSMatrix.m43 documentation> 
 setM43 :: (MonadIO m) => WebKitCSSMatrix -> Double -> m ()
-setM43 self val = liftIO (js_setM43 (unWebKitCSSMatrix self) val)
+setM43 self val = liftIO (js_setM43 (self) val)
  
 foreign import javascript unsafe "$1[\"m43\"]" js_getM43 ::
-        JSRef WebKitCSSMatrix -> IO Double
+        WebKitCSSMatrix -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSMatrix.m43 Mozilla WebKitCSSMatrix.m43 documentation> 
 getM43 :: (MonadIO m) => WebKitCSSMatrix -> m Double
-getM43 self = liftIO (js_getM43 (unWebKitCSSMatrix self))
+getM43 self = liftIO (js_getM43 (self))
  
 foreign import javascript unsafe "$1[\"m44\"] = $2;" js_setM44 ::
-        JSRef WebKitCSSMatrix -> Double -> IO ()
+        WebKitCSSMatrix -> Double -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSMatrix.m44 Mozilla WebKitCSSMatrix.m44 documentation> 
 setM44 :: (MonadIO m) => WebKitCSSMatrix -> Double -> m ()
-setM44 self val = liftIO (js_setM44 (unWebKitCSSMatrix self) val)
+setM44 self val = liftIO (js_setM44 (self) val)
  
 foreign import javascript unsafe "$1[\"m44\"]" js_getM44 ::
-        JSRef WebKitCSSMatrix -> IO Double
+        WebKitCSSMatrix -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSMatrix.m44 Mozilla WebKitCSSMatrix.m44 documentation> 
 getM44 :: (MonadIO m) => WebKitCSSMatrix -> m Double
-getM44 self = liftIO (js_getM44 (unWebKitCSSMatrix self))
+getM44 self = liftIO (js_getM44 (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/WebKitCSSRegionRule.hs b/src/GHCJS/DOM/JSFFI/Generated/WebKitCSSRegionRule.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/WebKitCSSRegionRule.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/WebKitCSSRegionRule.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,11 +19,10 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"cssRules\"]" js_getCssRules
-        :: JSRef WebKitCSSRegionRule -> IO (JSRef CSSRuleList)
+        :: WebKitCSSRegionRule -> IO (Nullable CSSRuleList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSRegionRule.cssRules Mozilla WebKitCSSRegionRule.cssRules documentation> 
 getCssRules ::
             (MonadIO m) => WebKitCSSRegionRule -> m (Maybe CSSRuleList)
 getCssRules self
-  = liftIO
-      ((js_getCssRules (unWebKitCSSRegionRule self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getCssRules (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/WebKitCSSTransformValue.hs b/src/GHCJS/DOM/JSFFI/Generated/WebKitCSSTransformValue.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/WebKitCSSTransformValue.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/WebKitCSSTransformValue.hs
@@ -13,7 +13,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -27,15 +27,14 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"_get\"]($2)" js__get ::
-        JSRef WebKitCSSTransformValue -> Word -> IO (JSRef CSSValue)
+        WebKitCSSTransformValue -> Word -> IO (Nullable CSSValue)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSTransformValue._get Mozilla WebKitCSSTransformValue._get documentation> 
 _get ::
      (MonadIO m) =>
        WebKitCSSTransformValue -> Word -> m (Maybe CSSValue)
 _get self index
-  = liftIO
-      ((js__get (unWebKitCSSTransformValue self) index) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js__get (self) index))
 pattern CSS_TRANSLATE = 1
 pattern CSS_TRANSLATEX = 2
 pattern CSS_TRANSLATEY = 3
@@ -59,10 +58,9 @@
 pattern CSS_MATRIX3D = 21
  
 foreign import javascript unsafe "$1[\"operationType\"]"
-        js_getOperationType :: JSRef WebKitCSSTransformValue -> IO Word
+        js_getOperationType :: WebKitCSSTransformValue -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSTransformValue.operationType Mozilla WebKitCSSTransformValue.operationType documentation> 
 getOperationType ::
                  (MonadIO m) => WebKitCSSTransformValue -> m Word
-getOperationType self
-  = liftIO (js_getOperationType (unWebKitCSSTransformValue self))
+getOperationType self = liftIO (js_getOperationType (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/WebKitCSSViewportRule.hs b/src/GHCJS/DOM/JSFFI/Generated/WebKitCSSViewportRule.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/WebKitCSSViewportRule.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/WebKitCSSViewportRule.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,12 +19,10 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"style\"]" js_getStyle ::
-        JSRef WebKitCSSViewportRule -> IO (JSRef CSSStyleDeclaration)
+        WebKitCSSViewportRule -> IO (Nullable CSSStyleDeclaration)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSViewportRule.style Mozilla WebKitCSSViewportRule.style documentation> 
 getStyle ::
          (MonadIO m) =>
            WebKitCSSViewportRule -> m (Maybe CSSStyleDeclaration)
-getStyle self
-  = liftIO
-      ((js_getStyle (unWebKitCSSViewportRule self)) >>= fromJSRef)
+getStyle self = liftIO (nullableToMaybe <$> (js_getStyle (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/WebKitNamedFlow.hs b/src/GHCJS/DOM/JSFFI/Generated/WebKitNamedFlow.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/WebKitNamedFlow.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/WebKitNamedFlow.hs
@@ -8,7 +8,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -23,7 +23,7 @@
  
 foreign import javascript unsafe "$1[\"getRegionsByContent\"]($2)"
         js_getRegionsByContent ::
-        JSRef WebKitNamedFlow -> JSRef Node -> IO (JSRef NodeList)
+        WebKitNamedFlow -> Nullable Node -> IO (Nullable NodeList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitNamedFlow.getRegionsByContent Mozilla WebKitNamedFlow.getRegionsByContent documentation> 
 getRegionsByContent ::
@@ -31,46 +31,45 @@
                       WebKitNamedFlow -> Maybe contentNode -> m (Maybe NodeList)
 getRegionsByContent self contentNode
   = liftIO
-      ((js_getRegionsByContent (unWebKitNamedFlow self)
-          (maybe jsNull (unNode . toNode) contentNode))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_getRegionsByContent (self)
+            (maybeToNullable (fmap toNode contentNode))))
  
 foreign import javascript unsafe "$1[\"getRegions\"]()"
-        js_getRegions :: JSRef WebKitNamedFlow -> IO (JSRef NodeList)
+        js_getRegions :: WebKitNamedFlow -> IO (Nullable NodeList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitNamedFlow.getRegions Mozilla WebKitNamedFlow.getRegions documentation> 
 getRegions :: (MonadIO m) => WebKitNamedFlow -> m (Maybe NodeList)
 getRegions self
-  = liftIO ((js_getRegions (unWebKitNamedFlow self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getRegions (self)))
  
 foreign import javascript unsafe "$1[\"getContent\"]()"
-        js_getContent :: JSRef WebKitNamedFlow -> IO (JSRef NodeList)
+        js_getContent :: WebKitNamedFlow -> IO (Nullable NodeList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitNamedFlow.getContent Mozilla WebKitNamedFlow.getContent documentation> 
 getContent :: (MonadIO m) => WebKitNamedFlow -> m (Maybe NodeList)
 getContent self
-  = liftIO ((js_getContent (unWebKitNamedFlow self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getContent (self)))
  
 foreign import javascript unsafe "$1[\"name\"]" js_getName ::
-        JSRef WebKitNamedFlow -> IO JSString
+        WebKitNamedFlow -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitNamedFlow.name Mozilla WebKitNamedFlow.name documentation> 
 getName ::
         (MonadIO m, FromJSString result) => WebKitNamedFlow -> m result
-getName self
-  = liftIO (fromJSString <$> (js_getName (unWebKitNamedFlow self)))
+getName self = liftIO (fromJSString <$> (js_getName (self)))
  
 foreign import javascript unsafe "($1[\"overset\"] ? 1 : 0)"
-        js_getOverset :: JSRef WebKitNamedFlow -> IO Bool
+        js_getOverset :: WebKitNamedFlow -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitNamedFlow.overset Mozilla WebKitNamedFlow.overset documentation> 
 getOverset :: (MonadIO m) => WebKitNamedFlow -> m Bool
-getOverset self = liftIO (js_getOverset (unWebKitNamedFlow self))
+getOverset self = liftIO (js_getOverset (self))
  
 foreign import javascript unsafe "$1[\"firstEmptyRegionIndex\"]"
-        js_getFirstEmptyRegionIndex :: JSRef WebKitNamedFlow -> IO Int
+        js_getFirstEmptyRegionIndex :: WebKitNamedFlow -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitNamedFlow.firstEmptyRegionIndex Mozilla WebKitNamedFlow.firstEmptyRegionIndex documentation> 
 getFirstEmptyRegionIndex :: (MonadIO m) => WebKitNamedFlow -> m Int
 getFirstEmptyRegionIndex self
-  = liftIO (js_getFirstEmptyRegionIndex (unWebKitNamedFlow self))
+  = liftIO (js_getFirstEmptyRegionIndex (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/WebKitNamespace.hs b/src/GHCJS/DOM/JSFFI/Generated/WebKitNamespace.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/WebKitNamespace.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/WebKitNamespace.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,12 +20,11 @@
  
 foreign import javascript unsafe "$1[\"messageHandlers\"]"
         js_getMessageHandlers ::
-        JSRef WebKitNamespace -> IO (JSRef UserMessageHandlersNamespace)
+        WebKitNamespace -> IO (Nullable UserMessageHandlersNamespace)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitNamespace.messageHandlers Mozilla WebKitNamespace.messageHandlers documentation> 
 getMessageHandlers ::
                    (MonadIO m) =>
                      WebKitNamespace -> m (Maybe UserMessageHandlersNamespace)
 getMessageHandlers self
-  = liftIO
-      ((js_getMessageHandlers (unWebKitNamespace self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getMessageHandlers (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/WebKitPlaybackTargetAvailabilityEvent.hs b/src/GHCJS/DOM/JSFFI/Generated/WebKitPlaybackTargetAvailabilityEvent.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/WebKitPlaybackTargetAvailabilityEvent.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/WebKitPlaybackTargetAvailabilityEvent.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -22,14 +22,11 @@
  
 foreign import javascript unsafe "$1[\"availability\"]"
         js_getAvailability ::
-        JSRef WebKitPlaybackTargetAvailabilityEvent -> IO JSString
+        WebKitPlaybackTargetAvailabilityEvent -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitPlaybackTargetAvailabilityEvent.availability Mozilla WebKitPlaybackTargetAvailabilityEvent.availability documentation> 
 getAvailability ::
                 (MonadIO m, FromJSString result) =>
                   WebKitPlaybackTargetAvailabilityEvent -> m result
 getAvailability self
-  = liftIO
-      (fromJSString <$>
-         (js_getAvailability
-            (unWebKitPlaybackTargetAvailabilityEvent self)))
+  = liftIO (fromJSString <$> (js_getAvailability (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/WebKitPoint.hs b/src/GHCJS/DOM/JSFFI/Generated/WebKitPoint.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/WebKitPoint.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/WebKitPoint.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,45 +20,44 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "new window[\"WebKitPoint\"]()"
-        js_newWebKitPoint :: IO (JSRef WebKitPoint)
+        js_newWebKitPoint :: IO WebKitPoint
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitPoint Mozilla WebKitPoint documentation> 
 newWebKitPoint :: (MonadIO m) => m WebKitPoint
-newWebKitPoint = liftIO (js_newWebKitPoint >>= fromJSRefUnchecked)
+newWebKitPoint = liftIO (js_newWebKitPoint)
  
 foreign import javascript unsafe
         "new window[\"WebKitPoint\"]($1,\n$2)" js_newWebKitPoint' ::
-        Float -> Float -> IO (JSRef WebKitPoint)
+        Float -> Float -> IO WebKitPoint
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitPoint Mozilla WebKitPoint documentation> 
 newWebKitPoint' :: (MonadIO m) => Float -> Float -> m WebKitPoint
-newWebKitPoint' x y
-  = liftIO (js_newWebKitPoint' x y >>= fromJSRefUnchecked)
+newWebKitPoint' x y = liftIO (js_newWebKitPoint' x y)
  
 foreign import javascript unsafe "$1[\"x\"] = $2;" js_setX ::
-        JSRef WebKitPoint -> Float -> IO ()
+        WebKitPoint -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitPoint.x Mozilla WebKitPoint.x documentation> 
 setX :: (MonadIO m) => WebKitPoint -> Float -> m ()
-setX self val = liftIO (js_setX (unWebKitPoint self) val)
+setX self val = liftIO (js_setX (self) val)
  
 foreign import javascript unsafe "$1[\"x\"]" js_getX ::
-        JSRef WebKitPoint -> IO Float
+        WebKitPoint -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitPoint.x Mozilla WebKitPoint.x documentation> 
 getX :: (MonadIO m) => WebKitPoint -> m Float
-getX self = liftIO (js_getX (unWebKitPoint self))
+getX self = liftIO (js_getX (self))
  
 foreign import javascript unsafe "$1[\"y\"] = $2;" js_setY ::
-        JSRef WebKitPoint -> Float -> IO ()
+        WebKitPoint -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitPoint.y Mozilla WebKitPoint.y documentation> 
 setY :: (MonadIO m) => WebKitPoint -> Float -> m ()
-setY self val = liftIO (js_setY (unWebKitPoint self) val)
+setY self val = liftIO (js_setY (self) val)
  
 foreign import javascript unsafe "$1[\"y\"]" js_getY ::
-        JSRef WebKitPoint -> IO Float
+        WebKitPoint -> IO Float
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitPoint.y Mozilla WebKitPoint.y documentation> 
 getY :: (MonadIO m) => WebKitPoint -> m Float
-getY self = liftIO (js_getY (unWebKitPoint self))
+getY self = liftIO (js_getY (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/WebKitTransitionEvent.hs b/src/GHCJS/DOM/JSFFI/Generated/WebKitTransitionEvent.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/WebKitTransitionEvent.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/WebKitTransitionEvent.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -21,33 +21,28 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"propertyName\"]"
-        js_getPropertyName :: JSRef WebKitTransitionEvent -> IO JSString
+        js_getPropertyName :: WebKitTransitionEvent -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitTransitionEvent.propertyName Mozilla WebKitTransitionEvent.propertyName documentation> 
 getPropertyName ::
                 (MonadIO m, FromJSString result) =>
                   WebKitTransitionEvent -> m result
 getPropertyName self
-  = liftIO
-      (fromJSString <$>
-         (js_getPropertyName (unWebKitTransitionEvent self)))
+  = liftIO (fromJSString <$> (js_getPropertyName (self)))
  
 foreign import javascript unsafe "$1[\"elapsedTime\"]"
-        js_getElapsedTime :: JSRef WebKitTransitionEvent -> IO Double
+        js_getElapsedTime :: WebKitTransitionEvent -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitTransitionEvent.elapsedTime Mozilla WebKitTransitionEvent.elapsedTime documentation> 
 getElapsedTime :: (MonadIO m) => WebKitTransitionEvent -> m Double
-getElapsedTime self
-  = liftIO (js_getElapsedTime (unWebKitTransitionEvent self))
+getElapsedTime self = liftIO (js_getElapsedTime (self))
  
 foreign import javascript unsafe "$1[\"pseudoElement\"]"
-        js_getPseudoElement :: JSRef WebKitTransitionEvent -> IO JSString
+        js_getPseudoElement :: WebKitTransitionEvent -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebKitTransitionEvent.pseudoElement Mozilla WebKitTransitionEvent.pseudoElement documentation> 
 getPseudoElement ::
                  (MonadIO m, FromJSString result) =>
                    WebKitTransitionEvent -> m result
 getPseudoElement self
-  = liftIO
-      (fromJSString <$>
-         (js_getPseudoElement (unWebKitTransitionEvent self)))
+  = liftIO (fromJSString <$> (js_getPseudoElement (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/WebSocket.hs b/src/GHCJS/DOM/JSFFI/Generated/WebSocket.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/WebSocket.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/WebSocket.hs
@@ -12,7 +12,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -27,7 +27,7 @@
  
 foreign import javascript unsafe
         "new window[\"WebSocket\"]($1, $2)" js_newWebSocket ::
-        JSString -> JSRef (Maybe [protocols]) -> IO (JSRef WebSocket)
+        JSString -> JSRef -> IO WebSocket
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebSocket Mozilla WebSocket documentation> 
 newWebSocket ::
@@ -36,24 +36,21 @@
 newWebSocket url protocols
   = liftIO
       (toJSRef protocols >>=
-         \ protocols' -> js_newWebSocket (toJSString url) protocols'
-         >>= fromJSRefUnchecked)
+         \ protocols' -> js_newWebSocket (toJSString url) protocols')
  
 foreign import javascript unsafe
         "new window[\"WebSocket\"]($1, $2)" js_newWebSocket' ::
-        JSString -> JSString -> IO (JSRef WebSocket)
+        JSString -> JSString -> IO WebSocket
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebSocket Mozilla WebSocket documentation> 
 newWebSocket' ::
               (MonadIO m, ToJSString url, ToJSString protocol) =>
                 url -> protocol -> m WebSocket
 newWebSocket' url protocol
-  = liftIO
-      (js_newWebSocket' (toJSString url) (toJSString protocol) >>=
-         fromJSRefUnchecked)
+  = liftIO (js_newWebSocket' (toJSString url) (toJSString protocol))
  
 foreign import javascript unsafe "$1[\"send\"]($2)" js_send ::
-        JSRef WebSocket -> JSRef ArrayBuffer -> IO ()
+        WebSocket -> Nullable ArrayBuffer -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebSocket.send Mozilla WebSocket.send documentation> 
 send ::
@@ -61,11 +58,10 @@
        WebSocket -> Maybe data' -> m ()
 send self data'
   = liftIO
-      (js_send (unWebSocket self)
-         (maybe jsNull (unArrayBuffer . toArrayBuffer) data'))
+      (js_send (self) (maybeToNullable (fmap toArrayBuffer data')))
  
 foreign import javascript unsafe "$1[\"send\"]($2)" js_sendView ::
-        JSRef WebSocket -> JSRef ArrayBufferView -> IO ()
+        WebSocket -> Nullable ArrayBufferView -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebSocket.send Mozilla WebSocket.send documentation> 
 sendView ::
@@ -73,65 +69,61 @@
            WebSocket -> Maybe data' -> m ()
 sendView self data'
   = liftIO
-      (js_sendView (unWebSocket self)
-         (maybe jsNull (unArrayBufferView . toArrayBufferView) data'))
+      (js_sendView (self)
+         (maybeToNullable (fmap toArrayBufferView data')))
  
 foreign import javascript unsafe "$1[\"send\"]($2)" js_sendBlob ::
-        JSRef WebSocket -> JSRef Blob -> IO ()
+        WebSocket -> Nullable Blob -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebSocket.send Mozilla WebSocket.send documentation> 
 sendBlob ::
          (MonadIO m, IsBlob data') => WebSocket -> Maybe data' -> m ()
 sendBlob self data'
-  = liftIO
-      (js_sendBlob (unWebSocket self)
-         (maybe jsNull (unBlob . toBlob) data'))
+  = liftIO (js_sendBlob (self) (maybeToNullable (fmap toBlob data')))
  
 foreign import javascript unsafe "$1[\"send\"]($2)" js_sendString
-        :: JSRef WebSocket -> JSString -> IO ()
+        :: WebSocket -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebSocket.send Mozilla WebSocket.send documentation> 
 sendString ::
            (MonadIO m, ToJSString data') => WebSocket -> data' -> m ()
 sendString self data'
-  = liftIO (js_sendString (unWebSocket self) (toJSString data'))
+  = liftIO (js_sendString (self) (toJSString data'))
  
 foreign import javascript unsafe "$1[\"close\"]($2, $3)" js_close
-        :: JSRef WebSocket -> Word -> JSString -> IO ()
+        :: WebSocket -> Word -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebSocket.close Mozilla WebSocket.close documentation> 
 close ::
       (MonadIO m, ToJSString reason) =>
         WebSocket -> Word -> reason -> m ()
 close self code reason
-  = liftIO (js_close (unWebSocket self) code (toJSString reason))
+  = liftIO (js_close (self) code (toJSString reason))
 pattern CONNECTING = 0
 pattern OPEN = 1
 pattern CLOSING = 2
 pattern CLOSED = 3
  
 foreign import javascript unsafe "$1[\"url\"]" js_getUrl ::
-        JSRef WebSocket -> IO JSString
+        WebSocket -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebSocket.url Mozilla WebSocket.url documentation> 
 getUrl :: (MonadIO m, FromJSString result) => WebSocket -> m result
-getUrl self
-  = liftIO (fromJSString <$> (js_getUrl (unWebSocket self)))
+getUrl self = liftIO (fromJSString <$> (js_getUrl (self)))
  
 foreign import javascript unsafe "$1[\"readyState\"]"
-        js_getReadyState :: JSRef WebSocket -> IO Word
+        js_getReadyState :: WebSocket -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebSocket.readyState Mozilla WebSocket.readyState documentation> 
 getReadyState :: (MonadIO m) => WebSocket -> m Word
-getReadyState self = liftIO (js_getReadyState (unWebSocket self))
+getReadyState self = liftIO (js_getReadyState (self))
  
 foreign import javascript unsafe "$1[\"bufferedAmount\"]"
-        js_getBufferedAmount :: JSRef WebSocket -> IO Word
+        js_getBufferedAmount :: WebSocket -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebSocket.bufferedAmount Mozilla WebSocket.bufferedAmount documentation> 
 getBufferedAmount :: (MonadIO m) => WebSocket -> m Word
-getBufferedAmount self
-  = liftIO (js_getBufferedAmount (unWebSocket self))
+getBufferedAmount self = liftIO (js_getBufferedAmount (self))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebSocket.onopen Mozilla WebSocket.onopen documentation> 
 open :: EventName WebSocket Event
@@ -150,39 +142,37 @@
 closeEvent = unsafeEventName (toJSString "close")
  
 foreign import javascript unsafe "$1[\"protocol\"]" js_getProtocol
-        :: JSRef WebSocket -> IO (JSRef (Maybe JSString))
+        :: WebSocket -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebSocket.protocol Mozilla WebSocket.protocol documentation> 
 getProtocol ::
             (MonadIO m, FromJSString result) => WebSocket -> m (Maybe result)
 getProtocol self
-  = liftIO
-      (fromMaybeJSString <$> (js_getProtocol (unWebSocket self)))
+  = liftIO (fromMaybeJSString <$> (js_getProtocol (self)))
  
 foreign import javascript unsafe "$1[\"extensions\"]"
-        js_getExtensions :: JSRef WebSocket -> IO (JSRef (Maybe JSString))
+        js_getExtensions :: WebSocket -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebSocket.extensions Mozilla WebSocket.extensions documentation> 
 getExtensions ::
               (MonadIO m, FromJSString result) => WebSocket -> m (Maybe result)
 getExtensions self
-  = liftIO
-      (fromMaybeJSString <$> (js_getExtensions (unWebSocket self)))
+  = liftIO (fromMaybeJSString <$> (js_getExtensions (self)))
  
 foreign import javascript unsafe "$1[\"binaryType\"] = $2;"
-        js_setBinaryType :: JSRef WebSocket -> JSString -> IO ()
+        js_setBinaryType :: WebSocket -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebSocket.binaryType Mozilla WebSocket.binaryType documentation> 
 setBinaryType ::
               (MonadIO m, ToJSString val) => WebSocket -> val -> m ()
 setBinaryType self val
-  = liftIO (js_setBinaryType (unWebSocket self) (toJSString val))
+  = liftIO (js_setBinaryType (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"binaryType\"]"
-        js_getBinaryType :: JSRef WebSocket -> IO JSString
+        js_getBinaryType :: WebSocket -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WebSocket.binaryType Mozilla WebSocket.binaryType documentation> 
 getBinaryType ::
               (MonadIO m, FromJSString result) => WebSocket -> m result
 getBinaryType self
-  = liftIO (fromJSString <$> (js_getBinaryType (unWebSocket self)))
+  = liftIO (fromJSString <$> (js_getBinaryType (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/WheelEvent.hs b/src/GHCJS/DOM/JSFFI/Generated/WheelEvent.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/WheelEvent.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/WheelEvent.hs
@@ -12,7 +12,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -28,10 +28,10 @@
 foreign import javascript unsafe
         "$1[\"initWebKitWheelEvent\"]($2,\n$3, $4, $5, $6, $7, $8, $9, $10,\n$11, $12)"
         js_initWebKitWheelEvent ::
-        JSRef WheelEvent ->
+        WheelEvent ->
           Int ->
             Int ->
-              JSRef Window ->
+              Nullable Window ->
                 Int -> Int -> Int -> Int -> Bool -> Bool -> Bool -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WheelEvent.initWebKitWheelEvent Mozilla WheelEvent.initWebKitWheelEvent documentation> 
@@ -45,9 +45,8 @@
 initWebKitWheelEvent self wheelDeltaX wheelDeltaY view screenX
   screenY clientX clientY ctrlKey altKey shiftKey metaKey
   = liftIO
-      (js_initWebKitWheelEvent (unWheelEvent self) wheelDeltaX
-         wheelDeltaY
-         (maybe jsNull pToJSRef view)
+      (js_initWebKitWheelEvent (self) wheelDeltaX wheelDeltaY
+         (maybeToNullable view)
          screenX
          screenY
          clientX
@@ -61,64 +60,60 @@
 pattern DOM_DELTA_PAGE = 2
  
 foreign import javascript unsafe "$1[\"deltaX\"]" js_getDeltaX ::
-        JSRef WheelEvent -> IO Double
+        WheelEvent -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WheelEvent.deltaX Mozilla WheelEvent.deltaX documentation> 
 getDeltaX :: (MonadIO m) => WheelEvent -> m Double
-getDeltaX self = liftIO (js_getDeltaX (unWheelEvent self))
+getDeltaX self = liftIO (js_getDeltaX (self))
  
 foreign import javascript unsafe "$1[\"deltaY\"]" js_getDeltaY ::
-        JSRef WheelEvent -> IO Double
+        WheelEvent -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WheelEvent.deltaY Mozilla WheelEvent.deltaY documentation> 
 getDeltaY :: (MonadIO m) => WheelEvent -> m Double
-getDeltaY self = liftIO (js_getDeltaY (unWheelEvent self))
+getDeltaY self = liftIO (js_getDeltaY (self))
  
 foreign import javascript unsafe "$1[\"deltaZ\"]" js_getDeltaZ ::
-        JSRef WheelEvent -> IO Double
+        WheelEvent -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WheelEvent.deltaZ Mozilla WheelEvent.deltaZ documentation> 
 getDeltaZ :: (MonadIO m) => WheelEvent -> m Double
-getDeltaZ self = liftIO (js_getDeltaZ (unWheelEvent self))
+getDeltaZ self = liftIO (js_getDeltaZ (self))
  
 foreign import javascript unsafe "$1[\"deltaMode\"]"
-        js_getDeltaMode :: JSRef WheelEvent -> IO Word
+        js_getDeltaMode :: WheelEvent -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WheelEvent.deltaMode Mozilla WheelEvent.deltaMode documentation> 
 getDeltaMode :: (MonadIO m) => WheelEvent -> m Word
-getDeltaMode self = liftIO (js_getDeltaMode (unWheelEvent self))
+getDeltaMode self = liftIO (js_getDeltaMode (self))
  
 foreign import javascript unsafe "$1[\"wheelDeltaX\"]"
-        js_getWheelDeltaX :: JSRef WheelEvent -> IO Int
+        js_getWheelDeltaX :: WheelEvent -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WheelEvent.wheelDeltaX Mozilla WheelEvent.wheelDeltaX documentation> 
 getWheelDeltaX :: (MonadIO m) => WheelEvent -> m Int
-getWheelDeltaX self
-  = liftIO (js_getWheelDeltaX (unWheelEvent self))
+getWheelDeltaX self = liftIO (js_getWheelDeltaX (self))
  
 foreign import javascript unsafe "$1[\"wheelDeltaY\"]"
-        js_getWheelDeltaY :: JSRef WheelEvent -> IO Int
+        js_getWheelDeltaY :: WheelEvent -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WheelEvent.wheelDeltaY Mozilla WheelEvent.wheelDeltaY documentation> 
 getWheelDeltaY :: (MonadIO m) => WheelEvent -> m Int
-getWheelDeltaY self
-  = liftIO (js_getWheelDeltaY (unWheelEvent self))
+getWheelDeltaY self = liftIO (js_getWheelDeltaY (self))
  
 foreign import javascript unsafe "$1[\"wheelDelta\"]"
-        js_getWheelDelta :: JSRef WheelEvent -> IO Int
+        js_getWheelDelta :: WheelEvent -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WheelEvent.wheelDelta Mozilla WheelEvent.wheelDelta documentation> 
 getWheelDelta :: (MonadIO m) => WheelEvent -> m Int
-getWheelDelta self = liftIO (js_getWheelDelta (unWheelEvent self))
+getWheelDelta self = liftIO (js_getWheelDelta (self))
  
 foreign import javascript unsafe
         "($1[\"webkitDirectionInvertedFromDevice\"] ? 1 : 0)"
-        js_getWebkitDirectionInvertedFromDevice ::
-        JSRef WheelEvent -> IO Bool
+        js_getWebkitDirectionInvertedFromDevice :: WheelEvent -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WheelEvent.webkitDirectionInvertedFromDevice Mozilla WheelEvent.webkitDirectionInvertedFromDevice documentation> 
 getWebkitDirectionInvertedFromDevice ::
                                      (MonadIO m) => WheelEvent -> m Bool
 getWebkitDirectionInvertedFromDevice self
-  = liftIO
-      (js_getWebkitDirectionInvertedFromDevice (unWheelEvent self))
+  = liftIO (js_getWebkitDirectionInvertedFromDevice (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/Window.hs b/src/GHCJS/DOM/JSFFI/Generated/Window.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/Window.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/Window.hs
@@ -70,7 +70,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -85,10 +85,11 @@
  
 foreign import javascript unsafe
         "$1[\"openDatabase\"]($2, $3, $4,\n$5, $6)" js_openDatabase ::
-        JSRef Window ->
+        Window ->
           JSString ->
             JSString ->
-              JSString -> Word -> JSRef DatabaseCallback -> IO (JSRef Database)
+              JSString ->
+                Word -> Nullable DatabaseCallback -> IO (Nullable Database)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.openDatabase Mozilla Window.openDatabase documentation> 
 openDatabase ::
@@ -101,60 +102,58 @@
 openDatabase self name version displayName estimatedSize
   creationCallback
   = liftIO
-      ((js_openDatabase (unWindow self) (toJSString name)
-          (toJSString version)
-          (toJSString displayName)
-          estimatedSize
-          (maybe jsNull pToJSRef creationCallback))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_openDatabase (self) (toJSString name) (toJSString version)
+            (toJSString displayName)
+            estimatedSize
+            (maybeToNullable creationCallback)))
  
 foreign import javascript unsafe "$1[\"getSelection\"]()"
-        js_getSelection :: JSRef Window -> IO (JSRef Selection)
+        js_getSelection :: Window -> IO (Nullable Selection)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.getSelection Mozilla Window.getSelection documentation> 
 getSelection :: (MonadIO m) => Window -> m (Maybe Selection)
 getSelection self
-  = liftIO ((js_getSelection (unWindow self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getSelection (self)))
  
 foreign import javascript unsafe "$1[\"focus\"]()" js_focus ::
-        JSRef Window -> IO ()
+        Window -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.focus Mozilla Window.focus documentation> 
 focus :: (MonadIO m) => Window -> m ()
-focus self = liftIO (js_focus (unWindow self))
+focus self = liftIO (js_focus (self))
  
 foreign import javascript unsafe "$1[\"blur\"]()" js_blur ::
-        JSRef Window -> IO ()
+        Window -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.blur Mozilla Window.blur documentation> 
 blur :: (MonadIO m) => Window -> m ()
-blur self = liftIO (js_blur (unWindow self))
+blur self = liftIO (js_blur (self))
  
 foreign import javascript unsafe "$1[\"close\"]()" js_close ::
-        JSRef Window -> IO ()
+        Window -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.close Mozilla Window.close documentation> 
 close :: (MonadIO m) => Window -> m ()
-close self = liftIO (js_close (unWindow self))
+close self = liftIO (js_close (self))
  
 foreign import javascript unsafe "$1[\"print\"]()" js_print ::
-        JSRef Window -> IO ()
+        Window -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.print Mozilla Window.print documentation> 
 print :: (MonadIO m) => Window -> m ()
-print self = liftIO (js_print (unWindow self))
+print self = liftIO (js_print (self))
  
 foreign import javascript unsafe "$1[\"stop\"]()" js_stop ::
-        JSRef Window -> IO ()
+        Window -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.stop Mozilla Window.stop documentation> 
 stop :: (MonadIO m) => Window -> m ()
-stop self = liftIO (js_stop (unWindow self))
+stop self = liftIO (js_stop (self))
  
 foreign import javascript unsafe "$1[\"open\"]($2, $3, $4)" js_open
         ::
-        JSRef Window ->
-          JSString -> JSString -> JSString -> IO (JSRef Window)
+        Window -> JSString -> JSString -> JSString -> IO (Nullable Window)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.open Mozilla Window.open documentation> 
 open ::
@@ -162,45 +161,43 @@
        Window -> url -> name -> options -> m (Maybe Window)
 open self url name options
   = liftIO
-      ((js_open (unWindow self) (toJSString url) (toJSString name)
-          (toJSString options))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_open (self) (toJSString url) (toJSString name)
+            (toJSString options)))
  
 foreign import javascript unsafe
         "$1[\"showModalDialog\"]($2, $3,\n$4)" js_showModalDialog ::
-        JSRef Window -> JSString -> JSRef a -> JSString -> IO (JSRef a)
+        Window -> JSString -> JSRef -> JSString -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.showModalDialog Mozilla Window.showModalDialog documentation> 
 showModalDialog ::
                 (MonadIO m, ToJSString url, ToJSString featureArgs) =>
-                  Window -> url -> JSRef a -> featureArgs -> m (JSRef a)
+                  Window -> url -> JSRef -> featureArgs -> m JSRef
 showModalDialog self url dialogArgs featureArgs
   = liftIO
-      (js_showModalDialog (unWindow self) (toJSString url) dialogArgs
+      (js_showModalDialog (self) (toJSString url) dialogArgs
          (toJSString featureArgs))
  
 foreign import javascript unsafe "$1[\"alert\"]($2)" js_alert ::
-        JSRef Window -> JSString -> IO ()
+        Window -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.alert Mozilla Window.alert documentation> 
 alert ::
       (MonadIO m, ToJSString message) => Window -> message -> m ()
-alert self message
-  = liftIO (js_alert (unWindow self) (toJSString message))
+alert self message = liftIO (js_alert (self) (toJSString message))
  
 foreign import javascript unsafe "($1[\"confirm\"]($2) ? 1 : 0)"
-        js_confirm :: JSRef Window -> JSString -> IO Bool
+        js_confirm :: Window -> JSString -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.confirm Mozilla Window.confirm documentation> 
 confirm ::
         (MonadIO m, ToJSString message) => Window -> message -> m Bool
 confirm self message
-  = liftIO (js_confirm (unWindow self) (toJSString message))
+  = liftIO (js_confirm (self) (toJSString message))
  
 foreign import javascript unsafe "$1[\"prompt\"]($2, $3)" js_prompt
         ::
-        JSRef Window ->
-          JSString -> JSRef (Maybe JSString) -> IO (JSRef (Maybe JSString))
+        Window -> JSString -> Nullable JSString -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.prompt Mozilla Window.prompt documentation> 
 prompt ::
@@ -210,12 +207,12 @@
 prompt self message defaultValue
   = liftIO
       (fromMaybeJSString <$>
-         (js_prompt (unWindow self) (toJSString message)
+         (js_prompt (self) (toJSString message)
             (toMaybeJSString defaultValue)))
  
 foreign import javascript unsafe
         "($1[\"find\"]($2, $3, $4, $5, $6,\n$7, $8) ? 1 : 0)" js_find ::
-        JSRef Window ->
+        Window ->
           JSString -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.find Mozilla Window.find documentation> 
@@ -226,66 +223,63 @@
 find self string caseSensitive backwards wrap wholeWord
   searchInFrames showDialog
   = liftIO
-      (js_find (unWindow self) (toJSString string) caseSensitive
-         backwards
-         wrap
+      (js_find (self) (toJSString string) caseSensitive backwards wrap
          wholeWord
          searchInFrames
          showDialog)
  
 foreign import javascript unsafe "$1[\"scrollBy\"]($2, $3)"
-        js_scrollBy :: JSRef Window -> Int -> Int -> IO ()
+        js_scrollBy :: Window -> Int -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.scrollBy Mozilla Window.scrollBy documentation> 
 scrollBy :: (MonadIO m) => Window -> Int -> Int -> m ()
-scrollBy self x y = liftIO (js_scrollBy (unWindow self) x y)
+scrollBy self x y = liftIO (js_scrollBy (self) x y)
  
 foreign import javascript unsafe "$1[\"scrollTo\"]($2, $3)"
-        js_scrollTo :: JSRef Window -> Int -> Int -> IO ()
+        js_scrollTo :: Window -> Int -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.scrollTo Mozilla Window.scrollTo documentation> 
 scrollTo :: (MonadIO m) => Window -> Int -> Int -> m ()
-scrollTo self x y = liftIO (js_scrollTo (unWindow self) x y)
+scrollTo self x y = liftIO (js_scrollTo (self) x y)
  
 foreign import javascript unsafe "$1[\"scroll\"]($2, $3)" js_scroll
-        :: JSRef Window -> Int -> Int -> IO ()
+        :: Window -> Int -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.scroll Mozilla Window.scroll documentation> 
 scroll :: (MonadIO m) => Window -> Int -> Int -> m ()
-scroll self x y = liftIO (js_scroll (unWindow self) x y)
+scroll self x y = liftIO (js_scroll (self) x y)
  
 foreign import javascript unsafe "$1[\"moveBy\"]($2, $3)" js_moveBy
-        :: JSRef Window -> Float -> Float -> IO ()
+        :: Window -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.moveBy Mozilla Window.moveBy documentation> 
 moveBy :: (MonadIO m) => Window -> Float -> Float -> m ()
-moveBy self x y = liftIO (js_moveBy (unWindow self) x y)
+moveBy self x y = liftIO (js_moveBy (self) x y)
  
 foreign import javascript unsafe "$1[\"moveTo\"]($2, $3)" js_moveTo
-        :: JSRef Window -> Float -> Float -> IO ()
+        :: Window -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.moveTo Mozilla Window.moveTo documentation> 
 moveTo :: (MonadIO m) => Window -> Float -> Float -> m ()
-moveTo self x y = liftIO (js_moveTo (unWindow self) x y)
+moveTo self x y = liftIO (js_moveTo (self) x y)
  
 foreign import javascript unsafe "$1[\"resizeBy\"]($2, $3)"
-        js_resizeBy :: JSRef Window -> Float -> Float -> IO ()
+        js_resizeBy :: Window -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.resizeBy Mozilla Window.resizeBy documentation> 
 resizeBy :: (MonadIO m) => Window -> Float -> Float -> m ()
-resizeBy self x y = liftIO (js_resizeBy (unWindow self) x y)
+resizeBy self x y = liftIO (js_resizeBy (self) x y)
  
 foreign import javascript unsafe "$1[\"resizeTo\"]($2, $3)"
-        js_resizeTo :: JSRef Window -> Float -> Float -> IO ()
+        js_resizeTo :: Window -> Float -> Float -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.resizeTo Mozilla Window.resizeTo documentation> 
 resizeTo :: (MonadIO m) => Window -> Float -> Float -> m ()
 resizeTo self width height
-  = liftIO (js_resizeTo (unWindow self) width height)
+  = liftIO (js_resizeTo (self) width height)
  
 foreign import javascript unsafe "$1[\"matchMedia\"]($2)"
-        js_matchMedia ::
-        JSRef Window -> JSString -> IO (JSRef MediaQueryList)
+        js_matchMedia :: Window -> JSString -> IO (Nullable MediaQueryList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.matchMedia Mozilla Window.matchMedia documentation> 
 matchMedia ::
@@ -293,13 +287,13 @@
              Window -> query -> m (Maybe MediaQueryList)
 matchMedia self query
   = liftIO
-      ((js_matchMedia (unWindow self) (toJSString query)) >>= fromJSRef)
+      (nullableToMaybe <$> (js_matchMedia (self) (toJSString query)))
  
 foreign import javascript unsafe "$1[\"getComputedStyle\"]($2, $3)"
         js_getComputedStyle ::
-        JSRef Window ->
-          JSRef Element ->
-            JSRef (Maybe JSString) -> IO (JSRef CSSStyleDeclaration)
+        Window ->
+          Nullable Element ->
+            Nullable JSString -> IO (Nullable CSSStyleDeclaration)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.getComputedStyle Mozilla Window.getComputedStyle documentation> 
 getComputedStyle ::
@@ -309,15 +303,15 @@
                        Maybe pseudoElement -> m (Maybe CSSStyleDeclaration)
 getComputedStyle self element pseudoElement
   = liftIO
-      ((js_getComputedStyle (unWindow self)
-          (maybe jsNull (unElement . toElement) element)
-          (toMaybeJSString pseudoElement))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_getComputedStyle (self)
+            (maybeToNullable (fmap toElement element))
+            (toMaybeJSString pseudoElement)))
  
 foreign import javascript unsafe
         "$1[\"getMatchedCSSRules\"]($2, $3)" js_getMatchedCSSRules ::
-        JSRef Window ->
-          JSRef Element -> JSRef (Maybe JSString) -> IO (JSRef CSSRuleList)
+        Window ->
+          Nullable Element -> Nullable JSString -> IO (Nullable CSSRuleList)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.getMatchedCSSRules Mozilla Window.getMatchedCSSRules documentation> 
 getMatchedCSSRules ::
@@ -326,16 +320,16 @@
                        Maybe element -> Maybe pseudoElement -> m (Maybe CSSRuleList)
 getMatchedCSSRules self element pseudoElement
   = liftIO
-      ((js_getMatchedCSSRules (unWindow self)
-          (maybe jsNull (unElement . toElement) element)
-          (toMaybeJSString pseudoElement))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_getMatchedCSSRules (self)
+            (maybeToNullable (fmap toElement element))
+            (toMaybeJSString pseudoElement)))
  
 foreign import javascript unsafe
         "$1[\"webkitConvertPointFromPageToNode\"]($2,\n$3)"
         js_webkitConvertPointFromPageToNode ::
-        JSRef Window ->
-          JSRef Node -> JSRef WebKitPoint -> IO (JSRef WebKitPoint)
+        Window ->
+          Nullable Node -> Nullable WebKitPoint -> IO (Nullable WebKitPoint)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.webkitConvertPointFromPageToNode Mozilla Window.webkitConvertPointFromPageToNode documentation> 
 webkitConvertPointFromPageToNode ::
@@ -344,16 +338,16 @@
                                      Maybe node -> Maybe WebKitPoint -> m (Maybe WebKitPoint)
 webkitConvertPointFromPageToNode self node p
   = liftIO
-      ((js_webkitConvertPointFromPageToNode (unWindow self)
-          (maybe jsNull (unNode . toNode) node)
-          (maybe jsNull pToJSRef p))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_webkitConvertPointFromPageToNode (self)
+            (maybeToNullable (fmap toNode node))
+            (maybeToNullable p)))
  
 foreign import javascript unsafe
         "$1[\"webkitConvertPointFromNodeToPage\"]($2,\n$3)"
         js_webkitConvertPointFromNodeToPage ::
-        JSRef Window ->
-          JSRef Node -> JSRef WebKitPoint -> IO (JSRef WebKitPoint)
+        Window ->
+          Nullable Node -> Nullable WebKitPoint -> IO (Nullable WebKitPoint)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.webkitConvertPointFromNodeToPage Mozilla Window.webkitConvertPointFromNodeToPage documentation> 
 webkitConvertPointFromNodeToPage ::
@@ -362,15 +356,16 @@
                                      Maybe node -> Maybe WebKitPoint -> m (Maybe WebKitPoint)
 webkitConvertPointFromNodeToPage self node p
   = liftIO
-      ((js_webkitConvertPointFromNodeToPage (unWindow self)
-          (maybe jsNull (unNode . toNode) node)
-          (maybe jsNull pToJSRef p))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_webkitConvertPointFromNodeToPage (self)
+            (maybeToNullable (fmap toNode node))
+            (maybeToNullable p)))
  
 foreign import javascript unsafe "$1[\"postMessage\"]($2, $3, $4)"
         js_postMessage ::
-        JSRef Window ->
-          JSRef SerializedScriptValue -> JSString -> JSRef Array -> IO ()
+        Window ->
+          Nullable SerializedScriptValue ->
+            JSString -> Nullable Array -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.postMessage Mozilla Window.postMessage documentation> 
 postMessage ::
@@ -380,15 +375,14 @@
                 Maybe message -> targetOrigin -> Maybe messagePorts -> m ()
 postMessage self message targetOrigin messagePorts
   = liftIO
-      (js_postMessage (unWindow self)
-         (maybe jsNull (unSerializedScriptValue . toSerializedScriptValue)
-            message)
+      (js_postMessage (self)
+         (maybeToNullable (fmap toSerializedScriptValue message))
          (toJSString targetOrigin)
-         (maybe jsNull (unArray . toArray) messagePorts))
+         (maybeToNullable (fmap toArray messagePorts)))
  
 foreign import javascript unsafe
         "$1[\"requestAnimationFrame\"]($2)" js_requestAnimationFrame ::
-        JSRef Window -> JSRef RequestAnimationFrameCallback -> IO Int
+        Window -> Nullable RequestAnimationFrameCallback -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.requestAnimationFrame Mozilla Window.requestAnimationFrame documentation> 
 requestAnimationFrame ::
@@ -396,21 +390,20 @@
                         Window -> Maybe RequestAnimationFrameCallback -> m Int
 requestAnimationFrame self callback
   = liftIO
-      (js_requestAnimationFrame (unWindow self)
-         (maybe jsNull pToJSRef callback))
+      (js_requestAnimationFrame (self) (maybeToNullable callback))
  
 foreign import javascript unsafe "$1[\"cancelAnimationFrame\"]($2)"
-        js_cancelAnimationFrame :: JSRef Window -> Int -> IO ()
+        js_cancelAnimationFrame :: Window -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.cancelAnimationFrame Mozilla Window.cancelAnimationFrame documentation> 
 cancelAnimationFrame :: (MonadIO m) => Window -> Int -> m ()
 cancelAnimationFrame self id
-  = liftIO (js_cancelAnimationFrame (unWindow self) id)
+  = liftIO (js_cancelAnimationFrame (self) id)
  
 foreign import javascript unsafe
         "$1[\"webkitRequestAnimationFrame\"]($2)"
         js_webkitRequestAnimationFrame ::
-        JSRef Window -> JSRef RequestAnimationFrameCallback -> IO Int
+        Window -> Nullable RequestAnimationFrameCallback -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.webkitRequestAnimationFrame Mozilla Window.webkitRequestAnimationFrame documentation> 
 webkitRequestAnimationFrame ::
@@ -418,491 +411,475 @@
                               Window -> Maybe RequestAnimationFrameCallback -> m Int
 webkitRequestAnimationFrame self callback
   = liftIO
-      (js_webkitRequestAnimationFrame (unWindow self)
-         (maybe jsNull pToJSRef callback))
+      (js_webkitRequestAnimationFrame (self) (maybeToNullable callback))
  
 foreign import javascript unsafe
         "$1[\"webkitCancelAnimationFrame\"]($2)"
-        js_webkitCancelAnimationFrame :: JSRef Window -> Int -> IO ()
+        js_webkitCancelAnimationFrame :: Window -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.webkitCancelAnimationFrame Mozilla Window.webkitCancelAnimationFrame documentation> 
 webkitCancelAnimationFrame :: (MonadIO m) => Window -> Int -> m ()
 webkitCancelAnimationFrame self id
-  = liftIO (js_webkitCancelAnimationFrame (unWindow self) id)
+  = liftIO (js_webkitCancelAnimationFrame (self) id)
  
 foreign import javascript unsafe
         "$1[\"webkitCancelRequestAnimationFrame\"]($2)"
-        js_webkitCancelRequestAnimationFrame ::
-        JSRef Window -> Int -> IO ()
+        js_webkitCancelRequestAnimationFrame :: Window -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.webkitCancelRequestAnimationFrame Mozilla Window.webkitCancelRequestAnimationFrame documentation> 
 webkitCancelRequestAnimationFrame ::
                                   (MonadIO m) => Window -> Int -> m ()
 webkitCancelRequestAnimationFrame self id
-  = liftIO (js_webkitCancelRequestAnimationFrame (unWindow self) id)
+  = liftIO (js_webkitCancelRequestAnimationFrame (self) id)
  
 foreign import javascript unsafe "$1[\"captureEvents\"]()"
-        js_captureEvents :: JSRef Window -> IO ()
+        js_captureEvents :: Window -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.captureEvents Mozilla Window.captureEvents documentation> 
 captureEvents :: (MonadIO m) => Window -> m ()
-captureEvents self = liftIO (js_captureEvents (unWindow self))
+captureEvents self = liftIO (js_captureEvents (self))
  
 foreign import javascript unsafe "$1[\"releaseEvents\"]()"
-        js_releaseEvents :: JSRef Window -> IO ()
+        js_releaseEvents :: Window -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.releaseEvents Mozilla Window.releaseEvents documentation> 
 releaseEvents :: (MonadIO m) => Window -> m ()
-releaseEvents self = liftIO (js_releaseEvents (unWindow self))
+releaseEvents self = liftIO (js_releaseEvents (self))
  
 foreign import javascript unsafe "$1[\"webkitIndexedDB\"]"
-        js_getWebkitIndexedDB :: JSRef Window -> IO (JSRef IDBFactory)
+        js_getWebkitIndexedDB :: Window -> IO (Nullable IDBFactory)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.webkitIndexedDB Mozilla Window.webkitIndexedDB documentation> 
 getWebkitIndexedDB :: (MonadIO m) => Window -> m (Maybe IDBFactory)
 getWebkitIndexedDB self
-  = liftIO ((js_getWebkitIndexedDB (unWindow self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getWebkitIndexedDB (self)))
  
 foreign import javascript unsafe "$1[\"indexedDB\"]"
-        js_getIndexedDB :: JSRef Window -> IO (JSRef IDBFactory)
+        js_getIndexedDB :: Window -> IO (Nullable IDBFactory)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.indexedDB Mozilla Window.indexedDB documentation> 
 getIndexedDB :: (MonadIO m) => Window -> m (Maybe IDBFactory)
 getIndexedDB self
-  = liftIO ((js_getIndexedDB (unWindow self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getIndexedDB (self)))
  
 foreign import javascript unsafe "$1[\"webkitStorageInfo\"]"
-        js_getWebkitStorageInfo :: JSRef Window -> IO (JSRef StorageInfo)
+        js_getWebkitStorageInfo :: Window -> IO (Nullable StorageInfo)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.webkitStorageInfo Mozilla Window.webkitStorageInfo documentation> 
 getWebkitStorageInfo ::
                      (MonadIO m) => Window -> m (Maybe StorageInfo)
 getWebkitStorageInfo self
-  = liftIO ((js_getWebkitStorageInfo (unWindow self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getWebkitStorageInfo (self)))
  
 foreign import javascript unsafe "$1[\"speechSynthesis\"]"
-        js_getSpeechSynthesis :: JSRef Window -> IO (JSRef SpeechSynthesis)
+        js_getSpeechSynthesis :: Window -> IO (Nullable SpeechSynthesis)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.speechSynthesis Mozilla Window.speechSynthesis documentation> 
 getSpeechSynthesis ::
                    (MonadIO m) => Window -> m (Maybe SpeechSynthesis)
 getSpeechSynthesis self
-  = liftIO ((js_getSpeechSynthesis (unWindow self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getSpeechSynthesis (self)))
  
 foreign import javascript unsafe "$1[\"screen\"]" js_getScreen ::
-        JSRef Window -> IO (JSRef Screen)
+        Window -> IO (Nullable Screen)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.screen Mozilla Window.screen documentation> 
 getScreen :: (MonadIO m) => Window -> m (Maybe Screen)
-getScreen self
-  = liftIO ((js_getScreen (unWindow self)) >>= fromJSRef)
+getScreen self = liftIO (nullableToMaybe <$> (js_getScreen (self)))
  
 foreign import javascript unsafe "$1[\"history\"]" js_getHistory ::
-        JSRef Window -> IO (JSRef History)
+        Window -> IO (Nullable History)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.history Mozilla Window.history documentation> 
 getHistory :: (MonadIO m) => Window -> m (Maybe History)
 getHistory self
-  = liftIO ((js_getHistory (unWindow self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getHistory (self)))
  
 foreign import javascript unsafe "$1[\"locationbar\"]"
-        js_getLocationbar :: JSRef Window -> IO (JSRef BarProp)
+        js_getLocationbar :: Window -> IO (Nullable BarProp)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.locationbar Mozilla Window.locationbar documentation> 
 getLocationbar :: (MonadIO m) => Window -> m (Maybe BarProp)
 getLocationbar self
-  = liftIO ((js_getLocationbar (unWindow self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getLocationbar (self)))
  
 foreign import javascript unsafe "$1[\"menubar\"]" js_getMenubar ::
-        JSRef Window -> IO (JSRef BarProp)
+        Window -> IO (Nullable BarProp)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.menubar Mozilla Window.menubar documentation> 
 getMenubar :: (MonadIO m) => Window -> m (Maybe BarProp)
 getMenubar self
-  = liftIO ((js_getMenubar (unWindow self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getMenubar (self)))
  
 foreign import javascript unsafe "$1[\"personalbar\"]"
-        js_getPersonalbar :: JSRef Window -> IO (JSRef BarProp)
+        js_getPersonalbar :: Window -> IO (Nullable BarProp)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.personalbar Mozilla Window.personalbar documentation> 
 getPersonalbar :: (MonadIO m) => Window -> m (Maybe BarProp)
 getPersonalbar self
-  = liftIO ((js_getPersonalbar (unWindow self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getPersonalbar (self)))
  
 foreign import javascript unsafe "$1[\"scrollbars\"]"
-        js_getScrollbars :: JSRef Window -> IO (JSRef BarProp)
+        js_getScrollbars :: Window -> IO (Nullable BarProp)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.scrollbars Mozilla Window.scrollbars documentation> 
 getScrollbars :: (MonadIO m) => Window -> m (Maybe BarProp)
 getScrollbars self
-  = liftIO ((js_getScrollbars (unWindow self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getScrollbars (self)))
  
 foreign import javascript unsafe "$1[\"statusbar\"]"
-        js_getStatusbar :: JSRef Window -> IO (JSRef BarProp)
+        js_getStatusbar :: Window -> IO (Nullable BarProp)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.statusbar Mozilla Window.statusbar documentation> 
 getStatusbar :: (MonadIO m) => Window -> m (Maybe BarProp)
 getStatusbar self
-  = liftIO ((js_getStatusbar (unWindow self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getStatusbar (self)))
  
 foreign import javascript unsafe "$1[\"toolbar\"]" js_getToolbar ::
-        JSRef Window -> IO (JSRef BarProp)
+        Window -> IO (Nullable BarProp)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.toolbar Mozilla Window.toolbar documentation> 
 getToolbar :: (MonadIO m) => Window -> m (Maybe BarProp)
 getToolbar self
-  = liftIO ((js_getToolbar (unWindow self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getToolbar (self)))
  
 foreign import javascript unsafe "$1[\"navigator\"]"
-        js_getNavigator :: JSRef Window -> IO (JSRef Navigator)
+        js_getNavigator :: Window -> IO (Nullable Navigator)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.navigator Mozilla Window.navigator documentation> 
 getNavigator :: (MonadIO m) => Window -> m (Maybe Navigator)
 getNavigator self
-  = liftIO ((js_getNavigator (unWindow self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getNavigator (self)))
  
 foreign import javascript unsafe "$1[\"clientInformation\"]"
-        js_getClientInformation :: JSRef Window -> IO (JSRef Navigator)
+        js_getClientInformation :: Window -> IO (Nullable Navigator)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.clientInformation Mozilla Window.clientInformation documentation> 
 getClientInformation ::
                      (MonadIO m) => Window -> m (Maybe Navigator)
 getClientInformation self
-  = liftIO ((js_getClientInformation (unWindow self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getClientInformation (self)))
  
 foreign import javascript unsafe "$1[\"crypto\"]" js_getCrypto ::
-        JSRef Window -> IO (JSRef Crypto)
+        Window -> IO (Nullable Crypto)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.crypto Mozilla Window.crypto documentation> 
 getCrypto :: (MonadIO m) => Window -> m (Maybe Crypto)
-getCrypto self
-  = liftIO ((js_getCrypto (unWindow self)) >>= fromJSRef)
+getCrypto self = liftIO (nullableToMaybe <$> (js_getCrypto (self)))
  
 foreign import javascript unsafe "$1[\"location\"] = $2;"
-        js_setLocation :: JSRef Window -> JSRef Location -> IO ()
+        js_setLocation :: Window -> Nullable Location -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.location Mozilla Window.location documentation> 
 setLocation :: (MonadIO m) => Window -> Maybe Location -> m ()
 setLocation self val
-  = liftIO
-      (js_setLocation (unWindow self) (maybe jsNull pToJSRef val))
+  = liftIO (js_setLocation (self) (maybeToNullable val))
  
 foreign import javascript unsafe "$1[\"location\"]" js_getLocation
-        :: JSRef Window -> IO (JSRef Location)
+        :: Window -> IO (Nullable Location)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.location Mozilla Window.location documentation> 
 getLocation :: (MonadIO m) => Window -> m (Maybe Location)
 getLocation self
-  = liftIO ((js_getLocation (unWindow self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getLocation (self)))
  
 foreign import javascript unsafe "$1[\"event\"]" js_getEvent ::
-        JSRef Window -> IO (JSRef Event)
+        Window -> IO (Nullable Event)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.event Mozilla Window.event documentation> 
 getEvent :: (MonadIO m) => Window -> m (Maybe Event)
-getEvent self
-  = liftIO ((js_getEvent (unWindow self)) >>= fromJSRef)
+getEvent self = liftIO (nullableToMaybe <$> (js_getEvent (self)))
  
 foreign import javascript unsafe "$1[\"frameElement\"]"
-        js_getFrameElement :: JSRef Window -> IO (JSRef Element)
+        js_getFrameElement :: Window -> IO (Nullable Element)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.frameElement Mozilla Window.frameElement documentation> 
 getFrameElement :: (MonadIO m) => Window -> m (Maybe Element)
 getFrameElement self
-  = liftIO ((js_getFrameElement (unWindow self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getFrameElement (self)))
  
 foreign import javascript unsafe
         "($1[\"offscreenBuffering\"] ? 1 : 0)" js_getOffscreenBuffering ::
-        JSRef Window -> IO Bool
+        Window -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.offscreenBuffering Mozilla Window.offscreenBuffering documentation> 
 getOffscreenBuffering :: (MonadIO m) => Window -> m Bool
 getOffscreenBuffering self
-  = liftIO (js_getOffscreenBuffering (unWindow self))
+  = liftIO (js_getOffscreenBuffering (self))
  
 foreign import javascript unsafe "$1[\"outerHeight\"]"
-        js_getOuterHeight :: JSRef Window -> IO Int
+        js_getOuterHeight :: Window -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.outerHeight Mozilla Window.outerHeight documentation> 
 getOuterHeight :: (MonadIO m) => Window -> m Int
-getOuterHeight self = liftIO (js_getOuterHeight (unWindow self))
+getOuterHeight self = liftIO (js_getOuterHeight (self))
  
 foreign import javascript unsafe "$1[\"outerWidth\"]"
-        js_getOuterWidth :: JSRef Window -> IO Int
+        js_getOuterWidth :: Window -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.outerWidth Mozilla Window.outerWidth documentation> 
 getOuterWidth :: (MonadIO m) => Window -> m Int
-getOuterWidth self = liftIO (js_getOuterWidth (unWindow self))
+getOuterWidth self = liftIO (js_getOuterWidth (self))
  
 foreign import javascript unsafe "$1[\"innerHeight\"]"
-        js_getInnerHeight :: JSRef Window -> IO Int
+        js_getInnerHeight :: Window -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.innerHeight Mozilla Window.innerHeight documentation> 
 getInnerHeight :: (MonadIO m) => Window -> m Int
-getInnerHeight self = liftIO (js_getInnerHeight (unWindow self))
+getInnerHeight self = liftIO (js_getInnerHeight (self))
  
 foreign import javascript unsafe "$1[\"innerWidth\"]"
-        js_getInnerWidth :: JSRef Window -> IO Int
+        js_getInnerWidth :: Window -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.innerWidth Mozilla Window.innerWidth documentation> 
 getInnerWidth :: (MonadIO m) => Window -> m Int
-getInnerWidth self = liftIO (js_getInnerWidth (unWindow self))
+getInnerWidth self = liftIO (js_getInnerWidth (self))
  
 foreign import javascript unsafe "$1[\"screenX\"]" js_getScreenX ::
-        JSRef Window -> IO Int
+        Window -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.screenX Mozilla Window.screenX documentation> 
 getScreenX :: (MonadIO m) => Window -> m Int
-getScreenX self = liftIO (js_getScreenX (unWindow self))
+getScreenX self = liftIO (js_getScreenX (self))
  
 foreign import javascript unsafe "$1[\"screenY\"]" js_getScreenY ::
-        JSRef Window -> IO Int
+        Window -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.screenY Mozilla Window.screenY documentation> 
 getScreenY :: (MonadIO m) => Window -> m Int
-getScreenY self = liftIO (js_getScreenY (unWindow self))
+getScreenY self = liftIO (js_getScreenY (self))
  
 foreign import javascript unsafe "$1[\"screenLeft\"]"
-        js_getScreenLeft :: JSRef Window -> IO Int
+        js_getScreenLeft :: Window -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.screenLeft Mozilla Window.screenLeft documentation> 
 getScreenLeft :: (MonadIO m) => Window -> m Int
-getScreenLeft self = liftIO (js_getScreenLeft (unWindow self))
+getScreenLeft self = liftIO (js_getScreenLeft (self))
  
 foreign import javascript unsafe "$1[\"screenTop\"]"
-        js_getScreenTop :: JSRef Window -> IO Int
+        js_getScreenTop :: Window -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.screenTop Mozilla Window.screenTop documentation> 
 getScreenTop :: (MonadIO m) => Window -> m Int
-getScreenTop self = liftIO (js_getScreenTop (unWindow self))
+getScreenTop self = liftIO (js_getScreenTop (self))
  
 foreign import javascript unsafe "$1[\"scrollX\"]" js_getScrollX ::
-        JSRef Window -> IO Int
+        Window -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.scrollX Mozilla Window.scrollX documentation> 
 getScrollX :: (MonadIO m) => Window -> m Int
-getScrollX self = liftIO (js_getScrollX (unWindow self))
+getScrollX self = liftIO (js_getScrollX (self))
  
 foreign import javascript unsafe "$1[\"scrollY\"]" js_getScrollY ::
-        JSRef Window -> IO Int
+        Window -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.scrollY Mozilla Window.scrollY documentation> 
 getScrollY :: (MonadIO m) => Window -> m Int
-getScrollY self = liftIO (js_getScrollY (unWindow self))
+getScrollY self = liftIO (js_getScrollY (self))
  
 foreign import javascript unsafe "$1[\"pageXOffset\"]"
-        js_getPageXOffset :: JSRef Window -> IO Int
+        js_getPageXOffset :: Window -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.pageXOffset Mozilla Window.pageXOffset documentation> 
 getPageXOffset :: (MonadIO m) => Window -> m Int
-getPageXOffset self = liftIO (js_getPageXOffset (unWindow self))
+getPageXOffset self = liftIO (js_getPageXOffset (self))
  
 foreign import javascript unsafe "$1[\"pageYOffset\"]"
-        js_getPageYOffset :: JSRef Window -> IO Int
+        js_getPageYOffset :: Window -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.pageYOffset Mozilla Window.pageYOffset documentation> 
 getPageYOffset :: (MonadIO m) => Window -> m Int
-getPageYOffset self = liftIO (js_getPageYOffset (unWindow self))
+getPageYOffset self = liftIO (js_getPageYOffset (self))
  
 foreign import javascript unsafe "($1[\"closed\"] ? 1 : 0)"
-        js_getClosed :: JSRef Window -> IO Bool
+        js_getClosed :: Window -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.closed Mozilla Window.closed documentation> 
 getClosed :: (MonadIO m) => Window -> m Bool
-getClosed self = liftIO (js_getClosed (unWindow self))
+getClosed self = liftIO (js_getClosed (self))
  
 foreign import javascript unsafe "$1[\"length\"]" js_getLength ::
-        JSRef Window -> IO Word
+        Window -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.length Mozilla Window.length documentation> 
 getLength :: (MonadIO m) => Window -> m Word
-getLength self = liftIO (js_getLength (unWindow self))
+getLength self = liftIO (js_getLength (self))
  
 foreign import javascript unsafe "$1[\"name\"] = $2;" js_setName ::
-        JSRef Window -> JSString -> IO ()
+        Window -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.name Mozilla Window.name documentation> 
 setName :: (MonadIO m, ToJSString val) => Window -> val -> m ()
-setName self val
-  = liftIO (js_setName (unWindow self) (toJSString val))
+setName self val = liftIO (js_setName (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"name\"]" js_getName ::
-        JSRef Window -> IO JSString
+        Window -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.name Mozilla Window.name documentation> 
 getName :: (MonadIO m, FromJSString result) => Window -> m result
-getName self
-  = liftIO (fromJSString <$> (js_getName (unWindow self)))
+getName self = liftIO (fromJSString <$> (js_getName (self)))
  
 foreign import javascript unsafe "$1[\"status\"] = $2;"
-        js_setStatus :: JSRef Window -> JSString -> IO ()
+        js_setStatus :: Window -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.status Mozilla Window.status documentation> 
 setStatus :: (MonadIO m, ToJSString val) => Window -> val -> m ()
-setStatus self val
-  = liftIO (js_setStatus (unWindow self) (toJSString val))
+setStatus self val = liftIO (js_setStatus (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"status\"]" js_getStatus ::
-        JSRef Window -> IO JSString
+        Window -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.status Mozilla Window.status documentation> 
 getStatus :: (MonadIO m, FromJSString result) => Window -> m result
-getStatus self
-  = liftIO (fromJSString <$> (js_getStatus (unWindow self)))
+getStatus self = liftIO (fromJSString <$> (js_getStatus (self)))
  
 foreign import javascript unsafe "$1[\"defaultStatus\"] = $2;"
-        js_setDefaultStatus :: JSRef Window -> JSString -> IO ()
+        js_setDefaultStatus :: Window -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.defaultStatus Mozilla Window.defaultStatus documentation> 
 setDefaultStatus ::
                  (MonadIO m, ToJSString val) => Window -> val -> m ()
 setDefaultStatus self val
-  = liftIO (js_setDefaultStatus (unWindow self) (toJSString val))
+  = liftIO (js_setDefaultStatus (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"defaultStatus\"]"
-        js_getDefaultStatus :: JSRef Window -> IO JSString
+        js_getDefaultStatus :: Window -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.defaultStatus Mozilla Window.defaultStatus documentation> 
 getDefaultStatus ::
                  (MonadIO m, FromJSString result) => Window -> m result
 getDefaultStatus self
-  = liftIO (fromJSString <$> (js_getDefaultStatus (unWindow self)))
+  = liftIO (fromJSString <$> (js_getDefaultStatus (self)))
  
 foreign import javascript unsafe "$1[\"defaultstatus\"] = $2;"
-        js_setDefaultstatus :: JSRef Window -> JSString -> IO ()
+        js_setDefaultstatus :: Window -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.defaultstatus Mozilla Window.defaultstatus documentation> 
 setDefaultstatus ::
                  (MonadIO m, ToJSString val) => Window -> val -> m ()
 setDefaultstatus self val
-  = liftIO (js_setDefaultstatus (unWindow self) (toJSString val))
+  = liftIO (js_setDefaultstatus (self) (toJSString val))
  
 foreign import javascript unsafe "$1[\"defaultstatus\"]"
-        js_getDefaultstatus :: JSRef Window -> IO JSString
+        js_getDefaultstatus :: Window -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.defaultstatus Mozilla Window.defaultstatus documentation> 
 getDefaultstatus ::
                  (MonadIO m, FromJSString result) => Window -> m result
 getDefaultstatus self
-  = liftIO (fromJSString <$> (js_getDefaultstatus (unWindow self)))
+  = liftIO (fromJSString <$> (js_getDefaultstatus (self)))
  
 foreign import javascript unsafe "$1[\"self\"]" js_getSelf ::
-        JSRef Window -> IO (JSRef Window)
+        Window -> IO (Nullable Window)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.self Mozilla Window.self documentation> 
 getSelf :: (MonadIO m) => Window -> m (Maybe Window)
-getSelf self = liftIO ((js_getSelf (unWindow self)) >>= fromJSRef)
+getSelf self = liftIO (nullableToMaybe <$> (js_getSelf (self)))
  
 foreign import javascript unsafe "$1[\"window\"]" js_getWindow ::
-        JSRef Window -> IO (JSRef Window)
+        Window -> IO (Nullable Window)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.window Mozilla Window.window documentation> 
 getWindow :: (MonadIO m) => Window -> m (Maybe Window)
-getWindow self
-  = liftIO ((js_getWindow (unWindow self)) >>= fromJSRef)
+getWindow self = liftIO (nullableToMaybe <$> (js_getWindow (self)))
  
 foreign import javascript unsafe "$1[\"frames\"]" js_getFrames ::
-        JSRef Window -> IO (JSRef Window)
+        Window -> IO (Nullable Window)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.frames Mozilla Window.frames documentation> 
 getFrames :: (MonadIO m) => Window -> m (Maybe Window)
-getFrames self
-  = liftIO ((js_getFrames (unWindow self)) >>= fromJSRef)
+getFrames self = liftIO (nullableToMaybe <$> (js_getFrames (self)))
  
 foreign import javascript unsafe "$1[\"opener\"]" js_getOpener ::
-        JSRef Window -> IO (JSRef Window)
+        Window -> IO (Nullable Window)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.opener Mozilla Window.opener documentation> 
 getOpener :: (MonadIO m) => Window -> m (Maybe Window)
-getOpener self
-  = liftIO ((js_getOpener (unWindow self)) >>= fromJSRef)
+getOpener self = liftIO (nullableToMaybe <$> (js_getOpener (self)))
  
 foreign import javascript unsafe "$1[\"parent\"]" js_getParent ::
-        JSRef Window -> IO (JSRef Window)
+        Window -> IO (Nullable Window)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.parent Mozilla Window.parent documentation> 
 getParent :: (MonadIO m) => Window -> m (Maybe Window)
-getParent self
-  = liftIO ((js_getParent (unWindow self)) >>= fromJSRef)
+getParent self = liftIO (nullableToMaybe <$> (js_getParent (self)))
  
 foreign import javascript unsafe "$1[\"top\"]" js_getTop ::
-        JSRef Window -> IO (JSRef Window)
+        Window -> IO (Nullable Window)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.top Mozilla Window.top documentation> 
 getTop :: (MonadIO m) => Window -> m (Maybe Window)
-getTop self = liftIO ((js_getTop (unWindow self)) >>= fromJSRef)
+getTop self = liftIO (nullableToMaybe <$> (js_getTop (self)))
  
 foreign import javascript unsafe "$1[\"document\"]" js_getDocument
-        :: JSRef Window -> IO (JSRef Document)
+        :: Window -> IO (Nullable Document)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.document Mozilla Window.document documentation> 
 getDocument :: (MonadIO m) => Window -> m (Maybe Document)
 getDocument self
-  = liftIO ((js_getDocument (unWindow self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getDocument (self)))
  
 foreign import javascript unsafe "$1[\"styleMedia\"]"
-        js_getStyleMedia :: JSRef Window -> IO (JSRef StyleMedia)
+        js_getStyleMedia :: Window -> IO (Nullable StyleMedia)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.styleMedia Mozilla Window.styleMedia documentation> 
 getStyleMedia :: (MonadIO m) => Window -> m (Maybe StyleMedia)
 getStyleMedia self
-  = liftIO ((js_getStyleMedia (unWindow self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getStyleMedia (self)))
  
 foreign import javascript unsafe "$1[\"devicePixelRatio\"]"
-        js_getDevicePixelRatio :: JSRef Window -> IO Double
+        js_getDevicePixelRatio :: Window -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.devicePixelRatio Mozilla Window.devicePixelRatio documentation> 
 getDevicePixelRatio :: (MonadIO m) => Window -> m Double
-getDevicePixelRatio self
-  = liftIO (js_getDevicePixelRatio (unWindow self))
+getDevicePixelRatio self = liftIO (js_getDevicePixelRatio (self))
  
 foreign import javascript unsafe "$1[\"applicationCache\"]"
-        js_getApplicationCache ::
-        JSRef Window -> IO (JSRef ApplicationCache)
+        js_getApplicationCache :: Window -> IO (Nullable ApplicationCache)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.applicationCache Mozilla Window.applicationCache documentation> 
 getApplicationCache ::
                     (MonadIO m) => Window -> m (Maybe ApplicationCache)
 getApplicationCache self
-  = liftIO ((js_getApplicationCache (unWindow self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getApplicationCache (self)))
  
 foreign import javascript unsafe "$1[\"sessionStorage\"]"
-        js_getSessionStorage :: JSRef Window -> IO (JSRef Storage)
+        js_getSessionStorage :: Window -> IO (Nullable Storage)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.sessionStorage Mozilla Window.sessionStorage documentation> 
 getSessionStorage :: (MonadIO m) => Window -> m (Maybe Storage)
 getSessionStorage self
-  = liftIO ((js_getSessionStorage (unWindow self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getSessionStorage (self)))
  
 foreign import javascript unsafe "$1[\"localStorage\"]"
-        js_getLocalStorage :: JSRef Window -> IO (JSRef Storage)
+        js_getLocalStorage :: Window -> IO (Nullable Storage)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.localStorage Mozilla Window.localStorage documentation> 
 getLocalStorage :: (MonadIO m) => Window -> m (Maybe Storage)
 getLocalStorage self
-  = liftIO ((js_getLocalStorage (unWindow self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getLocalStorage (self)))
  
 foreign import javascript unsafe "$1[\"orientation\"]"
-        js_getOrientation :: JSRef Window -> IO Int
+        js_getOrientation :: Window -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.orientation Mozilla Window.orientation documentation> 
 getOrientation :: (MonadIO m) => Window -> m Int
-getOrientation self = liftIO (js_getOrientation (unWindow self))
+getOrientation self = liftIO (js_getOrientation (self))
  
 foreign import javascript unsafe "$1[\"performance\"]"
-        js_getPerformance :: JSRef Window -> IO (JSRef Performance)
+        js_getPerformance :: Window -> IO (Nullable Performance)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.performance Mozilla Window.performance documentation> 
 getPerformance :: (MonadIO m) => Window -> m (Maybe Performance)
 getPerformance self
-  = liftIO ((js_getPerformance (unWindow self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getPerformance (self)))
  
 foreign import javascript unsafe "$1[\"CSS\"]" js_getCSS ::
-        JSRef Window -> IO (JSRef CSS)
+        Window -> IO (Nullable CSS)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.CSS Mozilla Window.CSS documentation> 
 getCSS :: (MonadIO m) => Window -> m (Maybe CSS)
-getCSS self = liftIO ((js_getCSS (unWindow self)) >>= fromJSRef)
+getCSS self = liftIO (nullableToMaybe <$> (js_getCSS (self)))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.onabort Mozilla Window.onabort documentation> 
 abort :: EventName Window UIEvent
diff --git a/src/GHCJS/DOM/JSFFI/Generated/WindowBase64.hs b/src/GHCJS/DOM/JSFFI/Generated/WindowBase64.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/WindowBase64.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/WindowBase64.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -19,25 +19,21 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"atob\"]($2)" js_atob ::
-        JSRef WindowBase64 -> JSString -> IO JSString
+        WindowBase64 -> JSString -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64.atob Mozilla WindowBase64.atob documentation> 
 atob ::
      (MonadIO m, ToJSString string, FromJSString result) =>
        WindowBase64 -> string -> m result
 atob self string
-  = liftIO
-      (fromJSString <$>
-         (js_atob (unWindowBase64 self) (toJSString string)))
+  = liftIO (fromJSString <$> (js_atob (self) (toJSString string)))
  
 foreign import javascript unsafe "$1[\"btoa\"]($2)" js_btoa ::
-        JSRef WindowBase64 -> JSString -> IO JSString
+        WindowBase64 -> JSString -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64.btoa Mozilla WindowBase64.btoa documentation> 
 btoa ::
      (MonadIO m, ToJSString string, FromJSString result) =>
        WindowBase64 -> string -> m result
 btoa self string
-  = liftIO
-      (fromJSString <$>
-         (js_btoa (unWindowBase64 self) (toJSString string)))
+  = liftIO (fromJSString <$> (js_btoa (self) (toJSString string)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/WindowTimers.hs b/src/GHCJS/DOM/JSFFI/Generated/WindowTimers.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/WindowTimers.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/WindowTimers.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,35 +20,31 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"setTimeout\"]($2, $3)"
-        js_setTimeout :: JSRef WindowTimers -> JSRef a -> Int -> IO Int
+        js_setTimeout :: WindowTimers -> JSRef -> Int -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers.setTimeout Mozilla WindowTimers.setTimeout documentation> 
-setTimeout ::
-           (MonadIO m) => WindowTimers -> JSRef a -> Int -> m Int
+setTimeout :: (MonadIO m) => WindowTimers -> JSRef -> Int -> m Int
 setTimeout self handler timeout
-  = liftIO (js_setTimeout (unWindowTimers self) handler timeout)
+  = liftIO (js_setTimeout (self) handler timeout)
  
 foreign import javascript unsafe "$1[\"clearTimeout\"]($2)"
-        js_clearTimeout :: JSRef WindowTimers -> Int -> IO ()
+        js_clearTimeout :: WindowTimers -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers.clearTimeout Mozilla WindowTimers.clearTimeout documentation> 
 clearTimeout :: (MonadIO m) => WindowTimers -> Int -> m ()
-clearTimeout self handle
-  = liftIO (js_clearTimeout (unWindowTimers self) handle)
+clearTimeout self handle = liftIO (js_clearTimeout (self) handle)
  
 foreign import javascript unsafe "$1[\"setInterval\"]($2, $3)"
-        js_setInterval :: JSRef WindowTimers -> JSRef a -> Int -> IO Int
+        js_setInterval :: WindowTimers -> JSRef -> Int -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers.setInterval Mozilla WindowTimers.setInterval documentation> 
-setInterval ::
-            (MonadIO m) => WindowTimers -> JSRef a -> Int -> m Int
+setInterval :: (MonadIO m) => WindowTimers -> JSRef -> Int -> m Int
 setInterval self handler timeout
-  = liftIO (js_setInterval (unWindowTimers self) handler timeout)
+  = liftIO (js_setInterval (self) handler timeout)
  
 foreign import javascript unsafe "$1[\"clearInterval\"]($2)"
-        js_clearInterval :: JSRef WindowTimers -> Int -> IO ()
+        js_clearInterval :: WindowTimers -> Int -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers.clearInterval Mozilla WindowTimers.clearInterval documentation> 
 clearInterval :: (MonadIO m) => WindowTimers -> Int -> m ()
-clearInterval self handle
-  = liftIO (js_clearInterval (unWindowTimers self) handle)
+clearInterval self handle = liftIO (js_clearInterval (self) handle)
diff --git a/src/GHCJS/DOM/JSFFI/Generated/Worker.hs b/src/GHCJS/DOM/JSFFI/Generated/Worker.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/Worker.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/Worker.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,18 +20,16 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "new window[\"Worker\"]($1)"
-        js_newWorker :: JSString -> IO (JSRef Worker)
+        js_newWorker :: JSString -> IO Worker
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Worker Mozilla Worker documentation> 
 newWorker ::
           (MonadIO m, ToJSString scriptUrl) => scriptUrl -> m Worker
-newWorker scriptUrl
-  = liftIO
-      (js_newWorker (toJSString scriptUrl) >>= fromJSRefUnchecked)
+newWorker scriptUrl = liftIO (js_newWorker (toJSString scriptUrl))
  
 foreign import javascript unsafe "$1[\"postMessage\"]($2, $3)"
         js_postMessage ::
-        JSRef Worker -> JSRef SerializedScriptValue -> JSRef Array -> IO ()
+        Worker -> Nullable SerializedScriptValue -> Nullable Array -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Worker.postMessage Mozilla Worker.postMessage documentation> 
 postMessage ::
@@ -40,17 +38,16 @@
               Worker -> Maybe message -> Maybe messagePorts -> m ()
 postMessage self message messagePorts
   = liftIO
-      (js_postMessage (unWorker self)
-         (maybe jsNull (unSerializedScriptValue . toSerializedScriptValue)
-            message)
-         (maybe jsNull (unArray . toArray) messagePorts))
+      (js_postMessage (self)
+         (maybeToNullable (fmap toSerializedScriptValue message))
+         (maybeToNullable (fmap toArray messagePorts)))
  
 foreign import javascript unsafe "$1[\"terminate\"]()" js_terminate
-        :: JSRef Worker -> IO ()
+        :: Worker -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Worker.terminate Mozilla Worker.terminate documentation> 
 terminate :: (MonadIO m) => Worker -> m ()
-terminate self = liftIO (js_terminate (unWorker self))
+terminate self = liftIO (js_terminate (self))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Worker.onmessage Mozilla Worker.onmessage documentation> 
 message :: EventName Worker MessageEvent
diff --git a/src/GHCJS/DOM/JSFFI/Generated/WorkerGlobalScope.hs b/src/GHCJS/DOM/JSFFI/Generated/WorkerGlobalScope.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/WorkerGlobalScope.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/WorkerGlobalScope.hs
@@ -8,7 +8,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -22,26 +22,23 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"close\"]()" js_close ::
-        JSRef WorkerGlobalScope -> IO ()
+        WorkerGlobalScope -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WorkerGlobalScope.close Mozilla WorkerGlobalScope.close documentation> 
 close :: (MonadIO m, IsWorkerGlobalScope self) => self -> m ()
-close self
-  = liftIO
-      (js_close (unWorkerGlobalScope (toWorkerGlobalScope self)))
+close self = liftIO (js_close (toWorkerGlobalScope self))
  
 foreign import javascript unsafe "$1[\"importScripts\"]()"
-        js_importScripts :: JSRef WorkerGlobalScope -> IO ()
+        js_importScripts :: WorkerGlobalScope -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WorkerGlobalScope.importScripts Mozilla WorkerGlobalScope.importScripts documentation> 
 importScripts ::
               (MonadIO m, IsWorkerGlobalScope self) => self -> m ()
 importScripts self
-  = liftIO
-      (js_importScripts (unWorkerGlobalScope (toWorkerGlobalScope self)))
+  = liftIO (js_importScripts (toWorkerGlobalScope self))
  
 foreign import javascript unsafe "$1[\"self\"]" js_getSelf ::
-        JSRef WorkerGlobalScope -> IO (JSRef WorkerGlobalScope)
+        WorkerGlobalScope -> IO (Nullable WorkerGlobalScope)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WorkerGlobalScope.self Mozilla WorkerGlobalScope.self documentation> 
 getSelf ::
@@ -49,11 +46,10 @@
           self -> m (Maybe WorkerGlobalScope)
 getSelf self
   = liftIO
-      ((js_getSelf (unWorkerGlobalScope (toWorkerGlobalScope self))) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_getSelf (toWorkerGlobalScope self)))
  
 foreign import javascript unsafe "$1[\"location\"]" js_getLocation
-        :: JSRef WorkerGlobalScope -> IO (JSRef WorkerLocation)
+        :: WorkerGlobalScope -> IO (Nullable WorkerLocation)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WorkerGlobalScope.location Mozilla WorkerGlobalScope.location documentation> 
 getLocation ::
@@ -61,8 +57,7 @@
               self -> m (Maybe WorkerLocation)
 getLocation self
   = liftIO
-      ((js_getLocation (unWorkerGlobalScope (toWorkerGlobalScope self)))
-         >>= fromJSRef)
+      (nullableToMaybe <$> (js_getLocation (toWorkerGlobalScope self)))
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WorkerGlobalScope.onerror Mozilla WorkerGlobalScope.onerror documentation> 
 error ::
@@ -84,7 +79,7 @@
  
 foreign import javascript unsafe "$1[\"navigator\"]"
         js_getNavigator ::
-        JSRef WorkerGlobalScope -> IO (JSRef WorkerNavigator)
+        WorkerGlobalScope -> IO (Nullable WorkerNavigator)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WorkerGlobalScope.navigator Mozilla WorkerGlobalScope.navigator documentation> 
 getNavigator ::
@@ -92,5 +87,4 @@
                self -> m (Maybe WorkerNavigator)
 getNavigator self
   = liftIO
-      ((js_getNavigator (unWorkerGlobalScope (toWorkerGlobalScope self)))
-         >>= fromJSRef)
+      (nullableToMaybe <$> (js_getNavigator (toWorkerGlobalScope self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/WorkerLocation.hs b/src/GHCJS/DOM/JSFFI/Generated/WorkerLocation.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/WorkerLocation.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/WorkerLocation.hs
@@ -8,7 +8,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -22,85 +22,76 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"toString\"]()" js_toString
-        :: JSRef WorkerLocation -> IO JSString
+        :: WorkerLocation -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WorkerLocation.toString Mozilla WorkerLocation.toString documentation> 
 toString ::
          (MonadIO m, FromJSString result) => WorkerLocation -> m result
-toString self
-  = liftIO (fromJSString <$> (js_toString (unWorkerLocation self)))
+toString self = liftIO (fromJSString <$> (js_toString (self)))
  
 foreign import javascript unsafe "$1[\"href\"]" js_getHref ::
-        JSRef WorkerLocation -> IO JSString
+        WorkerLocation -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WorkerLocation.href Mozilla WorkerLocation.href documentation> 
 getHref ::
         (MonadIO m, FromJSString result) => WorkerLocation -> m result
-getHref self
-  = liftIO (fromJSString <$> (js_getHref (unWorkerLocation self)))
+getHref self = liftIO (fromJSString <$> (js_getHref (self)))
  
 foreign import javascript unsafe "$1[\"protocol\"]" js_getProtocol
-        :: JSRef WorkerLocation -> IO JSString
+        :: WorkerLocation -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WorkerLocation.protocol Mozilla WorkerLocation.protocol documentation> 
 getProtocol ::
             (MonadIO m, FromJSString result) => WorkerLocation -> m result
 getProtocol self
-  = liftIO
-      (fromJSString <$> (js_getProtocol (unWorkerLocation self)))
+  = liftIO (fromJSString <$> (js_getProtocol (self)))
  
 foreign import javascript unsafe "$1[\"host\"]" js_getHost ::
-        JSRef WorkerLocation -> IO JSString
+        WorkerLocation -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WorkerLocation.host Mozilla WorkerLocation.host documentation> 
 getHost ::
         (MonadIO m, FromJSString result) => WorkerLocation -> m result
-getHost self
-  = liftIO (fromJSString <$> (js_getHost (unWorkerLocation self)))
+getHost self = liftIO (fromJSString <$> (js_getHost (self)))
  
 foreign import javascript unsafe "$1[\"hostname\"]" js_getHostname
-        :: JSRef WorkerLocation -> IO JSString
+        :: WorkerLocation -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WorkerLocation.hostname Mozilla WorkerLocation.hostname documentation> 
 getHostname ::
             (MonadIO m, FromJSString result) => WorkerLocation -> m result
 getHostname self
-  = liftIO
-      (fromJSString <$> (js_getHostname (unWorkerLocation self)))
+  = liftIO (fromJSString <$> (js_getHostname (self)))
  
 foreign import javascript unsafe "$1[\"port\"]" js_getPort ::
-        JSRef WorkerLocation -> IO JSString
+        WorkerLocation -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WorkerLocation.port Mozilla WorkerLocation.port documentation> 
 getPort ::
         (MonadIO m, FromJSString result) => WorkerLocation -> m result
-getPort self
-  = liftIO (fromJSString <$> (js_getPort (unWorkerLocation self)))
+getPort self = liftIO (fromJSString <$> (js_getPort (self)))
  
 foreign import javascript unsafe "$1[\"pathname\"]" js_getPathname
-        :: JSRef WorkerLocation -> IO JSString
+        :: WorkerLocation -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WorkerLocation.pathname Mozilla WorkerLocation.pathname documentation> 
 getPathname ::
             (MonadIO m, FromJSString result) => WorkerLocation -> m result
 getPathname self
-  = liftIO
-      (fromJSString <$> (js_getPathname (unWorkerLocation self)))
+  = liftIO (fromJSString <$> (js_getPathname (self)))
  
 foreign import javascript unsafe "$1[\"search\"]" js_getSearch ::
-        JSRef WorkerLocation -> IO JSString
+        WorkerLocation -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WorkerLocation.search Mozilla WorkerLocation.search documentation> 
 getSearch ::
           (MonadIO m, FromJSString result) => WorkerLocation -> m result
-getSearch self
-  = liftIO (fromJSString <$> (js_getSearch (unWorkerLocation self)))
+getSearch self = liftIO (fromJSString <$> (js_getSearch (self)))
  
 foreign import javascript unsafe "$1[\"hash\"]" js_getHash ::
-        JSRef WorkerLocation -> IO JSString
+        WorkerLocation -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WorkerLocation.hash Mozilla WorkerLocation.hash documentation> 
 getHash ::
         (MonadIO m, FromJSString result) => WorkerLocation -> m result
-getHash self
-  = liftIO (fromJSString <$> (js_getHash (unWorkerLocation self)))
+getHash self = liftIO (fromJSString <$> (js_getHash (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/WorkerNavigator.hs b/src/GHCJS/DOM/JSFFI/Generated/WorkerNavigator.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/WorkerNavigator.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/WorkerNavigator.hs
@@ -9,7 +9,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -24,71 +24,64 @@
  
 foreign import javascript unsafe "$1[\"webkitTemporaryStorage\"]"
         js_getWebkitTemporaryStorage ::
-        JSRef WorkerNavigator -> IO (JSRef StorageQuota)
+        WorkerNavigator -> IO (Nullable StorageQuota)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WorkerNavigator.webkitTemporaryStorage Mozilla WorkerNavigator.webkitTemporaryStorage documentation> 
 getWebkitTemporaryStorage ::
                           (MonadIO m) => WorkerNavigator -> m (Maybe StorageQuota)
 getWebkitTemporaryStorage self
   = liftIO
-      ((js_getWebkitTemporaryStorage (unWorkerNavigator self)) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_getWebkitTemporaryStorage (self)))
  
 foreign import javascript unsafe "$1[\"webkitPersistentStorage\"]"
         js_getWebkitPersistentStorage ::
-        JSRef WorkerNavigator -> IO (JSRef StorageQuota)
+        WorkerNavigator -> IO (Nullable StorageQuota)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WorkerNavigator.webkitPersistentStorage Mozilla WorkerNavigator.webkitPersistentStorage documentation> 
 getWebkitPersistentStorage ::
                            (MonadIO m) => WorkerNavigator -> m (Maybe StorageQuota)
 getWebkitPersistentStorage self
   = liftIO
-      ((js_getWebkitPersistentStorage (unWorkerNavigator self)) >>=
-         fromJSRef)
+      (nullableToMaybe <$> (js_getWebkitPersistentStorage (self)))
  
 foreign import javascript unsafe "$1[\"appName\"]" js_getAppName ::
-        JSRef WorkerNavigator -> IO JSString
+        WorkerNavigator -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WorkerNavigator.appName Mozilla WorkerNavigator.appName documentation> 
 getAppName ::
            (MonadIO m, FromJSString result) => WorkerNavigator -> m result
-getAppName self
-  = liftIO
-      (fromJSString <$> (js_getAppName (unWorkerNavigator self)))
+getAppName self = liftIO (fromJSString <$> (js_getAppName (self)))
  
 foreign import javascript unsafe "$1[\"appVersion\"]"
-        js_getAppVersion :: JSRef WorkerNavigator -> IO JSString
+        js_getAppVersion :: WorkerNavigator -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WorkerNavigator.appVersion Mozilla WorkerNavigator.appVersion documentation> 
 getAppVersion ::
               (MonadIO m, FromJSString result) => WorkerNavigator -> m result
 getAppVersion self
-  = liftIO
-      (fromJSString <$> (js_getAppVersion (unWorkerNavigator self)))
+  = liftIO (fromJSString <$> (js_getAppVersion (self)))
  
 foreign import javascript unsafe "$1[\"platform\"]" js_getPlatform
-        :: JSRef WorkerNavigator -> IO JSString
+        :: WorkerNavigator -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WorkerNavigator.platform Mozilla WorkerNavigator.platform documentation> 
 getPlatform ::
             (MonadIO m, FromJSString result) => WorkerNavigator -> m result
 getPlatform self
-  = liftIO
-      (fromJSString <$> (js_getPlatform (unWorkerNavigator self)))
+  = liftIO (fromJSString <$> (js_getPlatform (self)))
  
 foreign import javascript unsafe "$1[\"userAgent\"]"
-        js_getUserAgent :: JSRef WorkerNavigator -> IO JSString
+        js_getUserAgent :: WorkerNavigator -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WorkerNavigator.userAgent Mozilla WorkerNavigator.userAgent documentation> 
 getUserAgent ::
              (MonadIO m, FromJSString result) => WorkerNavigator -> m result
 getUserAgent self
-  = liftIO
-      (fromJSString <$> (js_getUserAgent (unWorkerNavigator self)))
+  = liftIO (fromJSString <$> (js_getUserAgent (self)))
  
 foreign import javascript unsafe "($1[\"onLine\"] ? 1 : 0)"
-        js_getOnLine :: JSRef WorkerNavigator -> IO Bool
+        js_getOnLine :: WorkerNavigator -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/WorkerNavigator.onLine Mozilla WorkerNavigator.onLine documentation> 
 getOnLine :: (MonadIO m) => WorkerNavigator -> m Bool
-getOnLine self = liftIO (js_getOnLine (unWorkerNavigator self))
+getOnLine self = liftIO (js_getOnLine (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/XMLHttpRequest.hs b/src/GHCJS/DOM/JSFFI/Generated/XMLHttpRequest.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/XMLHttpRequest.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/XMLHttpRequest.hs
@@ -19,7 +19,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -33,16 +33,15 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "new window[\"XMLHttpRequest\"]()"
-        js_newXMLHttpRequest :: IO (JSRef XMLHttpRequest)
+        js_newXMLHttpRequest :: IO XMLHttpRequest
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest Mozilla XMLHttpRequest documentation> 
 newXMLHttpRequest :: (MonadIO m) => m XMLHttpRequest
-newXMLHttpRequest
-  = liftIO (js_newXMLHttpRequest >>= fromJSRefUnchecked)
+newXMLHttpRequest = liftIO (js_newXMLHttpRequest)
  
 foreign import javascript unsafe "$1[\"open\"]($2, $3, $4, $5, $6)"
         js_open ::
-        JSRef XMLHttpRequest ->
+        XMLHttpRequest ->
           JSString -> JSString -> Bool -> JSString -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest.open Mozilla XMLHttpRequest.open documentation> 
@@ -52,15 +51,13 @@
        XMLHttpRequest -> method -> url -> Bool -> user -> password -> m ()
 open self method url async user password
   = liftIO
-      (js_open (unXMLHttpRequest self) (toJSString method)
-         (toJSString url)
-         async
+      (js_open (self) (toJSString method) (toJSString url) async
          (toJSString user)
          (toJSString password))
  
 foreign import javascript unsafe "$1[\"setRequestHeader\"]($2, $3)"
         js_setRequestHeader ::
-        JSRef XMLHttpRequest -> JSString -> JSString -> IO ()
+        XMLHttpRequest -> JSString -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest.setRequestHeader Mozilla XMLHttpRequest.setRequestHeader documentation> 
 setRequestHeader ::
@@ -68,39 +65,36 @@
                    XMLHttpRequest -> header -> value -> m ()
 setRequestHeader self header value
   = liftIO
-      (js_setRequestHeader (unXMLHttpRequest self) (toJSString header)
-         (toJSString value))
+      (js_setRequestHeader (self) (toJSString header) (toJSString value))
  
 foreign import javascript unsafe "$1[\"send\"]()" js_send ::
-        JSRef XMLHttpRequest -> IO ()
+        XMLHttpRequest -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest.send Mozilla XMLHttpRequest.send documentation> 
 send :: (MonadIO m) => XMLHttpRequest -> m ()
-send self = liftIO (js_send (unXMLHttpRequest self))
+send self = liftIO (js_send (self))
  
 foreign import javascript unsafe "$1[\"abort\"]()" js_abort ::
-        JSRef XMLHttpRequest -> IO ()
+        XMLHttpRequest -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest.abort Mozilla XMLHttpRequest.abort documentation> 
 abort :: (MonadIO m) => XMLHttpRequest -> m ()
-abort self = liftIO (js_abort (unXMLHttpRequest self))
+abort self = liftIO (js_abort (self))
  
 foreign import javascript unsafe "$1[\"getAllResponseHeaders\"]()"
         js_getAllResponseHeaders ::
-        JSRef XMLHttpRequest -> IO (JSRef (Maybe JSString))
+        XMLHttpRequest -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest.getAllResponseHeaders Mozilla XMLHttpRequest.getAllResponseHeaders documentation> 
 getAllResponseHeaders ::
                       (MonadIO m, FromJSString result) =>
                         XMLHttpRequest -> m (Maybe result)
 getAllResponseHeaders self
-  = liftIO
-      (fromMaybeJSString <$>
-         (js_getAllResponseHeaders (unXMLHttpRequest self)))
+  = liftIO (fromMaybeJSString <$> (js_getAllResponseHeaders (self)))
  
 foreign import javascript unsafe "$1[\"getResponseHeader\"]($2)"
         js_getResponseHeader ::
-        JSRef XMLHttpRequest -> JSString -> IO (JSRef (Maybe JSString))
+        XMLHttpRequest -> JSString -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest.getResponseHeader Mozilla XMLHttpRequest.getResponseHeader documentation> 
 getResponseHeader ::
@@ -109,18 +103,17 @@
 getResponseHeader self header
   = liftIO
       (fromMaybeJSString <$>
-         (js_getResponseHeader (unXMLHttpRequest self) (toJSString header)))
+         (js_getResponseHeader (self) (toJSString header)))
  
 foreign import javascript unsafe "$1[\"overrideMimeType\"]($2)"
-        js_overrideMimeType :: JSRef XMLHttpRequest -> JSString -> IO ()
+        js_overrideMimeType :: XMLHttpRequest -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest.overrideMimeType Mozilla XMLHttpRequest.overrideMimeType documentation> 
 overrideMimeType ::
                  (MonadIO m, ToJSString override) =>
                    XMLHttpRequest -> override -> m ()
 overrideMimeType self override
-  = liftIO
-      (js_overrideMimeType (unXMLHttpRequest self) (toJSString override))
+  = liftIO (js_overrideMimeType (self) (toJSString override))
 pattern UNSENT = 0
 pattern OPENED = 1
 pattern HEADERS_RECEIVED = 2
@@ -160,131 +153,116 @@
 readyStateChange = unsafeEventName (toJSString "readystatechange")
  
 foreign import javascript unsafe "$1[\"timeout\"] = $2;"
-        js_setTimeout :: JSRef XMLHttpRequest -> Word -> IO ()
+        js_setTimeout :: XMLHttpRequest -> Word -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest.timeout Mozilla XMLHttpRequest.timeout documentation> 
 setTimeout :: (MonadIO m) => XMLHttpRequest -> Word -> m ()
-setTimeout self val
-  = liftIO (js_setTimeout (unXMLHttpRequest self) val)
+setTimeout self val = liftIO (js_setTimeout (self) val)
  
 foreign import javascript unsafe "$1[\"timeout\"]" js_getTimeout ::
-        JSRef XMLHttpRequest -> IO Word
+        XMLHttpRequest -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest.timeout Mozilla XMLHttpRequest.timeout documentation> 
 getTimeout :: (MonadIO m) => XMLHttpRequest -> m Word
-getTimeout self = liftIO (js_getTimeout (unXMLHttpRequest self))
+getTimeout self = liftIO (js_getTimeout (self))
  
 foreign import javascript unsafe "$1[\"readyState\"]"
-        js_getReadyState :: JSRef XMLHttpRequest -> IO Word
+        js_getReadyState :: XMLHttpRequest -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest.readyState Mozilla XMLHttpRequest.readyState documentation> 
 getReadyState :: (MonadIO m) => XMLHttpRequest -> m Word
-getReadyState self
-  = liftIO (js_getReadyState (unXMLHttpRequest self))
+getReadyState self = liftIO (js_getReadyState (self))
  
 foreign import javascript unsafe "$1[\"withCredentials\"] = $2;"
-        js_setWithCredentials :: JSRef XMLHttpRequest -> Bool -> IO ()
+        js_setWithCredentials :: XMLHttpRequest -> Bool -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest.withCredentials Mozilla XMLHttpRequest.withCredentials documentation> 
 setWithCredentials :: (MonadIO m) => XMLHttpRequest -> Bool -> m ()
 setWithCredentials self val
-  = liftIO (js_setWithCredentials (unXMLHttpRequest self) val)
+  = liftIO (js_setWithCredentials (self) val)
  
 foreign import javascript unsafe
         "($1[\"withCredentials\"] ? 1 : 0)" js_getWithCredentials ::
-        JSRef XMLHttpRequest -> IO Bool
+        XMLHttpRequest -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest.withCredentials Mozilla XMLHttpRequest.withCredentials documentation> 
 getWithCredentials :: (MonadIO m) => XMLHttpRequest -> m Bool
-getWithCredentials self
-  = liftIO (js_getWithCredentials (unXMLHttpRequest self))
+getWithCredentials self = liftIO (js_getWithCredentials (self))
  
 foreign import javascript unsafe "$1[\"upload\"]" js_getUpload ::
-        JSRef XMLHttpRequest -> IO (JSRef XMLHttpRequestUpload)
+        XMLHttpRequest -> IO (Nullable XMLHttpRequestUpload)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest.upload Mozilla XMLHttpRequest.upload documentation> 
 getUpload ::
           (MonadIO m) => XMLHttpRequest -> m (Maybe XMLHttpRequestUpload)
-getUpload self
-  = liftIO ((js_getUpload (unXMLHttpRequest self)) >>= fromJSRef)
+getUpload self = liftIO (nullableToMaybe <$> (js_getUpload (self)))
  
 foreign import javascript unsafe "$1[\"responseText\"]"
-        js_getResponseText ::
-        JSRef XMLHttpRequest -> IO (JSRef (Maybe JSString))
+        js_getResponseText :: XMLHttpRequest -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest.responseText Mozilla XMLHttpRequest.responseText documentation> 
 getResponseText ::
                 (MonadIO m, FromJSString result) =>
                   XMLHttpRequest -> m (Maybe result)
 getResponseText self
-  = liftIO
-      (fromMaybeJSString <$>
-         (js_getResponseText (unXMLHttpRequest self)))
+  = liftIO (fromMaybeJSString <$> (js_getResponseText (self)))
  
 foreign import javascript unsafe "$1[\"responseXML\"]"
-        js_getResponseXML :: JSRef XMLHttpRequest -> IO (JSRef Document)
+        js_getResponseXML :: XMLHttpRequest -> IO (Nullable Document)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest.responseXML Mozilla XMLHttpRequest.responseXML documentation> 
 getResponseXML ::
                (MonadIO m) => XMLHttpRequest -> m (Maybe Document)
 getResponseXML self
-  = liftIO
-      ((js_getResponseXML (unXMLHttpRequest self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getResponseXML (self)))
  
 foreign import javascript unsafe "$1[\"responseType\"] = $2;"
-        js_setResponseType ::
-        JSRef XMLHttpRequest -> JSRef XMLHttpRequestResponseType -> IO ()
+        js_setResponseType :: XMLHttpRequest -> JSRef -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest.responseType Mozilla XMLHttpRequest.responseType documentation> 
 setResponseType ::
                 (MonadIO m) => XMLHttpRequest -> XMLHttpRequestResponseType -> m ()
 setResponseType self val
-  = liftIO
-      (js_setResponseType (unXMLHttpRequest self) (pToJSRef val))
+  = liftIO (js_setResponseType (self) (pToJSRef val))
  
 foreign import javascript unsafe "$1[\"responseType\"]"
-        js_getResponseType ::
-        JSRef XMLHttpRequest -> IO (JSRef XMLHttpRequestResponseType)
+        js_getResponseType :: XMLHttpRequest -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest.responseType Mozilla XMLHttpRequest.responseType documentation> 
 getResponseType ::
                 (MonadIO m) => XMLHttpRequest -> m XMLHttpRequestResponseType
 getResponseType self
-  = liftIO
-      ((js_getResponseType (unXMLHttpRequest self)) >>=
-         fromJSRefUnchecked)
+  = liftIO ((js_getResponseType (self)) >>= fromJSRefUnchecked)
  
 foreign import javascript unsafe "$1[\"response\"]" js_getResponse
-        :: JSRef XMLHttpRequest -> IO (JSRef GObject)
+        :: XMLHttpRequest -> IO (Nullable GObject)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest.response Mozilla XMLHttpRequest.response documentation> 
 getResponse :: (MonadIO m) => XMLHttpRequest -> m (Maybe GObject)
 getResponse self
-  = liftIO ((js_getResponse (unXMLHttpRequest self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getResponse (self)))
  
 foreign import javascript unsafe "$1[\"status\"]" js_getStatus ::
-        JSRef XMLHttpRequest -> IO Word
+        XMLHttpRequest -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest.status Mozilla XMLHttpRequest.status documentation> 
 getStatus :: (MonadIO m) => XMLHttpRequest -> m Word
-getStatus self = liftIO (js_getStatus (unXMLHttpRequest self))
+getStatus self = liftIO (js_getStatus (self))
  
 foreign import javascript unsafe "$1[\"statusText\"]"
-        js_getStatusText :: JSRef XMLHttpRequest -> IO JSString
+        js_getStatusText :: XMLHttpRequest -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest.statusText Mozilla XMLHttpRequest.statusText documentation> 
 getStatusText ::
               (MonadIO m, FromJSString result) => XMLHttpRequest -> m result
 getStatusText self
-  = liftIO
-      (fromJSString <$> (js_getStatusText (unXMLHttpRequest self)))
+  = liftIO (fromJSString <$> (js_getStatusText (self)))
  
 foreign import javascript unsafe "$1[\"responseURL\"]"
-        js_getResponseURL :: JSRef XMLHttpRequest -> IO JSString
+        js_getResponseURL :: XMLHttpRequest -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest.responseURL Mozilla XMLHttpRequest.responseURL documentation> 
 getResponseURL ::
                (MonadIO m, FromJSString result) => XMLHttpRequest -> m result
 getResponseURL self
-  = liftIO
-      (fromJSString <$> (js_getResponseURL (unXMLHttpRequest self)))
+  = liftIO (fromJSString <$> (js_getResponseURL (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/XMLHttpRequestProgressEvent.hs b/src/GHCJS/DOM/JSFFI/Generated/XMLHttpRequestProgressEvent.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/XMLHttpRequestProgressEvent.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/XMLHttpRequestProgressEvent.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,21 +20,17 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"position\"]" js_getPosition
-        :: JSRef XMLHttpRequestProgressEvent -> IO Double
+        :: XMLHttpRequestProgressEvent -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequestProgressEvent.position Mozilla XMLHttpRequestProgressEvent.position documentation> 
 getPosition ::
             (MonadIO m) => XMLHttpRequestProgressEvent -> m Word64
-getPosition self
-  = liftIO
-      (round <$> (js_getPosition (unXMLHttpRequestProgressEvent self)))
+getPosition self = liftIO (round <$> (js_getPosition (self)))
  
 foreign import javascript unsafe "$1[\"totalSize\"]"
-        js_getTotalSize :: JSRef XMLHttpRequestProgressEvent -> IO Double
+        js_getTotalSize :: XMLHttpRequestProgressEvent -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequestProgressEvent.totalSize Mozilla XMLHttpRequestProgressEvent.totalSize documentation> 
 getTotalSize ::
              (MonadIO m) => XMLHttpRequestProgressEvent -> m Word64
-getTotalSize self
-  = liftIO
-      (round <$> (js_getTotalSize (unXMLHttpRequestProgressEvent self)))
+getTotalSize self = liftIO (round <$> (js_getTotalSize (self)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/XMLHttpRequestUpload.hs b/src/GHCJS/DOM/JSFFI/Generated/XMLHttpRequestUpload.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/XMLHttpRequestUpload.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/XMLHttpRequestUpload.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/XMLSerializer.hs b/src/GHCJS/DOM/JSFFI/Generated/XMLSerializer.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/XMLSerializer.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/XMLSerializer.hs
@@ -6,7 +6,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,16 +20,15 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "new window[\"XMLSerializer\"]()"
-        js_newXMLSerializer :: IO (JSRef XMLSerializer)
+        js_newXMLSerializer :: IO XMLSerializer
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/XMLSerializer Mozilla XMLSerializer documentation> 
 newXMLSerializer :: (MonadIO m) => m XMLSerializer
-newXMLSerializer
-  = liftIO (js_newXMLSerializer >>= fromJSRefUnchecked)
+newXMLSerializer = liftIO (js_newXMLSerializer)
  
 foreign import javascript unsafe "$1[\"serializeToString\"]($2)"
         js_serializeToString ::
-        JSRef XMLSerializer -> JSRef Node -> IO JSString
+        XMLSerializer -> Nullable Node -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/XMLSerializer.serializeToString Mozilla XMLSerializer.serializeToString documentation> 
 serializeToString ::
@@ -38,5 +37,4 @@
 serializeToString self node
   = liftIO
       (fromJSString <$>
-         (js_serializeToString (unXMLSerializer self)
-            (maybe jsNull (unNode . toNode) node)))
+         (js_serializeToString (self) (maybeToNullable (fmap toNode node))))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/XPathEvaluator.hs b/src/GHCJS/DOM/JSFFI/Generated/XPathEvaluator.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/XPathEvaluator.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/XPathEvaluator.hs
@@ -7,7 +7,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -21,17 +21,17 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "new window[\"XPathEvaluator\"]()"
-        js_newXPathEvaluator :: IO (JSRef XPathEvaluator)
+        js_newXPathEvaluator :: IO XPathEvaluator
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/XPathEvaluator Mozilla XPathEvaluator documentation> 
 newXPathEvaluator :: (MonadIO m) => m XPathEvaluator
-newXPathEvaluator
-  = liftIO (js_newXPathEvaluator >>= fromJSRefUnchecked)
+newXPathEvaluator = liftIO (js_newXPathEvaluator)
  
 foreign import javascript unsafe "$1[\"createExpression\"]($2, $3)"
         js_createExpression ::
-        JSRef XPathEvaluator ->
-          JSString -> JSRef XPathNSResolver -> IO (JSRef XPathExpression)
+        XPathEvaluator ->
+          JSString ->
+            Nullable XPathNSResolver -> IO (Nullable XPathExpression)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/XPathEvaluator.createExpression Mozilla XPathEvaluator.createExpression documentation> 
 createExpression ::
@@ -40,14 +40,13 @@
                      expression -> Maybe XPathNSResolver -> m (Maybe XPathExpression)
 createExpression self expression resolver
   = liftIO
-      ((js_createExpression (unXPathEvaluator self)
-          (toJSString expression)
-          (maybe jsNull pToJSRef resolver))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createExpression (self) (toJSString expression)
+            (maybeToNullable resolver)))
  
 foreign import javascript unsafe "$1[\"createNSResolver\"]($2)"
         js_createNSResolver ::
-        JSRef XPathEvaluator -> JSRef Node -> IO (JSRef XPathNSResolver)
+        XPathEvaluator -> Nullable Node -> IO (Nullable XPathNSResolver)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/XPathEvaluator.createNSResolver Mozilla XPathEvaluator.createNSResolver documentation> 
 createNSResolver ::
@@ -55,17 +54,17 @@
                    XPathEvaluator -> Maybe nodeResolver -> m (Maybe XPathNSResolver)
 createNSResolver self nodeResolver
   = liftIO
-      ((js_createNSResolver (unXPathEvaluator self)
-          (maybe jsNull (unNode . toNode) nodeResolver))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_createNSResolver (self)
+            (maybeToNullable (fmap toNode nodeResolver))))
  
 foreign import javascript unsafe
         "$1[\"evaluate\"]($2, $3, $4, $5,\n$6)" js_evaluate ::
-        JSRef XPathEvaluator ->
+        XPathEvaluator ->
           JSString ->
-            JSRef Node ->
-              JSRef XPathNSResolver ->
-                Word -> JSRef XPathResult -> IO (JSRef XPathResult)
+            Nullable Node ->
+              Nullable XPathNSResolver ->
+                Word -> Nullable XPathResult -> IO (Nullable XPathResult)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/XPathEvaluator.evaluate Mozilla XPathEvaluator.evaluate documentation> 
 evaluate ::
@@ -77,9 +76,9 @@
                    Word -> Maybe XPathResult -> m (Maybe XPathResult)
 evaluate self expression contextNode resolver type' inResult
   = liftIO
-      ((js_evaluate (unXPathEvaluator self) (toJSString expression)
-          (maybe jsNull (unNode . toNode) contextNode)
-          (maybe jsNull pToJSRef resolver)
-          type'
-          (maybe jsNull pToJSRef inResult))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_evaluate (self) (toJSString expression)
+            (maybeToNullable (fmap toNode contextNode))
+            (maybeToNullable resolver)
+            type'
+            (maybeToNullable inResult)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/XPathExpression.hs b/src/GHCJS/DOM/JSFFI/Generated/XPathExpression.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/XPathExpression.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/XPathExpression.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,8 +20,9 @@
  
 foreign import javascript unsafe "$1[\"evaluate\"]($2, $3, $4)"
         js_evaluate ::
-        JSRef XPathExpression ->
-          JSRef Node -> Word -> JSRef XPathResult -> IO (JSRef XPathResult)
+        XPathExpression ->
+          Nullable Node ->
+            Word -> Nullable XPathResult -> IO (Nullable XPathResult)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/XPathExpression.evaluate Mozilla XPathExpression.evaluate documentation> 
 evaluate ::
@@ -31,8 +32,7 @@
                Word -> Maybe XPathResult -> m (Maybe XPathResult)
 evaluate self contextNode type' inResult
   = liftIO
-      ((js_evaluate (unXPathExpression self)
-          (maybe jsNull (unNode . toNode) contextNode)
-          type'
-          (maybe jsNull pToJSRef inResult))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_evaluate (self) (maybeToNullable (fmap toNode contextNode))
+            type'
+            (maybeToNullable inResult)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/XPathNSResolver.hs b/src/GHCJS/DOM/JSFFI/Generated/XPathNSResolver.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/XPathNSResolver.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/XPathNSResolver.hs
@@ -5,7 +5,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -20,7 +20,7 @@
  
 foreign import javascript unsafe "$1[\"lookupNamespaceURI\"]($2)"
         js_lookupNamespaceURI ::
-        JSRef XPathNSResolver -> JSString -> IO (JSRef (Maybe JSString))
+        XPathNSResolver -> JSString -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/XPathNSResolver.lookupNamespaceURI Mozilla XPathNSResolver.lookupNamespaceURI documentation> 
 lookupNamespaceURI ::
@@ -29,5 +29,4 @@
 lookupNamespaceURI self prefix
   = liftIO
       (fromMaybeJSString <$>
-         (js_lookupNamespaceURI (unXPathNSResolver self)
-            (toJSString prefix)))
+         (js_lookupNamespaceURI (self) (toJSString prefix)))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/XPathResult.hs b/src/GHCJS/DOM/JSFFI/Generated/XPathResult.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/XPathResult.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/XPathResult.hs
@@ -16,7 +16,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -30,22 +30,21 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "$1[\"iterateNext\"]()"
-        js_iterateNext :: JSRef XPathResult -> IO (JSRef Node)
+        js_iterateNext :: XPathResult -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/XPathResult.iterateNext Mozilla XPathResult.iterateNext documentation> 
 iterateNext :: (MonadIO m) => XPathResult -> m (Maybe Node)
 iterateNext self
-  = liftIO ((js_iterateNext (unXPathResult self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_iterateNext (self)))
  
 foreign import javascript unsafe "$1[\"snapshotItem\"]($2)"
-        js_snapshotItem :: JSRef XPathResult -> Word -> IO (JSRef Node)
+        js_snapshotItem :: XPathResult -> Word -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/XPathResult.snapshotItem Mozilla XPathResult.snapshotItem documentation> 
 snapshotItem ::
              (MonadIO m) => XPathResult -> Word -> m (Maybe Node)
 snapshotItem self index
-  = liftIO
-      ((js_snapshotItem (unXPathResult self) index) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_snapshotItem (self) index))
 pattern ANY_TYPE = 0
 pattern NUMBER_TYPE = 1
 pattern STRING_TYPE = 2
@@ -58,60 +57,55 @@
 pattern FIRST_ORDERED_NODE_TYPE = 9
  
 foreign import javascript unsafe "$1[\"resultType\"]"
-        js_getResultType :: JSRef XPathResult -> IO Word
+        js_getResultType :: XPathResult -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/XPathResult.resultType Mozilla XPathResult.resultType documentation> 
 getResultType :: (MonadIO m) => XPathResult -> m Word
-getResultType self = liftIO (js_getResultType (unXPathResult self))
+getResultType self = liftIO (js_getResultType (self))
  
 foreign import javascript unsafe "$1[\"numberValue\"]"
-        js_getNumberValue :: JSRef XPathResult -> IO Double
+        js_getNumberValue :: XPathResult -> IO Double
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/XPathResult.numberValue Mozilla XPathResult.numberValue documentation> 
 getNumberValue :: (MonadIO m) => XPathResult -> m Double
-getNumberValue self
-  = liftIO (js_getNumberValue (unXPathResult self))
+getNumberValue self = liftIO (js_getNumberValue (self))
  
 foreign import javascript unsafe "$1[\"stringValue\"]"
-        js_getStringValue :: JSRef XPathResult -> IO JSString
+        js_getStringValue :: XPathResult -> IO JSString
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/XPathResult.stringValue Mozilla XPathResult.stringValue documentation> 
 getStringValue ::
                (MonadIO m, FromJSString result) => XPathResult -> m result
 getStringValue self
-  = liftIO
-      (fromJSString <$> (js_getStringValue (unXPathResult self)))
+  = liftIO (fromJSString <$> (js_getStringValue (self)))
  
 foreign import javascript unsafe "($1[\"booleanValue\"] ? 1 : 0)"
-        js_getBooleanValue :: JSRef XPathResult -> IO Bool
+        js_getBooleanValue :: XPathResult -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/XPathResult.booleanValue Mozilla XPathResult.booleanValue documentation> 
 getBooleanValue :: (MonadIO m) => XPathResult -> m Bool
-getBooleanValue self
-  = liftIO (js_getBooleanValue (unXPathResult self))
+getBooleanValue self = liftIO (js_getBooleanValue (self))
  
 foreign import javascript unsafe "$1[\"singleNodeValue\"]"
-        js_getSingleNodeValue :: JSRef XPathResult -> IO (JSRef Node)
+        js_getSingleNodeValue :: XPathResult -> IO (Nullable Node)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/XPathResult.singleNodeValue Mozilla XPathResult.singleNodeValue documentation> 
 getSingleNodeValue :: (MonadIO m) => XPathResult -> m (Maybe Node)
 getSingleNodeValue self
-  = liftIO
-      ((js_getSingleNodeValue (unXPathResult self)) >>= fromJSRef)
+  = liftIO (nullableToMaybe <$> (js_getSingleNodeValue (self)))
  
 foreign import javascript unsafe
         "($1[\"invalidIteratorState\"] ? 1 : 0)" js_getInvalidIteratorState
-        :: JSRef XPathResult -> IO Bool
+        :: XPathResult -> IO Bool
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/XPathResult.invalidIteratorState Mozilla XPathResult.invalidIteratorState documentation> 
 getInvalidIteratorState :: (MonadIO m) => XPathResult -> m Bool
 getInvalidIteratorState self
-  = liftIO (js_getInvalidIteratorState (unXPathResult self))
+  = liftIO (js_getInvalidIteratorState (self))
  
 foreign import javascript unsafe "$1[\"snapshotLength\"]"
-        js_getSnapshotLength :: JSRef XPathResult -> IO Word
+        js_getSnapshotLength :: XPathResult -> IO Word
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/XPathResult.snapshotLength Mozilla XPathResult.snapshotLength documentation> 
 getSnapshotLength :: (MonadIO m) => XPathResult -> m Word
-getSnapshotLength self
-  = liftIO (js_getSnapshotLength (unXPathResult self))
+getSnapshotLength self = liftIO (js_getSnapshotLength (self))
diff --git a/src/GHCJS/DOM/JSFFI/Generated/XSLTProcessor.hs b/src/GHCJS/DOM/JSFFI/Generated/XSLTProcessor.hs
--- a/src/GHCJS/DOM/JSFFI/Generated/XSLTProcessor.hs
+++ b/src/GHCJS/DOM/JSFFI/Generated/XSLTProcessor.hs
@@ -9,7 +9,7 @@
        where
 import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, fmap, Show, Read, Eq, Ord)
 import Data.Typeable (Typeable)
-import GHCJS.Types (JSRef(..), JSString, castRef)
+import GHCJS.Types (JSRef(..), JSString)
 import GHCJS.Foreign (jsNull)
 import GHCJS.Foreign.Callback (syncCallback, asyncCallback, syncCallback1, asyncCallback1, syncCallback2, asyncCallback2, OnBlocked(..))
 import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
@@ -23,15 +23,14 @@
 import GHCJS.DOM.Enums
  
 foreign import javascript unsafe "new window[\"XSLTProcessor\"]()"
-        js_newXSLTProcessor :: IO (JSRef XSLTProcessor)
+        js_newXSLTProcessor :: IO XSLTProcessor
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/XSLTProcessor Mozilla XSLTProcessor documentation> 
 newXSLTProcessor :: (MonadIO m) => m XSLTProcessor
-newXSLTProcessor
-  = liftIO (js_newXSLTProcessor >>= fromJSRefUnchecked)
+newXSLTProcessor = liftIO (js_newXSLTProcessor)
  
 foreign import javascript unsafe "$1[\"importStylesheet\"]($2)"
-        js_importStylesheet :: JSRef XSLTProcessor -> JSRef Node -> IO ()
+        js_importStylesheet :: XSLTProcessor -> Nullable Node -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/XSLTProcessor.importStylesheet Mozilla XSLTProcessor.importStylesheet documentation> 
 importStylesheet ::
@@ -39,13 +38,14 @@
                    XSLTProcessor -> Maybe stylesheet -> m ()
 importStylesheet self stylesheet
   = liftIO
-      (js_importStylesheet (unXSLTProcessor self)
-         (maybe jsNull (unNode . toNode) stylesheet))
+      (js_importStylesheet (self)
+         (maybeToNullable (fmap toNode stylesheet)))
  
 foreign import javascript unsafe
         "$1[\"transformToFragment\"]($2,\n$3)" js_transformToFragment ::
-        JSRef XSLTProcessor ->
-          JSRef Node -> JSRef Document -> IO (JSRef DocumentFragment)
+        XSLTProcessor ->
+          Nullable Node ->
+            Nullable Document -> IO (Nullable DocumentFragment)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/XSLTProcessor.transformToFragment Mozilla XSLTProcessor.transformToFragment documentation> 
 transformToFragment ::
@@ -54,14 +54,14 @@
                         Maybe source -> Maybe docVal -> m (Maybe DocumentFragment)
 transformToFragment self source docVal
   = liftIO
-      ((js_transformToFragment (unXSLTProcessor self)
-          (maybe jsNull (unNode . toNode) source)
-          (maybe jsNull (unDocument . toDocument) docVal))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_transformToFragment (self)
+            (maybeToNullable (fmap toNode source))
+            (maybeToNullable (fmap toDocument docVal))))
  
 foreign import javascript unsafe "$1[\"transformToDocument\"]($2)"
         js_transformToDocument ::
-        JSRef XSLTProcessor -> JSRef Node -> IO (JSRef Document)
+        XSLTProcessor -> Nullable Node -> IO (Nullable Document)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/XSLTProcessor.transformToDocument Mozilla XSLTProcessor.transformToDocument documentation> 
 transformToDocument ::
@@ -69,13 +69,13 @@
                       XSLTProcessor -> Maybe source -> m (Maybe Document)
 transformToDocument self source
   = liftIO
-      ((js_transformToDocument (unXSLTProcessor self)
-          (maybe jsNull (unNode . toNode) source))
-         >>= fromJSRef)
+      (nullableToMaybe <$>
+         (js_transformToDocument (self)
+            (maybeToNullable (fmap toNode source))))
  
 foreign import javascript unsafe "$1[\"setParameter\"]($2, $3, $4)"
         js_setParameter ::
-        JSRef XSLTProcessor -> JSString -> JSString -> JSString -> IO ()
+        XSLTProcessor -> JSString -> JSString -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/XSLTProcessor.setParameter Mozilla XSLTProcessor.setParameter documentation> 
 setParameter ::
@@ -84,14 +84,13 @@
                XSLTProcessor -> namespaceURI -> localName -> value -> m ()
 setParameter self namespaceURI localName value
   = liftIO
-      (js_setParameter (unXSLTProcessor self) (toJSString namespaceURI)
+      (js_setParameter (self) (toJSString namespaceURI)
          (toJSString localName)
          (toJSString value))
  
 foreign import javascript unsafe "$1[\"getParameter\"]($2, $3)"
         js_getParameter ::
-        JSRef XSLTProcessor ->
-          JSString -> JSString -> IO (JSRef (Maybe JSString))
+        XSLTProcessor -> JSString -> JSString -> IO (Nullable JSString)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/XSLTProcessor.getParameter Mozilla XSLTProcessor.getParameter documentation> 
 getParameter ::
@@ -101,12 +100,12 @@
 getParameter self namespaceURI localName
   = liftIO
       (fromMaybeJSString <$>
-         (js_getParameter (unXSLTProcessor self) (toJSString namespaceURI)
+         (js_getParameter (self) (toJSString namespaceURI)
             (toJSString localName)))
  
 foreign import javascript unsafe "$1[\"removeParameter\"]($2, $3)"
         js_removeParameter ::
-        JSRef XSLTProcessor -> JSString -> JSString -> IO ()
+        XSLTProcessor -> JSString -> JSString -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/XSLTProcessor.removeParameter Mozilla XSLTProcessor.removeParameter documentation> 
 removeParameter ::
@@ -114,21 +113,19 @@
                   XSLTProcessor -> namespaceURI -> localName -> m ()
 removeParameter self namespaceURI localName
   = liftIO
-      (js_removeParameter (unXSLTProcessor self)
-         (toJSString namespaceURI)
+      (js_removeParameter (self) (toJSString namespaceURI)
          (toJSString localName))
  
 foreign import javascript unsafe "$1[\"clearParameters\"]()"
-        js_clearParameters :: JSRef XSLTProcessor -> IO ()
+        js_clearParameters :: XSLTProcessor -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/XSLTProcessor.clearParameters Mozilla XSLTProcessor.clearParameters documentation> 
 clearParameters :: (MonadIO m) => XSLTProcessor -> m ()
-clearParameters self
-  = liftIO (js_clearParameters (unXSLTProcessor self))
+clearParameters self = liftIO (js_clearParameters (self))
  
 foreign import javascript unsafe "$1[\"reset\"]()" js_reset ::
-        JSRef XSLTProcessor -> IO ()
+        XSLTProcessor -> IO ()
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/XSLTProcessor.reset Mozilla XSLTProcessor.reset documentation> 
 reset :: (MonadIO m) => XSLTProcessor -> m ()
-reset self = liftIO (js_reset (unXSLTProcessor self))
+reset self = liftIO (js_reset (self))
diff --git a/src/GHCJS/DOM/JSFFI/Geolocation.hs b/src/GHCJS/DOM/JSFFI/Geolocation.hs
--- a/src/GHCJS/DOM/JSFFI/Geolocation.hs
+++ b/src/GHCJS/DOM/JSFFI/Geolocation.hs
@@ -13,8 +13,6 @@
 import Control.Monad.IO.Class (MonadIO(..))
 
 import GHCJS.Prim (JSRef(..))
-import GHCJS.Foreign (jsNull)
-import GHCJS.Marshal.Pure (pFromJSRef)
 import GHCJS.DOM.Types
 
 import GHCJS.DOM.JSFFI.PositionError (throwPositionException)
@@ -22,12 +20,12 @@
 
 foreign import javascript interruptible
         "$1[\"getCurrentPosition\"](function(pos) { $c(true, pos); }, function(e) { $c(false, e); }, $2);" js_getCurrentPosition ::
-        JSRef Geolocation -> JSRef PositionOptions -> State# RealWorld -> (# State# RealWorld, Bool, ByteArray# #)
+        Geolocation -> Nullable PositionOptions -> State# RealWorld -> (# State# RealWorld, Bool, ByteArray# #)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Geolocation.getCurrentPosition Mozilla Geolocation.getCurrentPosition documentation>
 getCurrentPosition' :: MonadIO m => Geolocation -> Maybe PositionOptions -> m (Either PositionError Geoposition)
 getCurrentPosition' self options = liftIO . IO $ \s# ->
-      case js_getCurrentPosition (unGeolocation self) (maybe jsNull unPositionOptions options) s# of
+      case js_getCurrentPosition self (maybeToNullable options) s# of
           (# s2#, False, error #) -> (# s2#, Left  (PositionError (JSRef error)) #)
           (# s2#, True,  pos   #) -> (# s2#, Right (Geoposition   (JSRef pos  )) #)
 
diff --git a/src/GHCJS/DOM/JSFFI/MediaStreamTrack.hs b/src/GHCJS/DOM/JSFFI/MediaStreamTrack.hs
--- a/src/GHCJS/DOM/JSFFI/MediaStreamTrack.hs
+++ b/src/GHCJS/DOM/JSFFI/MediaStreamTrack.hs
@@ -14,11 +14,11 @@
 import GHCJS.DOM.JSFFI.Generated.MediaStreamTrack as Generated hiding (js_getSources, getSources)
 
 foreign import javascript interruptible "$1[\"getSources\"]($c);"
-        js_getSources :: JSRef MediaStreamTrack -> IO (JSRef ([Maybe SourceInfo]))
+        js_getSources :: MediaStreamTrack -> IO JSRef
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack.getSources Mozilla MediaStreamTrack.getSources documentation>
 getSources :: (MonadIO m, IsMediaStreamTrack self) => self -> m [Maybe SourceInfo]
 getSources self = liftIO $
-      js_getSources (unMediaStreamTrack (toMediaStreamTrack self)) >>= fromJSRefUnchecked
+      js_getSources (toMediaStreamTrack self) >>= fromJSRefUnchecked
 
 
diff --git a/src/GHCJS/DOM/JSFFI/Navigator.hs b/src/GHCJS/DOM/JSFFI/Navigator.hs
--- a/src/GHCJS/DOM/JSFFI/Navigator.hs
+++ b/src/GHCJS/DOM/JSFFI/Navigator.hs
@@ -12,9 +12,6 @@
 import Control.Monad.IO.Class (MonadIO(..))
 
 import GHCJS.Prim (JSRef(..))
-import GHCJS.Foreign (jsNull)
-import GHCJS.Marshal (fromJSRef, fromJSRefUnchecked)
-import GHCJS.Foreign.Callback (releaseCallback)
 import GHCJS.DOM.Types
 
 import GHCJS.DOM.JSFFI.NavigatorUserMediaError (throwUserMediaException)
@@ -22,12 +19,12 @@
 
 foreign import javascript interruptible
         "$1[\"webkitGetUserMedia\"]($2, function(ms) { $c(true, ms); }, function(e) { $c(false, e); });" js_getUserMedia ::
-        JSRef Navigator -> JSRef Dictionary -> State# RealWorld -> (# State# RealWorld, Bool, ByteArray# #)
+        Navigator -> Nullable Dictionary -> State# RealWorld -> (# State# RealWorld, Bool, ByteArray# #)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Navigator.webkitGetUserMedia Mozilla Navigator.webkitGetUserMedia documentation>
 getUserMedia' :: MonadIO m => Navigator -> Maybe Dictionary -> m (Either NavigatorUserMediaError MediaStream)
 getUserMedia' self options = liftIO . IO $ \s# ->
-      case js_getUserMedia (unNavigator self) (maybe jsNull unDictionary options) s# of
+      case js_getUserMedia self (maybeToNullable options) s# of
           (# s2#, False, error #) -> (# s2#, Left  (NavigatorUserMediaError (JSRef error)) #)
           (# s2#, True,  ms    #) -> (# s2#, Right (MediaStream             (JSRef ms  )) #)
 
diff --git a/src/GHCJS/DOM/JSFFI/RTCPeerConnection.hs b/src/GHCJS/DOM/JSFFI/RTCPeerConnection.hs
--- a/src/GHCJS/DOM/JSFFI/RTCPeerConnection.hs
+++ b/src/GHCJS/DOM/JSFFI/RTCPeerConnection.hs
@@ -22,9 +22,6 @@
 import Control.Monad.IO.Class (MonadIO(..))
 
 import GHCJS.Prim (JSRef(..))
-import GHCJS.Foreign (jsNull)
-import GHCJS.Marshal (fromJSRef)
-import GHCJS.Marshal.Pure (pToJSRef, pFromJSRef)
 import GHCJS.DOM.Types
 
 import GHCJS.DOM.JSFFI.DOMError (throwDOMErrorException)
@@ -32,12 +29,12 @@
 
 foreign import javascript interruptible
     "$1[\"createOffer\"](function(d) { $c(true, d); }, function(e) { $c(false, e); }, $2);" js_createOffer ::
-    JSRef RTCPeerConnection -> JSRef Dictionary -> State# RealWorld -> (# State# RealWorld, Bool, ByteArray# #)
+    RTCPeerConnection -> Nullable Dictionary -> State# RealWorld -> (# State# RealWorld, Bool, ByteArray# #)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection#createOffer Mozilla webkitRTCPeerConnection.createOffer documentation>
 createOffer' :: MonadIO m => RTCPeerConnection -> Maybe Dictionary -> m (Either DOMError RTCSessionDescription)
 createOffer' self offerOptions = liftIO . IO $ \s# ->
-    case js_createOffer (unRTCPeerConnection self) (maybe jsNull unDictionary offerOptions) s# of
+    case js_createOffer self (maybeToNullable offerOptions) s# of
         (# s2#, False, error #) -> (# s2#, Left  (DOMError              (JSRef error)) #)
         (# s2#, True,  d     #) -> (# s2#, Right (RTCSessionDescription (JSRef d    )) #)
 
@@ -46,12 +43,12 @@
 
 foreign import javascript interruptible
     "$1[\"createAnswer\"](function(d) { $c(true, d); }, function(e) { $c(false, e); }, $2);" js_createAnswer ::
-    JSRef RTCPeerConnection -> JSRef Dictionary -> JSRef Dictionary -> State# RealWorld -> (# State# RealWorld, Bool, ByteArray# #)
+    RTCPeerConnection -> Dictionary -> Dictionary -> State# RealWorld -> (# State# RealWorld, Bool, ByteArray# #)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection#createAnswer Mozilla webkitRTCPeerConnection.createAnswer documentation>
 createAnswer' :: MonadIO m => RTCPeerConnection -> Maybe Dictionary -> m (Either DOMError RTCSessionDescription)
 createAnswer' self answerOptions = liftIO . IO $ \s# ->
-    case js_createOffer (unRTCPeerConnection self) (maybe jsNull unDictionary answerOptions) s# of
+    case js_createOffer self (maybeToNullable answerOptions) s# of
         (# s2#, False, error #) -> (# s2#, Left  (DOMError              (JSRef error)) #)
         (# s2#, True,  d     #) -> (# s2#, Right (RTCSessionDescription (JSRef d    )) #)
 
@@ -60,48 +57,48 @@
 
 foreign import javascript interruptible
     "$1[\"setLocalDescription\"]($2, function() { $c(null); }, function(e) { $c(e); });" js_setLocalDescription ::
-    JSRef RTCPeerConnection -> JSRef RTCSessionDescription -> IO (JSRef DOMError)
+    RTCPeerConnection -> RTCSessionDescription -> IO (Nullable DOMError)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection#setLocalDescription Mozilla webkitRTCPeerConnection.setLocalDescription documentation>
 setLocalDescription' :: MonadIO m => RTCPeerConnection -> RTCSessionDescription -> m (Maybe DOMError)
-setLocalDescription' self description = liftIO $
-    js_setLocalDescription (unRTCPeerConnection self) (pToJSRef description) >>= fromJSRef
+setLocalDescription' self description = liftIO $ nullableToMaybe <$>
+    js_setLocalDescription self description
 
 setLocalDescription :: MonadIO m => RTCPeerConnection -> RTCSessionDescription -> m ()
 setLocalDescription self description = setLocalDescription' self description >>= maybe (return ()) throwDOMErrorException
 
 foreign import javascript interruptible
     "$1[\"setRemoteDescription\"]($2, function() { $c(null); }, function(e) { $c(e); });" js_setRemoteDescription ::
-    JSRef RTCPeerConnection -> JSRef RTCSessionDescription -> IO (JSRef DOMError)
+    RTCPeerConnection -> RTCSessionDescription -> IO (Nullable DOMError)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection#setRemoteDescription Mozilla webkitRTCPeerConnection.setRemoteDescription documentation>
 setRemoteDescription' :: MonadIO m => RTCPeerConnection -> RTCSessionDescription -> m (Maybe DOMError)
-setRemoteDescription' self description = liftIO $
-    js_setRemoteDescription (unRTCPeerConnection self) (pToJSRef description) >>= fromJSRef
+setRemoteDescription' self description = liftIO $ nullableToMaybe <$>
+    js_setRemoteDescription self description
 
 setRemoteDescription :: MonadIO m => RTCPeerConnection -> RTCSessionDescription -> m ()
 setRemoteDescription self description = setRemoteDescription' self description >>= maybe (return ())throwDOMErrorException
 
 foreign import javascript interruptible
     "$1[\"addIceCandidate\"]($2, function() { $c(null); }, function(e) { $c(e); });" js_addIceCandidate ::
-    JSRef RTCPeerConnection -> JSRef RTCIceCandidate -> IO (JSRef DOMError)
+    RTCPeerConnection -> RTCIceCandidate -> IO (Nullable DOMError)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection#addIceCandidate Mozilla webkitRTCPeerConnection.addIceCandidate documentation>
 addIceCandidate' :: MonadIO m => RTCPeerConnection -> RTCIceCandidate -> m (Maybe DOMError)
-addIceCandidate' self candidate = liftIO $
-    js_addIceCandidate (unRTCPeerConnection self) (pToJSRef candidate) >>= fromJSRef
+addIceCandidate' self candidate = liftIO $ nullableToMaybe <$>
+    js_addIceCandidate self candidate
 
 addIceCandidate :: MonadIO m => RTCPeerConnection -> RTCIceCandidate -> m ()
 addIceCandidate self candidate = addIceCandidate' self candidate >>= maybe (return ()) throwDOMErrorException
 
 foreign import javascript interruptible
     "$1[\"getStats\"]($2, function(s) { $c(true, s); }, function(e) { $c(false, e); });" js_getStats ::
-    JSRef RTCPeerConnection -> JSRef MediaStreamTrack -> State# RealWorld -> (# State# RealWorld, Bool, ByteArray# #)
+    RTCPeerConnection -> Nullable MediaStreamTrack -> State# RealWorld -> (# State# RealWorld, Bool, ByteArray# #)
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection#getStats Mozilla webkitRTCPeerConnection.getStats documentation>
 getStats' :: (MonadIO m, IsMediaStreamTrack selector) => RTCPeerConnection -> Maybe selector -> m (Either DOMError RTCStatsReport)
 getStats' self selector = liftIO . IO $ \s# ->
-    case js_getStats (unRTCPeerConnection self) (maybe jsNull (unMediaStreamTrack . toMediaStreamTrack) selector) s# of
+    case js_getStats self (maybeToNullable $ fmap toMediaStreamTrack selector) s# of
         (# s2#, False, error #) -> (# s2#, Left  (DOMError       (JSRef error)) #)
         (# s2#, True,  stats #) -> (# s2#, Right (RTCStatsReport (JSRef stats)) #)
 
diff --git a/src/GHCJS/DOM/JSFFI/SQLTransaction.hs b/src/GHCJS/DOM/JSFFI/SQLTransaction.hs
--- a/src/GHCJS/DOM/JSFFI/SQLTransaction.hs
+++ b/src/GHCJS/DOM/JSFFI/SQLTransaction.hs
@@ -16,8 +16,6 @@
 
 import GHCJS.Prim (JSRef(..))
 import GHCJS.Types (JSString)
-import GHCJS.Foreign (jsNull)
-import GHCJS.Marshal (fromJSRefUnchecked)
 import GHCJS.DOM.Types
 
 import GHCJS.DOM.JSFFI.SQLError (throwSQLException)
@@ -25,12 +23,12 @@
 
 foreign import javascript interruptible
         "$1[\"executeSql\"]($2, $3, function(tx, rs) { $c(true, rs); }, function(tx, e) { $c(false, e); });"
-        js_executeSql :: JSRef SQLTransaction -> JSString -> JSRef ObjectArray -> State# RealWorld -> (# State# RealWorld, Bool, ByteArray# #)
+        js_executeSql :: SQLTransaction -> JSString -> Nullable ObjectArray -> State# RealWorld -> (# State# RealWorld, Bool, ByteArray# #)
 
 executeSql' :: (MonadIO m, ToJSString sqlStatement, IsObjectArray arguments) =>
               SQLTransaction -> sqlStatement -> Maybe arguments -> m (Either SQLError SQLResultSet)
 executeSql' self sqlStatement arguments = liftIO $ IO $ \s# ->
-      case js_executeSql (unSQLTransaction self) (toJSString sqlStatement) (maybe jsNull (unObjectArray . toObjectArray) arguments) s# of
+      case js_executeSql self (toJSString sqlStatement) (maybeToNullable . fmap toObjectArray $ arguments) s# of
           (# s2#, False, error #) -> (# s2#, Left  (SQLError     (JSRef error)) #)
           (# s2#, True,  rs    #) -> (# s2#, Right (SQLResultSet (JSRef rs   )) #)
 
diff --git a/src/GHCJS/DOM/JSFFI/Window.hs b/src/GHCJS/DOM/JSFFI/Window.hs
--- a/src/GHCJS/DOM/JSFFI/Window.hs
+++ b/src/GHCJS/DOM/JSFFI/Window.hs
@@ -7,23 +7,22 @@
 
 import Control.Monad.IO.Class (MonadIO(..))
 
-import GHCJS.Types (JSRef, JSString)
-import GHCJS.Marshal (fromJSRefUnchecked)
+import GHCJS.Types (JSString)
 import GHCJS.DOM.Types
 
 import GHCJS.DOM.JSFFI.Generated.Window as Generated hiding (js_openDatabase, openDatabase)
 
 foreign import javascript interruptible
         "(function(db) { if(db) $c(db) })($1[\"openDatabase\"]($2, $3, $4, $5, function(d) { $c(d) }));" js_openDatabase ::
-        JSRef Window -> JSString -> JSString -> JSString -> Word -> IO (JSRef Database)
+        Window -> JSString -> JSString -> JSString -> Word -> IO Database
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/Window.openDatabase Mozilla Window.openDatabase documentation>
 openDatabase :: (MonadIO m, ToJSString name, ToJSString version, ToJSString displayName) =>
                 Window -> name -> version -> displayName -> Word -> m Database
 openDatabase self name version displayName estimatedSize = liftIO $
     js_openDatabase
-        (unWindow self)
+        self
         (toJSString name)
         (toJSString version)
         (toJSString displayName)
-        estimatedSize >>= fromJSRefUnchecked
+        estimatedSize
diff --git a/src/GHCJS/DOM/JSFFI/XMLHttpRequest.hs b/src/GHCJS/DOM/JSFFI/XMLHttpRequest.hs
--- a/src/GHCJS/DOM/JSFFI/XMLHttpRequest.hs
+++ b/src/GHCJS/DOM/JSFFI/XMLHttpRequest.hs
@@ -14,7 +14,7 @@
 import Control.Monad.IO.Class (MonadIO(..))
 import Control.Exception (Exception(..), throwIO)
 
-import GHCJS.Types (JSRef, castRef)
+import GHCJS.Types (JSRef)
 import GHCJS.Marshal.Internal (PToJSRef(..))
 import GHCJS.Foreign (jsNull)
 import GHCJS.DOM.Types
@@ -31,28 +31,28 @@
 throwXHRError 1 = throwIO XHRAborted
 throwXHRError 2 = throwIO XHRError
 
-foreign import javascript interruptible "h$dom$sendXHR($1, $2, $c);" js_send :: JSRef XMLHttpRequest -> JSRef () -> IO Int
+foreign import javascript interruptible "h$dom$sendXHR($1, $2, $c);" js_send :: XMLHttpRequest -> JSRef -> IO Int
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest#send() Mozilla XMLHttpRequest.send documentation>
 send :: (MonadIO m) => XMLHttpRequest -> m ()
-send self = liftIO $ js_send (unXMLHttpRequest self) jsNull >>= throwXHRError
+send self = liftIO $ js_send self jsNull >>= throwXHRError
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest#send() Mozilla XMLHttpRequest.send documentation>
 sendString :: (MonadIO m, ToJSString str) => XMLHttpRequest -> str -> m ()
-sendString self str = liftIO $ js_send (unXMLHttpRequest self) (castRef $ pToJSRef str) >>= throwXHRError
+sendString self str = liftIO $ js_send self (pToJSRef str) >>= throwXHRError
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest#send() Mozilla XMLHttpRequest.send documentation>
 sendArrayBuffer :: (MonadIO m, IsArrayBufferView view) => XMLHttpRequest -> view -> m ()
-sendArrayBuffer self view = liftIO $ js_send (unXMLHttpRequest self) (castRef . unArrayBufferView $ toArrayBufferView view) >>= throwXHRError
+sendArrayBuffer self view = liftIO $ js_send self (unArrayBufferView $ toArrayBufferView view) >>= throwXHRError
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest#send() Mozilla XMLHttpRequest.send documentation>
 sendBlob :: (MonadIO m, IsBlob blob) => XMLHttpRequest -> blob -> m ()
-sendBlob self blob = liftIO $ js_send (unXMLHttpRequest self) (castRef . unBlob $ toBlob blob) >>= throwXHRError
+sendBlob self blob = liftIO $ js_send self (unBlob $ toBlob blob) >>= throwXHRError
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest#send() Mozilla XMLHttpRequest.send documentation>
 sendDocument :: (MonadIO m, IsDocument doc) => XMLHttpRequest -> doc -> m ()
-sendDocument self doc = liftIO $ js_send (unXMLHttpRequest self) (castRef . unDocument $ toDocument doc) >>= throwXHRError
+sendDocument self doc = liftIO $ js_send self (unDocument $ toDocument doc) >>= throwXHRError
 
 -- | <https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest#send() Mozilla XMLHttpRequest.send documentation>
 sendFormData :: (MonadIO m) => XMLHttpRequest -> FormData -> m ()
-sendFormData self formData = liftIO $ js_send (unXMLHttpRequest self) (castRef $ unFormData formData) >>= throwXHRError
+sendFormData self formData = liftIO $ js_send self (unFormData formData) >>= throwXHRError
diff --git a/src/GHCJS/DOM/Types.hs b/src/GHCJS/DOM/Types.hs
--- a/src/GHCJS/DOM/Types.hs
+++ b/src/GHCJS/DOM/Types.hs
@@ -7,27038 +7,26484 @@
 module GHCJS.DOM.Types (
 #if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
   -- * Object
-    maybeJSNullOrUndefined, propagateGError, GType(..)
-  , GObject(..), IsGObject, toGObject, castToGObject, gTypeGObject, unsafeCastGObject, isA, objectToString
-  , js_eq
-
-  -- * DOMString
-  , DOMString(..), ToDOMString(..), FromDOMString(..), IsDOMString, ToJSString(..), FromJSString(..)
-  , toJSString, fromJSString, toMaybeJSString, fromMaybeJSString
-
-  -- * Callbacks
-  , AudioBufferCallback
-  , DatabaseCallback
-  , MediaQueryListListener
-  , MediaStreamTrackSourcesCallback
-  , NavigatorUserMediaErrorCallback
-  , NavigatorUserMediaSuccessCallback
-  , NotificationPermissionCallback
-  , PositionCallback
-  , PositionErrorCallback
-  , RequestAnimationFrameCallback
-  , RTCPeerConnectionErrorCallback
-  , RTCSessionDescriptionCallback
-  , RTCStatsCallback
-  , SQLStatementCallback
-  , SQLStatementErrorCallback
-  , SQLTransactionCallback
-  , SQLTransactionErrorCallback
-  , StorageErrorCallback
-  , StorageQuotaCallback
-  , StorageUsageCallback
-  , StringCallback
-  , VoidCallback
-
-  -- * Dictionaries
-  , Dictionary(Dictionary), unDictionary, IsDictionary, toDictionary
-  , BlobPropertyBag(BlobPropertyBag), unBlobPropertyBag, IsBlobPropertyBag, toBlobPropertyBag
-
-  -- * Mutation Callback
-  , MutationCallback(MutationCallback), unMutationCallback, IsMutationCallback, toMutationCallback
-
-  -- * Promise
-  , Promise(Promise), unPromise, IsPromise, toPromise, castToPromise, gTypePromise
-
-  -- * Date
-  , Date(Date), unDate, IsDate, toDate, castToDate, gTypeDate
-
-  -- * Arrays
-  , Array(Array), unArray, IsArray, toArray, castToArray, gTypeArray
-  , ObjectArray(ObjectArray), unObjectArray, IsObjectArray, toObjectArray
-  , ArrayBuffer(ArrayBuffer), unArrayBuffer, IsArrayBuffer, toArrayBuffer, castToArrayBuffer, gTypeArrayBuffer
-  , ArrayBufferView(ArrayBufferView), unArrayBufferView, IsArrayBufferView, toArrayBufferView
-  , Float32Array(Float32Array), unFloat32Array, IsFloat32Array, toFloat32Array, castToFloat32Array, gTypeFloat32Array
-  , Float64Array(Float64Array), unFloat64Array, IsFloat64Array, toFloat64Array, castToFloat64Array, gTypeFloat64Array
-  , Uint8Array(Uint8Array), unUint8Array, IsUint8Array, toUint8Array, castToUint8Array, gTypeUint8Array
-  , Uint8ClampedArray(Uint8ClampedArray), unUint8ClampedArray, IsUint8ClampedArray, toUint8ClampedArray, castToUint8ClampedArray, gTypeUint8ClampedArray
-  , Uint16Array(Uint16Array), unUint16Array, IsUint16Array, toUint16Array, castToUint16Array, gTypeUint16Array
-  , Uint32Array(Uint32Array), unUint32Array, IsUint32Array, toUint32Array, castToUint32Array, gTypeUint32Array
-  , Int8Array(Int8Array), unInt8Array, IsInt8Array, toInt8Array, castToInt8Array, gTypeInt8Array
-  , Int16Array(Int16Array), unInt16Array, IsInt16Array, toInt16Array, castToInt16Array, gTypeInt16Array
-  , Int32Array(Int32Array), unInt32Array, IsInt32Array, toInt32Array, castToInt32Array, gTypeInt32Array
-
-  -- * Geolocation
-  , SerializedScriptValue(SerializedScriptValue), unSerializedScriptValue, IsSerializedScriptValue, toSerializedScriptValue
-  , PositionOptions(PositionOptions), unPositionOptions, IsPositionOptions, toPositionOptions
-  , Acceleration(Acceleration), unAcceleration, IsAcceleration, toAcceleration
-  , RotationRate(RotationRate), unRotationRate, IsRotationRate, toRotationRate
-
-  -- * Crypto
-  , Algorithm(Algorithm), unAlgorithm, IsAlgorithm, toAlgorithm
-  , CryptoOperationData(CryptoOperationData), unCryptoOperationData, IsCryptoOperationData, toCryptoOperationData
-
-  -- * CanvasStyle (fill & stroke style)
-  , CanvasStyle(CanvasStyle), unCanvasStyle, IsCanvasStyle, toCanvasStyle
-
-  , DOMException(DOMException), unDOMException, IsDOMException, toDOMException
-
-  -- * WebGL typedefs
-  , GLenum(..), GLboolean(..), GLbitfield(..), GLbyte(..), GLshort(..), GLint(..), GLsizei(..)
-  , GLintptr(..), GLsizeiptr(..), GLubyte(..), GLushort(..), GLuint(..), GLfloat(..), GLclampf(..)
-  , GLint64, GLuint64
-
-  -- * Interface types from IDL files
-
--- AUTO GENERATION STARTS HERE
-  , ANGLEInstancedArrays(ANGLEInstancedArrays), unANGLEInstancedArrays, castToANGLEInstancedArrays, gTypeANGLEInstancedArrays
-  , AbstractView(AbstractView), unAbstractView, castToAbstractView, gTypeAbstractView
-  , AbstractWorker(AbstractWorker), unAbstractWorker, castToAbstractWorker, gTypeAbstractWorker
-  , AllAudioCapabilities(AllAudioCapabilities), unAllAudioCapabilities, castToAllAudioCapabilities, gTypeAllAudioCapabilities
-  , AllVideoCapabilities(AllVideoCapabilities), unAllVideoCapabilities, castToAllVideoCapabilities, gTypeAllVideoCapabilities
-  , AnalyserNode(AnalyserNode), unAnalyserNode, castToAnalyserNode, gTypeAnalyserNode
-  , AnimationEvent(AnimationEvent), unAnimationEvent, castToAnimationEvent, gTypeAnimationEvent
-  , ApplicationCache(ApplicationCache), unApplicationCache, castToApplicationCache, gTypeApplicationCache
-  , Attr(Attr), unAttr, castToAttr, gTypeAttr
-  , AudioBuffer(AudioBuffer), unAudioBuffer, castToAudioBuffer, gTypeAudioBuffer
-  , AudioBufferSourceNode(AudioBufferSourceNode), unAudioBufferSourceNode, castToAudioBufferSourceNode, gTypeAudioBufferSourceNode
-  , AudioContext(AudioContext), unAudioContext, IsAudioContext, toAudioContext, castToAudioContext, gTypeAudioContext
-  , AudioDestinationNode(AudioDestinationNode), unAudioDestinationNode, castToAudioDestinationNode, gTypeAudioDestinationNode
-  , AudioListener(AudioListener), unAudioListener, castToAudioListener, gTypeAudioListener
-  , AudioNode(AudioNode), unAudioNode, IsAudioNode, toAudioNode, castToAudioNode, gTypeAudioNode
-  , AudioParam(AudioParam), unAudioParam, castToAudioParam, gTypeAudioParam
-  , AudioProcessingEvent(AudioProcessingEvent), unAudioProcessingEvent, castToAudioProcessingEvent, gTypeAudioProcessingEvent
-  , AudioStreamTrack(AudioStreamTrack), unAudioStreamTrack, castToAudioStreamTrack, gTypeAudioStreamTrack
-  , AudioTrack(AudioTrack), unAudioTrack, castToAudioTrack, gTypeAudioTrack
-  , AudioTrackList(AudioTrackList), unAudioTrackList, castToAudioTrackList, gTypeAudioTrackList
-  , AutocompleteErrorEvent(AutocompleteErrorEvent), unAutocompleteErrorEvent, castToAutocompleteErrorEvent, gTypeAutocompleteErrorEvent
-  , BarProp(BarProp), unBarProp, castToBarProp, gTypeBarProp
-  , BatteryManager(BatteryManager), unBatteryManager, castToBatteryManager, gTypeBatteryManager
-  , BeforeLoadEvent(BeforeLoadEvent), unBeforeLoadEvent, castToBeforeLoadEvent, gTypeBeforeLoadEvent
-  , BeforeUnloadEvent(BeforeUnloadEvent), unBeforeUnloadEvent, castToBeforeUnloadEvent, gTypeBeforeUnloadEvent
-  , BiquadFilterNode(BiquadFilterNode), unBiquadFilterNode, castToBiquadFilterNode, gTypeBiquadFilterNode
-  , Blob(Blob), unBlob, IsBlob, toBlob, castToBlob, gTypeBlob
-  , CDATASection(CDATASection), unCDATASection, castToCDATASection, gTypeCDATASection
-  , CSS(CSS), unCSS, castToCSS, gTypeCSS
-  , CSSCharsetRule(CSSCharsetRule), unCSSCharsetRule, castToCSSCharsetRule, gTypeCSSCharsetRule
-  , CSSFontFaceLoadEvent(CSSFontFaceLoadEvent), unCSSFontFaceLoadEvent, castToCSSFontFaceLoadEvent, gTypeCSSFontFaceLoadEvent
-  , CSSFontFaceRule(CSSFontFaceRule), unCSSFontFaceRule, castToCSSFontFaceRule, gTypeCSSFontFaceRule
-  , CSSImportRule(CSSImportRule), unCSSImportRule, castToCSSImportRule, gTypeCSSImportRule
-  , CSSKeyframeRule(CSSKeyframeRule), unCSSKeyframeRule, castToCSSKeyframeRule, gTypeCSSKeyframeRule
-  , CSSKeyframesRule(CSSKeyframesRule), unCSSKeyframesRule, castToCSSKeyframesRule, gTypeCSSKeyframesRule
-  , CSSMediaRule(CSSMediaRule), unCSSMediaRule, castToCSSMediaRule, gTypeCSSMediaRule
-  , CSSPageRule(CSSPageRule), unCSSPageRule, castToCSSPageRule, gTypeCSSPageRule
-  , CSSPrimitiveValue(CSSPrimitiveValue), unCSSPrimitiveValue, castToCSSPrimitiveValue, gTypeCSSPrimitiveValue
-  , CSSRule(CSSRule), unCSSRule, IsCSSRule, toCSSRule, castToCSSRule, gTypeCSSRule
-  , CSSRuleList(CSSRuleList), unCSSRuleList, castToCSSRuleList, gTypeCSSRuleList
-  , CSSStyleDeclaration(CSSStyleDeclaration), unCSSStyleDeclaration, castToCSSStyleDeclaration, gTypeCSSStyleDeclaration
-  , CSSStyleRule(CSSStyleRule), unCSSStyleRule, castToCSSStyleRule, gTypeCSSStyleRule
-  , CSSStyleSheet(CSSStyleSheet), unCSSStyleSheet, castToCSSStyleSheet, gTypeCSSStyleSheet
-  , CSSSupportsRule(CSSSupportsRule), unCSSSupportsRule, castToCSSSupportsRule, gTypeCSSSupportsRule
-  , CSSUnknownRule(CSSUnknownRule), unCSSUnknownRule, castToCSSUnknownRule, gTypeCSSUnknownRule
-  , CSSValue(CSSValue), unCSSValue, IsCSSValue, toCSSValue, castToCSSValue, gTypeCSSValue
-  , CSSValueList(CSSValueList), unCSSValueList, IsCSSValueList, toCSSValueList, castToCSSValueList, gTypeCSSValueList
-  , CanvasGradient(CanvasGradient), unCanvasGradient, castToCanvasGradient, gTypeCanvasGradient
-  , CanvasPattern(CanvasPattern), unCanvasPattern, castToCanvasPattern, gTypeCanvasPattern
-  , CanvasProxy(CanvasProxy), unCanvasProxy, castToCanvasProxy, gTypeCanvasProxy
-  , CanvasRenderingContext(CanvasRenderingContext), unCanvasRenderingContext, IsCanvasRenderingContext, toCanvasRenderingContext, castToCanvasRenderingContext, gTypeCanvasRenderingContext
-  , CanvasRenderingContext2D(CanvasRenderingContext2D), unCanvasRenderingContext2D, castToCanvasRenderingContext2D, gTypeCanvasRenderingContext2D
-  , CapabilityRange(CapabilityRange), unCapabilityRange, castToCapabilityRange, gTypeCapabilityRange
-  , ChannelMergerNode(ChannelMergerNode), unChannelMergerNode, castToChannelMergerNode, gTypeChannelMergerNode
-  , ChannelSplitterNode(ChannelSplitterNode), unChannelSplitterNode, castToChannelSplitterNode, gTypeChannelSplitterNode
-  , CharacterData(CharacterData), unCharacterData, IsCharacterData, toCharacterData, castToCharacterData, gTypeCharacterData
-  , ChildNode(ChildNode), unChildNode, castToChildNode, gTypeChildNode
-  , ClientRect(ClientRect), unClientRect, castToClientRect, gTypeClientRect
-  , ClientRectList(ClientRectList), unClientRectList, castToClientRectList, gTypeClientRectList
-  , CloseEvent(CloseEvent), unCloseEvent, castToCloseEvent, gTypeCloseEvent
-  , CommandLineAPIHost(CommandLineAPIHost), unCommandLineAPIHost, castToCommandLineAPIHost, gTypeCommandLineAPIHost
-  , Comment(Comment), unComment, castToComment, gTypeComment
-  , CompositionEvent(CompositionEvent), unCompositionEvent, castToCompositionEvent, gTypeCompositionEvent
-  , ConvolverNode(ConvolverNode), unConvolverNode, castToConvolverNode, gTypeConvolverNode
-  , Coordinates(Coordinates), unCoordinates, castToCoordinates, gTypeCoordinates
-  , Counter(Counter), unCounter, castToCounter, gTypeCounter
-  , Crypto(Crypto), unCrypto, castToCrypto, gTypeCrypto
-  , CryptoKey(CryptoKey), unCryptoKey, castToCryptoKey, gTypeCryptoKey
-  , CryptoKeyPair(CryptoKeyPair), unCryptoKeyPair, castToCryptoKeyPair, gTypeCryptoKeyPair
-  , CustomEvent(CustomEvent), unCustomEvent, castToCustomEvent, gTypeCustomEvent
-  , DOMError(DOMError), unDOMError, IsDOMError, toDOMError, castToDOMError, gTypeDOMError
-  , DOMImplementation(DOMImplementation), unDOMImplementation, castToDOMImplementation, gTypeDOMImplementation
-  , DOMNamedFlowCollection(DOMNamedFlowCollection), unDOMNamedFlowCollection, castToDOMNamedFlowCollection, gTypeDOMNamedFlowCollection
-  , DOMParser(DOMParser), unDOMParser, castToDOMParser, gTypeDOMParser
-  , DOMSettableTokenList(DOMSettableTokenList), unDOMSettableTokenList, castToDOMSettableTokenList, gTypeDOMSettableTokenList
-  , DOMStringList(DOMStringList), unDOMStringList, castToDOMStringList, gTypeDOMStringList
-  , DOMStringMap(DOMStringMap), unDOMStringMap, castToDOMStringMap, gTypeDOMStringMap
-  , DOMTokenList(DOMTokenList), unDOMTokenList, IsDOMTokenList, toDOMTokenList, castToDOMTokenList, gTypeDOMTokenList
-  , DataCue(DataCue), unDataCue, castToDataCue, gTypeDataCue
-  , DataTransfer(DataTransfer), unDataTransfer, castToDataTransfer, gTypeDataTransfer
-  , DataTransferItem(DataTransferItem), unDataTransferItem, castToDataTransferItem, gTypeDataTransferItem
-  , DataTransferItemList(DataTransferItemList), unDataTransferItemList, castToDataTransferItemList, gTypeDataTransferItemList
-  , Database(Database), unDatabase, castToDatabase, gTypeDatabase
-  , DedicatedWorkerGlobalScope(DedicatedWorkerGlobalScope), unDedicatedWorkerGlobalScope, castToDedicatedWorkerGlobalScope, gTypeDedicatedWorkerGlobalScope
-  , DelayNode(DelayNode), unDelayNode, castToDelayNode, gTypeDelayNode
-  , DeviceMotionEvent(DeviceMotionEvent), unDeviceMotionEvent, castToDeviceMotionEvent, gTypeDeviceMotionEvent
-  , DeviceOrientationEvent(DeviceOrientationEvent), unDeviceOrientationEvent, castToDeviceOrientationEvent, gTypeDeviceOrientationEvent
-  , DeviceProximityEvent(DeviceProximityEvent), unDeviceProximityEvent, castToDeviceProximityEvent, gTypeDeviceProximityEvent
-  , Document(Document), unDocument, IsDocument, toDocument, castToDocument, gTypeDocument
-  , DocumentFragment(DocumentFragment), unDocumentFragment, castToDocumentFragment, gTypeDocumentFragment
-  , DocumentType(DocumentType), unDocumentType, castToDocumentType, gTypeDocumentType
-  , DynamicsCompressorNode(DynamicsCompressorNode), unDynamicsCompressorNode, castToDynamicsCompressorNode, gTypeDynamicsCompressorNode
-  , EXTBlendMinMax(EXTBlendMinMax), unEXTBlendMinMax, castToEXTBlendMinMax, gTypeEXTBlendMinMax
-  , EXTFragDepth(EXTFragDepth), unEXTFragDepth, castToEXTFragDepth, gTypeEXTFragDepth
-  , EXTShaderTextureLOD(EXTShaderTextureLOD), unEXTShaderTextureLOD, castToEXTShaderTextureLOD, gTypeEXTShaderTextureLOD
-  , EXTTextureFilterAnisotropic(EXTTextureFilterAnisotropic), unEXTTextureFilterAnisotropic, castToEXTTextureFilterAnisotropic, gTypeEXTTextureFilterAnisotropic
-  , EXTsRGB(EXTsRGB), unEXTsRGB, castToEXTsRGB, gTypeEXTsRGB
-  , Element(Element), unElement, IsElement, toElement, castToElement, gTypeElement
-  , Entity(Entity), unEntity, castToEntity, gTypeEntity
-  , EntityReference(EntityReference), unEntityReference, castToEntityReference, gTypeEntityReference
-  , ErrorEvent(ErrorEvent), unErrorEvent, castToErrorEvent, gTypeErrorEvent
-  , Event(Event), unEvent, IsEvent, toEvent, castToEvent, gTypeEvent
-  , EventListener(EventListener), unEventListener, castToEventListener, gTypeEventListener
-  , EventSource(EventSource), unEventSource, castToEventSource, gTypeEventSource
-  , EventTarget(EventTarget), unEventTarget, IsEventTarget, toEventTarget, castToEventTarget, gTypeEventTarget
-  , File(File), unFile, castToFile, gTypeFile
-  , FileError(FileError), unFileError, castToFileError, gTypeFileError
-  , FileList(FileList), unFileList, castToFileList, gTypeFileList
-  , FileReader(FileReader), unFileReader, castToFileReader, gTypeFileReader
-  , FileReaderSync(FileReaderSync), unFileReaderSync, castToFileReaderSync, gTypeFileReaderSync
-  , FocusEvent(FocusEvent), unFocusEvent, castToFocusEvent, gTypeFocusEvent
-  , FontLoader(FontLoader), unFontLoader, castToFontLoader, gTypeFontLoader
-  , FormData(FormData), unFormData, castToFormData, gTypeFormData
-  , GainNode(GainNode), unGainNode, castToGainNode, gTypeGainNode
-  , Gamepad(Gamepad), unGamepad, castToGamepad, gTypeGamepad
-  , GamepadButton(GamepadButton), unGamepadButton, castToGamepadButton, gTypeGamepadButton
-  , GamepadEvent(GamepadEvent), unGamepadEvent, castToGamepadEvent, gTypeGamepadEvent
-  , Geolocation(Geolocation), unGeolocation, castToGeolocation, gTypeGeolocation
-  , Geoposition(Geoposition), unGeoposition, castToGeoposition, gTypeGeoposition
-  , HTMLAllCollection(HTMLAllCollection), unHTMLAllCollection, castToHTMLAllCollection, gTypeHTMLAllCollection
-  , HTMLAnchorElement(HTMLAnchorElement), unHTMLAnchorElement, castToHTMLAnchorElement, gTypeHTMLAnchorElement
-  , HTMLAppletElement(HTMLAppletElement), unHTMLAppletElement, castToHTMLAppletElement, gTypeHTMLAppletElement
-  , HTMLAreaElement(HTMLAreaElement), unHTMLAreaElement, castToHTMLAreaElement, gTypeHTMLAreaElement
-  , HTMLAudioElement(HTMLAudioElement), unHTMLAudioElement, castToHTMLAudioElement, gTypeHTMLAudioElement
-  , HTMLBRElement(HTMLBRElement), unHTMLBRElement, castToHTMLBRElement, gTypeHTMLBRElement
-  , HTMLBaseElement(HTMLBaseElement), unHTMLBaseElement, castToHTMLBaseElement, gTypeHTMLBaseElement
-  , HTMLBaseFontElement(HTMLBaseFontElement), unHTMLBaseFontElement, castToHTMLBaseFontElement, gTypeHTMLBaseFontElement
-  , HTMLBodyElement(HTMLBodyElement), unHTMLBodyElement, castToHTMLBodyElement, gTypeHTMLBodyElement
-  , HTMLButtonElement(HTMLButtonElement), unHTMLButtonElement, castToHTMLButtonElement, gTypeHTMLButtonElement
-  , HTMLCanvasElement(HTMLCanvasElement), unHTMLCanvasElement, castToHTMLCanvasElement, gTypeHTMLCanvasElement
-  , HTMLCollection(HTMLCollection), unHTMLCollection, IsHTMLCollection, toHTMLCollection, castToHTMLCollection, gTypeHTMLCollection
-  , HTMLDListElement(HTMLDListElement), unHTMLDListElement, castToHTMLDListElement, gTypeHTMLDListElement
-  , HTMLDataListElement(HTMLDataListElement), unHTMLDataListElement, castToHTMLDataListElement, gTypeHTMLDataListElement
-  , HTMLDetailsElement(HTMLDetailsElement), unHTMLDetailsElement, castToHTMLDetailsElement, gTypeHTMLDetailsElement
-  , HTMLDirectoryElement(HTMLDirectoryElement), unHTMLDirectoryElement, castToHTMLDirectoryElement, gTypeHTMLDirectoryElement
-  , HTMLDivElement(HTMLDivElement), unHTMLDivElement, castToHTMLDivElement, gTypeHTMLDivElement
-  , HTMLDocument(HTMLDocument), unHTMLDocument, castToHTMLDocument, gTypeHTMLDocument
-  , HTMLElement(HTMLElement), unHTMLElement, IsHTMLElement, toHTMLElement, castToHTMLElement, gTypeHTMLElement
-  , HTMLEmbedElement(HTMLEmbedElement), unHTMLEmbedElement, castToHTMLEmbedElement, gTypeHTMLEmbedElement
-  , HTMLFieldSetElement(HTMLFieldSetElement), unHTMLFieldSetElement, castToHTMLFieldSetElement, gTypeHTMLFieldSetElement
-  , HTMLFontElement(HTMLFontElement), unHTMLFontElement, castToHTMLFontElement, gTypeHTMLFontElement
-  , HTMLFormControlsCollection(HTMLFormControlsCollection), unHTMLFormControlsCollection, castToHTMLFormControlsCollection, gTypeHTMLFormControlsCollection
-  , HTMLFormElement(HTMLFormElement), unHTMLFormElement, castToHTMLFormElement, gTypeHTMLFormElement
-  , HTMLFrameElement(HTMLFrameElement), unHTMLFrameElement, castToHTMLFrameElement, gTypeHTMLFrameElement
-  , HTMLFrameSetElement(HTMLFrameSetElement), unHTMLFrameSetElement, castToHTMLFrameSetElement, gTypeHTMLFrameSetElement
-  , HTMLHRElement(HTMLHRElement), unHTMLHRElement, castToHTMLHRElement, gTypeHTMLHRElement
-  , HTMLHeadElement(HTMLHeadElement), unHTMLHeadElement, castToHTMLHeadElement, gTypeHTMLHeadElement
-  , HTMLHeadingElement(HTMLHeadingElement), unHTMLHeadingElement, castToHTMLHeadingElement, gTypeHTMLHeadingElement
-  , HTMLHtmlElement(HTMLHtmlElement), unHTMLHtmlElement, castToHTMLHtmlElement, gTypeHTMLHtmlElement
-  , HTMLIFrameElement(HTMLIFrameElement), unHTMLIFrameElement, castToHTMLIFrameElement, gTypeHTMLIFrameElement
-  , HTMLImageElement(HTMLImageElement), unHTMLImageElement, castToHTMLImageElement, gTypeHTMLImageElement
-  , HTMLInputElement(HTMLInputElement), unHTMLInputElement, castToHTMLInputElement, gTypeHTMLInputElement
-  , HTMLKeygenElement(HTMLKeygenElement), unHTMLKeygenElement, castToHTMLKeygenElement, gTypeHTMLKeygenElement
-  , HTMLLIElement(HTMLLIElement), unHTMLLIElement, castToHTMLLIElement, gTypeHTMLLIElement
-  , HTMLLabelElement(HTMLLabelElement), unHTMLLabelElement, castToHTMLLabelElement, gTypeHTMLLabelElement
-  , HTMLLegendElement(HTMLLegendElement), unHTMLLegendElement, castToHTMLLegendElement, gTypeHTMLLegendElement
-  , HTMLLinkElement(HTMLLinkElement), unHTMLLinkElement, castToHTMLLinkElement, gTypeHTMLLinkElement
-  , HTMLMapElement(HTMLMapElement), unHTMLMapElement, castToHTMLMapElement, gTypeHTMLMapElement
-  , HTMLMarqueeElement(HTMLMarqueeElement), unHTMLMarqueeElement, castToHTMLMarqueeElement, gTypeHTMLMarqueeElement
-  , HTMLMediaElement(HTMLMediaElement), unHTMLMediaElement, IsHTMLMediaElement, toHTMLMediaElement, castToHTMLMediaElement, gTypeHTMLMediaElement
-  , HTMLMenuElement(HTMLMenuElement), unHTMLMenuElement, castToHTMLMenuElement, gTypeHTMLMenuElement
-  , HTMLMetaElement(HTMLMetaElement), unHTMLMetaElement, castToHTMLMetaElement, gTypeHTMLMetaElement
-  , HTMLMeterElement(HTMLMeterElement), unHTMLMeterElement, castToHTMLMeterElement, gTypeHTMLMeterElement
-  , HTMLModElement(HTMLModElement), unHTMLModElement, castToHTMLModElement, gTypeHTMLModElement
-  , HTMLOListElement(HTMLOListElement), unHTMLOListElement, castToHTMLOListElement, gTypeHTMLOListElement
-  , HTMLObjectElement(HTMLObjectElement), unHTMLObjectElement, castToHTMLObjectElement, gTypeHTMLObjectElement
-  , HTMLOptGroupElement(HTMLOptGroupElement), unHTMLOptGroupElement, castToHTMLOptGroupElement, gTypeHTMLOptGroupElement
-  , HTMLOptionElement(HTMLOptionElement), unHTMLOptionElement, castToHTMLOptionElement, gTypeHTMLOptionElement
-  , HTMLOptionsCollection(HTMLOptionsCollection), unHTMLOptionsCollection, castToHTMLOptionsCollection, gTypeHTMLOptionsCollection
-  , HTMLOutputElement(HTMLOutputElement), unHTMLOutputElement, castToHTMLOutputElement, gTypeHTMLOutputElement
-  , HTMLParagraphElement(HTMLParagraphElement), unHTMLParagraphElement, castToHTMLParagraphElement, gTypeHTMLParagraphElement
-  , HTMLParamElement(HTMLParamElement), unHTMLParamElement, castToHTMLParamElement, gTypeHTMLParamElement
-  , HTMLPreElement(HTMLPreElement), unHTMLPreElement, castToHTMLPreElement, gTypeHTMLPreElement
-  , HTMLProgressElement(HTMLProgressElement), unHTMLProgressElement, castToHTMLProgressElement, gTypeHTMLProgressElement
-  , HTMLQuoteElement(HTMLQuoteElement), unHTMLQuoteElement, castToHTMLQuoteElement, gTypeHTMLQuoteElement
-  , HTMLScriptElement(HTMLScriptElement), unHTMLScriptElement, castToHTMLScriptElement, gTypeHTMLScriptElement
-  , HTMLSelectElement(HTMLSelectElement), unHTMLSelectElement, castToHTMLSelectElement, gTypeHTMLSelectElement
-  , HTMLSourceElement(HTMLSourceElement), unHTMLSourceElement, castToHTMLSourceElement, gTypeHTMLSourceElement
-  , HTMLSpanElement(HTMLSpanElement), unHTMLSpanElement, castToHTMLSpanElement, gTypeHTMLSpanElement
-  , HTMLStyleElement(HTMLStyleElement), unHTMLStyleElement, castToHTMLStyleElement, gTypeHTMLStyleElement
-  , HTMLTableCaptionElement(HTMLTableCaptionElement), unHTMLTableCaptionElement, castToHTMLTableCaptionElement, gTypeHTMLTableCaptionElement
-  , HTMLTableCellElement(HTMLTableCellElement), unHTMLTableCellElement, castToHTMLTableCellElement, gTypeHTMLTableCellElement
-  , HTMLTableColElement(HTMLTableColElement), unHTMLTableColElement, castToHTMLTableColElement, gTypeHTMLTableColElement
-  , HTMLTableElement(HTMLTableElement), unHTMLTableElement, castToHTMLTableElement, gTypeHTMLTableElement
-  , HTMLTableRowElement(HTMLTableRowElement), unHTMLTableRowElement, castToHTMLTableRowElement, gTypeHTMLTableRowElement
-  , HTMLTableSectionElement(HTMLTableSectionElement), unHTMLTableSectionElement, castToHTMLTableSectionElement, gTypeHTMLTableSectionElement
-  , HTMLTemplateElement(HTMLTemplateElement), unHTMLTemplateElement, castToHTMLTemplateElement, gTypeHTMLTemplateElement
-  , HTMLTextAreaElement(HTMLTextAreaElement), unHTMLTextAreaElement, castToHTMLTextAreaElement, gTypeHTMLTextAreaElement
-  , HTMLTitleElement(HTMLTitleElement), unHTMLTitleElement, castToHTMLTitleElement, gTypeHTMLTitleElement
-  , HTMLTrackElement(HTMLTrackElement), unHTMLTrackElement, castToHTMLTrackElement, gTypeHTMLTrackElement
-  , HTMLUListElement(HTMLUListElement), unHTMLUListElement, castToHTMLUListElement, gTypeHTMLUListElement
-  , HTMLUnknownElement(HTMLUnknownElement), unHTMLUnknownElement, castToHTMLUnknownElement, gTypeHTMLUnknownElement
-  , HTMLVideoElement(HTMLVideoElement), unHTMLVideoElement, castToHTMLVideoElement, gTypeHTMLVideoElement
-  , HashChangeEvent(HashChangeEvent), unHashChangeEvent, castToHashChangeEvent, gTypeHashChangeEvent
-  , History(History), unHistory, castToHistory, gTypeHistory
-  , IDBAny(IDBAny), unIDBAny, castToIDBAny, gTypeIDBAny
-  , IDBCursor(IDBCursor), unIDBCursor, IsIDBCursor, toIDBCursor, castToIDBCursor, gTypeIDBCursor
-  , IDBCursorWithValue(IDBCursorWithValue), unIDBCursorWithValue, castToIDBCursorWithValue, gTypeIDBCursorWithValue
-  , IDBDatabase(IDBDatabase), unIDBDatabase, castToIDBDatabase, gTypeIDBDatabase
-  , IDBFactory(IDBFactory), unIDBFactory, castToIDBFactory, gTypeIDBFactory
-  , IDBIndex(IDBIndex), unIDBIndex, castToIDBIndex, gTypeIDBIndex
-  , IDBKeyRange(IDBKeyRange), unIDBKeyRange, castToIDBKeyRange, gTypeIDBKeyRange
-  , IDBObjectStore(IDBObjectStore), unIDBObjectStore, castToIDBObjectStore, gTypeIDBObjectStore
-  , IDBOpenDBRequest(IDBOpenDBRequest), unIDBOpenDBRequest, castToIDBOpenDBRequest, gTypeIDBOpenDBRequest
-  , IDBRequest(IDBRequest), unIDBRequest, IsIDBRequest, toIDBRequest, castToIDBRequest, gTypeIDBRequest
-  , IDBTransaction(IDBTransaction), unIDBTransaction, castToIDBTransaction, gTypeIDBTransaction
-  , IDBVersionChangeEvent(IDBVersionChangeEvent), unIDBVersionChangeEvent, castToIDBVersionChangeEvent, gTypeIDBVersionChangeEvent
-  , ImageData(ImageData), unImageData, castToImageData, gTypeImageData
-  , InspectorFrontendHost(InspectorFrontendHost), unInspectorFrontendHost, castToInspectorFrontendHost, gTypeInspectorFrontendHost
-  , InternalSettings(InternalSettings), unInternalSettings, castToInternalSettings, gTypeInternalSettings
-  , Internals(Internals), unInternals, castToInternals, gTypeInternals
-  , KeyboardEvent(KeyboardEvent), unKeyboardEvent, castToKeyboardEvent, gTypeKeyboardEvent
-  , Location(Location), unLocation, castToLocation, gTypeLocation
-  , MallocStatistics(MallocStatistics), unMallocStatistics, castToMallocStatistics, gTypeMallocStatistics
-  , MediaController(MediaController), unMediaController, castToMediaController, gTypeMediaController
-  , MediaControlsHost(MediaControlsHost), unMediaControlsHost, castToMediaControlsHost, gTypeMediaControlsHost
-  , MediaElementAudioSourceNode(MediaElementAudioSourceNode), unMediaElementAudioSourceNode, castToMediaElementAudioSourceNode, gTypeMediaElementAudioSourceNode
-  , MediaError(MediaError), unMediaError, castToMediaError, gTypeMediaError
-  , MediaKeyError(MediaKeyError), unMediaKeyError, castToMediaKeyError, gTypeMediaKeyError
-  , MediaKeyEvent(MediaKeyEvent), unMediaKeyEvent, castToMediaKeyEvent, gTypeMediaKeyEvent
-  , MediaKeyMessageEvent(MediaKeyMessageEvent), unMediaKeyMessageEvent, castToMediaKeyMessageEvent, gTypeMediaKeyMessageEvent
-  , MediaKeyNeededEvent(MediaKeyNeededEvent), unMediaKeyNeededEvent, castToMediaKeyNeededEvent, gTypeMediaKeyNeededEvent
-  , MediaKeySession(MediaKeySession), unMediaKeySession, castToMediaKeySession, gTypeMediaKeySession
-  , MediaKeys(MediaKeys), unMediaKeys, castToMediaKeys, gTypeMediaKeys
-  , MediaList(MediaList), unMediaList, castToMediaList, gTypeMediaList
-  , MediaQueryList(MediaQueryList), unMediaQueryList, castToMediaQueryList, gTypeMediaQueryList
-  , MediaSource(MediaSource), unMediaSource, castToMediaSource, gTypeMediaSource
-  , MediaSourceStates(MediaSourceStates), unMediaSourceStates, castToMediaSourceStates, gTypeMediaSourceStates
-  , MediaStream(MediaStream), unMediaStream, castToMediaStream, gTypeMediaStream
-  , MediaStreamAudioDestinationNode(MediaStreamAudioDestinationNode), unMediaStreamAudioDestinationNode, castToMediaStreamAudioDestinationNode, gTypeMediaStreamAudioDestinationNode
-  , MediaStreamAudioSourceNode(MediaStreamAudioSourceNode), unMediaStreamAudioSourceNode, castToMediaStreamAudioSourceNode, gTypeMediaStreamAudioSourceNode
-  , MediaStreamCapabilities(MediaStreamCapabilities), unMediaStreamCapabilities, IsMediaStreamCapabilities, toMediaStreamCapabilities, castToMediaStreamCapabilities, gTypeMediaStreamCapabilities
-  , MediaStreamEvent(MediaStreamEvent), unMediaStreamEvent, castToMediaStreamEvent, gTypeMediaStreamEvent
-  , MediaStreamTrack(MediaStreamTrack), unMediaStreamTrack, IsMediaStreamTrack, toMediaStreamTrack, castToMediaStreamTrack, gTypeMediaStreamTrack
-  , MediaStreamTrackEvent(MediaStreamTrackEvent), unMediaStreamTrackEvent, castToMediaStreamTrackEvent, gTypeMediaStreamTrackEvent
-  , MediaTrackConstraint(MediaTrackConstraint), unMediaTrackConstraint, castToMediaTrackConstraint, gTypeMediaTrackConstraint
-  , MediaTrackConstraintSet(MediaTrackConstraintSet), unMediaTrackConstraintSet, castToMediaTrackConstraintSet, gTypeMediaTrackConstraintSet
-  , MediaTrackConstraints(MediaTrackConstraints), unMediaTrackConstraints, castToMediaTrackConstraints, gTypeMediaTrackConstraints
-  , MemoryInfo(MemoryInfo), unMemoryInfo, castToMemoryInfo, gTypeMemoryInfo
-  , MessageChannel(MessageChannel), unMessageChannel, castToMessageChannel, gTypeMessageChannel
-  , MessageEvent(MessageEvent), unMessageEvent, castToMessageEvent, gTypeMessageEvent
-  , MessagePort(MessagePort), unMessagePort, castToMessagePort, gTypeMessagePort
-  , MimeType(MimeType), unMimeType, castToMimeType, gTypeMimeType
-  , MimeTypeArray(MimeTypeArray), unMimeTypeArray, castToMimeTypeArray, gTypeMimeTypeArray
-  , MouseEvent(MouseEvent), unMouseEvent, IsMouseEvent, toMouseEvent, castToMouseEvent, gTypeMouseEvent
-  , MutationEvent(MutationEvent), unMutationEvent, castToMutationEvent, gTypeMutationEvent
-  , MutationObserver(MutationObserver), unMutationObserver, castToMutationObserver, gTypeMutationObserver
-  , MutationRecord(MutationRecord), unMutationRecord, castToMutationRecord, gTypeMutationRecord
-  , NamedNodeMap(NamedNodeMap), unNamedNodeMap, castToNamedNodeMap, gTypeNamedNodeMap
-  , Navigator(Navigator), unNavigator, castToNavigator, gTypeNavigator
-  , NavigatorUserMediaError(NavigatorUserMediaError), unNavigatorUserMediaError, castToNavigatorUserMediaError, gTypeNavigatorUserMediaError
-  , Node(Node), unNode, IsNode, toNode, castToNode, gTypeNode
-  , NodeFilter(NodeFilter), unNodeFilter, castToNodeFilter, gTypeNodeFilter
-  , NodeIterator(NodeIterator), unNodeIterator, castToNodeIterator, gTypeNodeIterator
-  , NodeList(NodeList), unNodeList, IsNodeList, toNodeList, castToNodeList, gTypeNodeList
-  , Notification(Notification), unNotification, castToNotification, gTypeNotification
-  , NotificationCenter(NotificationCenter), unNotificationCenter, castToNotificationCenter, gTypeNotificationCenter
-  , OESElementIndexUint(OESElementIndexUint), unOESElementIndexUint, castToOESElementIndexUint, gTypeOESElementIndexUint
-  , OESStandardDerivatives(OESStandardDerivatives), unOESStandardDerivatives, castToOESStandardDerivatives, gTypeOESStandardDerivatives
-  , OESTextureFloat(OESTextureFloat), unOESTextureFloat, castToOESTextureFloat, gTypeOESTextureFloat
-  , OESTextureFloatLinear(OESTextureFloatLinear), unOESTextureFloatLinear, castToOESTextureFloatLinear, gTypeOESTextureFloatLinear
-  , OESTextureHalfFloat(OESTextureHalfFloat), unOESTextureHalfFloat, castToOESTextureHalfFloat, gTypeOESTextureHalfFloat
-  , OESTextureHalfFloatLinear(OESTextureHalfFloatLinear), unOESTextureHalfFloatLinear, castToOESTextureHalfFloatLinear, gTypeOESTextureHalfFloatLinear
-  , OESVertexArrayObject(OESVertexArrayObject), unOESVertexArrayObject, castToOESVertexArrayObject, gTypeOESVertexArrayObject
-  , OfflineAudioCompletionEvent(OfflineAudioCompletionEvent), unOfflineAudioCompletionEvent, castToOfflineAudioCompletionEvent, gTypeOfflineAudioCompletionEvent
-  , OfflineAudioContext(OfflineAudioContext), unOfflineAudioContext, castToOfflineAudioContext, gTypeOfflineAudioContext
-  , OscillatorNode(OscillatorNode), unOscillatorNode, castToOscillatorNode, gTypeOscillatorNode
-  , OverflowEvent(OverflowEvent), unOverflowEvent, castToOverflowEvent, gTypeOverflowEvent
-  , PageTransitionEvent(PageTransitionEvent), unPageTransitionEvent, castToPageTransitionEvent, gTypePageTransitionEvent
-  , PannerNode(PannerNode), unPannerNode, castToPannerNode, gTypePannerNode
-  , Path2D(Path2D), unPath2D, castToPath2D, gTypePath2D
-  , Performance(Performance), unPerformance, castToPerformance, gTypePerformance
-  , PerformanceEntry(PerformanceEntry), unPerformanceEntry, IsPerformanceEntry, toPerformanceEntry, castToPerformanceEntry, gTypePerformanceEntry
-  , PerformanceEntryList(PerformanceEntryList), unPerformanceEntryList, castToPerformanceEntryList, gTypePerformanceEntryList
-  , PerformanceMark(PerformanceMark), unPerformanceMark, castToPerformanceMark, gTypePerformanceMark
-  , PerformanceMeasure(PerformanceMeasure), unPerformanceMeasure, castToPerformanceMeasure, gTypePerformanceMeasure
-  , PerformanceNavigation(PerformanceNavigation), unPerformanceNavigation, castToPerformanceNavigation, gTypePerformanceNavigation
-  , PerformanceResourceTiming(PerformanceResourceTiming), unPerformanceResourceTiming, castToPerformanceResourceTiming, gTypePerformanceResourceTiming
-  , PerformanceTiming(PerformanceTiming), unPerformanceTiming, castToPerformanceTiming, gTypePerformanceTiming
-  , PeriodicWave(PeriodicWave), unPeriodicWave, castToPeriodicWave, gTypePeriodicWave
-  , Plugin(Plugin), unPlugin, castToPlugin, gTypePlugin
-  , PluginArray(PluginArray), unPluginArray, castToPluginArray, gTypePluginArray
-  , PopStateEvent(PopStateEvent), unPopStateEvent, castToPopStateEvent, gTypePopStateEvent
-  , PositionError(PositionError), unPositionError, castToPositionError, gTypePositionError
-  , ProcessingInstruction(ProcessingInstruction), unProcessingInstruction, castToProcessingInstruction, gTypeProcessingInstruction
-  , ProgressEvent(ProgressEvent), unProgressEvent, IsProgressEvent, toProgressEvent, castToProgressEvent, gTypeProgressEvent
-  , QuickTimePluginReplacement(QuickTimePluginReplacement), unQuickTimePluginReplacement, castToQuickTimePluginReplacement, gTypeQuickTimePluginReplacement
-  , RGBColor(RGBColor), unRGBColor, castToRGBColor, gTypeRGBColor
-  , RTCConfiguration(RTCConfiguration), unRTCConfiguration, castToRTCConfiguration, gTypeRTCConfiguration
-  , RTCDTMFSender(RTCDTMFSender), unRTCDTMFSender, castToRTCDTMFSender, gTypeRTCDTMFSender
-  , RTCDTMFToneChangeEvent(RTCDTMFToneChangeEvent), unRTCDTMFToneChangeEvent, castToRTCDTMFToneChangeEvent, gTypeRTCDTMFToneChangeEvent
-  , RTCDataChannel(RTCDataChannel), unRTCDataChannel, castToRTCDataChannel, gTypeRTCDataChannel
-  , RTCDataChannelEvent(RTCDataChannelEvent), unRTCDataChannelEvent, castToRTCDataChannelEvent, gTypeRTCDataChannelEvent
-  , RTCIceCandidate(RTCIceCandidate), unRTCIceCandidate, castToRTCIceCandidate, gTypeRTCIceCandidate
-  , RTCIceCandidateEvent(RTCIceCandidateEvent), unRTCIceCandidateEvent, castToRTCIceCandidateEvent, gTypeRTCIceCandidateEvent
-  , RTCIceServer(RTCIceServer), unRTCIceServer, castToRTCIceServer, gTypeRTCIceServer
-  , RTCPeerConnection(RTCPeerConnection), unRTCPeerConnection, castToRTCPeerConnection, gTypeRTCPeerConnection
-  , RTCSessionDescription(RTCSessionDescription), unRTCSessionDescription, castToRTCSessionDescription, gTypeRTCSessionDescription
-  , RTCStatsReport(RTCStatsReport), unRTCStatsReport, castToRTCStatsReport, gTypeRTCStatsReport
-  , RTCStatsResponse(RTCStatsResponse), unRTCStatsResponse, castToRTCStatsResponse, gTypeRTCStatsResponse
-  , RadioNodeList(RadioNodeList), unRadioNodeList, castToRadioNodeList, gTypeRadioNodeList
-  , Range(Range), unRange, castToRange, gTypeRange
-  , ReadableStream(ReadableStream), unReadableStream, castToReadableStream, gTypeReadableStream
-  , Rect(Rect), unRect, castToRect, gTypeRect
-  , SQLError(SQLError), unSQLError, castToSQLError, gTypeSQLError
-  , SQLResultSet(SQLResultSet), unSQLResultSet, castToSQLResultSet, gTypeSQLResultSet
-  , SQLResultSetRowList(SQLResultSetRowList), unSQLResultSetRowList, castToSQLResultSetRowList, gTypeSQLResultSetRowList
-  , SQLTransaction(SQLTransaction), unSQLTransaction, castToSQLTransaction, gTypeSQLTransaction
-  , SVGAElement(SVGAElement), unSVGAElement, castToSVGAElement, gTypeSVGAElement
-  , SVGAltGlyphDefElement(SVGAltGlyphDefElement), unSVGAltGlyphDefElement, castToSVGAltGlyphDefElement, gTypeSVGAltGlyphDefElement
-  , SVGAltGlyphElement(SVGAltGlyphElement), unSVGAltGlyphElement, castToSVGAltGlyphElement, gTypeSVGAltGlyphElement
-  , SVGAltGlyphItemElement(SVGAltGlyphItemElement), unSVGAltGlyphItemElement, castToSVGAltGlyphItemElement, gTypeSVGAltGlyphItemElement
-  , SVGAngle(SVGAngle), unSVGAngle, castToSVGAngle, gTypeSVGAngle
-  , SVGAnimateColorElement(SVGAnimateColorElement), unSVGAnimateColorElement, castToSVGAnimateColorElement, gTypeSVGAnimateColorElement
-  , SVGAnimateElement(SVGAnimateElement), unSVGAnimateElement, castToSVGAnimateElement, gTypeSVGAnimateElement
-  , SVGAnimateMotionElement(SVGAnimateMotionElement), unSVGAnimateMotionElement, castToSVGAnimateMotionElement, gTypeSVGAnimateMotionElement
-  , SVGAnimateTransformElement(SVGAnimateTransformElement), unSVGAnimateTransformElement, castToSVGAnimateTransformElement, gTypeSVGAnimateTransformElement
-  , SVGAnimatedAngle(SVGAnimatedAngle), unSVGAnimatedAngle, castToSVGAnimatedAngle, gTypeSVGAnimatedAngle
-  , SVGAnimatedBoolean(SVGAnimatedBoolean), unSVGAnimatedBoolean, castToSVGAnimatedBoolean, gTypeSVGAnimatedBoolean
-  , SVGAnimatedEnumeration(SVGAnimatedEnumeration), unSVGAnimatedEnumeration, castToSVGAnimatedEnumeration, gTypeSVGAnimatedEnumeration
-  , SVGAnimatedInteger(SVGAnimatedInteger), unSVGAnimatedInteger, castToSVGAnimatedInteger, gTypeSVGAnimatedInteger
-  , SVGAnimatedLength(SVGAnimatedLength), unSVGAnimatedLength, castToSVGAnimatedLength, gTypeSVGAnimatedLength
-  , SVGAnimatedLengthList(SVGAnimatedLengthList), unSVGAnimatedLengthList, castToSVGAnimatedLengthList, gTypeSVGAnimatedLengthList
-  , SVGAnimatedNumber(SVGAnimatedNumber), unSVGAnimatedNumber, castToSVGAnimatedNumber, gTypeSVGAnimatedNumber
-  , SVGAnimatedNumberList(SVGAnimatedNumberList), unSVGAnimatedNumberList, castToSVGAnimatedNumberList, gTypeSVGAnimatedNumberList
-  , SVGAnimatedPreserveAspectRatio(SVGAnimatedPreserveAspectRatio), unSVGAnimatedPreserveAspectRatio, castToSVGAnimatedPreserveAspectRatio, gTypeSVGAnimatedPreserveAspectRatio
-  , SVGAnimatedRect(SVGAnimatedRect), unSVGAnimatedRect, castToSVGAnimatedRect, gTypeSVGAnimatedRect
-  , SVGAnimatedString(SVGAnimatedString), unSVGAnimatedString, castToSVGAnimatedString, gTypeSVGAnimatedString
-  , SVGAnimatedTransformList(SVGAnimatedTransformList), unSVGAnimatedTransformList, castToSVGAnimatedTransformList, gTypeSVGAnimatedTransformList
-  , SVGAnimationElement(SVGAnimationElement), unSVGAnimationElement, IsSVGAnimationElement, toSVGAnimationElement, castToSVGAnimationElement, gTypeSVGAnimationElement
-  , SVGCircleElement(SVGCircleElement), unSVGCircleElement, castToSVGCircleElement, gTypeSVGCircleElement
-  , SVGClipPathElement(SVGClipPathElement), unSVGClipPathElement, castToSVGClipPathElement, gTypeSVGClipPathElement
-  , SVGColor(SVGColor), unSVGColor, IsSVGColor, toSVGColor, castToSVGColor, gTypeSVGColor
-  , SVGComponentTransferFunctionElement(SVGComponentTransferFunctionElement), unSVGComponentTransferFunctionElement, IsSVGComponentTransferFunctionElement, toSVGComponentTransferFunctionElement, castToSVGComponentTransferFunctionElement, gTypeSVGComponentTransferFunctionElement
-  , SVGCursorElement(SVGCursorElement), unSVGCursorElement, castToSVGCursorElement, gTypeSVGCursorElement
-  , SVGDefsElement(SVGDefsElement), unSVGDefsElement, castToSVGDefsElement, gTypeSVGDefsElement
-  , SVGDescElement(SVGDescElement), unSVGDescElement, castToSVGDescElement, gTypeSVGDescElement
-  , SVGDocument(SVGDocument), unSVGDocument, castToSVGDocument, gTypeSVGDocument
-  , SVGElement(SVGElement), unSVGElement, IsSVGElement, toSVGElement, castToSVGElement, gTypeSVGElement
-  , SVGEllipseElement(SVGEllipseElement), unSVGEllipseElement, castToSVGEllipseElement, gTypeSVGEllipseElement
-  , SVGExternalResourcesRequired(SVGExternalResourcesRequired), unSVGExternalResourcesRequired, castToSVGExternalResourcesRequired, gTypeSVGExternalResourcesRequired
-  , SVGFEBlendElement(SVGFEBlendElement), unSVGFEBlendElement, castToSVGFEBlendElement, gTypeSVGFEBlendElement
-  , SVGFEColorMatrixElement(SVGFEColorMatrixElement), unSVGFEColorMatrixElement, castToSVGFEColorMatrixElement, gTypeSVGFEColorMatrixElement
-  , SVGFEComponentTransferElement(SVGFEComponentTransferElement), unSVGFEComponentTransferElement, castToSVGFEComponentTransferElement, gTypeSVGFEComponentTransferElement
-  , SVGFECompositeElement(SVGFECompositeElement), unSVGFECompositeElement, castToSVGFECompositeElement, gTypeSVGFECompositeElement
-  , SVGFEConvolveMatrixElement(SVGFEConvolveMatrixElement), unSVGFEConvolveMatrixElement, castToSVGFEConvolveMatrixElement, gTypeSVGFEConvolveMatrixElement
-  , SVGFEDiffuseLightingElement(SVGFEDiffuseLightingElement), unSVGFEDiffuseLightingElement, castToSVGFEDiffuseLightingElement, gTypeSVGFEDiffuseLightingElement
-  , SVGFEDisplacementMapElement(SVGFEDisplacementMapElement), unSVGFEDisplacementMapElement, castToSVGFEDisplacementMapElement, gTypeSVGFEDisplacementMapElement
-  , SVGFEDistantLightElement(SVGFEDistantLightElement), unSVGFEDistantLightElement, castToSVGFEDistantLightElement, gTypeSVGFEDistantLightElement
-  , SVGFEDropShadowElement(SVGFEDropShadowElement), unSVGFEDropShadowElement, castToSVGFEDropShadowElement, gTypeSVGFEDropShadowElement
-  , SVGFEFloodElement(SVGFEFloodElement), unSVGFEFloodElement, castToSVGFEFloodElement, gTypeSVGFEFloodElement
-  , SVGFEFuncAElement(SVGFEFuncAElement), unSVGFEFuncAElement, castToSVGFEFuncAElement, gTypeSVGFEFuncAElement
-  , SVGFEFuncBElement(SVGFEFuncBElement), unSVGFEFuncBElement, castToSVGFEFuncBElement, gTypeSVGFEFuncBElement
-  , SVGFEFuncGElement(SVGFEFuncGElement), unSVGFEFuncGElement, castToSVGFEFuncGElement, gTypeSVGFEFuncGElement
-  , SVGFEFuncRElement(SVGFEFuncRElement), unSVGFEFuncRElement, castToSVGFEFuncRElement, gTypeSVGFEFuncRElement
-  , SVGFEGaussianBlurElement(SVGFEGaussianBlurElement), unSVGFEGaussianBlurElement, castToSVGFEGaussianBlurElement, gTypeSVGFEGaussianBlurElement
-  , SVGFEImageElement(SVGFEImageElement), unSVGFEImageElement, castToSVGFEImageElement, gTypeSVGFEImageElement
-  , SVGFEMergeElement(SVGFEMergeElement), unSVGFEMergeElement, castToSVGFEMergeElement, gTypeSVGFEMergeElement
-  , SVGFEMergeNodeElement(SVGFEMergeNodeElement), unSVGFEMergeNodeElement, castToSVGFEMergeNodeElement, gTypeSVGFEMergeNodeElement
-  , SVGFEMorphologyElement(SVGFEMorphologyElement), unSVGFEMorphologyElement, castToSVGFEMorphologyElement, gTypeSVGFEMorphologyElement
-  , SVGFEOffsetElement(SVGFEOffsetElement), unSVGFEOffsetElement, castToSVGFEOffsetElement, gTypeSVGFEOffsetElement
-  , SVGFEPointLightElement(SVGFEPointLightElement), unSVGFEPointLightElement, castToSVGFEPointLightElement, gTypeSVGFEPointLightElement
-  , SVGFESpecularLightingElement(SVGFESpecularLightingElement), unSVGFESpecularLightingElement, castToSVGFESpecularLightingElement, gTypeSVGFESpecularLightingElement
-  , SVGFESpotLightElement(SVGFESpotLightElement), unSVGFESpotLightElement, castToSVGFESpotLightElement, gTypeSVGFESpotLightElement
-  , SVGFETileElement(SVGFETileElement), unSVGFETileElement, castToSVGFETileElement, gTypeSVGFETileElement
-  , SVGFETurbulenceElement(SVGFETurbulenceElement), unSVGFETurbulenceElement, castToSVGFETurbulenceElement, gTypeSVGFETurbulenceElement
-  , SVGFilterElement(SVGFilterElement), unSVGFilterElement, castToSVGFilterElement, gTypeSVGFilterElement
-  , SVGFilterPrimitiveStandardAttributes(SVGFilterPrimitiveStandardAttributes), unSVGFilterPrimitiveStandardAttributes, castToSVGFilterPrimitiveStandardAttributes, gTypeSVGFilterPrimitiveStandardAttributes
-  , SVGFitToViewBox(SVGFitToViewBox), unSVGFitToViewBox, castToSVGFitToViewBox, gTypeSVGFitToViewBox
-  , SVGFontElement(SVGFontElement), unSVGFontElement, castToSVGFontElement, gTypeSVGFontElement
-  , SVGFontFaceElement(SVGFontFaceElement), unSVGFontFaceElement, castToSVGFontFaceElement, gTypeSVGFontFaceElement
-  , SVGFontFaceFormatElement(SVGFontFaceFormatElement), unSVGFontFaceFormatElement, castToSVGFontFaceFormatElement, gTypeSVGFontFaceFormatElement
-  , SVGFontFaceNameElement(SVGFontFaceNameElement), unSVGFontFaceNameElement, castToSVGFontFaceNameElement, gTypeSVGFontFaceNameElement
-  , SVGFontFaceSrcElement(SVGFontFaceSrcElement), unSVGFontFaceSrcElement, castToSVGFontFaceSrcElement, gTypeSVGFontFaceSrcElement
-  , SVGFontFaceUriElement(SVGFontFaceUriElement), unSVGFontFaceUriElement, castToSVGFontFaceUriElement, gTypeSVGFontFaceUriElement
-  , SVGForeignObjectElement(SVGForeignObjectElement), unSVGForeignObjectElement, castToSVGForeignObjectElement, gTypeSVGForeignObjectElement
-  , SVGGElement(SVGGElement), unSVGGElement, castToSVGGElement, gTypeSVGGElement
-  , SVGGlyphElement(SVGGlyphElement), unSVGGlyphElement, castToSVGGlyphElement, gTypeSVGGlyphElement
-  , SVGGlyphRefElement(SVGGlyphRefElement), unSVGGlyphRefElement, castToSVGGlyphRefElement, gTypeSVGGlyphRefElement
-  , SVGGradientElement(SVGGradientElement), unSVGGradientElement, IsSVGGradientElement, toSVGGradientElement, castToSVGGradientElement, gTypeSVGGradientElement
-  , SVGGraphicsElement(SVGGraphicsElement), unSVGGraphicsElement, IsSVGGraphicsElement, toSVGGraphicsElement, castToSVGGraphicsElement, gTypeSVGGraphicsElement
-  , SVGHKernElement(SVGHKernElement), unSVGHKernElement, castToSVGHKernElement, gTypeSVGHKernElement
-  , SVGImageElement(SVGImageElement), unSVGImageElement, castToSVGImageElement, gTypeSVGImageElement
-  , SVGLength(SVGLength), unSVGLength, castToSVGLength, gTypeSVGLength
-  , SVGLengthList(SVGLengthList), unSVGLengthList, castToSVGLengthList, gTypeSVGLengthList
-  , SVGLineElement(SVGLineElement), unSVGLineElement, castToSVGLineElement, gTypeSVGLineElement
-  , SVGLinearGradientElement(SVGLinearGradientElement), unSVGLinearGradientElement, castToSVGLinearGradientElement, gTypeSVGLinearGradientElement
-  , SVGMPathElement(SVGMPathElement), unSVGMPathElement, castToSVGMPathElement, gTypeSVGMPathElement
-  , SVGMarkerElement(SVGMarkerElement), unSVGMarkerElement, castToSVGMarkerElement, gTypeSVGMarkerElement
-  , SVGMaskElement(SVGMaskElement), unSVGMaskElement, castToSVGMaskElement, gTypeSVGMaskElement
-  , SVGMatrix(SVGMatrix), unSVGMatrix, castToSVGMatrix, gTypeSVGMatrix
-  , SVGMetadataElement(SVGMetadataElement), unSVGMetadataElement, castToSVGMetadataElement, gTypeSVGMetadataElement
-  , SVGMissingGlyphElement(SVGMissingGlyphElement), unSVGMissingGlyphElement, castToSVGMissingGlyphElement, gTypeSVGMissingGlyphElement
-  , SVGNumber(SVGNumber), unSVGNumber, castToSVGNumber, gTypeSVGNumber
-  , SVGNumberList(SVGNumberList), unSVGNumberList, castToSVGNumberList, gTypeSVGNumberList
-  , SVGPaint(SVGPaint), unSVGPaint, castToSVGPaint, gTypeSVGPaint
-  , SVGPathElement(SVGPathElement), unSVGPathElement, castToSVGPathElement, gTypeSVGPathElement
-  , SVGPathSeg(SVGPathSeg), unSVGPathSeg, IsSVGPathSeg, toSVGPathSeg, castToSVGPathSeg, gTypeSVGPathSeg
-  , SVGPathSegArcAbs(SVGPathSegArcAbs), unSVGPathSegArcAbs, castToSVGPathSegArcAbs, gTypeSVGPathSegArcAbs
-  , SVGPathSegArcRel(SVGPathSegArcRel), unSVGPathSegArcRel, castToSVGPathSegArcRel, gTypeSVGPathSegArcRel
-  , SVGPathSegClosePath(SVGPathSegClosePath), unSVGPathSegClosePath, castToSVGPathSegClosePath, gTypeSVGPathSegClosePath
-  , SVGPathSegCurvetoCubicAbs(SVGPathSegCurvetoCubicAbs), unSVGPathSegCurvetoCubicAbs, castToSVGPathSegCurvetoCubicAbs, gTypeSVGPathSegCurvetoCubicAbs
-  , SVGPathSegCurvetoCubicRel(SVGPathSegCurvetoCubicRel), unSVGPathSegCurvetoCubicRel, castToSVGPathSegCurvetoCubicRel, gTypeSVGPathSegCurvetoCubicRel
-  , SVGPathSegCurvetoCubicSmoothAbs(SVGPathSegCurvetoCubicSmoothAbs), unSVGPathSegCurvetoCubicSmoothAbs, castToSVGPathSegCurvetoCubicSmoothAbs, gTypeSVGPathSegCurvetoCubicSmoothAbs
-  , SVGPathSegCurvetoCubicSmoothRel(SVGPathSegCurvetoCubicSmoothRel), unSVGPathSegCurvetoCubicSmoothRel, castToSVGPathSegCurvetoCubicSmoothRel, gTypeSVGPathSegCurvetoCubicSmoothRel
-  , SVGPathSegCurvetoQuadraticAbs(SVGPathSegCurvetoQuadraticAbs), unSVGPathSegCurvetoQuadraticAbs, castToSVGPathSegCurvetoQuadraticAbs, gTypeSVGPathSegCurvetoQuadraticAbs
-  , SVGPathSegCurvetoQuadraticRel(SVGPathSegCurvetoQuadraticRel), unSVGPathSegCurvetoQuadraticRel, castToSVGPathSegCurvetoQuadraticRel, gTypeSVGPathSegCurvetoQuadraticRel
-  , SVGPathSegCurvetoQuadraticSmoothAbs(SVGPathSegCurvetoQuadraticSmoothAbs), unSVGPathSegCurvetoQuadraticSmoothAbs, castToSVGPathSegCurvetoQuadraticSmoothAbs, gTypeSVGPathSegCurvetoQuadraticSmoothAbs
-  , SVGPathSegCurvetoQuadraticSmoothRel(SVGPathSegCurvetoQuadraticSmoothRel), unSVGPathSegCurvetoQuadraticSmoothRel, castToSVGPathSegCurvetoQuadraticSmoothRel, gTypeSVGPathSegCurvetoQuadraticSmoothRel
-  , SVGPathSegLinetoAbs(SVGPathSegLinetoAbs), unSVGPathSegLinetoAbs, castToSVGPathSegLinetoAbs, gTypeSVGPathSegLinetoAbs
-  , SVGPathSegLinetoHorizontalAbs(SVGPathSegLinetoHorizontalAbs), unSVGPathSegLinetoHorizontalAbs, castToSVGPathSegLinetoHorizontalAbs, gTypeSVGPathSegLinetoHorizontalAbs
-  , SVGPathSegLinetoHorizontalRel(SVGPathSegLinetoHorizontalRel), unSVGPathSegLinetoHorizontalRel, castToSVGPathSegLinetoHorizontalRel, gTypeSVGPathSegLinetoHorizontalRel
-  , SVGPathSegLinetoRel(SVGPathSegLinetoRel), unSVGPathSegLinetoRel, castToSVGPathSegLinetoRel, gTypeSVGPathSegLinetoRel
-  , SVGPathSegLinetoVerticalAbs(SVGPathSegLinetoVerticalAbs), unSVGPathSegLinetoVerticalAbs, castToSVGPathSegLinetoVerticalAbs, gTypeSVGPathSegLinetoVerticalAbs
-  , SVGPathSegLinetoVerticalRel(SVGPathSegLinetoVerticalRel), unSVGPathSegLinetoVerticalRel, castToSVGPathSegLinetoVerticalRel, gTypeSVGPathSegLinetoVerticalRel
-  , SVGPathSegList(SVGPathSegList), unSVGPathSegList, castToSVGPathSegList, gTypeSVGPathSegList
-  , SVGPathSegMovetoAbs(SVGPathSegMovetoAbs), unSVGPathSegMovetoAbs, castToSVGPathSegMovetoAbs, gTypeSVGPathSegMovetoAbs
-  , SVGPathSegMovetoRel(SVGPathSegMovetoRel), unSVGPathSegMovetoRel, castToSVGPathSegMovetoRel, gTypeSVGPathSegMovetoRel
-  , SVGPatternElement(SVGPatternElement), unSVGPatternElement, castToSVGPatternElement, gTypeSVGPatternElement
-  , SVGPoint(SVGPoint), unSVGPoint, castToSVGPoint, gTypeSVGPoint
-  , SVGPointList(SVGPointList), unSVGPointList, castToSVGPointList, gTypeSVGPointList
-  , SVGPolygonElement(SVGPolygonElement), unSVGPolygonElement, castToSVGPolygonElement, gTypeSVGPolygonElement
-  , SVGPolylineElement(SVGPolylineElement), unSVGPolylineElement, castToSVGPolylineElement, gTypeSVGPolylineElement
-  , SVGPreserveAspectRatio(SVGPreserveAspectRatio), unSVGPreserveAspectRatio, castToSVGPreserveAspectRatio, gTypeSVGPreserveAspectRatio
-  , SVGRadialGradientElement(SVGRadialGradientElement), unSVGRadialGradientElement, castToSVGRadialGradientElement, gTypeSVGRadialGradientElement
-  , SVGRect(SVGRect), unSVGRect, castToSVGRect, gTypeSVGRect
-  , SVGRectElement(SVGRectElement), unSVGRectElement, castToSVGRectElement, gTypeSVGRectElement
-  , SVGRenderingIntent(SVGRenderingIntent), unSVGRenderingIntent, castToSVGRenderingIntent, gTypeSVGRenderingIntent
-  , SVGSVGElement(SVGSVGElement), unSVGSVGElement, castToSVGSVGElement, gTypeSVGSVGElement
-  , SVGScriptElement(SVGScriptElement), unSVGScriptElement, castToSVGScriptElement, gTypeSVGScriptElement
-  , SVGSetElement(SVGSetElement), unSVGSetElement, castToSVGSetElement, gTypeSVGSetElement
-  , SVGStopElement(SVGStopElement), unSVGStopElement, castToSVGStopElement, gTypeSVGStopElement
-  , SVGStringList(SVGStringList), unSVGStringList, castToSVGStringList, gTypeSVGStringList
-  , SVGStyleElement(SVGStyleElement), unSVGStyleElement, castToSVGStyleElement, gTypeSVGStyleElement
-  , SVGSwitchElement(SVGSwitchElement), unSVGSwitchElement, castToSVGSwitchElement, gTypeSVGSwitchElement
-  , SVGSymbolElement(SVGSymbolElement), unSVGSymbolElement, castToSVGSymbolElement, gTypeSVGSymbolElement
-  , SVGTRefElement(SVGTRefElement), unSVGTRefElement, castToSVGTRefElement, gTypeSVGTRefElement
-  , SVGTSpanElement(SVGTSpanElement), unSVGTSpanElement, castToSVGTSpanElement, gTypeSVGTSpanElement
-  , SVGTests(SVGTests), unSVGTests, castToSVGTests, gTypeSVGTests
-  , SVGTextContentElement(SVGTextContentElement), unSVGTextContentElement, IsSVGTextContentElement, toSVGTextContentElement, castToSVGTextContentElement, gTypeSVGTextContentElement
-  , SVGTextElement(SVGTextElement), unSVGTextElement, castToSVGTextElement, gTypeSVGTextElement
-  , SVGTextPathElement(SVGTextPathElement), unSVGTextPathElement, castToSVGTextPathElement, gTypeSVGTextPathElement
-  , SVGTextPositioningElement(SVGTextPositioningElement), unSVGTextPositioningElement, IsSVGTextPositioningElement, toSVGTextPositioningElement, castToSVGTextPositioningElement, gTypeSVGTextPositioningElement
-  , SVGTitleElement(SVGTitleElement), unSVGTitleElement, castToSVGTitleElement, gTypeSVGTitleElement
-  , SVGTransform(SVGTransform), unSVGTransform, castToSVGTransform, gTypeSVGTransform
-  , SVGTransformList(SVGTransformList), unSVGTransformList, castToSVGTransformList, gTypeSVGTransformList
-  , SVGURIReference(SVGURIReference), unSVGURIReference, castToSVGURIReference, gTypeSVGURIReference
-  , SVGUnitTypes(SVGUnitTypes), unSVGUnitTypes, castToSVGUnitTypes, gTypeSVGUnitTypes
-  , SVGUseElement(SVGUseElement), unSVGUseElement, castToSVGUseElement, gTypeSVGUseElement
-  , SVGVKernElement(SVGVKernElement), unSVGVKernElement, castToSVGVKernElement, gTypeSVGVKernElement
-  , SVGViewElement(SVGViewElement), unSVGViewElement, castToSVGViewElement, gTypeSVGViewElement
-  , SVGViewSpec(SVGViewSpec), unSVGViewSpec, castToSVGViewSpec, gTypeSVGViewSpec
-  , SVGZoomAndPan(SVGZoomAndPan), unSVGZoomAndPan, castToSVGZoomAndPan, gTypeSVGZoomAndPan
-  , SVGZoomEvent(SVGZoomEvent), unSVGZoomEvent, castToSVGZoomEvent, gTypeSVGZoomEvent
-  , Screen(Screen), unScreen, castToScreen, gTypeScreen
-  , ScriptProcessorNode(ScriptProcessorNode), unScriptProcessorNode, castToScriptProcessorNode, gTypeScriptProcessorNode
-  , ScriptProfile(ScriptProfile), unScriptProfile, castToScriptProfile, gTypeScriptProfile
-  , ScriptProfileNode(ScriptProfileNode), unScriptProfileNode, castToScriptProfileNode, gTypeScriptProfileNode
-  , SecurityPolicy(SecurityPolicy), unSecurityPolicy, castToSecurityPolicy, gTypeSecurityPolicy
-  , SecurityPolicyViolationEvent(SecurityPolicyViolationEvent), unSecurityPolicyViolationEvent, castToSecurityPolicyViolationEvent, gTypeSecurityPolicyViolationEvent
-  , Selection(Selection), unSelection, castToSelection, gTypeSelection
-  , SourceBuffer(SourceBuffer), unSourceBuffer, castToSourceBuffer, gTypeSourceBuffer
-  , SourceBufferList(SourceBufferList), unSourceBufferList, castToSourceBufferList, gTypeSourceBufferList
-  , SourceInfo(SourceInfo), unSourceInfo, castToSourceInfo, gTypeSourceInfo
-  , SpeechSynthesis(SpeechSynthesis), unSpeechSynthesis, castToSpeechSynthesis, gTypeSpeechSynthesis
-  , SpeechSynthesisEvent(SpeechSynthesisEvent), unSpeechSynthesisEvent, castToSpeechSynthesisEvent, gTypeSpeechSynthesisEvent
-  , SpeechSynthesisUtterance(SpeechSynthesisUtterance), unSpeechSynthesisUtterance, castToSpeechSynthesisUtterance, gTypeSpeechSynthesisUtterance
-  , SpeechSynthesisVoice(SpeechSynthesisVoice), unSpeechSynthesisVoice, castToSpeechSynthesisVoice, gTypeSpeechSynthesisVoice
-  , Storage(Storage), unStorage, castToStorage, gTypeStorage
-  , StorageEvent(StorageEvent), unStorageEvent, castToStorageEvent, gTypeStorageEvent
-  , StorageInfo(StorageInfo), unStorageInfo, castToStorageInfo, gTypeStorageInfo
-  , StorageQuota(StorageQuota), unStorageQuota, castToStorageQuota, gTypeStorageQuota
-  , StyleMedia(StyleMedia), unStyleMedia, castToStyleMedia, gTypeStyleMedia
-  , StyleSheet(StyleSheet), unStyleSheet, IsStyleSheet, toStyleSheet, castToStyleSheet, gTypeStyleSheet
-  , StyleSheetList(StyleSheetList), unStyleSheetList, castToStyleSheetList, gTypeStyleSheetList
-  , SubtleCrypto(SubtleCrypto), unSubtleCrypto, castToSubtleCrypto, gTypeSubtleCrypto
-  , Text(Text), unText, IsText, toText, castToText, gTypeText
-  , TextEvent(TextEvent), unTextEvent, castToTextEvent, gTypeTextEvent
-  , TextMetrics(TextMetrics), unTextMetrics, castToTextMetrics, gTypeTextMetrics
-  , TextTrack(TextTrack), unTextTrack, castToTextTrack, gTypeTextTrack
-  , TextTrackCue(TextTrackCue), unTextTrackCue, IsTextTrackCue, toTextTrackCue, castToTextTrackCue, gTypeTextTrackCue
-  , TextTrackCueList(TextTrackCueList), unTextTrackCueList, castToTextTrackCueList, gTypeTextTrackCueList
-  , TextTrackList(TextTrackList), unTextTrackList, castToTextTrackList, gTypeTextTrackList
-  , TimeRanges(TimeRanges), unTimeRanges, castToTimeRanges, gTypeTimeRanges
-  , Touch(Touch), unTouch, castToTouch, gTypeTouch
-  , TouchEvent(TouchEvent), unTouchEvent, castToTouchEvent, gTypeTouchEvent
-  , TouchList(TouchList), unTouchList, castToTouchList, gTypeTouchList
-  , TrackEvent(TrackEvent), unTrackEvent, castToTrackEvent, gTypeTrackEvent
-  , TransitionEvent(TransitionEvent), unTransitionEvent, castToTransitionEvent, gTypeTransitionEvent
-  , TreeWalker(TreeWalker), unTreeWalker, castToTreeWalker, gTypeTreeWalker
-  , TypeConversions(TypeConversions), unTypeConversions, castToTypeConversions, gTypeTypeConversions
-  , UIEvent(UIEvent), unUIEvent, IsUIEvent, toUIEvent, castToUIEvent, gTypeUIEvent
-  , UIRequestEvent(UIRequestEvent), unUIRequestEvent, castToUIRequestEvent, gTypeUIRequestEvent
-  , URL(URL), unURL, castToURL, gTypeURL
-  , URLUtils(URLUtils), unURLUtils, castToURLUtils, gTypeURLUtils
-  , UserMessageHandler(UserMessageHandler), unUserMessageHandler, castToUserMessageHandler, gTypeUserMessageHandler
-  , UserMessageHandlersNamespace(UserMessageHandlersNamespace), unUserMessageHandlersNamespace, castToUserMessageHandlersNamespace, gTypeUserMessageHandlersNamespace
-  , VTTCue(VTTCue), unVTTCue, castToVTTCue, gTypeVTTCue
-  , VTTRegion(VTTRegion), unVTTRegion, castToVTTRegion, gTypeVTTRegion
-  , VTTRegionList(VTTRegionList), unVTTRegionList, castToVTTRegionList, gTypeVTTRegionList
-  , ValidityState(ValidityState), unValidityState, castToValidityState, gTypeValidityState
-  , VideoPlaybackQuality(VideoPlaybackQuality), unVideoPlaybackQuality, castToVideoPlaybackQuality, gTypeVideoPlaybackQuality
-  , VideoStreamTrack(VideoStreamTrack), unVideoStreamTrack, castToVideoStreamTrack, gTypeVideoStreamTrack
-  , VideoTrack(VideoTrack), unVideoTrack, castToVideoTrack, gTypeVideoTrack
-  , VideoTrackList(VideoTrackList), unVideoTrackList, castToVideoTrackList, gTypeVideoTrackList
-  , WaveShaperNode(WaveShaperNode), unWaveShaperNode, castToWaveShaperNode, gTypeWaveShaperNode
-  , WebGL2RenderingContext(WebGL2RenderingContext), unWebGL2RenderingContext, castToWebGL2RenderingContext, gTypeWebGL2RenderingContext
-  , WebGLActiveInfo(WebGLActiveInfo), unWebGLActiveInfo, castToWebGLActiveInfo, gTypeWebGLActiveInfo
-  , WebGLBuffer(WebGLBuffer), unWebGLBuffer, castToWebGLBuffer, gTypeWebGLBuffer
-  , WebGLCompressedTextureATC(WebGLCompressedTextureATC), unWebGLCompressedTextureATC, castToWebGLCompressedTextureATC, gTypeWebGLCompressedTextureATC
-  , WebGLCompressedTexturePVRTC(WebGLCompressedTexturePVRTC), unWebGLCompressedTexturePVRTC, castToWebGLCompressedTexturePVRTC, gTypeWebGLCompressedTexturePVRTC
-  , WebGLCompressedTextureS3TC(WebGLCompressedTextureS3TC), unWebGLCompressedTextureS3TC, castToWebGLCompressedTextureS3TC, gTypeWebGLCompressedTextureS3TC
-  , WebGLContextAttributes(WebGLContextAttributes), unWebGLContextAttributes, castToWebGLContextAttributes, gTypeWebGLContextAttributes
-  , WebGLContextEvent(WebGLContextEvent), unWebGLContextEvent, castToWebGLContextEvent, gTypeWebGLContextEvent
-  , WebGLDebugRendererInfo(WebGLDebugRendererInfo), unWebGLDebugRendererInfo, castToWebGLDebugRendererInfo, gTypeWebGLDebugRendererInfo
-  , WebGLDebugShaders(WebGLDebugShaders), unWebGLDebugShaders, castToWebGLDebugShaders, gTypeWebGLDebugShaders
-  , WebGLDepthTexture(WebGLDepthTexture), unWebGLDepthTexture, castToWebGLDepthTexture, gTypeWebGLDepthTexture
-  , WebGLDrawBuffers(WebGLDrawBuffers), unWebGLDrawBuffers, castToWebGLDrawBuffers, gTypeWebGLDrawBuffers
-  , WebGLFramebuffer(WebGLFramebuffer), unWebGLFramebuffer, castToWebGLFramebuffer, gTypeWebGLFramebuffer
-  , WebGLLoseContext(WebGLLoseContext), unWebGLLoseContext, castToWebGLLoseContext, gTypeWebGLLoseContext
-  , WebGLProgram(WebGLProgram), unWebGLProgram, castToWebGLProgram, gTypeWebGLProgram
-  , WebGLQuery(WebGLQuery), unWebGLQuery, castToWebGLQuery, gTypeWebGLQuery
-  , WebGLRenderbuffer(WebGLRenderbuffer), unWebGLRenderbuffer, castToWebGLRenderbuffer, gTypeWebGLRenderbuffer
-  , WebGLRenderingContext(WebGLRenderingContext), unWebGLRenderingContext, castToWebGLRenderingContext, gTypeWebGLRenderingContext
-  , WebGLRenderingContextBase(WebGLRenderingContextBase), unWebGLRenderingContextBase, IsWebGLRenderingContextBase, toWebGLRenderingContextBase, castToWebGLRenderingContextBase, gTypeWebGLRenderingContextBase
-  , WebGLSampler(WebGLSampler), unWebGLSampler, castToWebGLSampler, gTypeWebGLSampler
-  , WebGLShader(WebGLShader), unWebGLShader, castToWebGLShader, gTypeWebGLShader
-  , WebGLShaderPrecisionFormat(WebGLShaderPrecisionFormat), unWebGLShaderPrecisionFormat, castToWebGLShaderPrecisionFormat, gTypeWebGLShaderPrecisionFormat
-  , WebGLSync(WebGLSync), unWebGLSync, castToWebGLSync, gTypeWebGLSync
-  , WebGLTexture(WebGLTexture), unWebGLTexture, castToWebGLTexture, gTypeWebGLTexture
-  , WebGLTransformFeedback(WebGLTransformFeedback), unWebGLTransformFeedback, castToWebGLTransformFeedback, gTypeWebGLTransformFeedback
-  , WebGLUniformLocation(WebGLUniformLocation), unWebGLUniformLocation, castToWebGLUniformLocation, gTypeWebGLUniformLocation
-  , WebGLVertexArrayObject(WebGLVertexArrayObject), unWebGLVertexArrayObject, castToWebGLVertexArrayObject, gTypeWebGLVertexArrayObject
-  , WebGLVertexArrayObjectOES(WebGLVertexArrayObjectOES), unWebGLVertexArrayObjectOES, castToWebGLVertexArrayObjectOES, gTypeWebGLVertexArrayObjectOES
-  , WebKitAnimationEvent(WebKitAnimationEvent), unWebKitAnimationEvent, castToWebKitAnimationEvent, gTypeWebKitAnimationEvent
-  , WebKitCSSFilterValue(WebKitCSSFilterValue), unWebKitCSSFilterValue, castToWebKitCSSFilterValue, gTypeWebKitCSSFilterValue
-  , WebKitCSSMatrix(WebKitCSSMatrix), unWebKitCSSMatrix, castToWebKitCSSMatrix, gTypeWebKitCSSMatrix
-  , WebKitCSSRegionRule(WebKitCSSRegionRule), unWebKitCSSRegionRule, castToWebKitCSSRegionRule, gTypeWebKitCSSRegionRule
-  , WebKitCSSTransformValue(WebKitCSSTransformValue), unWebKitCSSTransformValue, castToWebKitCSSTransformValue, gTypeWebKitCSSTransformValue
-  , WebKitCSSViewportRule(WebKitCSSViewportRule), unWebKitCSSViewportRule, castToWebKitCSSViewportRule, gTypeWebKitCSSViewportRule
-  , WebKitNamedFlow(WebKitNamedFlow), unWebKitNamedFlow, castToWebKitNamedFlow, gTypeWebKitNamedFlow
-  , WebKitNamespace(WebKitNamespace), unWebKitNamespace, castToWebKitNamespace, gTypeWebKitNamespace
-  , WebKitPlaybackTargetAvailabilityEvent(WebKitPlaybackTargetAvailabilityEvent), unWebKitPlaybackTargetAvailabilityEvent, castToWebKitPlaybackTargetAvailabilityEvent, gTypeWebKitPlaybackTargetAvailabilityEvent
-  , WebKitPoint(WebKitPoint), unWebKitPoint, castToWebKitPoint, gTypeWebKitPoint
-  , WebKitTransitionEvent(WebKitTransitionEvent), unWebKitTransitionEvent, castToWebKitTransitionEvent, gTypeWebKitTransitionEvent
-  , WebSocket(WebSocket), unWebSocket, castToWebSocket, gTypeWebSocket
-  , WheelEvent(WheelEvent), unWheelEvent, castToWheelEvent, gTypeWheelEvent
-  , Window(Window), unWindow, castToWindow, gTypeWindow
-  , WindowBase64(WindowBase64), unWindowBase64, castToWindowBase64, gTypeWindowBase64
-  , WindowTimers(WindowTimers), unWindowTimers, castToWindowTimers, gTypeWindowTimers
-  , Worker(Worker), unWorker, castToWorker, gTypeWorker
-  , WorkerGlobalScope(WorkerGlobalScope), unWorkerGlobalScope, IsWorkerGlobalScope, toWorkerGlobalScope, castToWorkerGlobalScope, gTypeWorkerGlobalScope
-  , WorkerLocation(WorkerLocation), unWorkerLocation, castToWorkerLocation, gTypeWorkerLocation
-  , WorkerNavigator(WorkerNavigator), unWorkerNavigator, castToWorkerNavigator, gTypeWorkerNavigator
-  , XMLHttpRequest(XMLHttpRequest), unXMLHttpRequest, castToXMLHttpRequest, gTypeXMLHttpRequest
-  , XMLHttpRequestProgressEvent(XMLHttpRequestProgressEvent), unXMLHttpRequestProgressEvent, castToXMLHttpRequestProgressEvent, gTypeXMLHttpRequestProgressEvent
-  , XMLHttpRequestUpload(XMLHttpRequestUpload), unXMLHttpRequestUpload, castToXMLHttpRequestUpload, gTypeXMLHttpRequestUpload
-  , XMLSerializer(XMLSerializer), unXMLSerializer, castToXMLSerializer, gTypeXMLSerializer
-  , XPathEvaluator(XPathEvaluator), unXPathEvaluator, castToXPathEvaluator, gTypeXPathEvaluator
-  , XPathExpression(XPathExpression), unXPathExpression, castToXPathExpression, gTypeXPathExpression
-  , XPathNSResolver(XPathNSResolver), unXPathNSResolver, castToXPathNSResolver, gTypeXPathNSResolver
-  , XPathResult(XPathResult), unXPathResult, castToXPathResult, gTypeXPathResult
-  , XSLTProcessor(XSLTProcessor), unXSLTProcessor, castToXSLTProcessor, gTypeXSLTProcessor
-#else
-    propagateGError, GType(..), DOMString(..), ToDOMString(..), FromDOMString(..)
-  , FocusEvent
-  , TouchEvent
-  , module Graphics.UI.Gtk.WebKit.Types
-  , IsGObject
-
-  , IsApplicationCache
-  , IsAttr
-#ifndef USE_OLD_WEBKIT
-  , IsAudioTrack
-#endif
-#ifndef USE_OLD_WEBKIT
-  , IsAudioTrackList
-#endif
-#ifndef USE_OLD_WEBKIT
-  , IsBarProp
-#endif
-#ifndef USE_OLD_WEBKIT
-  , IsBatteryManager
-#endif
-  , IsBlob
-  , IsCDATASection
-#ifndef USE_OLD_WEBKIT
-  , IsCSS
-#endif
-  , IsCSSRule
-  , IsCSSRuleList
-  , IsCSSStyleDeclaration
-  , IsCSSStyleSheet
-  , IsCSSValue
-  , IsCharacterData
-  , IsComment
-  , IsDOMImplementation
-#ifndef USE_OLD_WEBKIT
-  , IsDOMNamedFlowCollection
-#endif
-  , IsDOMSettableTokenList
-  , IsDOMStringList
-  , IsDOMTokenList
-  , IsDocument
-  , IsDocumentFragment
-  , IsDocumentType
-  , IsElement
-  , IsEntityReference
-  , IsEvent
-  , IsEventTarget
-  , IsFile
-  , IsFileList
-  , IsGeolocation
-  , IsHTMLAnchorElement
-  , IsHTMLAppletElement
-  , IsHTMLAreaElement
-  , IsHTMLAudioElement
-  , IsHTMLBRElement
-  , IsHTMLBaseElement
-  , IsHTMLBaseFontElement
-  , IsHTMLBodyElement
-  , IsHTMLButtonElement
-  , IsHTMLCanvasElement
-  , IsHTMLCollection
-  , IsHTMLDListElement
-  , IsHTMLDetailsElement
-  , IsHTMLDirectoryElement
-  , IsHTMLDivElement
-  , IsHTMLDocument
-  , IsHTMLElement
-  , IsHTMLEmbedElement
-  , IsHTMLFieldSetElement
-  , IsHTMLFontElement
-  , IsHTMLFormElement
-  , IsHTMLFrameElement
-  , IsHTMLFrameSetElement
-  , IsHTMLHRElement
-  , IsHTMLHeadElement
-  , IsHTMLHeadingElement
-  , IsHTMLHtmlElement
-  , IsHTMLIFrameElement
-  , IsHTMLImageElement
-  , IsHTMLInputElement
-  , IsHTMLKeygenElement
-  , IsHTMLLIElement
-  , IsHTMLLabelElement
-  , IsHTMLLegendElement
-  , IsHTMLLinkElement
-  , IsHTMLMapElement
-  , IsHTMLMarqueeElement
-  , IsHTMLMediaElement
-  , IsHTMLMenuElement
-  , IsHTMLMetaElement
-  , IsHTMLModElement
-  , IsHTMLOListElement
-  , IsHTMLObjectElement
-  , IsHTMLOptGroupElement
-  , IsHTMLOptionElement
-  , IsHTMLOptionsCollection
-  , IsHTMLParagraphElement
-  , IsHTMLParamElement
-  , IsHTMLPreElement
-  , IsHTMLQuoteElement
-  , IsHTMLScriptElement
-  , IsHTMLSelectElement
-  , IsHTMLStyleElement
-  , IsHTMLTableCaptionElement
-  , IsHTMLTableCellElement
-  , IsHTMLTableColElement
-  , IsHTMLTableElement
-  , IsHTMLTableRowElement
-  , IsHTMLTableSectionElement
-  , IsHTMLTextAreaElement
-  , IsHTMLTitleElement
-  , IsHTMLUListElement
-  , IsHTMLVideoElement
-  , IsHistory
-#ifndef USE_OLD_WEBKIT
-  , IsKeyboardEvent
-#endif
-  , IsLocation
-  , IsMediaError
-  , IsMediaList
-  , IsMediaQueryList
-  , IsMessagePort
-  , IsMimeType
-  , IsMimeTypeArray
-  , IsMouseEvent
-  , IsNamedNodeMap
-  , IsNavigator
-  , IsNode
-  , IsNodeFilter
-  , IsNodeIterator
-  , IsNodeList
-#ifndef USE_OLD_WEBKIT
-  , IsPerformance
-#endif
-#ifndef USE_OLD_WEBKIT
-  , IsPerformanceNavigation
-#endif
-#ifndef USE_OLD_WEBKIT
-  , IsPerformanceTiming
-#endif
-  , IsPlugin
-  , IsPluginArray
-  , IsProcessingInstruction
-  , IsRange
-  , IsScreen
-#ifndef USE_OLD_WEBKIT
-  , IsSecurityPolicy
-#endif
-  , IsSelection
-  , IsStorage
-#ifndef USE_OLD_WEBKIT
-  , IsStorageInfo
-#endif
-#ifndef USE_OLD_WEBKIT
-  , IsStorageQuota
-#endif
-  , IsStyleMedia
-  , IsStyleSheet
-  , IsStyleSheetList
-  , IsText
-#ifndef USE_OLD_WEBKIT
-  , IsTextTrack
-#endif
-#ifndef USE_OLD_WEBKIT
-  , IsTextTrackCue
-#endif
-#ifndef USE_OLD_WEBKIT
-  , IsTextTrackCueList
-#endif
-#ifndef USE_OLD_WEBKIT
-  , IsTextTrackList
-#endif
-  , IsTimeRanges
-#ifndef USE_OLD_WEBKIT
-  , IsTouch
-#endif
-  , IsTreeWalker
-  , IsUIEvent
-  , IsValidityState
-#ifndef USE_OLD_WEBKIT
-  , IsVideoTrack
-#endif
-#ifndef USE_OLD_WEBKIT
-  , IsVideoTrackList
-#endif
-  , IsWebKitNamedFlow
-  , IsWebKitPoint
-#ifndef USE_OLD_WEBKIT
-  , IsWheelEvent
-#endif
-  , IsWindow
-  , IsXPathExpression
-  , IsXPathNSResolver
-  , IsXPathResult
--- AUTO GENERATION ENDS HERE
-#endif
-  ) where
-
-import Control.Applicative ((<$>))
-import qualified Data.Text as T (Text)
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
-import qualified Data.Text.Lazy as LT (Text)
-import Data.JSString (pack, unpack)
-import Data.JSString.Text (textToJSString, textFromJSString, lazyTextToJSString, lazyTextFromJSString)
-import GHCJS.Types (JSRef(..), castRef, nullRef, isNull, isUndefined, JSString(..))
-import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
-import GHCJS.Marshal.Pure (PToJSRef(..), PFromJSRef(..))
-import GHCJS.Foreign.Callback (Callback(..))
-import Control.Monad.IO.Class (MonadIO(..))
-#else
-import Data.Maybe (isNothing)
-import Foreign.C (CString)
-import Graphics.UI.Gtk.WebKit.Types
-import System.Glib (propagateGError, GType(..))
-import System.Glib.UTFString
-       (readUTFString, GlibString(..))
-#endif
-import Data.Int (Int8, Int16, Int32, Int64)
-import Data.Word (Word8, Word16, Word32, Word64)
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
-maybeJSNullOrUndefined :: JSRef a -> Maybe (JSRef a)
-maybeJSNullOrUndefined r | isNull r || isUndefined r = Nothing
-maybeJSNullOrUndefined r = Just r
-
-propagateGError = id
-
-data GType = GType (JSRef GType)
-
-foreign import javascript unsafe
-  "$1===$2" js_eq :: JSRef a -> JSRef a -> Bool
-
-#ifdef ghcjs_HOST_OS
-foreign import javascript unsafe "h$isInstanceOf $1 $2"
-    typeInstanceIsA' :: JSRef a -> JSRef GType -> Bool
-#else
-typeInstanceIsA' :: JSRef a -> JSRef GType -> Bool
-typeInstanceIsA' = error "typeInstanceIsA': only available in JavaScript"
-#endif
-
-typeInstanceIsA o (GType t) = typeInstanceIsA' o t
-
--- The usage of foreignPtrToPtr should be safe as the evaluation will only be
--- forced if the object is used afterwards
---
-castTo :: (IsGObject obj, IsGObject obj') => GType -> String
-                                                -> (obj -> obj')
-castTo gtype objTypeName obj =
-  case toGObject obj of
-    gobj@(GObject objRef)
-      | typeInstanceIsA objRef gtype
-                  -> unsafeCastGObject gobj
-      | otherwise -> error $ "Cannot cast object to " ++ objTypeName
-
--- | Determine if this is an instance of a particular type
---
-isA :: IsGObject o => o -> GType -> Bool
-isA obj = typeInstanceIsA (unGObject $ toGObject obj)
-
-newtype GObject = GObject { unGObject :: JSRef GObject }
-
-class (ToJSRef o, FromJSRef o) => IsGObject o where
-  -- | Safe upcast.
-  toGObject         :: o -> GObject
-  -- | Unchecked downcast.
-  unsafeCastGObject :: GObject -> o
-
-instance PToJSRef GObject where
-  pToJSRef = unGObject
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef GObject where
-  pFromJSRef = GObject
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef GObject where
-  toJSRef = return . unGObject
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef GObject where
-  fromJSRef = return . fmap GObject . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
---instance IsGObject o => PToJSRef o where
---  pToJSRef = castRef . unGObject . toGObject
---  {-# INLINE pToJSRef #-}
---
---instance IsGObject o => PFromJSRef o where
---  pFromJSRef = unsafeCastGObject . GObject . castRef
---  {-# INLINE pFromJSRef #-}
---
---instance IsGObject o => ToJSRef o where
---  toJSRef = return . castRef . unGObject . toGObject
---  {-# INLINE toJSRef #-}
---
---instance IsGObject o => FromJSRef o where
---  fromJSRef = return . fmap (unsafeCastGObject . GObject . castRef) . maybeJSNullOrUndefined
---  {-# INLINE fromJSRef #-}
-
-instance IsGObject GObject where
-  toGObject = id
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = id
-  {-# INLINE unsafeCastGObject #-}
-
-castToGObject :: IsGObject obj => obj -> obj
-castToGObject = id
-
-#ifdef ghcjs_HOST_OS
-foreign import javascript unsafe "object" gTypeGObject' :: JSRef GType
-#else
-gTypeGObject' = error "gTypeGObject': only available in JavaScript"
-#endif
-gTypeGObject = GType gTypeGObject'
-
-foreign import javascript unsafe "$1[\"toString\"]()" js_objectToString :: JSRef GObject -> IO JSString
-
-objectToString :: (MonadIO m, IsGObject self, FromJSString result) => self -> m result
-objectToString self = liftIO (fromJSString <$> (js_objectToString (unGObject (toGObject self))))
-
-#ifdef ghcjs_HOST_OS
--- | Fastest string type to use when you just
---   want to take a string from the DOM then
---   give it back as is.
-type DOMString = JSString
-
-class (PToJSRef a, ToJSRef a) => ToJSString a
-class (PFromJSRef a, FromJSRef a) => FromJSString a
-
-toJSString :: ToJSString a => a -> JSString
-toJSString = pFromJSRef . castRef . pToJSRef
-{-# INLINE toJSString #-}
-
-fromJSString :: FromJSString a => JSString -> a
-fromJSString = pFromJSRef . castRef . pToJSRef
-{-# INLINE fromJSString #-}
-
-toMaybeJSString :: ToJSString a => Maybe a -> JSRef (Maybe JSString)
-toMaybeJSString = pFromJSRef . castRef . pToJSRef
-{-# INLINE toMaybeJSString #-}
-
-fromMaybeJSString :: FromJSString a => JSRef (Maybe JSString) -> Maybe a
-fromMaybeJSString = pFromJSRef . castRef . pToJSRef
-{-# INLINE fromMaybeJSString #-}
-
-instance ToJSString   [Char]
-instance FromJSString [Char]
-instance ToJSString   T.Text
-instance FromJSString T.Text
-instance ToJSString   JSString
-instance FromJSString JSString
-
-type ToDOMString s = ToJSString s
-type FromDOMString s = FromJSString s
-#endif
-
-#else
-type IsGObject o = GObjectClass o
-
--- | Fastest string type to use when you just
---   want to take a string from the DOM then
---   give it back as is.
-type DOMString = T.Text
-
-type ToDOMString s = GlibString s
-type FromDOMString s = GlibString s
-
-type FocusEvent = UIEvent
-type TouchEvent = UIEvent
-#endif
-
-type IsDOMString s = (ToDOMString s, FromDOMString s)
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- Callbacks
-type AudioBufferCallback = Callback (JSRef (Maybe AudioBuffer) -> IO ())
-type DatabaseCallback = Callback (JSRef (Maybe Database) -> IO ())
-type MediaQueryListListener = Callback (JSRef (Maybe MediaQueryList) -> IO ())
-type MediaStreamTrackSourcesCallback = Callback (JSRef [Maybe SourceInfo] -> IO ())
-type NavigatorUserMediaErrorCallback = Callback (JSRef (Maybe NavigatorUserMediaError) -> IO ())
-type NavigatorUserMediaSuccessCallback = Callback (JSRef (Maybe MediaStream) -> IO ())
-type NotificationPermissionCallback permission = Callback (JSRef permission -> IO ())
-type PositionCallback = Callback (JSRef (Maybe Geoposition) -> IO ())
-type PositionErrorCallback = Callback (JSRef (Maybe PositionError) -> IO ())
-type RequestAnimationFrameCallback = Callback (JSRef Double -> IO ())
-type RTCPeerConnectionErrorCallback = Callback (JSRef (Maybe DOMError) -> IO ())
-type RTCSessionDescriptionCallback = Callback (JSRef (Maybe RTCSessionDescription) -> IO ())
-type RTCStatsCallback = Callback (JSRef (Maybe RTCStatsResponse) -> IO ())
-type SQLStatementCallback = Callback (JSRef (Maybe SQLTransaction) -> JSRef (Maybe SQLResultSet) -> IO ())
-type SQLStatementErrorCallback = Callback (JSRef (Maybe SQLTransaction) -> JSRef (Maybe SQLError) -> IO ())
-type SQLTransactionCallback = Callback (JSRef (Maybe SQLTransaction) -> IO ())
-type SQLTransactionErrorCallback = Callback (JSRef (Maybe SQLError) -> IO ())
-type StorageErrorCallback = Callback (JSRef (Maybe DOMException) -> IO ())
-type StorageQuotaCallback = Callback (JSRef Double -> IO ())
-type StorageUsageCallback = Callback (JSRef Double -> JSRef Double -> IO ())
-type StringCallback s = Callback (JSRef s -> IO ())
-type VoidCallback = Callback (IO ())
-#endif
-
--- Custom types
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
-newtype SerializedScriptValue = SerializedScriptValue { unSerializedScriptValue :: JSRef SerializedScriptValue }
-
-instance Eq SerializedScriptValue where
-  (SerializedScriptValue a) == (SerializedScriptValue b) = js_eq a b
-
-instance PToJSRef SerializedScriptValue where
-  pToJSRef = unSerializedScriptValue
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SerializedScriptValue where
-  pFromJSRef = SerializedScriptValue
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SerializedScriptValue where
-  toJSRef = return . unSerializedScriptValue
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SerializedScriptValue where
-  fromJSRef = return . fmap SerializedScriptValue . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsGObject o => IsSerializedScriptValue o
-toSerializedScriptValue :: IsSerializedScriptValue o => o -> SerializedScriptValue
-toSerializedScriptValue = unsafeCastGObject . toGObject
-
-instance IsSerializedScriptValue SerializedScriptValue
-instance IsGObject SerializedScriptValue where
-  toGObject = GObject . castRef . unSerializedScriptValue
-  unsafeCastGObject = SerializedScriptValue . castRef . unGObject
--- TODO add more IsSerializedScriptValue instances
-#else
--- TODO work out how we can support SerializedScriptValue in native code
-#endif
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
-newtype PositionOptions = PositionOptions { unPositionOptions :: JSRef PositionOptions }
-
-instance Eq PositionOptions where
-  (PositionOptions a) == (PositionOptions b) = js_eq a b
-
-instance PToJSRef PositionOptions where
-  pToJSRef = unPositionOptions
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef PositionOptions where
-  pFromJSRef = PositionOptions
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef PositionOptions where
-  toJSRef = return . unPositionOptions
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef PositionOptions where
-  fromJSRef = return . fmap PositionOptions . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsGObject o => IsPositionOptions o
-toPositionOptions :: IsPositionOptions o => o -> PositionOptions
-toPositionOptions = unsafeCastGObject . toGObject
-
-instance IsPositionOptions PositionOptions
-instance IsGObject PositionOptions where
-  toGObject = GObject . castRef . unPositionOptions
-  unsafeCastGObject = PositionOptions . castRef . unGObject
--- TODO add more IsPositionOptions instances
-#else
--- TODO work out how we can support PositionOptions in native code
-#endif
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
-newtype Dictionary = Dictionary { unDictionary :: JSRef Dictionary }
-
-instance Eq Dictionary where
-  (Dictionary a) == (Dictionary b) = js_eq a b
-
-instance PToJSRef Dictionary where
-  pToJSRef = unDictionary
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef Dictionary where
-  pFromJSRef = Dictionary
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef Dictionary where
-  toJSRef = return . unDictionary
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef Dictionary where
-  fromJSRef = return . fmap Dictionary . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsGObject o => IsDictionary o
-toDictionary :: IsDictionary o => o -> Dictionary
-toDictionary = unsafeCastGObject . toGObject
-
-instance IsDictionary Dictionary
-instance IsGObject Dictionary where
-  toGObject = GObject . castRef . unDictionary
-  unsafeCastGObject = Dictionary . castRef . unGObject
--- TODO add more IsDictionary instances
-#else
--- TODO work out how we can support Dictionary in native code
-#endif
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
-newtype BlobPropertyBag = BlobPropertyBag { unBlobPropertyBag :: JSRef BlobPropertyBag }
-
-instance Eq BlobPropertyBag where
-  (BlobPropertyBag a) == (BlobPropertyBag b) = js_eq a b
-
-instance PToJSRef BlobPropertyBag where
-  pToJSRef = unBlobPropertyBag
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef BlobPropertyBag where
-  pFromJSRef = BlobPropertyBag
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef BlobPropertyBag where
-  toJSRef = return . unBlobPropertyBag
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef BlobPropertyBag where
-  fromJSRef = return . fmap BlobPropertyBag . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsGObject o => IsBlobPropertyBag o
-toBlobPropertyBag :: IsBlobPropertyBag o => o -> BlobPropertyBag
-toBlobPropertyBag = unsafeCastGObject . toGObject
-
-instance IsBlobPropertyBag BlobPropertyBag
-instance IsGObject BlobPropertyBag where
-  toGObject = GObject . castRef . unBlobPropertyBag
-  unsafeCastGObject = BlobPropertyBag . castRef . unGObject
--- TODO add more IsBlobPropertyBag instances
-#else
--- TODO work out how we can support BlobPropertyBag in native code
-#endif
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
-newtype MutationCallback = MutationCallback { unMutationCallback :: JSRef MutationCallback }
-
-instance Eq MutationCallback where
-  (MutationCallback a) == (MutationCallback b) = js_eq a b
-
-instance PToJSRef MutationCallback where
-  pToJSRef = unMutationCallback
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef MutationCallback where
-  pFromJSRef = MutationCallback
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef MutationCallback where
-  toJSRef = return . unMutationCallback
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef MutationCallback where
-  fromJSRef = return . fmap MutationCallback . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsGObject o => IsMutationCallback o
-toMutationCallback :: IsMutationCallback o => o -> MutationCallback
-toMutationCallback = unsafeCastGObject . toGObject
-
-instance IsMutationCallback MutationCallback
-instance IsGObject MutationCallback where
-  toGObject = GObject . castRef . unMutationCallback
-  unsafeCastGObject = MutationCallback . castRef . unGObject
--- TODO add more IsMutationCallback instances
-#else
--- TODO work out how we can support MutationCallback in native code
-#endif
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
-newtype Promise = Promise { unPromise :: JSRef Promise }
-
-instance Eq Promise where
-  (Promise a) == (Promise b) = js_eq a b
-
-instance PToJSRef Promise where
-  pToJSRef = unPromise
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef Promise where
-  pFromJSRef = Promise
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef Promise where
-  toJSRef = return . unPromise
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef Promise where
-  fromJSRef = return . fmap Promise . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsGObject o => IsPromise o
-toPromise :: IsPromise o => o -> Promise
-toPromise = unsafeCastGObject . toGObject
-
-instance IsPromise Promise
-instance IsGObject Promise where
-  toGObject = GObject . castRef . unPromise
-  unsafeCastGObject = Promise . castRef . unGObject
--- TODO add more IsPromise instances
-
-castToPromise :: IsGObject obj => obj -> Promise
-castToPromise = castTo gTypePromise "Promise"
-
-foreign import javascript unsafe "window[\"Promise\"]" gTypePromise' :: JSRef GType
-gTypePromise = GType gTypePromise'
-#else
--- TODO work out how we can support Promise in native code
-#endif
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
-newtype ArrayBuffer = ArrayBuffer { unArrayBuffer :: JSRef ArrayBuffer }
-
-instance Eq ArrayBuffer where
-  (ArrayBuffer a) == (ArrayBuffer b) = js_eq a b
-
-instance PToJSRef ArrayBuffer where
-  pToJSRef = unArrayBuffer
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef ArrayBuffer where
-  pFromJSRef = ArrayBuffer
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef ArrayBuffer where
-  toJSRef = return . unArrayBuffer
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef ArrayBuffer where
-  fromJSRef = return . fmap ArrayBuffer . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsGObject o => IsArrayBuffer o
-toArrayBuffer :: IsArrayBuffer o => o -> ArrayBuffer
-toArrayBuffer = unsafeCastGObject . toGObject
-
-instance IsArrayBuffer ArrayBuffer
-instance IsGObject ArrayBuffer where
-  toGObject = GObject . castRef . unArrayBuffer
-  unsafeCastGObject = ArrayBuffer . castRef . unGObject
-
-castToArrayBuffer :: IsGObject obj => obj -> ArrayBuffer
-castToArrayBuffer = castTo gTypeArrayBuffer "ArrayBuffer"
-
-foreign import javascript unsafe "window[\"ArrayBuffer\"]" gTypeArrayBuffer' :: JSRef GType
-gTypeArrayBuffer = GType gTypeArrayBuffer'
-#else
--- TODO work out how we can support ArrayBuffer in native code
-#endif
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
-newtype Float32Array = Float32Array { unFloat32Array :: JSRef Float32Array }
-
-instance Eq Float32Array where
-  (Float32Array a) == (Float32Array b) = js_eq a b
-
-instance PToJSRef Float32Array where
-  pToJSRef = unFloat32Array
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef Float32Array where
-  pFromJSRef = Float32Array
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef Float32Array where
-  toJSRef = return . unFloat32Array
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef Float32Array where
-  fromJSRef = return . fmap Float32Array . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsGObject o => IsFloat32Array o
-toFloat32Array :: IsFloat32Array o => o -> Float32Array
-toFloat32Array = unsafeCastGObject . toGObject
-
-instance IsFloat32Array Float32Array
-instance IsGObject Float32Array where
-  toGObject = GObject . castRef . unFloat32Array
-  unsafeCastGObject = Float32Array . castRef . unGObject
--- TODO add more IsFloat32Array instances
-
-castToFloat32Array :: IsGObject obj => obj -> Float32Array
-castToFloat32Array = castTo gTypeFloat32Array "Float32Array"
-
-foreign import javascript unsafe "window[\"Float32Array\"]" gTypeFloat32Array' :: JSRef GType
-gTypeFloat32Array = GType gTypeFloat32Array'
-#else
--- TODO work out how we can support Float32Array in native code
-#endif
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
-newtype Float64Array = Float64Array { unFloat64Array :: JSRef Float64Array }
-
-instance Eq Float64Array where
-  (Float64Array a) == (Float64Array b) = js_eq a b
-
-instance PToJSRef Float64Array where
-  pToJSRef = unFloat64Array
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef Float64Array where
-  pFromJSRef = Float64Array
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef Float64Array where
-  toJSRef = return . unFloat64Array
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef Float64Array where
-  fromJSRef = return . fmap Float64Array . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsGObject o => IsFloat64Array o
-toFloat64Array :: IsFloat64Array o => o -> Float64Array
-toFloat64Array = unsafeCastGObject . toGObject
-
-instance IsFloat64Array Float64Array
-instance IsGObject Float64Array where
-  toGObject = GObject . castRef . unFloat64Array
-  unsafeCastGObject = Float64Array . castRef . unGObject
--- TODO add more IsFloat64Array instances
-
-castToFloat64Array :: IsGObject obj => obj -> Float64Array
-castToFloat64Array = castTo gTypeFloat64Array "Float64Array"
-
-foreign import javascript unsafe "window[\"Float64Array\"]" gTypeFloat64Array' :: JSRef GType
-gTypeFloat64Array = GType gTypeFloat64Array'
-#else
--- TODO work out how we can support Float64Array in native code
-#endif
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
-newtype Uint8Array = Uint8Array { unUint8Array :: JSRef Uint8Array }
-
-instance Eq Uint8Array where
-  (Uint8Array a) == (Uint8Array b) = js_eq a b
-
-instance PToJSRef Uint8Array where
-  pToJSRef = unUint8Array
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef Uint8Array where
-  pFromJSRef = Uint8Array
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef Uint8Array where
-  toJSRef = return . unUint8Array
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef Uint8Array where
-  fromJSRef = return . fmap Uint8Array . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsGObject o => IsUint8Array o
-toUint8Array :: IsUint8Array o => o -> Uint8Array
-toUint8Array = unsafeCastGObject . toGObject
-
-instance IsUint8Array Uint8Array
-instance IsGObject Uint8Array where
-  toGObject = GObject . castRef . unUint8Array
-  unsafeCastGObject = Uint8Array . castRef . unGObject
--- TODO add more IsUint8Array instances
-
-castToUint8Array :: IsGObject obj => obj -> Uint8Array
-castToUint8Array = castTo gTypeUint8Array "Uint8Array"
-
-foreign import javascript unsafe "window[\"Uint8Array\"]" gTypeUint8Array' :: JSRef GType
-gTypeUint8Array = GType gTypeUint8Array'
-#else
--- TODO work out how we can support Uint8Array in native code
-#endif
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
-newtype Uint8ClampedArray = Uint8ClampedArray { unUint8ClampedArray :: JSRef Uint8ClampedArray }
-
-instance Eq Uint8ClampedArray where
-  (Uint8ClampedArray a) == (Uint8ClampedArray b) = js_eq a b
-
-instance PToJSRef Uint8ClampedArray where
-  pToJSRef = unUint8ClampedArray
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef Uint8ClampedArray where
-  pFromJSRef = Uint8ClampedArray
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef Uint8ClampedArray where
-  toJSRef = return . unUint8ClampedArray
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef Uint8ClampedArray where
-  fromJSRef = return . fmap Uint8ClampedArray . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsGObject o => IsUint8ClampedArray o
-toUint8ClampedArray :: IsUint8ClampedArray o => o -> Uint8ClampedArray
-toUint8ClampedArray = unsafeCastGObject . toGObject
-
-instance IsUint8ClampedArray Uint8ClampedArray
-instance IsGObject Uint8ClampedArray where
-  toGObject = GObject . castRef . unUint8ClampedArray
-  unsafeCastGObject = Uint8ClampedArray . castRef . unGObject
--- TODO add more IsUint8ClampedArray instances
-
-castToUint8ClampedArray :: IsGObject obj => obj -> Uint8ClampedArray
-castToUint8ClampedArray = castTo gTypeUint8ClampedArray "Uint8ClampedArray"
-
-foreign import javascript unsafe "window[\"Uint8ClampedArray\"]" gTypeUint8ClampedArray' :: JSRef GType
-gTypeUint8ClampedArray = GType gTypeUint8ClampedArray'
-#else
--- TODO work out how we can support Uint8ClampedArray in native code
-#endif
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
-newtype Uint16Array = Uint16Array { unUint16Array :: JSRef Uint16Array }
-
-instance Eq Uint16Array where
-  (Uint16Array a) == (Uint16Array b) = js_eq a b
-
-instance PToJSRef Uint16Array where
-  pToJSRef = unUint16Array
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef Uint16Array where
-  pFromJSRef = Uint16Array
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef Uint16Array where
-  toJSRef = return . unUint16Array
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef Uint16Array where
-  fromJSRef = return . fmap Uint16Array . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsGObject o => IsUint16Array o
-toUint16Array :: IsUint16Array o => o -> Uint16Array
-toUint16Array = unsafeCastGObject . toGObject
-
-instance IsUint16Array Uint16Array
-instance IsGObject Uint16Array where
-  toGObject = GObject . castRef . unUint16Array
-  unsafeCastGObject = Uint16Array . castRef . unGObject
--- TODO add more IsUint16Array instances
-
-castToUint16Array :: IsGObject obj => obj -> Uint16Array
-castToUint16Array = castTo gTypeUint16Array "Uint16Array"
-
-foreign import javascript unsafe "window[\"Uint16Array\"]" gTypeUint16Array' :: JSRef GType
-gTypeUint16Array = GType gTypeUint16Array'
-#else
--- TODO work out how we can support Uint16Array in native code
-#endif
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
-newtype Uint32Array = Uint32Array { unUint32Array :: JSRef Uint32Array }
-
-instance Eq Uint32Array where
-  (Uint32Array a) == (Uint32Array b) = js_eq a b
-
-instance PToJSRef Uint32Array where
-  pToJSRef = unUint32Array
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef Uint32Array where
-  pFromJSRef = Uint32Array
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef Uint32Array where
-  toJSRef = return . unUint32Array
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef Uint32Array where
-  fromJSRef = return . fmap Uint32Array . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsGObject o => IsUint32Array o
-toUint32Array :: IsUint32Array o => o -> Uint32Array
-toUint32Array = unsafeCastGObject . toGObject
-
-instance IsUint32Array Uint32Array
-instance IsGObject Uint32Array where
-  toGObject = GObject . castRef . unUint32Array
-  unsafeCastGObject = Uint32Array . castRef . unGObject
--- TODO add more IsUint32Array instances
-
-castToUint32Array :: IsGObject obj => obj -> Uint32Array
-castToUint32Array = castTo gTypeUint32Array "Uint32Array"
-
-foreign import javascript unsafe "window[\"Uint32Array\"]" gTypeUint32Array' :: JSRef GType
-gTypeUint32Array = GType gTypeUint32Array'
-#else
--- TODO work out how we can support Uint32Array in native code
-#endif
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
-newtype Int8Array = Int8Array { unInt8Array :: JSRef Int8Array }
-
-instance Eq Int8Array where
-  (Int8Array a) == (Int8Array b) = js_eq a b
-
-instance PToJSRef Int8Array where
-  pToJSRef = unInt8Array
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef Int8Array where
-  pFromJSRef = Int8Array
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef Int8Array where
-  toJSRef = return . unInt8Array
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef Int8Array where
-  fromJSRef = return . fmap Int8Array . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsGObject o => IsInt8Array o
-toInt8Array :: IsInt8Array o => o -> Int8Array
-toInt8Array = unsafeCastGObject . toGObject
-
-instance IsInt8Array Int8Array
-instance IsGObject Int8Array where
-  toGObject = GObject . castRef . unInt8Array
-  unsafeCastGObject = Int8Array . castRef . unGObject
--- TODO add more IsInt8Array instances
-
-castToInt8Array :: IsGObject obj => obj -> Int8Array
-castToInt8Array = castTo gTypeInt8Array "Int8Array"
-
-foreign import javascript unsafe "window[\"Int8Array\"]" gTypeInt8Array' :: JSRef GType
-gTypeInt8Array = GType gTypeInt8Array'
-#else
--- TODO work out how we can support Int8Array in native code
-#endif
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
-newtype Int16Array = Int16Array { unInt16Array :: JSRef Int16Array }
-
-instance Eq Int16Array where
-  (Int16Array a) == (Int16Array b) = js_eq a b
-
-instance PToJSRef Int16Array where
-  pToJSRef = unInt16Array
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef Int16Array where
-  pFromJSRef = Int16Array
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef Int16Array where
-  toJSRef = return . unInt16Array
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef Int16Array where
-  fromJSRef = return . fmap Int16Array . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsGObject o => IsInt16Array o
-toInt16Array :: IsInt16Array o => o -> Int16Array
-toInt16Array = unsafeCastGObject . toGObject
-
-instance IsInt16Array Int16Array
-instance IsGObject Int16Array where
-  toGObject = GObject . castRef . unInt16Array
-  unsafeCastGObject = Int16Array . castRef . unGObject
--- TODO add more IsInt16Array instances
-
-castToInt16Array :: IsGObject obj => obj -> Int16Array
-castToInt16Array = castTo gTypeInt16Array "Int16Array"
-
-foreign import javascript unsafe "window[\"Int16Array\"]" gTypeInt16Array' :: JSRef GType
-gTypeInt16Array = GType gTypeInt16Array'
-#else
--- TODO work out how we can support Int16Array in native code
-#endif
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
-newtype Int32Array = Int32Array { unInt32Array :: JSRef Int32Array }
-
-instance Eq Int32Array where
-  (Int32Array a) == (Int32Array b) = js_eq a b
-
-instance PToJSRef Int32Array where
-  pToJSRef = unInt32Array
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef Int32Array where
-  pFromJSRef = Int32Array
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef Int32Array where
-  toJSRef = return . unInt32Array
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef Int32Array where
-  fromJSRef = return . fmap Int32Array . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsGObject o => IsInt32Array o
-toInt32Array :: IsInt32Array o => o -> Int32Array
-toInt32Array = unsafeCastGObject . toGObject
-
-instance IsInt32Array Int32Array
-instance IsGObject Int32Array where
-  toGObject = GObject . castRef . unInt32Array
-  unsafeCastGObject = Int32Array . castRef . unGObject
--- TODO add more IsInt32Array instances
-
-castToInt32Array :: IsGObject obj => obj -> Int32Array
-castToInt32Array = castTo gTypeInt32Array "Int32Array"
-
-foreign import javascript unsafe "window[\"Int32Array\"]" gTypeInt32Array' :: JSRef GType
-gTypeInt32Array = GType gTypeInt32Array'
-#else
--- TODO work out how we can support Int32Array in native code
-#endif
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
-newtype ObjectArray = ObjectArray { unObjectArray :: JSRef ObjectArray }
-
-instance Eq ObjectArray where
-  (ObjectArray a) == (ObjectArray b) = js_eq a b
-
-instance PToJSRef ObjectArray where
-  pToJSRef = unObjectArray
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef ObjectArray where
-  pFromJSRef = ObjectArray
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef ObjectArray where
-  toJSRef = return . unObjectArray
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef ObjectArray where
-  fromJSRef = return . fmap ObjectArray . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsGObject o => IsObjectArray o
-toObjectArray :: IsObjectArray o => o -> ObjectArray
-toObjectArray = unsafeCastGObject . toGObject
-
-instance IsObjectArray ObjectArray
-instance IsGObject ObjectArray where
-  toGObject = GObject . castRef . unObjectArray
-  unsafeCastGObject = ObjectArray . castRef . unGObject
--- TODO add more IsObjectArray instances
-#else
--- TODO work out how we can support ObjectArray in native code
-#endif
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
-newtype ArrayBufferView = ArrayBufferView { unArrayBufferView :: JSRef ArrayBufferView }
-
-instance Eq ArrayBufferView where
-  (ArrayBufferView a) == (ArrayBufferView b) = js_eq a b
-
-instance PToJSRef ArrayBufferView where
-  pToJSRef = unArrayBufferView
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef ArrayBufferView where
-  pFromJSRef = ArrayBufferView
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef ArrayBufferView where
-  toJSRef = return . unArrayBufferView
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef ArrayBufferView where
-  fromJSRef = return . fmap ArrayBufferView . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsGObject o => IsArrayBufferView o
-toArrayBufferView :: IsArrayBufferView o => o -> ArrayBufferView
-toArrayBufferView = unsafeCastGObject . toGObject
-
-instance IsArrayBufferView ArrayBufferView
-instance IsGObject ArrayBufferView where
-  toGObject = GObject . castRef . unArrayBufferView
-  unsafeCastGObject = ArrayBufferView . castRef . unGObject
--- TODO add more IsArrayBufferView instances
-#else
--- TODO work out how we can support ArrayBufferView in native code
-#endif
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
-newtype Array = Array { unArray :: JSRef Array }
-
-instance Eq Array where
-  (Array a) == (Array b) = js_eq a b
-
-instance PToJSRef Array where
-  pToJSRef = unArray
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef Array where
-  pFromJSRef = Array
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef Array where
-  toJSRef = return . unArray
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef Array where
-  fromJSRef = return . fmap Array . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsGObject o => IsArray o
-toArray :: IsArray o => o -> Array
-toArray = unsafeCastGObject . toGObject
-
-instance IsArray Array
-instance IsGObject Array where
-  toGObject = GObject . castRef . unArray
-  unsafeCastGObject = Array . castRef . unGObject
--- TODO add more IsArray instances
-
-castToArray :: IsGObject obj => obj -> Array
-castToArray = castTo gTypeArray "Array"
-
-foreign import javascript unsafe "window[\"Array\"]" gTypeArray' :: JSRef GType
-gTypeArray = GType gTypeArray'
-#else
--- TODO work out how we can support Array in native code
-#endif
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
-newtype Date = Date { unDate :: JSRef Date }
-
-instance Eq Date where
-  (Date a) == (Date b) = js_eq a b
-
-instance PToJSRef Date where
-  pToJSRef = unDate
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef Date where
-  pFromJSRef = Date
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef Date where
-  toJSRef = return . unDate
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef Date where
-  fromJSRef = return . fmap Date . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsGObject o => IsDate o
-toDate :: IsDate o => o -> Date
-toDate = unsafeCastGObject . toGObject
-
-instance IsDate Date
-instance IsGObject Date where
-  toGObject = GObject . castRef . unDate
-  unsafeCastGObject = Date . castRef . unGObject
--- TODO add more IsDate instances
-
-castToDate :: IsGObject obj => obj -> Date
-castToDate = castTo gTypeDate "Date"
-
-foreign import javascript unsafe "window[\"Date\"]" gTypeDate' :: JSRef GType
-gTypeDate = GType gTypeDate'
-#else
--- TODO work out how we can support Date in native code
-#endif
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
-newtype Acceleration = Acceleration { unAcceleration :: JSRef Acceleration }
-
-instance Eq Acceleration where
-  (Acceleration a) == (Acceleration b) = js_eq a b
-
-instance PToJSRef Acceleration where
-  pToJSRef = unAcceleration
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef Acceleration where
-  pFromJSRef = Acceleration
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef Acceleration where
-  toJSRef = return . unAcceleration
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef Acceleration where
-  fromJSRef = return . fmap Acceleration . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsGObject o => IsAcceleration o
-toAcceleration :: IsAcceleration o => o -> Acceleration
-toAcceleration = unsafeCastGObject . toGObject
-
-instance IsAcceleration Acceleration
-instance IsGObject Acceleration where
-  toGObject = GObject . castRef . unAcceleration
-  unsafeCastGObject = Acceleration . castRef . unGObject
--- TODO add more IsAcceleration instances
-#else
--- TODO work out how we can support Acceleration in native code
-#endif
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
-newtype RotationRate = RotationRate { unRotationRate :: JSRef RotationRate }
-
-instance Eq RotationRate where
-  (RotationRate a) == (RotationRate b) = js_eq a b
-
-instance PToJSRef RotationRate where
-  pToJSRef = unRotationRate
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef RotationRate where
-  pFromJSRef = RotationRate
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef RotationRate where
-  toJSRef = return . unRotationRate
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef RotationRate where
-  fromJSRef = return . fmap RotationRate . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsGObject o => IsRotationRate o
-toRotationRate :: IsRotationRate o => o -> RotationRate
-toRotationRate = unsafeCastGObject . toGObject
-
-instance IsRotationRate RotationRate
-instance IsGObject RotationRate where
-  toGObject = GObject . castRef . unRotationRate
-  unsafeCastGObject = RotationRate . castRef . unGObject
--- TODO add more IsRotationRate instances
-#else
--- TODO work out how we can support RotationRate in native code
-#endif
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
-newtype Algorithm = Algorithm { unAlgorithm :: JSRef Algorithm }
-
-instance Eq Algorithm where
-  (Algorithm a) == (Algorithm b) = js_eq a b
-
-instance PToJSRef Algorithm where
-  pToJSRef = unAlgorithm
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef Algorithm where
-  pFromJSRef = Algorithm
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef Algorithm where
-  toJSRef = return . unAlgorithm
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef Algorithm where
-  fromJSRef = return . fmap Algorithm . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsGObject o => IsAlgorithm o
-toAlgorithm :: IsAlgorithm o => o -> Algorithm
-toAlgorithm = unsafeCastGObject . toGObject
-
-instance IsAlgorithm Algorithm
-instance IsGObject Algorithm where
-  toGObject = GObject . castRef . unAlgorithm
-  unsafeCastGObject = Algorithm . castRef . unGObject
--- TODO add more IsAlgorithm instances
-#else
--- TODO work out how we can support Algorithm in native code
-#endif
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
-newtype CryptoOperationData = CryptoOperationData { unCryptoOperationData :: JSRef CryptoOperationData }
-
-instance Eq CryptoOperationData where
-  (CryptoOperationData a) == (CryptoOperationData b) = js_eq a b
-
-instance PToJSRef CryptoOperationData where
-  pToJSRef = unCryptoOperationData
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef CryptoOperationData where
-  pFromJSRef = CryptoOperationData
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef CryptoOperationData where
-  toJSRef = return . unCryptoOperationData
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef CryptoOperationData where
-  fromJSRef = return . fmap CryptoOperationData . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsGObject o => IsCryptoOperationData o
-toCryptoOperationData :: IsCryptoOperationData o => o -> CryptoOperationData
-toCryptoOperationData = unsafeCastGObject . toGObject
-
-instance IsCryptoOperationData CryptoOperationData
-instance IsGObject CryptoOperationData where
-  toGObject = GObject . castRef . unCryptoOperationData
-  unsafeCastGObject = CryptoOperationData . castRef . unGObject
-instance IsCryptoOperationData ArrayBuffer
-instance IsCryptoOperationData ArrayBufferView
-#else
--- TODO work out how we can support CryptoOperationData in native code
-#endif
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
-newtype CanvasStyle = CanvasStyle { unCanvasStyle :: JSRef CanvasStyle }
-
-instance Eq CanvasStyle where
-  (CanvasStyle a) == (CanvasStyle b) = js_eq a b
-
-instance PToJSRef CanvasStyle where
-  pToJSRef = unCanvasStyle
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef CanvasStyle where
-  pFromJSRef = CanvasStyle
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef CanvasStyle where
-  toJSRef = return . unCanvasStyle
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef CanvasStyle where
-  fromJSRef = return . fmap CanvasStyle . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsGObject o => IsCanvasStyle o
-toCanvasStyle :: IsCanvasStyle o => o -> CanvasStyle
-toCanvasStyle = unsafeCastGObject . toGObject
-
-instance IsCanvasStyle CanvasStyle
-instance IsGObject CanvasStyle where
-  toGObject = GObject . castRef . unCanvasStyle
-  unsafeCastGObject = CanvasStyle . castRef . unGObject
-instance IsCanvasStyle CanvasGradient
-instance IsCanvasStyle CanvasPattern
-#else
--- TODO work out how we can support CanvasStyle in native code
-#endif
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
-newtype DOMException = DOMException { unDOMException :: JSRef DOMException }
-
-instance Eq DOMException where
-  (DOMException a) == (DOMException b) = js_eq a b
-
-instance PToJSRef DOMException where
-  pToJSRef = unDOMException
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef DOMException where
-  pFromJSRef = DOMException
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef DOMException where
-  toJSRef = return . unDOMException
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef DOMException where
-  fromJSRef = return . fmap DOMException . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsGObject o => IsDOMException o
-toDOMException :: IsDOMException o => o -> DOMException
-toDOMException = unsafeCastGObject . toGObject
-
-instance IsDOMException DOMException
-instance IsGObject DOMException where
-  toGObject = GObject . castRef . unDOMException
-  unsafeCastGObject = DOMException . castRef . unGObject
-#else
--- TODO work out how we can support DOMException in native code
-#endif
-
-type GLenum = Word32
-type GLboolean = Bool
-type GLbitfield = Word32
-type GLbyte = Int8
-type GLshort = Int16
-type GLint = Int32
-type GLint64 = Int64
-type GLsizei = Int32
-type GLintptr = Int64
-type GLsizeiptr = Int64
-type GLubyte = Word8
-type GLushort = Word16
-type GLuint = Word32
-type GLuint64 = Word64
-type GLfloat = Double
-type GLclampf = Double
-
--- AUTO GENERATION STARTS HERE
--- The remainder of this file is generated from IDL files using domconv-webkit-jsffi
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.ANGLEInstancedArrays".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/ANGLEInstancedArrays Mozilla ANGLEInstancedArrays documentation>
-newtype ANGLEInstancedArrays = ANGLEInstancedArrays { unANGLEInstancedArrays :: JSRef ANGLEInstancedArrays }
-
-instance Eq (ANGLEInstancedArrays) where
-  (ANGLEInstancedArrays a) == (ANGLEInstancedArrays b) = js_eq a b
-
-instance PToJSRef ANGLEInstancedArrays where
-  pToJSRef = unANGLEInstancedArrays
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef ANGLEInstancedArrays where
-  pFromJSRef = ANGLEInstancedArrays
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef ANGLEInstancedArrays where
-  toJSRef = return . unANGLEInstancedArrays
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef ANGLEInstancedArrays where
-  fromJSRef = return . fmap ANGLEInstancedArrays . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject ANGLEInstancedArrays where
-  toGObject = GObject . castRef . unANGLEInstancedArrays
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = ANGLEInstancedArrays . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToANGLEInstancedArrays :: IsGObject obj => obj -> ANGLEInstancedArrays
-castToANGLEInstancedArrays = castTo gTypeANGLEInstancedArrays "ANGLEInstancedArrays"
-
-foreign import javascript unsafe "window[\"ANGLEInstancedArrays\"]" gTypeANGLEInstancedArrays' :: JSRef GType
-gTypeANGLEInstancedArrays = GType gTypeANGLEInstancedArrays'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.AbstractView".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/AbstractView Mozilla AbstractView documentation>
-newtype AbstractView = AbstractView { unAbstractView :: JSRef AbstractView }
-
-instance Eq (AbstractView) where
-  (AbstractView a) == (AbstractView b) = js_eq a b
-
-instance PToJSRef AbstractView where
-  pToJSRef = unAbstractView
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef AbstractView where
-  pFromJSRef = AbstractView
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef AbstractView where
-  toJSRef = return . unAbstractView
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef AbstractView where
-  fromJSRef = return . fmap AbstractView . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject AbstractView where
-  toGObject = GObject . castRef . unAbstractView
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = AbstractView . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToAbstractView :: IsGObject obj => obj -> AbstractView
-castToAbstractView = castTo gTypeAbstractView "AbstractView"
-
-foreign import javascript unsafe "window[\"AbstractView\"]" gTypeAbstractView' :: JSRef GType
-gTypeAbstractView = GType gTypeAbstractView'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.AbstractWorker".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/AbstractWorker Mozilla AbstractWorker documentation>
-newtype AbstractWorker = AbstractWorker { unAbstractWorker :: JSRef AbstractWorker }
-
-instance Eq (AbstractWorker) where
-  (AbstractWorker a) == (AbstractWorker b) = js_eq a b
-
-instance PToJSRef AbstractWorker where
-  pToJSRef = unAbstractWorker
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef AbstractWorker where
-  pFromJSRef = AbstractWorker
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef AbstractWorker where
-  toJSRef = return . unAbstractWorker
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef AbstractWorker where
-  fromJSRef = return . fmap AbstractWorker . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject AbstractWorker where
-  toGObject = GObject . castRef . unAbstractWorker
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = AbstractWorker . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToAbstractWorker :: IsGObject obj => obj -> AbstractWorker
-castToAbstractWorker = castTo gTypeAbstractWorker "AbstractWorker"
-
-foreign import javascript unsafe "window[\"AbstractWorker\"]" gTypeAbstractWorker' :: JSRef GType
-gTypeAbstractWorker = GType gTypeAbstractWorker'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.AllAudioCapabilities".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.MediaStreamCapabilities"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/AllAudioCapabilities Mozilla AllAudioCapabilities documentation>
-newtype AllAudioCapabilities = AllAudioCapabilities { unAllAudioCapabilities :: JSRef AllAudioCapabilities }
-
-instance Eq (AllAudioCapabilities) where
-  (AllAudioCapabilities a) == (AllAudioCapabilities b) = js_eq a b
-
-instance PToJSRef AllAudioCapabilities where
-  pToJSRef = unAllAudioCapabilities
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef AllAudioCapabilities where
-  pFromJSRef = AllAudioCapabilities
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef AllAudioCapabilities where
-  toJSRef = return . unAllAudioCapabilities
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef AllAudioCapabilities where
-  fromJSRef = return . fmap AllAudioCapabilities . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsMediaStreamCapabilities AllAudioCapabilities
-instance IsGObject AllAudioCapabilities where
-  toGObject = GObject . castRef . unAllAudioCapabilities
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = AllAudioCapabilities . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToAllAudioCapabilities :: IsGObject obj => obj -> AllAudioCapabilities
-castToAllAudioCapabilities = castTo gTypeAllAudioCapabilities "AllAudioCapabilities"
-
-foreign import javascript unsafe "window[\"AllAudioCapabilities\"]" gTypeAllAudioCapabilities' :: JSRef GType
-gTypeAllAudioCapabilities = GType gTypeAllAudioCapabilities'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.AllVideoCapabilities".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.MediaStreamCapabilities"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/AllVideoCapabilities Mozilla AllVideoCapabilities documentation>
-newtype AllVideoCapabilities = AllVideoCapabilities { unAllVideoCapabilities :: JSRef AllVideoCapabilities }
-
-instance Eq (AllVideoCapabilities) where
-  (AllVideoCapabilities a) == (AllVideoCapabilities b) = js_eq a b
-
-instance PToJSRef AllVideoCapabilities where
-  pToJSRef = unAllVideoCapabilities
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef AllVideoCapabilities where
-  pFromJSRef = AllVideoCapabilities
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef AllVideoCapabilities where
-  toJSRef = return . unAllVideoCapabilities
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef AllVideoCapabilities where
-  fromJSRef = return . fmap AllVideoCapabilities . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsMediaStreamCapabilities AllVideoCapabilities
-instance IsGObject AllVideoCapabilities where
-  toGObject = GObject . castRef . unAllVideoCapabilities
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = AllVideoCapabilities . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToAllVideoCapabilities :: IsGObject obj => obj -> AllVideoCapabilities
-castToAllVideoCapabilities = castTo gTypeAllVideoCapabilities "AllVideoCapabilities"
-
-foreign import javascript unsafe "window[\"AllVideoCapabilities\"]" gTypeAllVideoCapabilities' :: JSRef GType
-gTypeAllVideoCapabilities = GType gTypeAllVideoCapabilities'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.AnalyserNode".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.AudioNode"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/AnalyserNode Mozilla AnalyserNode documentation>
-newtype AnalyserNode = AnalyserNode { unAnalyserNode :: JSRef AnalyserNode }
-
-instance Eq (AnalyserNode) where
-  (AnalyserNode a) == (AnalyserNode b) = js_eq a b
-
-instance PToJSRef AnalyserNode where
-  pToJSRef = unAnalyserNode
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef AnalyserNode where
-  pFromJSRef = AnalyserNode
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef AnalyserNode where
-  toJSRef = return . unAnalyserNode
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef AnalyserNode where
-  fromJSRef = return . fmap AnalyserNode . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsAudioNode AnalyserNode
-instance IsEventTarget AnalyserNode
-instance IsGObject AnalyserNode where
-  toGObject = GObject . castRef . unAnalyserNode
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = AnalyserNode . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToAnalyserNode :: IsGObject obj => obj -> AnalyserNode
-castToAnalyserNode = castTo gTypeAnalyserNode "AnalyserNode"
-
-foreign import javascript unsafe "window[\"AnalyserNode\"]" gTypeAnalyserNode' :: JSRef GType
-gTypeAnalyserNode = GType gTypeAnalyserNode'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.AnimationEvent".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.Event"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/AnimationEvent Mozilla AnimationEvent documentation>
-newtype AnimationEvent = AnimationEvent { unAnimationEvent :: JSRef AnimationEvent }
-
-instance Eq (AnimationEvent) where
-  (AnimationEvent a) == (AnimationEvent b) = js_eq a b
-
-instance PToJSRef AnimationEvent where
-  pToJSRef = unAnimationEvent
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef AnimationEvent where
-  pFromJSRef = AnimationEvent
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef AnimationEvent where
-  toJSRef = return . unAnimationEvent
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef AnimationEvent where
-  fromJSRef = return . fmap AnimationEvent . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEvent AnimationEvent
-instance IsGObject AnimationEvent where
-  toGObject = GObject . castRef . unAnimationEvent
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = AnimationEvent . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToAnimationEvent :: IsGObject obj => obj -> AnimationEvent
-castToAnimationEvent = castTo gTypeAnimationEvent "AnimationEvent"
-
-foreign import javascript unsafe "window[\"AnimationEvent\"]" gTypeAnimationEvent' :: JSRef GType
-gTypeAnimationEvent = GType gTypeAnimationEvent'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.ApplicationCache".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/ApplicationCache Mozilla ApplicationCache documentation>
-newtype ApplicationCache = ApplicationCache { unApplicationCache :: JSRef ApplicationCache }
-
-instance Eq (ApplicationCache) where
-  (ApplicationCache a) == (ApplicationCache b) = js_eq a b
-
-instance PToJSRef ApplicationCache where
-  pToJSRef = unApplicationCache
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef ApplicationCache where
-  pFromJSRef = ApplicationCache
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef ApplicationCache where
-  toJSRef = return . unApplicationCache
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef ApplicationCache where
-  fromJSRef = return . fmap ApplicationCache . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEventTarget ApplicationCache
-instance IsGObject ApplicationCache where
-  toGObject = GObject . castRef . unApplicationCache
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = ApplicationCache . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToApplicationCache :: IsGObject obj => obj -> ApplicationCache
-castToApplicationCache = castTo gTypeApplicationCache "ApplicationCache"
-
-foreign import javascript unsafe "window[\"ApplicationCache\"]" gTypeApplicationCache' :: JSRef GType
-gTypeApplicationCache = GType gTypeApplicationCache'
-#else
-type IsApplicationCache o = ApplicationCacheClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.Attr".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/Attr Mozilla Attr documentation>
-newtype Attr = Attr { unAttr :: JSRef Attr }
-
-instance Eq (Attr) where
-  (Attr a) == (Attr b) = js_eq a b
-
-instance PToJSRef Attr where
-  pToJSRef = unAttr
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef Attr where
-  pFromJSRef = Attr
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef Attr where
-  toJSRef = return . unAttr
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef Attr where
-  fromJSRef = return . fmap Attr . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsNode Attr
-instance IsEventTarget Attr
-instance IsGObject Attr where
-  toGObject = GObject . castRef . unAttr
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = Attr . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToAttr :: IsGObject obj => obj -> Attr
-castToAttr = castTo gTypeAttr "Attr"
-
-foreign import javascript unsafe "window[\"Attr\"]" gTypeAttr' :: JSRef GType
-gTypeAttr = GType gTypeAttr'
-#else
-type IsAttr o = AttrClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.AudioBuffer".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/AudioBuffer Mozilla AudioBuffer documentation>
-newtype AudioBuffer = AudioBuffer { unAudioBuffer :: JSRef AudioBuffer }
-
-instance Eq (AudioBuffer) where
-  (AudioBuffer a) == (AudioBuffer b) = js_eq a b
-
-instance PToJSRef AudioBuffer where
-  pToJSRef = unAudioBuffer
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef AudioBuffer where
-  pFromJSRef = AudioBuffer
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef AudioBuffer where
-  toJSRef = return . unAudioBuffer
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef AudioBuffer where
-  fromJSRef = return . fmap AudioBuffer . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject AudioBuffer where
-  toGObject = GObject . castRef . unAudioBuffer
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = AudioBuffer . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToAudioBuffer :: IsGObject obj => obj -> AudioBuffer
-castToAudioBuffer = castTo gTypeAudioBuffer "AudioBuffer"
-
-foreign import javascript unsafe "window[\"AudioBuffer\"]" gTypeAudioBuffer' :: JSRef GType
-gTypeAudioBuffer = GType gTypeAudioBuffer'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.AudioBufferSourceNode".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.AudioNode"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/AudioBufferSourceNode Mozilla AudioBufferSourceNode documentation>
-newtype AudioBufferSourceNode = AudioBufferSourceNode { unAudioBufferSourceNode :: JSRef AudioBufferSourceNode }
-
-instance Eq (AudioBufferSourceNode) where
-  (AudioBufferSourceNode a) == (AudioBufferSourceNode b) = js_eq a b
-
-instance PToJSRef AudioBufferSourceNode where
-  pToJSRef = unAudioBufferSourceNode
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef AudioBufferSourceNode where
-  pFromJSRef = AudioBufferSourceNode
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef AudioBufferSourceNode where
-  toJSRef = return . unAudioBufferSourceNode
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef AudioBufferSourceNode where
-  fromJSRef = return . fmap AudioBufferSourceNode . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsAudioNode AudioBufferSourceNode
-instance IsEventTarget AudioBufferSourceNode
-instance IsGObject AudioBufferSourceNode where
-  toGObject = GObject . castRef . unAudioBufferSourceNode
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = AudioBufferSourceNode . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToAudioBufferSourceNode :: IsGObject obj => obj -> AudioBufferSourceNode
-castToAudioBufferSourceNode = castTo gTypeAudioBufferSourceNode "AudioBufferSourceNode"
-
-foreign import javascript unsafe "window[\"AudioBufferSourceNode\"]" gTypeAudioBufferSourceNode' :: JSRef GType
-gTypeAudioBufferSourceNode = GType gTypeAudioBufferSourceNode'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.AudioContext".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/AudioContext Mozilla AudioContext documentation>
-newtype AudioContext = AudioContext { unAudioContext :: JSRef AudioContext }
-
-instance Eq (AudioContext) where
-  (AudioContext a) == (AudioContext b) = js_eq a b
-
-instance PToJSRef AudioContext where
-  pToJSRef = unAudioContext
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef AudioContext where
-  pFromJSRef = AudioContext
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef AudioContext where
-  toJSRef = return . unAudioContext
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef AudioContext where
-  fromJSRef = return . fmap AudioContext . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsEventTarget o => IsAudioContext o
-toAudioContext :: IsAudioContext o => o -> AudioContext
-toAudioContext = unsafeCastGObject . toGObject
-
-instance IsAudioContext AudioContext
-instance IsEventTarget AudioContext
-instance IsGObject AudioContext where
-  toGObject = GObject . castRef . unAudioContext
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = AudioContext . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToAudioContext :: IsGObject obj => obj -> AudioContext
-castToAudioContext = castTo gTypeAudioContext "AudioContext"
-
-foreign import javascript unsafe "window[\"AudioContext\"]" gTypeAudioContext' :: JSRef GType
-gTypeAudioContext = GType gTypeAudioContext'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.AudioDestinationNode".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.AudioNode"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/AudioDestinationNode Mozilla AudioDestinationNode documentation>
-newtype AudioDestinationNode = AudioDestinationNode { unAudioDestinationNode :: JSRef AudioDestinationNode }
-
-instance Eq (AudioDestinationNode) where
-  (AudioDestinationNode a) == (AudioDestinationNode b) = js_eq a b
-
-instance PToJSRef AudioDestinationNode where
-  pToJSRef = unAudioDestinationNode
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef AudioDestinationNode where
-  pFromJSRef = AudioDestinationNode
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef AudioDestinationNode where
-  toJSRef = return . unAudioDestinationNode
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef AudioDestinationNode where
-  fromJSRef = return . fmap AudioDestinationNode . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsAudioNode AudioDestinationNode
-instance IsEventTarget AudioDestinationNode
-instance IsGObject AudioDestinationNode where
-  toGObject = GObject . castRef . unAudioDestinationNode
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = AudioDestinationNode . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToAudioDestinationNode :: IsGObject obj => obj -> AudioDestinationNode
-castToAudioDestinationNode = castTo gTypeAudioDestinationNode "AudioDestinationNode"
-
-foreign import javascript unsafe "window[\"AudioDestinationNode\"]" gTypeAudioDestinationNode' :: JSRef GType
-gTypeAudioDestinationNode = GType gTypeAudioDestinationNode'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.AudioListener".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/AudioListener Mozilla AudioListener documentation>
-newtype AudioListener = AudioListener { unAudioListener :: JSRef AudioListener }
-
-instance Eq (AudioListener) where
-  (AudioListener a) == (AudioListener b) = js_eq a b
-
-instance PToJSRef AudioListener where
-  pToJSRef = unAudioListener
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef AudioListener where
-  pFromJSRef = AudioListener
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef AudioListener where
-  toJSRef = return . unAudioListener
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef AudioListener where
-  fromJSRef = return . fmap AudioListener . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject AudioListener where
-  toGObject = GObject . castRef . unAudioListener
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = AudioListener . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToAudioListener :: IsGObject obj => obj -> AudioListener
-castToAudioListener = castTo gTypeAudioListener "AudioListener"
-
-foreign import javascript unsafe "window[\"AudioListener\"]" gTypeAudioListener' :: JSRef GType
-gTypeAudioListener = GType gTypeAudioListener'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.AudioNode".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/AudioNode Mozilla AudioNode documentation>
-newtype AudioNode = AudioNode { unAudioNode :: JSRef AudioNode }
-
-instance Eq (AudioNode) where
-  (AudioNode a) == (AudioNode b) = js_eq a b
-
-instance PToJSRef AudioNode where
-  pToJSRef = unAudioNode
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef AudioNode where
-  pFromJSRef = AudioNode
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef AudioNode where
-  toJSRef = return . unAudioNode
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef AudioNode where
-  fromJSRef = return . fmap AudioNode . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsEventTarget o => IsAudioNode o
-toAudioNode :: IsAudioNode o => o -> AudioNode
-toAudioNode = unsafeCastGObject . toGObject
-
-instance IsAudioNode AudioNode
-instance IsEventTarget AudioNode
-instance IsGObject AudioNode where
-  toGObject = GObject . castRef . unAudioNode
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = AudioNode . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToAudioNode :: IsGObject obj => obj -> AudioNode
-castToAudioNode = castTo gTypeAudioNode "AudioNode"
-
-foreign import javascript unsafe "window[\"AudioNode\"]" gTypeAudioNode' :: JSRef GType
-gTypeAudioNode = GType gTypeAudioNode'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.AudioParam".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/AudioParam Mozilla AudioParam documentation>
-newtype AudioParam = AudioParam { unAudioParam :: JSRef AudioParam }
-
-instance Eq (AudioParam) where
-  (AudioParam a) == (AudioParam b) = js_eq a b
-
-instance PToJSRef AudioParam where
-  pToJSRef = unAudioParam
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef AudioParam where
-  pFromJSRef = AudioParam
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef AudioParam where
-  toJSRef = return . unAudioParam
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef AudioParam where
-  fromJSRef = return . fmap AudioParam . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject AudioParam where
-  toGObject = GObject . castRef . unAudioParam
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = AudioParam . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToAudioParam :: IsGObject obj => obj -> AudioParam
-castToAudioParam = castTo gTypeAudioParam "AudioParam"
-
-foreign import javascript unsafe "window[\"AudioParam\"]" gTypeAudioParam' :: JSRef GType
-gTypeAudioParam = GType gTypeAudioParam'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.AudioProcessingEvent".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.Event"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/AudioProcessingEvent Mozilla AudioProcessingEvent documentation>
-newtype AudioProcessingEvent = AudioProcessingEvent { unAudioProcessingEvent :: JSRef AudioProcessingEvent }
-
-instance Eq (AudioProcessingEvent) where
-  (AudioProcessingEvent a) == (AudioProcessingEvent b) = js_eq a b
-
-instance PToJSRef AudioProcessingEvent where
-  pToJSRef = unAudioProcessingEvent
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef AudioProcessingEvent where
-  pFromJSRef = AudioProcessingEvent
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef AudioProcessingEvent where
-  toJSRef = return . unAudioProcessingEvent
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef AudioProcessingEvent where
-  fromJSRef = return . fmap AudioProcessingEvent . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEvent AudioProcessingEvent
-instance IsGObject AudioProcessingEvent where
-  toGObject = GObject . castRef . unAudioProcessingEvent
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = AudioProcessingEvent . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToAudioProcessingEvent :: IsGObject obj => obj -> AudioProcessingEvent
-castToAudioProcessingEvent = castTo gTypeAudioProcessingEvent "AudioProcessingEvent"
-
-foreign import javascript unsafe "window[\"AudioProcessingEvent\"]" gTypeAudioProcessingEvent' :: JSRef GType
-gTypeAudioProcessingEvent = GType gTypeAudioProcessingEvent'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.AudioStreamTrack".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.MediaStreamTrack"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/AudioStreamTrack Mozilla AudioStreamTrack documentation>
-newtype AudioStreamTrack = AudioStreamTrack { unAudioStreamTrack :: JSRef AudioStreamTrack }
-
-instance Eq (AudioStreamTrack) where
-  (AudioStreamTrack a) == (AudioStreamTrack b) = js_eq a b
-
-instance PToJSRef AudioStreamTrack where
-  pToJSRef = unAudioStreamTrack
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef AudioStreamTrack where
-  pFromJSRef = AudioStreamTrack
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef AudioStreamTrack where
-  toJSRef = return . unAudioStreamTrack
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef AudioStreamTrack where
-  fromJSRef = return . fmap AudioStreamTrack . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsMediaStreamTrack AudioStreamTrack
-instance IsEventTarget AudioStreamTrack
-instance IsGObject AudioStreamTrack where
-  toGObject = GObject . castRef . unAudioStreamTrack
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = AudioStreamTrack . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToAudioStreamTrack :: IsGObject obj => obj -> AudioStreamTrack
-castToAudioStreamTrack = castTo gTypeAudioStreamTrack "AudioStreamTrack"
-
-foreign import javascript unsafe "window[\"AudioStreamTrack\"]" gTypeAudioStreamTrack' :: JSRef GType
-gTypeAudioStreamTrack = GType gTypeAudioStreamTrack'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.AudioTrack".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/AudioTrack Mozilla AudioTrack documentation>
-newtype AudioTrack = AudioTrack { unAudioTrack :: JSRef AudioTrack }
-
-instance Eq (AudioTrack) where
-  (AudioTrack a) == (AudioTrack b) = js_eq a b
-
-instance PToJSRef AudioTrack where
-  pToJSRef = unAudioTrack
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef AudioTrack where
-  pFromJSRef = AudioTrack
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef AudioTrack where
-  toJSRef = return . unAudioTrack
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef AudioTrack where
-  fromJSRef = return . fmap AudioTrack . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject AudioTrack where
-  toGObject = GObject . castRef . unAudioTrack
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = AudioTrack . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToAudioTrack :: IsGObject obj => obj -> AudioTrack
-castToAudioTrack = castTo gTypeAudioTrack "AudioTrack"
-
-foreign import javascript unsafe "window[\"AudioTrack\"]" gTypeAudioTrack' :: JSRef GType
-gTypeAudioTrack = GType gTypeAudioTrack'
-#else
-#ifndef USE_OLD_WEBKIT
-type IsAudioTrack o = AudioTrackClass o
-#endif
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.AudioTrackList".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/AudioTrackList Mozilla AudioTrackList documentation>
-newtype AudioTrackList = AudioTrackList { unAudioTrackList :: JSRef AudioTrackList }
-
-instance Eq (AudioTrackList) where
-  (AudioTrackList a) == (AudioTrackList b) = js_eq a b
-
-instance PToJSRef AudioTrackList where
-  pToJSRef = unAudioTrackList
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef AudioTrackList where
-  pFromJSRef = AudioTrackList
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef AudioTrackList where
-  toJSRef = return . unAudioTrackList
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef AudioTrackList where
-  fromJSRef = return . fmap AudioTrackList . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEventTarget AudioTrackList
-instance IsGObject AudioTrackList where
-  toGObject = GObject . castRef . unAudioTrackList
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = AudioTrackList . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToAudioTrackList :: IsGObject obj => obj -> AudioTrackList
-castToAudioTrackList = castTo gTypeAudioTrackList "AudioTrackList"
-
-foreign import javascript unsafe "window[\"AudioTrackList\"]" gTypeAudioTrackList' :: JSRef GType
-gTypeAudioTrackList = GType gTypeAudioTrackList'
-#else
-#ifndef USE_OLD_WEBKIT
-type IsAudioTrackList o = AudioTrackListClass o
-#endif
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.AutocompleteErrorEvent".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.Event"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/AutocompleteErrorEvent Mozilla AutocompleteErrorEvent documentation>
-newtype AutocompleteErrorEvent = AutocompleteErrorEvent { unAutocompleteErrorEvent :: JSRef AutocompleteErrorEvent }
-
-instance Eq (AutocompleteErrorEvent) where
-  (AutocompleteErrorEvent a) == (AutocompleteErrorEvent b) = js_eq a b
-
-instance PToJSRef AutocompleteErrorEvent where
-  pToJSRef = unAutocompleteErrorEvent
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef AutocompleteErrorEvent where
-  pFromJSRef = AutocompleteErrorEvent
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef AutocompleteErrorEvent where
-  toJSRef = return . unAutocompleteErrorEvent
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef AutocompleteErrorEvent where
-  fromJSRef = return . fmap AutocompleteErrorEvent . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEvent AutocompleteErrorEvent
-instance IsGObject AutocompleteErrorEvent where
-  toGObject = GObject . castRef . unAutocompleteErrorEvent
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = AutocompleteErrorEvent . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToAutocompleteErrorEvent :: IsGObject obj => obj -> AutocompleteErrorEvent
-castToAutocompleteErrorEvent = castTo gTypeAutocompleteErrorEvent "AutocompleteErrorEvent"
-
-foreign import javascript unsafe "window[\"AutocompleteErrorEvent\"]" gTypeAutocompleteErrorEvent' :: JSRef GType
-gTypeAutocompleteErrorEvent = GType gTypeAutocompleteErrorEvent'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.BarProp".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/BarProp Mozilla BarProp documentation>
-newtype BarProp = BarProp { unBarProp :: JSRef BarProp }
-
-instance Eq (BarProp) where
-  (BarProp a) == (BarProp b) = js_eq a b
-
-instance PToJSRef BarProp where
-  pToJSRef = unBarProp
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef BarProp where
-  pFromJSRef = BarProp
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef BarProp where
-  toJSRef = return . unBarProp
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef BarProp where
-  fromJSRef = return . fmap BarProp . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject BarProp where
-  toGObject = GObject . castRef . unBarProp
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = BarProp . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToBarProp :: IsGObject obj => obj -> BarProp
-castToBarProp = castTo gTypeBarProp "BarProp"
-
-foreign import javascript unsafe "window[\"BarProp\"]" gTypeBarProp' :: JSRef GType
-gTypeBarProp = GType gTypeBarProp'
-#else
-#ifndef USE_OLD_WEBKIT
-type IsBarProp o = BarPropClass o
-#endif
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.BatteryManager".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/BatteryManager Mozilla BatteryManager documentation>
-newtype BatteryManager = BatteryManager { unBatteryManager :: JSRef BatteryManager }
-
-instance Eq (BatteryManager) where
-  (BatteryManager a) == (BatteryManager b) = js_eq a b
-
-instance PToJSRef BatteryManager where
-  pToJSRef = unBatteryManager
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef BatteryManager where
-  pFromJSRef = BatteryManager
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef BatteryManager where
-  toJSRef = return . unBatteryManager
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef BatteryManager where
-  fromJSRef = return . fmap BatteryManager . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEventTarget BatteryManager
-instance IsGObject BatteryManager where
-  toGObject = GObject . castRef . unBatteryManager
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = BatteryManager . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToBatteryManager :: IsGObject obj => obj -> BatteryManager
-castToBatteryManager = castTo gTypeBatteryManager "BatteryManager"
-
-foreign import javascript unsafe "window[\"BatteryManager\"]" gTypeBatteryManager' :: JSRef GType
-gTypeBatteryManager = GType gTypeBatteryManager'
-#else
-#ifndef USE_OLD_WEBKIT
-type IsBatteryManager o = BatteryManagerClass o
-#endif
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.BeforeLoadEvent".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.Event"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/BeforeLoadEvent Mozilla BeforeLoadEvent documentation>
-newtype BeforeLoadEvent = BeforeLoadEvent { unBeforeLoadEvent :: JSRef BeforeLoadEvent }
-
-instance Eq (BeforeLoadEvent) where
-  (BeforeLoadEvent a) == (BeforeLoadEvent b) = js_eq a b
-
-instance PToJSRef BeforeLoadEvent where
-  pToJSRef = unBeforeLoadEvent
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef BeforeLoadEvent where
-  pFromJSRef = BeforeLoadEvent
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef BeforeLoadEvent where
-  toJSRef = return . unBeforeLoadEvent
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef BeforeLoadEvent where
-  fromJSRef = return . fmap BeforeLoadEvent . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEvent BeforeLoadEvent
-instance IsGObject BeforeLoadEvent where
-  toGObject = GObject . castRef . unBeforeLoadEvent
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = BeforeLoadEvent . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToBeforeLoadEvent :: IsGObject obj => obj -> BeforeLoadEvent
-castToBeforeLoadEvent = castTo gTypeBeforeLoadEvent "BeforeLoadEvent"
-
-foreign import javascript unsafe "window[\"BeforeLoadEvent\"]" gTypeBeforeLoadEvent' :: JSRef GType
-gTypeBeforeLoadEvent = GType gTypeBeforeLoadEvent'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.BeforeUnloadEvent".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.Event"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/BeforeUnloadEvent Mozilla BeforeUnloadEvent documentation>
-newtype BeforeUnloadEvent = BeforeUnloadEvent { unBeforeUnloadEvent :: JSRef BeforeUnloadEvent }
-
-instance Eq (BeforeUnloadEvent) where
-  (BeforeUnloadEvent a) == (BeforeUnloadEvent b) = js_eq a b
-
-instance PToJSRef BeforeUnloadEvent where
-  pToJSRef = unBeforeUnloadEvent
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef BeforeUnloadEvent where
-  pFromJSRef = BeforeUnloadEvent
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef BeforeUnloadEvent where
-  toJSRef = return . unBeforeUnloadEvent
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef BeforeUnloadEvent where
-  fromJSRef = return . fmap BeforeUnloadEvent . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEvent BeforeUnloadEvent
-instance IsGObject BeforeUnloadEvent where
-  toGObject = GObject . castRef . unBeforeUnloadEvent
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = BeforeUnloadEvent . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToBeforeUnloadEvent :: IsGObject obj => obj -> BeforeUnloadEvent
-castToBeforeUnloadEvent = castTo gTypeBeforeUnloadEvent "BeforeUnloadEvent"
-
-foreign import javascript unsafe "window[\"BeforeUnloadEvent\"]" gTypeBeforeUnloadEvent' :: JSRef GType
-gTypeBeforeUnloadEvent = GType gTypeBeforeUnloadEvent'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.BiquadFilterNode".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.AudioNode"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/BiquadFilterNode Mozilla BiquadFilterNode documentation>
-newtype BiquadFilterNode = BiquadFilterNode { unBiquadFilterNode :: JSRef BiquadFilterNode }
-
-instance Eq (BiquadFilterNode) where
-  (BiquadFilterNode a) == (BiquadFilterNode b) = js_eq a b
-
-instance PToJSRef BiquadFilterNode where
-  pToJSRef = unBiquadFilterNode
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef BiquadFilterNode where
-  pFromJSRef = BiquadFilterNode
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef BiquadFilterNode where
-  toJSRef = return . unBiquadFilterNode
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef BiquadFilterNode where
-  fromJSRef = return . fmap BiquadFilterNode . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsAudioNode BiquadFilterNode
-instance IsEventTarget BiquadFilterNode
-instance IsGObject BiquadFilterNode where
-  toGObject = GObject . castRef . unBiquadFilterNode
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = BiquadFilterNode . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToBiquadFilterNode :: IsGObject obj => obj -> BiquadFilterNode
-castToBiquadFilterNode = castTo gTypeBiquadFilterNode "BiquadFilterNode"
-
-foreign import javascript unsafe "window[\"BiquadFilterNode\"]" gTypeBiquadFilterNode' :: JSRef GType
-gTypeBiquadFilterNode = GType gTypeBiquadFilterNode'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.Blob".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/Blob Mozilla Blob documentation>
-newtype Blob = Blob { unBlob :: JSRef Blob }
-
-instance Eq (Blob) where
-  (Blob a) == (Blob b) = js_eq a b
-
-instance PToJSRef Blob where
-  pToJSRef = unBlob
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef Blob where
-  pFromJSRef = Blob
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef Blob where
-  toJSRef = return . unBlob
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef Blob where
-  fromJSRef = return . fmap Blob . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsGObject o => IsBlob o
-toBlob :: IsBlob o => o -> Blob
-toBlob = unsafeCastGObject . toGObject
-
-instance IsBlob Blob
-instance IsGObject Blob where
-  toGObject = GObject . castRef . unBlob
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = Blob . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToBlob :: IsGObject obj => obj -> Blob
-castToBlob = castTo gTypeBlob "Blob"
-
-foreign import javascript unsafe "window[\"Blob\"]" gTypeBlob' :: JSRef GType
-gTypeBlob = GType gTypeBlob'
-#else
-type IsBlob o = BlobClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.CDATASection".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.Text"
---     * "GHCJS.DOM.CharacterData"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/CDATASection Mozilla CDATASection documentation>
-newtype CDATASection = CDATASection { unCDATASection :: JSRef CDATASection }
-
-instance Eq (CDATASection) where
-  (CDATASection a) == (CDATASection b) = js_eq a b
-
-instance PToJSRef CDATASection where
-  pToJSRef = unCDATASection
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef CDATASection where
-  pFromJSRef = CDATASection
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef CDATASection where
-  toJSRef = return . unCDATASection
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef CDATASection where
-  fromJSRef = return . fmap CDATASection . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsText CDATASection
-instance IsCharacterData CDATASection
-instance IsNode CDATASection
-instance IsEventTarget CDATASection
-instance IsGObject CDATASection where
-  toGObject = GObject . castRef . unCDATASection
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = CDATASection . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToCDATASection :: IsGObject obj => obj -> CDATASection
-castToCDATASection = castTo gTypeCDATASection "CDATASection"
-
-foreign import javascript unsafe "window[\"CDATASection\"]" gTypeCDATASection' :: JSRef GType
-gTypeCDATASection = GType gTypeCDATASection'
-#else
-type IsCDATASection o = CDATASectionClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.CSS".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/CSS Mozilla CSS documentation>
-newtype CSS = CSS { unCSS :: JSRef CSS }
-
-instance Eq (CSS) where
-  (CSS a) == (CSS b) = js_eq a b
-
-instance PToJSRef CSS where
-  pToJSRef = unCSS
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef CSS where
-  pFromJSRef = CSS
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef CSS where
-  toJSRef = return . unCSS
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef CSS where
-  fromJSRef = return . fmap CSS . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject CSS where
-  toGObject = GObject . castRef . unCSS
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = CSS . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToCSS :: IsGObject obj => obj -> CSS
-castToCSS = castTo gTypeCSS "CSS"
-
-foreign import javascript unsafe "window[\"CSS\"]" gTypeCSS' :: JSRef GType
-gTypeCSS = GType gTypeCSS'
-#else
-#ifndef USE_OLD_WEBKIT
-type IsCSS o = CSSClass o
-#endif
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.CSSCharsetRule".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.CSSRule"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/CSSCharsetRule Mozilla CSSCharsetRule documentation>
-newtype CSSCharsetRule = CSSCharsetRule { unCSSCharsetRule :: JSRef CSSCharsetRule }
-
-instance Eq (CSSCharsetRule) where
-  (CSSCharsetRule a) == (CSSCharsetRule b) = js_eq a b
-
-instance PToJSRef CSSCharsetRule where
-  pToJSRef = unCSSCharsetRule
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef CSSCharsetRule where
-  pFromJSRef = CSSCharsetRule
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef CSSCharsetRule where
-  toJSRef = return . unCSSCharsetRule
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef CSSCharsetRule where
-  fromJSRef = return . fmap CSSCharsetRule . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsCSSRule CSSCharsetRule
-instance IsGObject CSSCharsetRule where
-  toGObject = GObject . castRef . unCSSCharsetRule
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = CSSCharsetRule . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToCSSCharsetRule :: IsGObject obj => obj -> CSSCharsetRule
-castToCSSCharsetRule = castTo gTypeCSSCharsetRule "CSSCharsetRule"
-
-foreign import javascript unsafe "window[\"CSSCharsetRule\"]" gTypeCSSCharsetRule' :: JSRef GType
-gTypeCSSCharsetRule = GType gTypeCSSCharsetRule'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.CSSFontFaceLoadEvent".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.Event"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/CSSFontFaceLoadEvent Mozilla CSSFontFaceLoadEvent documentation>
-newtype CSSFontFaceLoadEvent = CSSFontFaceLoadEvent { unCSSFontFaceLoadEvent :: JSRef CSSFontFaceLoadEvent }
-
-instance Eq (CSSFontFaceLoadEvent) where
-  (CSSFontFaceLoadEvent a) == (CSSFontFaceLoadEvent b) = js_eq a b
-
-instance PToJSRef CSSFontFaceLoadEvent where
-  pToJSRef = unCSSFontFaceLoadEvent
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef CSSFontFaceLoadEvent where
-  pFromJSRef = CSSFontFaceLoadEvent
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef CSSFontFaceLoadEvent where
-  toJSRef = return . unCSSFontFaceLoadEvent
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef CSSFontFaceLoadEvent where
-  fromJSRef = return . fmap CSSFontFaceLoadEvent . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEvent CSSFontFaceLoadEvent
-instance IsGObject CSSFontFaceLoadEvent where
-  toGObject = GObject . castRef . unCSSFontFaceLoadEvent
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = CSSFontFaceLoadEvent . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToCSSFontFaceLoadEvent :: IsGObject obj => obj -> CSSFontFaceLoadEvent
-castToCSSFontFaceLoadEvent = castTo gTypeCSSFontFaceLoadEvent "CSSFontFaceLoadEvent"
-
-foreign import javascript unsafe "window[\"CSSFontFaceLoadEvent\"]" gTypeCSSFontFaceLoadEvent' :: JSRef GType
-gTypeCSSFontFaceLoadEvent = GType gTypeCSSFontFaceLoadEvent'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.CSSFontFaceRule".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.CSSRule"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/CSSFontFaceRule Mozilla CSSFontFaceRule documentation>
-newtype CSSFontFaceRule = CSSFontFaceRule { unCSSFontFaceRule :: JSRef CSSFontFaceRule }
-
-instance Eq (CSSFontFaceRule) where
-  (CSSFontFaceRule a) == (CSSFontFaceRule b) = js_eq a b
-
-instance PToJSRef CSSFontFaceRule where
-  pToJSRef = unCSSFontFaceRule
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef CSSFontFaceRule where
-  pFromJSRef = CSSFontFaceRule
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef CSSFontFaceRule where
-  toJSRef = return . unCSSFontFaceRule
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef CSSFontFaceRule where
-  fromJSRef = return . fmap CSSFontFaceRule . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsCSSRule CSSFontFaceRule
-instance IsGObject CSSFontFaceRule where
-  toGObject = GObject . castRef . unCSSFontFaceRule
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = CSSFontFaceRule . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToCSSFontFaceRule :: IsGObject obj => obj -> CSSFontFaceRule
-castToCSSFontFaceRule = castTo gTypeCSSFontFaceRule "CSSFontFaceRule"
-
-foreign import javascript unsafe "window[\"CSSFontFaceRule\"]" gTypeCSSFontFaceRule' :: JSRef GType
-gTypeCSSFontFaceRule = GType gTypeCSSFontFaceRule'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.CSSImportRule".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.CSSRule"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/CSSImportRule Mozilla CSSImportRule documentation>
-newtype CSSImportRule = CSSImportRule { unCSSImportRule :: JSRef CSSImportRule }
-
-instance Eq (CSSImportRule) where
-  (CSSImportRule a) == (CSSImportRule b) = js_eq a b
-
-instance PToJSRef CSSImportRule where
-  pToJSRef = unCSSImportRule
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef CSSImportRule where
-  pFromJSRef = CSSImportRule
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef CSSImportRule where
-  toJSRef = return . unCSSImportRule
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef CSSImportRule where
-  fromJSRef = return . fmap CSSImportRule . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsCSSRule CSSImportRule
-instance IsGObject CSSImportRule where
-  toGObject = GObject . castRef . unCSSImportRule
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = CSSImportRule . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToCSSImportRule :: IsGObject obj => obj -> CSSImportRule
-castToCSSImportRule = castTo gTypeCSSImportRule "CSSImportRule"
-
-foreign import javascript unsafe "window[\"CSSImportRule\"]" gTypeCSSImportRule' :: JSRef GType
-gTypeCSSImportRule = GType gTypeCSSImportRule'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.CSSKeyframeRule".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.CSSRule"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/CSSKeyframeRule Mozilla CSSKeyframeRule documentation>
-newtype CSSKeyframeRule = CSSKeyframeRule { unCSSKeyframeRule :: JSRef CSSKeyframeRule }
-
-instance Eq (CSSKeyframeRule) where
-  (CSSKeyframeRule a) == (CSSKeyframeRule b) = js_eq a b
-
-instance PToJSRef CSSKeyframeRule where
-  pToJSRef = unCSSKeyframeRule
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef CSSKeyframeRule where
-  pFromJSRef = CSSKeyframeRule
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef CSSKeyframeRule where
-  toJSRef = return . unCSSKeyframeRule
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef CSSKeyframeRule where
-  fromJSRef = return . fmap CSSKeyframeRule . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsCSSRule CSSKeyframeRule
-instance IsGObject CSSKeyframeRule where
-  toGObject = GObject . castRef . unCSSKeyframeRule
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = CSSKeyframeRule . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToCSSKeyframeRule :: IsGObject obj => obj -> CSSKeyframeRule
-castToCSSKeyframeRule = castTo gTypeCSSKeyframeRule "CSSKeyframeRule"
-
-foreign import javascript unsafe "window[\"CSSKeyframeRule\"]" gTypeCSSKeyframeRule' :: JSRef GType
-gTypeCSSKeyframeRule = GType gTypeCSSKeyframeRule'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.CSSKeyframesRule".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.CSSRule"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/CSSKeyframesRule Mozilla CSSKeyframesRule documentation>
-newtype CSSKeyframesRule = CSSKeyframesRule { unCSSKeyframesRule :: JSRef CSSKeyframesRule }
-
-instance Eq (CSSKeyframesRule) where
-  (CSSKeyframesRule a) == (CSSKeyframesRule b) = js_eq a b
-
-instance PToJSRef CSSKeyframesRule where
-  pToJSRef = unCSSKeyframesRule
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef CSSKeyframesRule where
-  pFromJSRef = CSSKeyframesRule
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef CSSKeyframesRule where
-  toJSRef = return . unCSSKeyframesRule
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef CSSKeyframesRule where
-  fromJSRef = return . fmap CSSKeyframesRule . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsCSSRule CSSKeyframesRule
-instance IsGObject CSSKeyframesRule where
-  toGObject = GObject . castRef . unCSSKeyframesRule
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = CSSKeyframesRule . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToCSSKeyframesRule :: IsGObject obj => obj -> CSSKeyframesRule
-castToCSSKeyframesRule = castTo gTypeCSSKeyframesRule "CSSKeyframesRule"
-
-foreign import javascript unsafe "window[\"CSSKeyframesRule\"]" gTypeCSSKeyframesRule' :: JSRef GType
-gTypeCSSKeyframesRule = GType gTypeCSSKeyframesRule'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.CSSMediaRule".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.CSSRule"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/CSSMediaRule Mozilla CSSMediaRule documentation>
-newtype CSSMediaRule = CSSMediaRule { unCSSMediaRule :: JSRef CSSMediaRule }
-
-instance Eq (CSSMediaRule) where
-  (CSSMediaRule a) == (CSSMediaRule b) = js_eq a b
-
-instance PToJSRef CSSMediaRule where
-  pToJSRef = unCSSMediaRule
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef CSSMediaRule where
-  pFromJSRef = CSSMediaRule
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef CSSMediaRule where
-  toJSRef = return . unCSSMediaRule
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef CSSMediaRule where
-  fromJSRef = return . fmap CSSMediaRule . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsCSSRule CSSMediaRule
-instance IsGObject CSSMediaRule where
-  toGObject = GObject . castRef . unCSSMediaRule
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = CSSMediaRule . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToCSSMediaRule :: IsGObject obj => obj -> CSSMediaRule
-castToCSSMediaRule = castTo gTypeCSSMediaRule "CSSMediaRule"
-
-foreign import javascript unsafe "window[\"CSSMediaRule\"]" gTypeCSSMediaRule' :: JSRef GType
-gTypeCSSMediaRule = GType gTypeCSSMediaRule'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.CSSPageRule".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.CSSRule"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/CSSPageRule Mozilla CSSPageRule documentation>
-newtype CSSPageRule = CSSPageRule { unCSSPageRule :: JSRef CSSPageRule }
-
-instance Eq (CSSPageRule) where
-  (CSSPageRule a) == (CSSPageRule b) = js_eq a b
-
-instance PToJSRef CSSPageRule where
-  pToJSRef = unCSSPageRule
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef CSSPageRule where
-  pFromJSRef = CSSPageRule
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef CSSPageRule where
-  toJSRef = return . unCSSPageRule
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef CSSPageRule where
-  fromJSRef = return . fmap CSSPageRule . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsCSSRule CSSPageRule
-instance IsGObject CSSPageRule where
-  toGObject = GObject . castRef . unCSSPageRule
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = CSSPageRule . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToCSSPageRule :: IsGObject obj => obj -> CSSPageRule
-castToCSSPageRule = castTo gTypeCSSPageRule "CSSPageRule"
-
-foreign import javascript unsafe "window[\"CSSPageRule\"]" gTypeCSSPageRule' :: JSRef GType
-gTypeCSSPageRule = GType gTypeCSSPageRule'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.CSSPrimitiveValue".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.CSSValue"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/CSSPrimitiveValue Mozilla CSSPrimitiveValue documentation>
-newtype CSSPrimitiveValue = CSSPrimitiveValue { unCSSPrimitiveValue :: JSRef CSSPrimitiveValue }
-
-instance Eq (CSSPrimitiveValue) where
-  (CSSPrimitiveValue a) == (CSSPrimitiveValue b) = js_eq a b
-
-instance PToJSRef CSSPrimitiveValue where
-  pToJSRef = unCSSPrimitiveValue
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef CSSPrimitiveValue where
-  pFromJSRef = CSSPrimitiveValue
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef CSSPrimitiveValue where
-  toJSRef = return . unCSSPrimitiveValue
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef CSSPrimitiveValue where
-  fromJSRef = return . fmap CSSPrimitiveValue . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsCSSValue CSSPrimitiveValue
-instance IsGObject CSSPrimitiveValue where
-  toGObject = GObject . castRef . unCSSPrimitiveValue
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = CSSPrimitiveValue . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToCSSPrimitiveValue :: IsGObject obj => obj -> CSSPrimitiveValue
-castToCSSPrimitiveValue = castTo gTypeCSSPrimitiveValue "CSSPrimitiveValue"
-
-foreign import javascript unsafe "window[\"CSSPrimitiveValue\"]" gTypeCSSPrimitiveValue' :: JSRef GType
-gTypeCSSPrimitiveValue = GType gTypeCSSPrimitiveValue'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.CSSRule".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/CSSRule Mozilla CSSRule documentation>
-newtype CSSRule = CSSRule { unCSSRule :: JSRef CSSRule }
-
-instance Eq (CSSRule) where
-  (CSSRule a) == (CSSRule b) = js_eq a b
-
-instance PToJSRef CSSRule where
-  pToJSRef = unCSSRule
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef CSSRule where
-  pFromJSRef = CSSRule
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef CSSRule where
-  toJSRef = return . unCSSRule
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef CSSRule where
-  fromJSRef = return . fmap CSSRule . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsGObject o => IsCSSRule o
-toCSSRule :: IsCSSRule o => o -> CSSRule
-toCSSRule = unsafeCastGObject . toGObject
-
-instance IsCSSRule CSSRule
-instance IsGObject CSSRule where
-  toGObject = GObject . castRef . unCSSRule
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = CSSRule . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToCSSRule :: IsGObject obj => obj -> CSSRule
-castToCSSRule = castTo gTypeCSSRule "CSSRule"
-
-foreign import javascript unsafe "window[\"CSSRule\"]" gTypeCSSRule' :: JSRef GType
-gTypeCSSRule = GType gTypeCSSRule'
-#else
-type IsCSSRule o = CSSRuleClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.CSSRuleList".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/CSSRuleList Mozilla CSSRuleList documentation>
-newtype CSSRuleList = CSSRuleList { unCSSRuleList :: JSRef CSSRuleList }
-
-instance Eq (CSSRuleList) where
-  (CSSRuleList a) == (CSSRuleList b) = js_eq a b
-
-instance PToJSRef CSSRuleList where
-  pToJSRef = unCSSRuleList
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef CSSRuleList where
-  pFromJSRef = CSSRuleList
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef CSSRuleList where
-  toJSRef = return . unCSSRuleList
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef CSSRuleList where
-  fromJSRef = return . fmap CSSRuleList . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject CSSRuleList where
-  toGObject = GObject . castRef . unCSSRuleList
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = CSSRuleList . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToCSSRuleList :: IsGObject obj => obj -> CSSRuleList
-castToCSSRuleList = castTo gTypeCSSRuleList "CSSRuleList"
-
-foreign import javascript unsafe "window[\"CSSRuleList\"]" gTypeCSSRuleList' :: JSRef GType
-gTypeCSSRuleList = GType gTypeCSSRuleList'
-#else
-type IsCSSRuleList o = CSSRuleListClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.CSSStyleDeclaration".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleDeclaration Mozilla CSSStyleDeclaration documentation>
-newtype CSSStyleDeclaration = CSSStyleDeclaration { unCSSStyleDeclaration :: JSRef CSSStyleDeclaration }
-
-instance Eq (CSSStyleDeclaration) where
-  (CSSStyleDeclaration a) == (CSSStyleDeclaration b) = js_eq a b
-
-instance PToJSRef CSSStyleDeclaration where
-  pToJSRef = unCSSStyleDeclaration
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef CSSStyleDeclaration where
-  pFromJSRef = CSSStyleDeclaration
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef CSSStyleDeclaration where
-  toJSRef = return . unCSSStyleDeclaration
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef CSSStyleDeclaration where
-  fromJSRef = return . fmap CSSStyleDeclaration . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject CSSStyleDeclaration where
-  toGObject = GObject . castRef . unCSSStyleDeclaration
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = CSSStyleDeclaration . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToCSSStyleDeclaration :: IsGObject obj => obj -> CSSStyleDeclaration
-castToCSSStyleDeclaration = castTo gTypeCSSStyleDeclaration "CSSStyleDeclaration"
-
-foreign import javascript unsafe "window[\"CSSStyleDeclaration\"]" gTypeCSSStyleDeclaration' :: JSRef GType
-gTypeCSSStyleDeclaration = GType gTypeCSSStyleDeclaration'
-#else
-type IsCSSStyleDeclaration o = CSSStyleDeclarationClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.CSSStyleRule".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.CSSRule"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleRule Mozilla CSSStyleRule documentation>
-newtype CSSStyleRule = CSSStyleRule { unCSSStyleRule :: JSRef CSSStyleRule }
-
-instance Eq (CSSStyleRule) where
-  (CSSStyleRule a) == (CSSStyleRule b) = js_eq a b
-
-instance PToJSRef CSSStyleRule where
-  pToJSRef = unCSSStyleRule
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef CSSStyleRule where
-  pFromJSRef = CSSStyleRule
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef CSSStyleRule where
-  toJSRef = return . unCSSStyleRule
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef CSSStyleRule where
-  fromJSRef = return . fmap CSSStyleRule . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsCSSRule CSSStyleRule
-instance IsGObject CSSStyleRule where
-  toGObject = GObject . castRef . unCSSStyleRule
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = CSSStyleRule . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToCSSStyleRule :: IsGObject obj => obj -> CSSStyleRule
-castToCSSStyleRule = castTo gTypeCSSStyleRule "CSSStyleRule"
-
-foreign import javascript unsafe "window[\"CSSStyleRule\"]" gTypeCSSStyleRule' :: JSRef GType
-gTypeCSSStyleRule = GType gTypeCSSStyleRule'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.CSSStyleSheet".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.StyleSheet"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleSheet Mozilla CSSStyleSheet documentation>
-newtype CSSStyleSheet = CSSStyleSheet { unCSSStyleSheet :: JSRef CSSStyleSheet }
-
-instance Eq (CSSStyleSheet) where
-  (CSSStyleSheet a) == (CSSStyleSheet b) = js_eq a b
-
-instance PToJSRef CSSStyleSheet where
-  pToJSRef = unCSSStyleSheet
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef CSSStyleSheet where
-  pFromJSRef = CSSStyleSheet
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef CSSStyleSheet where
-  toJSRef = return . unCSSStyleSheet
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef CSSStyleSheet where
-  fromJSRef = return . fmap CSSStyleSheet . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsStyleSheet CSSStyleSheet
-instance IsGObject CSSStyleSheet where
-  toGObject = GObject . castRef . unCSSStyleSheet
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = CSSStyleSheet . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToCSSStyleSheet :: IsGObject obj => obj -> CSSStyleSheet
-castToCSSStyleSheet = castTo gTypeCSSStyleSheet "CSSStyleSheet"
-
-foreign import javascript unsafe "window[\"CSSStyleSheet\"]" gTypeCSSStyleSheet' :: JSRef GType
-gTypeCSSStyleSheet = GType gTypeCSSStyleSheet'
-#else
-type IsCSSStyleSheet o = CSSStyleSheetClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.CSSSupportsRule".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.CSSRule"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/CSSSupportsRule Mozilla CSSSupportsRule documentation>
-newtype CSSSupportsRule = CSSSupportsRule { unCSSSupportsRule :: JSRef CSSSupportsRule }
-
-instance Eq (CSSSupportsRule) where
-  (CSSSupportsRule a) == (CSSSupportsRule b) = js_eq a b
-
-instance PToJSRef CSSSupportsRule where
-  pToJSRef = unCSSSupportsRule
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef CSSSupportsRule where
-  pFromJSRef = CSSSupportsRule
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef CSSSupportsRule where
-  toJSRef = return . unCSSSupportsRule
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef CSSSupportsRule where
-  fromJSRef = return . fmap CSSSupportsRule . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsCSSRule CSSSupportsRule
-instance IsGObject CSSSupportsRule where
-  toGObject = GObject . castRef . unCSSSupportsRule
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = CSSSupportsRule . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToCSSSupportsRule :: IsGObject obj => obj -> CSSSupportsRule
-castToCSSSupportsRule = castTo gTypeCSSSupportsRule "CSSSupportsRule"
-
-foreign import javascript unsafe "window[\"CSSSupportsRule\"]" gTypeCSSSupportsRule' :: JSRef GType
-gTypeCSSSupportsRule = GType gTypeCSSSupportsRule'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.CSSUnknownRule".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.CSSRule"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/CSSUnknownRule Mozilla CSSUnknownRule documentation>
-newtype CSSUnknownRule = CSSUnknownRule { unCSSUnknownRule :: JSRef CSSUnknownRule }
-
-instance Eq (CSSUnknownRule) where
-  (CSSUnknownRule a) == (CSSUnknownRule b) = js_eq a b
-
-instance PToJSRef CSSUnknownRule where
-  pToJSRef = unCSSUnknownRule
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef CSSUnknownRule where
-  pFromJSRef = CSSUnknownRule
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef CSSUnknownRule where
-  toJSRef = return . unCSSUnknownRule
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef CSSUnknownRule where
-  fromJSRef = return . fmap CSSUnknownRule . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsCSSRule CSSUnknownRule
-instance IsGObject CSSUnknownRule where
-  toGObject = GObject . castRef . unCSSUnknownRule
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = CSSUnknownRule . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToCSSUnknownRule :: IsGObject obj => obj -> CSSUnknownRule
-castToCSSUnknownRule = castTo gTypeCSSUnknownRule "CSSUnknownRule"
-
-foreign import javascript unsafe "window[\"CSSUnknownRule\"]" gTypeCSSUnknownRule' :: JSRef GType
-gTypeCSSUnknownRule = GType gTypeCSSUnknownRule'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.CSSValue".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/CSSValue Mozilla CSSValue documentation>
-newtype CSSValue = CSSValue { unCSSValue :: JSRef CSSValue }
-
-instance Eq (CSSValue) where
-  (CSSValue a) == (CSSValue b) = js_eq a b
-
-instance PToJSRef CSSValue where
-  pToJSRef = unCSSValue
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef CSSValue where
-  pFromJSRef = CSSValue
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef CSSValue where
-  toJSRef = return . unCSSValue
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef CSSValue where
-  fromJSRef = return . fmap CSSValue . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsGObject o => IsCSSValue o
-toCSSValue :: IsCSSValue o => o -> CSSValue
-toCSSValue = unsafeCastGObject . toGObject
-
-instance IsCSSValue CSSValue
-instance IsGObject CSSValue where
-  toGObject = GObject . castRef . unCSSValue
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = CSSValue . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToCSSValue :: IsGObject obj => obj -> CSSValue
-castToCSSValue = castTo gTypeCSSValue "CSSValue"
-
-foreign import javascript unsafe "window[\"CSSValue\"]" gTypeCSSValue' :: JSRef GType
-gTypeCSSValue = GType gTypeCSSValue'
-#else
-type IsCSSValue o = CSSValueClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.CSSValueList".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.CSSValue"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/CSSValueList Mozilla CSSValueList documentation>
-newtype CSSValueList = CSSValueList { unCSSValueList :: JSRef CSSValueList }
-
-instance Eq (CSSValueList) where
-  (CSSValueList a) == (CSSValueList b) = js_eq a b
-
-instance PToJSRef CSSValueList where
-  pToJSRef = unCSSValueList
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef CSSValueList where
-  pFromJSRef = CSSValueList
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef CSSValueList where
-  toJSRef = return . unCSSValueList
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef CSSValueList where
-  fromJSRef = return . fmap CSSValueList . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsCSSValue o => IsCSSValueList o
-toCSSValueList :: IsCSSValueList o => o -> CSSValueList
-toCSSValueList = unsafeCastGObject . toGObject
-
-instance IsCSSValueList CSSValueList
-instance IsCSSValue CSSValueList
-instance IsGObject CSSValueList where
-  toGObject = GObject . castRef . unCSSValueList
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = CSSValueList . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToCSSValueList :: IsGObject obj => obj -> CSSValueList
-castToCSSValueList = castTo gTypeCSSValueList "CSSValueList"
-
-foreign import javascript unsafe "window[\"CSSValueList\"]" gTypeCSSValueList' :: JSRef GType
-gTypeCSSValueList = GType gTypeCSSValueList'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.CanvasGradient".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/CanvasGradient Mozilla CanvasGradient documentation>
-newtype CanvasGradient = CanvasGradient { unCanvasGradient :: JSRef CanvasGradient }
-
-instance Eq (CanvasGradient) where
-  (CanvasGradient a) == (CanvasGradient b) = js_eq a b
-
-instance PToJSRef CanvasGradient where
-  pToJSRef = unCanvasGradient
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef CanvasGradient where
-  pFromJSRef = CanvasGradient
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef CanvasGradient where
-  toJSRef = return . unCanvasGradient
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef CanvasGradient where
-  fromJSRef = return . fmap CanvasGradient . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject CanvasGradient where
-  toGObject = GObject . castRef . unCanvasGradient
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = CanvasGradient . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToCanvasGradient :: IsGObject obj => obj -> CanvasGradient
-castToCanvasGradient = castTo gTypeCanvasGradient "CanvasGradient"
-
-foreign import javascript unsafe "window[\"CanvasGradient\"]" gTypeCanvasGradient' :: JSRef GType
-gTypeCanvasGradient = GType gTypeCanvasGradient'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.CanvasPattern".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/CanvasPattern Mozilla CanvasPattern documentation>
-newtype CanvasPattern = CanvasPattern { unCanvasPattern :: JSRef CanvasPattern }
-
-instance Eq (CanvasPattern) where
-  (CanvasPattern a) == (CanvasPattern b) = js_eq a b
-
-instance PToJSRef CanvasPattern where
-  pToJSRef = unCanvasPattern
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef CanvasPattern where
-  pFromJSRef = CanvasPattern
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef CanvasPattern where
-  toJSRef = return . unCanvasPattern
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef CanvasPattern where
-  fromJSRef = return . fmap CanvasPattern . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject CanvasPattern where
-  toGObject = GObject . castRef . unCanvasPattern
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = CanvasPattern . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToCanvasPattern :: IsGObject obj => obj -> CanvasPattern
-castToCanvasPattern = castTo gTypeCanvasPattern "CanvasPattern"
-
-foreign import javascript unsafe "window[\"CanvasPattern\"]" gTypeCanvasPattern' :: JSRef GType
-gTypeCanvasPattern = GType gTypeCanvasPattern'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.CanvasProxy".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/CanvasProxy Mozilla CanvasProxy documentation>
-newtype CanvasProxy = CanvasProxy { unCanvasProxy :: JSRef CanvasProxy }
-
-instance Eq (CanvasProxy) where
-  (CanvasProxy a) == (CanvasProxy b) = js_eq a b
-
-instance PToJSRef CanvasProxy where
-  pToJSRef = unCanvasProxy
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef CanvasProxy where
-  pFromJSRef = CanvasProxy
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef CanvasProxy where
-  toJSRef = return . unCanvasProxy
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef CanvasProxy where
-  fromJSRef = return . fmap CanvasProxy . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject CanvasProxy where
-  toGObject = GObject . castRef . unCanvasProxy
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = CanvasProxy . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToCanvasProxy :: IsGObject obj => obj -> CanvasProxy
-castToCanvasProxy = castTo gTypeCanvasProxy "CanvasProxy"
-
-foreign import javascript unsafe "window[\"CanvasProxy\"]" gTypeCanvasProxy' :: JSRef GType
-gTypeCanvasProxy = GType gTypeCanvasProxy'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.CanvasRenderingContext".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext Mozilla CanvasRenderingContext documentation>
-newtype CanvasRenderingContext = CanvasRenderingContext { unCanvasRenderingContext :: JSRef CanvasRenderingContext }
-
-instance Eq (CanvasRenderingContext) where
-  (CanvasRenderingContext a) == (CanvasRenderingContext b) = js_eq a b
-
-instance PToJSRef CanvasRenderingContext where
-  pToJSRef = unCanvasRenderingContext
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef CanvasRenderingContext where
-  pFromJSRef = CanvasRenderingContext
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef CanvasRenderingContext where
-  toJSRef = return . unCanvasRenderingContext
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef CanvasRenderingContext where
-  fromJSRef = return . fmap CanvasRenderingContext . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsGObject o => IsCanvasRenderingContext o
-toCanvasRenderingContext :: IsCanvasRenderingContext o => o -> CanvasRenderingContext
-toCanvasRenderingContext = unsafeCastGObject . toGObject
-
-instance IsCanvasRenderingContext CanvasRenderingContext
-instance IsGObject CanvasRenderingContext where
-  toGObject = GObject . castRef . unCanvasRenderingContext
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = CanvasRenderingContext . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToCanvasRenderingContext :: IsGObject obj => obj -> CanvasRenderingContext
-castToCanvasRenderingContext = castTo gTypeCanvasRenderingContext "CanvasRenderingContext"
-
-foreign import javascript unsafe "window[\"CanvasRenderingContext\"]" gTypeCanvasRenderingContext' :: JSRef GType
-gTypeCanvasRenderingContext = GType gTypeCanvasRenderingContext'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.CanvasRenderingContext2D".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.CanvasRenderingContext"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D Mozilla CanvasRenderingContext2D documentation>
-newtype CanvasRenderingContext2D = CanvasRenderingContext2D { unCanvasRenderingContext2D :: JSRef CanvasRenderingContext2D }
-
-instance Eq (CanvasRenderingContext2D) where
-  (CanvasRenderingContext2D a) == (CanvasRenderingContext2D b) = js_eq a b
-
-instance PToJSRef CanvasRenderingContext2D where
-  pToJSRef = unCanvasRenderingContext2D
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef CanvasRenderingContext2D where
-  pFromJSRef = CanvasRenderingContext2D
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef CanvasRenderingContext2D where
-  toJSRef = return . unCanvasRenderingContext2D
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef CanvasRenderingContext2D where
-  fromJSRef = return . fmap CanvasRenderingContext2D . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsCanvasRenderingContext CanvasRenderingContext2D
-instance IsGObject CanvasRenderingContext2D where
-  toGObject = GObject . castRef . unCanvasRenderingContext2D
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = CanvasRenderingContext2D . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToCanvasRenderingContext2D :: IsGObject obj => obj -> CanvasRenderingContext2D
-castToCanvasRenderingContext2D = castTo gTypeCanvasRenderingContext2D "CanvasRenderingContext2D"
-
-foreign import javascript unsafe "window[\"CanvasRenderingContext2D\"]" gTypeCanvasRenderingContext2D' :: JSRef GType
-gTypeCanvasRenderingContext2D = GType gTypeCanvasRenderingContext2D'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.CapabilityRange".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/CapabilityRange Mozilla CapabilityRange documentation>
-newtype CapabilityRange = CapabilityRange { unCapabilityRange :: JSRef CapabilityRange }
-
-instance Eq (CapabilityRange) where
-  (CapabilityRange a) == (CapabilityRange b) = js_eq a b
-
-instance PToJSRef CapabilityRange where
-  pToJSRef = unCapabilityRange
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef CapabilityRange where
-  pFromJSRef = CapabilityRange
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef CapabilityRange where
-  toJSRef = return . unCapabilityRange
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef CapabilityRange where
-  fromJSRef = return . fmap CapabilityRange . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject CapabilityRange where
-  toGObject = GObject . castRef . unCapabilityRange
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = CapabilityRange . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToCapabilityRange :: IsGObject obj => obj -> CapabilityRange
-castToCapabilityRange = castTo gTypeCapabilityRange "CapabilityRange"
-
-foreign import javascript unsafe "window[\"CapabilityRange\"]" gTypeCapabilityRange' :: JSRef GType
-gTypeCapabilityRange = GType gTypeCapabilityRange'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.ChannelMergerNode".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.AudioNode"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/ChannelMergerNode Mozilla ChannelMergerNode documentation>
-newtype ChannelMergerNode = ChannelMergerNode { unChannelMergerNode :: JSRef ChannelMergerNode }
-
-instance Eq (ChannelMergerNode) where
-  (ChannelMergerNode a) == (ChannelMergerNode b) = js_eq a b
-
-instance PToJSRef ChannelMergerNode where
-  pToJSRef = unChannelMergerNode
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef ChannelMergerNode where
-  pFromJSRef = ChannelMergerNode
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef ChannelMergerNode where
-  toJSRef = return . unChannelMergerNode
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef ChannelMergerNode where
-  fromJSRef = return . fmap ChannelMergerNode . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsAudioNode ChannelMergerNode
-instance IsEventTarget ChannelMergerNode
-instance IsGObject ChannelMergerNode where
-  toGObject = GObject . castRef . unChannelMergerNode
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = ChannelMergerNode . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToChannelMergerNode :: IsGObject obj => obj -> ChannelMergerNode
-castToChannelMergerNode = castTo gTypeChannelMergerNode "ChannelMergerNode"
-
-foreign import javascript unsafe "window[\"ChannelMergerNode\"]" gTypeChannelMergerNode' :: JSRef GType
-gTypeChannelMergerNode = GType gTypeChannelMergerNode'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.ChannelSplitterNode".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.AudioNode"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/ChannelSplitterNode Mozilla ChannelSplitterNode documentation>
-newtype ChannelSplitterNode = ChannelSplitterNode { unChannelSplitterNode :: JSRef ChannelSplitterNode }
-
-instance Eq (ChannelSplitterNode) where
-  (ChannelSplitterNode a) == (ChannelSplitterNode b) = js_eq a b
-
-instance PToJSRef ChannelSplitterNode where
-  pToJSRef = unChannelSplitterNode
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef ChannelSplitterNode where
-  pFromJSRef = ChannelSplitterNode
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef ChannelSplitterNode where
-  toJSRef = return . unChannelSplitterNode
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef ChannelSplitterNode where
-  fromJSRef = return . fmap ChannelSplitterNode . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsAudioNode ChannelSplitterNode
-instance IsEventTarget ChannelSplitterNode
-instance IsGObject ChannelSplitterNode where
-  toGObject = GObject . castRef . unChannelSplitterNode
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = ChannelSplitterNode . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToChannelSplitterNode :: IsGObject obj => obj -> ChannelSplitterNode
-castToChannelSplitterNode = castTo gTypeChannelSplitterNode "ChannelSplitterNode"
-
-foreign import javascript unsafe "window[\"ChannelSplitterNode\"]" gTypeChannelSplitterNode' :: JSRef GType
-gTypeChannelSplitterNode = GType gTypeChannelSplitterNode'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.CharacterData".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/CharacterData Mozilla CharacterData documentation>
-newtype CharacterData = CharacterData { unCharacterData :: JSRef CharacterData }
-
-instance Eq (CharacterData) where
-  (CharacterData a) == (CharacterData b) = js_eq a b
-
-instance PToJSRef CharacterData where
-  pToJSRef = unCharacterData
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef CharacterData where
-  pFromJSRef = CharacterData
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef CharacterData where
-  toJSRef = return . unCharacterData
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef CharacterData where
-  fromJSRef = return . fmap CharacterData . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsNode o => IsCharacterData o
-toCharacterData :: IsCharacterData o => o -> CharacterData
-toCharacterData = unsafeCastGObject . toGObject
-
-instance IsCharacterData CharacterData
-instance IsNode CharacterData
-instance IsEventTarget CharacterData
-instance IsGObject CharacterData where
-  toGObject = GObject . castRef . unCharacterData
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = CharacterData . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToCharacterData :: IsGObject obj => obj -> CharacterData
-castToCharacterData = castTo gTypeCharacterData "CharacterData"
-
-foreign import javascript unsafe "window[\"CharacterData\"]" gTypeCharacterData' :: JSRef GType
-gTypeCharacterData = GType gTypeCharacterData'
-#else
-type IsCharacterData o = CharacterDataClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.ChildNode".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/ChildNode Mozilla ChildNode documentation>
-newtype ChildNode = ChildNode { unChildNode :: JSRef ChildNode }
-
-instance Eq (ChildNode) where
-  (ChildNode a) == (ChildNode b) = js_eq a b
-
-instance PToJSRef ChildNode where
-  pToJSRef = unChildNode
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef ChildNode where
-  pFromJSRef = ChildNode
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef ChildNode where
-  toJSRef = return . unChildNode
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef ChildNode where
-  fromJSRef = return . fmap ChildNode . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject ChildNode where
-  toGObject = GObject . castRef . unChildNode
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = ChildNode . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToChildNode :: IsGObject obj => obj -> ChildNode
-castToChildNode = castTo gTypeChildNode "ChildNode"
-
-foreign import javascript unsafe "window[\"ChildNode\"]" gTypeChildNode' :: JSRef GType
-gTypeChildNode = GType gTypeChildNode'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.ClientRect".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/ClientRect Mozilla ClientRect documentation>
-newtype ClientRect = ClientRect { unClientRect :: JSRef ClientRect }
-
-instance Eq (ClientRect) where
-  (ClientRect a) == (ClientRect b) = js_eq a b
-
-instance PToJSRef ClientRect where
-  pToJSRef = unClientRect
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef ClientRect where
-  pFromJSRef = ClientRect
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef ClientRect where
-  toJSRef = return . unClientRect
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef ClientRect where
-  fromJSRef = return . fmap ClientRect . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject ClientRect where
-  toGObject = GObject . castRef . unClientRect
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = ClientRect . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToClientRect :: IsGObject obj => obj -> ClientRect
-castToClientRect = castTo gTypeClientRect "ClientRect"
-
-foreign import javascript unsafe "window[\"ClientRect\"]" gTypeClientRect' :: JSRef GType
-gTypeClientRect = GType gTypeClientRect'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.ClientRectList".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/ClientRectList Mozilla ClientRectList documentation>
-newtype ClientRectList = ClientRectList { unClientRectList :: JSRef ClientRectList }
-
-instance Eq (ClientRectList) where
-  (ClientRectList a) == (ClientRectList b) = js_eq a b
-
-instance PToJSRef ClientRectList where
-  pToJSRef = unClientRectList
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef ClientRectList where
-  pFromJSRef = ClientRectList
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef ClientRectList where
-  toJSRef = return . unClientRectList
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef ClientRectList where
-  fromJSRef = return . fmap ClientRectList . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject ClientRectList where
-  toGObject = GObject . castRef . unClientRectList
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = ClientRectList . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToClientRectList :: IsGObject obj => obj -> ClientRectList
-castToClientRectList = castTo gTypeClientRectList "ClientRectList"
-
-foreign import javascript unsafe "window[\"ClientRectList\"]" gTypeClientRectList' :: JSRef GType
-gTypeClientRectList = GType gTypeClientRectList'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.CloseEvent".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.Event"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent Mozilla CloseEvent documentation>
-newtype CloseEvent = CloseEvent { unCloseEvent :: JSRef CloseEvent }
-
-instance Eq (CloseEvent) where
-  (CloseEvent a) == (CloseEvent b) = js_eq a b
-
-instance PToJSRef CloseEvent where
-  pToJSRef = unCloseEvent
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef CloseEvent where
-  pFromJSRef = CloseEvent
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef CloseEvent where
-  toJSRef = return . unCloseEvent
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef CloseEvent where
-  fromJSRef = return . fmap CloseEvent . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEvent CloseEvent
-instance IsGObject CloseEvent where
-  toGObject = GObject . castRef . unCloseEvent
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = CloseEvent . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToCloseEvent :: IsGObject obj => obj -> CloseEvent
-castToCloseEvent = castTo gTypeCloseEvent "CloseEvent"
-
-foreign import javascript unsafe "window[\"CloseEvent\"]" gTypeCloseEvent' :: JSRef GType
-gTypeCloseEvent = GType gTypeCloseEvent'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.CommandLineAPIHost".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/CommandLineAPIHost Mozilla CommandLineAPIHost documentation>
-newtype CommandLineAPIHost = CommandLineAPIHost { unCommandLineAPIHost :: JSRef CommandLineAPIHost }
-
-instance Eq (CommandLineAPIHost) where
-  (CommandLineAPIHost a) == (CommandLineAPIHost b) = js_eq a b
-
-instance PToJSRef CommandLineAPIHost where
-  pToJSRef = unCommandLineAPIHost
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef CommandLineAPIHost where
-  pFromJSRef = CommandLineAPIHost
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef CommandLineAPIHost where
-  toJSRef = return . unCommandLineAPIHost
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef CommandLineAPIHost where
-  fromJSRef = return . fmap CommandLineAPIHost . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject CommandLineAPIHost where
-  toGObject = GObject . castRef . unCommandLineAPIHost
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = CommandLineAPIHost . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToCommandLineAPIHost :: IsGObject obj => obj -> CommandLineAPIHost
-castToCommandLineAPIHost = castTo gTypeCommandLineAPIHost "CommandLineAPIHost"
-
-foreign import javascript unsafe "window[\"CommandLineAPIHost\"]" gTypeCommandLineAPIHost' :: JSRef GType
-gTypeCommandLineAPIHost = GType gTypeCommandLineAPIHost'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.Comment".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.CharacterData"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/Comment Mozilla Comment documentation>
-newtype Comment = Comment { unComment :: JSRef Comment }
-
-instance Eq (Comment) where
-  (Comment a) == (Comment b) = js_eq a b
-
-instance PToJSRef Comment where
-  pToJSRef = unComment
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef Comment where
-  pFromJSRef = Comment
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef Comment where
-  toJSRef = return . unComment
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef Comment where
-  fromJSRef = return . fmap Comment . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsCharacterData Comment
-instance IsNode Comment
-instance IsEventTarget Comment
-instance IsGObject Comment where
-  toGObject = GObject . castRef . unComment
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = Comment . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToComment :: IsGObject obj => obj -> Comment
-castToComment = castTo gTypeComment "Comment"
-
-foreign import javascript unsafe "window[\"Comment\"]" gTypeComment' :: JSRef GType
-gTypeComment = GType gTypeComment'
-#else
-type IsComment o = CommentClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.CompositionEvent".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.UIEvent"
---     * "GHCJS.DOM.Event"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/CompositionEvent Mozilla CompositionEvent documentation>
-newtype CompositionEvent = CompositionEvent { unCompositionEvent :: JSRef CompositionEvent }
-
-instance Eq (CompositionEvent) where
-  (CompositionEvent a) == (CompositionEvent b) = js_eq a b
-
-instance PToJSRef CompositionEvent where
-  pToJSRef = unCompositionEvent
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef CompositionEvent where
-  pFromJSRef = CompositionEvent
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef CompositionEvent where
-  toJSRef = return . unCompositionEvent
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef CompositionEvent where
-  fromJSRef = return . fmap CompositionEvent . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsUIEvent CompositionEvent
-instance IsEvent CompositionEvent
-instance IsGObject CompositionEvent where
-  toGObject = GObject . castRef . unCompositionEvent
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = CompositionEvent . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToCompositionEvent :: IsGObject obj => obj -> CompositionEvent
-castToCompositionEvent = castTo gTypeCompositionEvent "CompositionEvent"
-
-foreign import javascript unsafe "window[\"CompositionEvent\"]" gTypeCompositionEvent' :: JSRef GType
-gTypeCompositionEvent = GType gTypeCompositionEvent'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.ConvolverNode".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.AudioNode"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/ConvolverNode Mozilla ConvolverNode documentation>
-newtype ConvolverNode = ConvolverNode { unConvolverNode :: JSRef ConvolverNode }
-
-instance Eq (ConvolverNode) where
-  (ConvolverNode a) == (ConvolverNode b) = js_eq a b
-
-instance PToJSRef ConvolverNode where
-  pToJSRef = unConvolverNode
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef ConvolverNode where
-  pFromJSRef = ConvolverNode
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef ConvolverNode where
-  toJSRef = return . unConvolverNode
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef ConvolverNode where
-  fromJSRef = return . fmap ConvolverNode . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsAudioNode ConvolverNode
-instance IsEventTarget ConvolverNode
-instance IsGObject ConvolverNode where
-  toGObject = GObject . castRef . unConvolverNode
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = ConvolverNode . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToConvolverNode :: IsGObject obj => obj -> ConvolverNode
-castToConvolverNode = castTo gTypeConvolverNode "ConvolverNode"
-
-foreign import javascript unsafe "window[\"ConvolverNode\"]" gTypeConvolverNode' :: JSRef GType
-gTypeConvolverNode = GType gTypeConvolverNode'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.Coordinates".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/Coordinates Mozilla Coordinates documentation>
-newtype Coordinates = Coordinates { unCoordinates :: JSRef Coordinates }
-
-instance Eq (Coordinates) where
-  (Coordinates a) == (Coordinates b) = js_eq a b
-
-instance PToJSRef Coordinates where
-  pToJSRef = unCoordinates
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef Coordinates where
-  pFromJSRef = Coordinates
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef Coordinates where
-  toJSRef = return . unCoordinates
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef Coordinates where
-  fromJSRef = return . fmap Coordinates . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject Coordinates where
-  toGObject = GObject . castRef . unCoordinates
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = Coordinates . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToCoordinates :: IsGObject obj => obj -> Coordinates
-castToCoordinates = castTo gTypeCoordinates "Coordinates"
-
-foreign import javascript unsafe "window[\"Coordinates\"]" gTypeCoordinates' :: JSRef GType
-gTypeCoordinates = GType gTypeCoordinates'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.Counter".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/Counter Mozilla Counter documentation>
-newtype Counter = Counter { unCounter :: JSRef Counter }
-
-instance Eq (Counter) where
-  (Counter a) == (Counter b) = js_eq a b
-
-instance PToJSRef Counter where
-  pToJSRef = unCounter
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef Counter where
-  pFromJSRef = Counter
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef Counter where
-  toJSRef = return . unCounter
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef Counter where
-  fromJSRef = return . fmap Counter . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject Counter where
-  toGObject = GObject . castRef . unCounter
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = Counter . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToCounter :: IsGObject obj => obj -> Counter
-castToCounter = castTo gTypeCounter "Counter"
-
-foreign import javascript unsafe "window[\"Counter\"]" gTypeCounter' :: JSRef GType
-gTypeCounter = GType gTypeCounter'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.Crypto".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/Crypto Mozilla Crypto documentation>
-newtype Crypto = Crypto { unCrypto :: JSRef Crypto }
-
-instance Eq (Crypto) where
-  (Crypto a) == (Crypto b) = js_eq a b
-
-instance PToJSRef Crypto where
-  pToJSRef = unCrypto
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef Crypto where
-  pFromJSRef = Crypto
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef Crypto where
-  toJSRef = return . unCrypto
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef Crypto where
-  fromJSRef = return . fmap Crypto . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject Crypto where
-  toGObject = GObject . castRef . unCrypto
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = Crypto . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToCrypto :: IsGObject obj => obj -> Crypto
-castToCrypto = castTo gTypeCrypto "Crypto"
-
-foreign import javascript unsafe "window[\"Crypto\"]" gTypeCrypto' :: JSRef GType
-gTypeCrypto = GType gTypeCrypto'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.CryptoKey".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/CryptoKey Mozilla CryptoKey documentation>
-newtype CryptoKey = CryptoKey { unCryptoKey :: JSRef CryptoKey }
-
-instance Eq (CryptoKey) where
-  (CryptoKey a) == (CryptoKey b) = js_eq a b
-
-instance PToJSRef CryptoKey where
-  pToJSRef = unCryptoKey
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef CryptoKey where
-  pFromJSRef = CryptoKey
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef CryptoKey where
-  toJSRef = return . unCryptoKey
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef CryptoKey where
-  fromJSRef = return . fmap CryptoKey . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject CryptoKey where
-  toGObject = GObject . castRef . unCryptoKey
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = CryptoKey . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToCryptoKey :: IsGObject obj => obj -> CryptoKey
-castToCryptoKey = castTo gTypeCryptoKey "CryptoKey"
-
-foreign import javascript unsafe "window[\"CryptoKey\"]" gTypeCryptoKey' :: JSRef GType
-gTypeCryptoKey = GType gTypeCryptoKey'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.CryptoKeyPair".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/CryptoKeyPair Mozilla CryptoKeyPair documentation>
-newtype CryptoKeyPair = CryptoKeyPair { unCryptoKeyPair :: JSRef CryptoKeyPair }
-
-instance Eq (CryptoKeyPair) where
-  (CryptoKeyPair a) == (CryptoKeyPair b) = js_eq a b
-
-instance PToJSRef CryptoKeyPair where
-  pToJSRef = unCryptoKeyPair
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef CryptoKeyPair where
-  pFromJSRef = CryptoKeyPair
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef CryptoKeyPair where
-  toJSRef = return . unCryptoKeyPair
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef CryptoKeyPair where
-  fromJSRef = return . fmap CryptoKeyPair . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject CryptoKeyPair where
-  toGObject = GObject . castRef . unCryptoKeyPair
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = CryptoKeyPair . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToCryptoKeyPair :: IsGObject obj => obj -> CryptoKeyPair
-castToCryptoKeyPair = castTo gTypeCryptoKeyPair "CryptoKeyPair"
-
-foreign import javascript unsafe "window[\"CryptoKeyPair\"]" gTypeCryptoKeyPair' :: JSRef GType
-gTypeCryptoKeyPair = GType gTypeCryptoKeyPair'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.CustomEvent".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.Event"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent Mozilla CustomEvent documentation>
-newtype CustomEvent = CustomEvent { unCustomEvent :: JSRef CustomEvent }
-
-instance Eq (CustomEvent) where
-  (CustomEvent a) == (CustomEvent b) = js_eq a b
-
-instance PToJSRef CustomEvent where
-  pToJSRef = unCustomEvent
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef CustomEvent where
-  pFromJSRef = CustomEvent
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef CustomEvent where
-  toJSRef = return . unCustomEvent
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef CustomEvent where
-  fromJSRef = return . fmap CustomEvent . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEvent CustomEvent
-instance IsGObject CustomEvent where
-  toGObject = GObject . castRef . unCustomEvent
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = CustomEvent . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToCustomEvent :: IsGObject obj => obj -> CustomEvent
-castToCustomEvent = castTo gTypeCustomEvent "CustomEvent"
-
-foreign import javascript unsafe "window[\"CustomEvent\"]" gTypeCustomEvent' :: JSRef GType
-gTypeCustomEvent = GType gTypeCustomEvent'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.DOMError".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/DOMError Mozilla DOMError documentation>
-newtype DOMError = DOMError { unDOMError :: JSRef DOMError }
-
-instance Eq (DOMError) where
-  (DOMError a) == (DOMError b) = js_eq a b
-
-instance PToJSRef DOMError where
-  pToJSRef = unDOMError
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef DOMError where
-  pFromJSRef = DOMError
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef DOMError where
-  toJSRef = return . unDOMError
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef DOMError where
-  fromJSRef = return . fmap DOMError . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsGObject o => IsDOMError o
-toDOMError :: IsDOMError o => o -> DOMError
-toDOMError = unsafeCastGObject . toGObject
-
-instance IsDOMError DOMError
-instance IsGObject DOMError where
-  toGObject = GObject . castRef . unDOMError
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = DOMError . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToDOMError :: IsGObject obj => obj -> DOMError
-castToDOMError = castTo gTypeDOMError "DOMError"
-
-foreign import javascript unsafe "window[\"DOMError\"]" gTypeDOMError' :: JSRef GType
-gTypeDOMError = GType gTypeDOMError'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.DOMImplementation".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation Mozilla DOMImplementation documentation>
-newtype DOMImplementation = DOMImplementation { unDOMImplementation :: JSRef DOMImplementation }
-
-instance Eq (DOMImplementation) where
-  (DOMImplementation a) == (DOMImplementation b) = js_eq a b
-
-instance PToJSRef DOMImplementation where
-  pToJSRef = unDOMImplementation
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef DOMImplementation where
-  pFromJSRef = DOMImplementation
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef DOMImplementation where
-  toJSRef = return . unDOMImplementation
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef DOMImplementation where
-  fromJSRef = return . fmap DOMImplementation . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject DOMImplementation where
-  toGObject = GObject . castRef . unDOMImplementation
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = DOMImplementation . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToDOMImplementation :: IsGObject obj => obj -> DOMImplementation
-castToDOMImplementation = castTo gTypeDOMImplementation "DOMImplementation"
-
-foreign import javascript unsafe "window[\"DOMImplementation\"]" gTypeDOMImplementation' :: JSRef GType
-gTypeDOMImplementation = GType gTypeDOMImplementation'
-#else
-type IsDOMImplementation o = DOMImplementationClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.DOMNamedFlowCollection".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/WebKitNamedFlowCollection Mozilla WebKitNamedFlowCollection documentation>
-newtype DOMNamedFlowCollection = DOMNamedFlowCollection { unDOMNamedFlowCollection :: JSRef DOMNamedFlowCollection }
-
-instance Eq (DOMNamedFlowCollection) where
-  (DOMNamedFlowCollection a) == (DOMNamedFlowCollection b) = js_eq a b
-
-instance PToJSRef DOMNamedFlowCollection where
-  pToJSRef = unDOMNamedFlowCollection
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef DOMNamedFlowCollection where
-  pFromJSRef = DOMNamedFlowCollection
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef DOMNamedFlowCollection where
-  toJSRef = return . unDOMNamedFlowCollection
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef DOMNamedFlowCollection where
-  fromJSRef = return . fmap DOMNamedFlowCollection . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject DOMNamedFlowCollection where
-  toGObject = GObject . castRef . unDOMNamedFlowCollection
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = DOMNamedFlowCollection . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToDOMNamedFlowCollection :: IsGObject obj => obj -> DOMNamedFlowCollection
-castToDOMNamedFlowCollection = castTo gTypeDOMNamedFlowCollection "DOMNamedFlowCollection"
-
-foreign import javascript unsafe "window[\"WebKitNamedFlowCollection\"]" gTypeDOMNamedFlowCollection' :: JSRef GType
-gTypeDOMNamedFlowCollection = GType gTypeDOMNamedFlowCollection'
-#else
-#ifndef USE_OLD_WEBKIT
-type IsDOMNamedFlowCollection o = DOMNamedFlowCollectionClass o
-#endif
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.DOMParser".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/DOMParser Mozilla DOMParser documentation>
-newtype DOMParser = DOMParser { unDOMParser :: JSRef DOMParser }
-
-instance Eq (DOMParser) where
-  (DOMParser a) == (DOMParser b) = js_eq a b
-
-instance PToJSRef DOMParser where
-  pToJSRef = unDOMParser
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef DOMParser where
-  pFromJSRef = DOMParser
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef DOMParser where
-  toJSRef = return . unDOMParser
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef DOMParser where
-  fromJSRef = return . fmap DOMParser . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject DOMParser where
-  toGObject = GObject . castRef . unDOMParser
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = DOMParser . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToDOMParser :: IsGObject obj => obj -> DOMParser
-castToDOMParser = castTo gTypeDOMParser "DOMParser"
-
-foreign import javascript unsafe "window[\"DOMParser\"]" gTypeDOMParser' :: JSRef GType
-gTypeDOMParser = GType gTypeDOMParser'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.DOMSettableTokenList".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.DOMTokenList"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/DOMSettableTokenList Mozilla DOMSettableTokenList documentation>
-newtype DOMSettableTokenList = DOMSettableTokenList { unDOMSettableTokenList :: JSRef DOMSettableTokenList }
-
-instance Eq (DOMSettableTokenList) where
-  (DOMSettableTokenList a) == (DOMSettableTokenList b) = js_eq a b
-
-instance PToJSRef DOMSettableTokenList where
-  pToJSRef = unDOMSettableTokenList
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef DOMSettableTokenList where
-  pFromJSRef = DOMSettableTokenList
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef DOMSettableTokenList where
-  toJSRef = return . unDOMSettableTokenList
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef DOMSettableTokenList where
-  fromJSRef = return . fmap DOMSettableTokenList . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsDOMTokenList DOMSettableTokenList
-instance IsGObject DOMSettableTokenList where
-  toGObject = GObject . castRef . unDOMSettableTokenList
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = DOMSettableTokenList . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToDOMSettableTokenList :: IsGObject obj => obj -> DOMSettableTokenList
-castToDOMSettableTokenList = castTo gTypeDOMSettableTokenList "DOMSettableTokenList"
-
-foreign import javascript unsafe "window[\"DOMSettableTokenList\"]" gTypeDOMSettableTokenList' :: JSRef GType
-gTypeDOMSettableTokenList = GType gTypeDOMSettableTokenList'
-#else
-type IsDOMSettableTokenList o = DOMSettableTokenListClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.DOMStringList".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/DOMStringList Mozilla DOMStringList documentation>
-newtype DOMStringList = DOMStringList { unDOMStringList :: JSRef DOMStringList }
-
-instance Eq (DOMStringList) where
-  (DOMStringList a) == (DOMStringList b) = js_eq a b
-
-instance PToJSRef DOMStringList where
-  pToJSRef = unDOMStringList
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef DOMStringList where
-  pFromJSRef = DOMStringList
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef DOMStringList where
-  toJSRef = return . unDOMStringList
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef DOMStringList where
-  fromJSRef = return . fmap DOMStringList . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject DOMStringList where
-  toGObject = GObject . castRef . unDOMStringList
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = DOMStringList . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToDOMStringList :: IsGObject obj => obj -> DOMStringList
-castToDOMStringList = castTo gTypeDOMStringList "DOMStringList"
-
-foreign import javascript unsafe "window[\"DOMStringList\"]" gTypeDOMStringList' :: JSRef GType
-gTypeDOMStringList = GType gTypeDOMStringList'
-#else
-type IsDOMStringList o = DOMStringListClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.DOMStringMap".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/DOMStringMap Mozilla DOMStringMap documentation>
-newtype DOMStringMap = DOMStringMap { unDOMStringMap :: JSRef DOMStringMap }
-
-instance Eq (DOMStringMap) where
-  (DOMStringMap a) == (DOMStringMap b) = js_eq a b
-
-instance PToJSRef DOMStringMap where
-  pToJSRef = unDOMStringMap
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef DOMStringMap where
-  pFromJSRef = DOMStringMap
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef DOMStringMap where
-  toJSRef = return . unDOMStringMap
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef DOMStringMap where
-  fromJSRef = return . fmap DOMStringMap . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject DOMStringMap where
-  toGObject = GObject . castRef . unDOMStringMap
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = DOMStringMap . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToDOMStringMap :: IsGObject obj => obj -> DOMStringMap
-castToDOMStringMap = castTo gTypeDOMStringMap "DOMStringMap"
-
-foreign import javascript unsafe "window[\"DOMStringMap\"]" gTypeDOMStringMap' :: JSRef GType
-gTypeDOMStringMap = GType gTypeDOMStringMap'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.DOMTokenList".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/DOMTokenList Mozilla DOMTokenList documentation>
-newtype DOMTokenList = DOMTokenList { unDOMTokenList :: JSRef DOMTokenList }
-
-instance Eq (DOMTokenList) where
-  (DOMTokenList a) == (DOMTokenList b) = js_eq a b
-
-instance PToJSRef DOMTokenList where
-  pToJSRef = unDOMTokenList
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef DOMTokenList where
-  pFromJSRef = DOMTokenList
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef DOMTokenList where
-  toJSRef = return . unDOMTokenList
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef DOMTokenList where
-  fromJSRef = return . fmap DOMTokenList . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsGObject o => IsDOMTokenList o
-toDOMTokenList :: IsDOMTokenList o => o -> DOMTokenList
-toDOMTokenList = unsafeCastGObject . toGObject
-
-instance IsDOMTokenList DOMTokenList
-instance IsGObject DOMTokenList where
-  toGObject = GObject . castRef . unDOMTokenList
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = DOMTokenList . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToDOMTokenList :: IsGObject obj => obj -> DOMTokenList
-castToDOMTokenList = castTo gTypeDOMTokenList "DOMTokenList"
-
-foreign import javascript unsafe "window[\"DOMTokenList\"]" gTypeDOMTokenList' :: JSRef GType
-gTypeDOMTokenList = GType gTypeDOMTokenList'
-#else
-type IsDOMTokenList o = DOMTokenListClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.DataCue".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.TextTrackCue"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/WebKitDataCue Mozilla WebKitDataCue documentation>
-newtype DataCue = DataCue { unDataCue :: JSRef DataCue }
-
-instance Eq (DataCue) where
-  (DataCue a) == (DataCue b) = js_eq a b
-
-instance PToJSRef DataCue where
-  pToJSRef = unDataCue
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef DataCue where
-  pFromJSRef = DataCue
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef DataCue where
-  toJSRef = return . unDataCue
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef DataCue where
-  fromJSRef = return . fmap DataCue . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsTextTrackCue DataCue
-instance IsEventTarget DataCue
-instance IsGObject DataCue where
-  toGObject = GObject . castRef . unDataCue
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = DataCue . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToDataCue :: IsGObject obj => obj -> DataCue
-castToDataCue = castTo gTypeDataCue "DataCue"
-
-foreign import javascript unsafe "window[\"WebKitDataCue\"]" gTypeDataCue' :: JSRef GType
-gTypeDataCue = GType gTypeDataCue'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.DataTransfer".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer Mozilla DataTransfer documentation>
-newtype DataTransfer = DataTransfer { unDataTransfer :: JSRef DataTransfer }
-
-instance Eq (DataTransfer) where
-  (DataTransfer a) == (DataTransfer b) = js_eq a b
-
-instance PToJSRef DataTransfer where
-  pToJSRef = unDataTransfer
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef DataTransfer where
-  pFromJSRef = DataTransfer
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef DataTransfer where
-  toJSRef = return . unDataTransfer
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef DataTransfer where
-  fromJSRef = return . fmap DataTransfer . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject DataTransfer where
-  toGObject = GObject . castRef . unDataTransfer
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = DataTransfer . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToDataTransfer :: IsGObject obj => obj -> DataTransfer
-castToDataTransfer = castTo gTypeDataTransfer "DataTransfer"
-
-foreign import javascript unsafe "window[\"DataTransfer\"]" gTypeDataTransfer' :: JSRef GType
-gTypeDataTransfer = GType gTypeDataTransfer'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.DataTransferItem".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/DataTransferItem Mozilla DataTransferItem documentation>
-newtype DataTransferItem = DataTransferItem { unDataTransferItem :: JSRef DataTransferItem }
-
-instance Eq (DataTransferItem) where
-  (DataTransferItem a) == (DataTransferItem b) = js_eq a b
-
-instance PToJSRef DataTransferItem where
-  pToJSRef = unDataTransferItem
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef DataTransferItem where
-  pFromJSRef = DataTransferItem
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef DataTransferItem where
-  toJSRef = return . unDataTransferItem
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef DataTransferItem where
-  fromJSRef = return . fmap DataTransferItem . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject DataTransferItem where
-  toGObject = GObject . castRef . unDataTransferItem
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = DataTransferItem . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToDataTransferItem :: IsGObject obj => obj -> DataTransferItem
-castToDataTransferItem = castTo gTypeDataTransferItem "DataTransferItem"
-
-foreign import javascript unsafe "window[\"DataTransferItem\"]" gTypeDataTransferItem' :: JSRef GType
-gTypeDataTransferItem = GType gTypeDataTransferItem'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.DataTransferItemList".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/DataTransferItemList Mozilla DataTransferItemList documentation>
-newtype DataTransferItemList = DataTransferItemList { unDataTransferItemList :: JSRef DataTransferItemList }
-
-instance Eq (DataTransferItemList) where
-  (DataTransferItemList a) == (DataTransferItemList b) = js_eq a b
-
-instance PToJSRef DataTransferItemList where
-  pToJSRef = unDataTransferItemList
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef DataTransferItemList where
-  pFromJSRef = DataTransferItemList
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef DataTransferItemList where
-  toJSRef = return . unDataTransferItemList
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef DataTransferItemList where
-  fromJSRef = return . fmap DataTransferItemList . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject DataTransferItemList where
-  toGObject = GObject . castRef . unDataTransferItemList
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = DataTransferItemList . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToDataTransferItemList :: IsGObject obj => obj -> DataTransferItemList
-castToDataTransferItemList = castTo gTypeDataTransferItemList "DataTransferItemList"
-
-foreign import javascript unsafe "window[\"DataTransferItemList\"]" gTypeDataTransferItemList' :: JSRef GType
-gTypeDataTransferItemList = GType gTypeDataTransferItemList'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.Database".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/Database Mozilla Database documentation>
-newtype Database = Database { unDatabase :: JSRef Database }
-
-instance Eq (Database) where
-  (Database a) == (Database b) = js_eq a b
-
-instance PToJSRef Database where
-  pToJSRef = unDatabase
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef Database where
-  pFromJSRef = Database
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef Database where
-  toJSRef = return . unDatabase
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef Database where
-  fromJSRef = return . fmap Database . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject Database where
-  toGObject = GObject . castRef . unDatabase
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = Database . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToDatabase :: IsGObject obj => obj -> Database
-castToDatabase = castTo gTypeDatabase "Database"
-
-foreign import javascript unsafe "window[\"Database\"]" gTypeDatabase' :: JSRef GType
-gTypeDatabase = GType gTypeDatabase'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.DedicatedWorkerGlobalScope".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.WorkerGlobalScope"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/DedicatedWorkerGlobalScope Mozilla DedicatedWorkerGlobalScope documentation>
-newtype DedicatedWorkerGlobalScope = DedicatedWorkerGlobalScope { unDedicatedWorkerGlobalScope :: JSRef DedicatedWorkerGlobalScope }
-
-instance Eq (DedicatedWorkerGlobalScope) where
-  (DedicatedWorkerGlobalScope a) == (DedicatedWorkerGlobalScope b) = js_eq a b
-
-instance PToJSRef DedicatedWorkerGlobalScope where
-  pToJSRef = unDedicatedWorkerGlobalScope
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef DedicatedWorkerGlobalScope where
-  pFromJSRef = DedicatedWorkerGlobalScope
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef DedicatedWorkerGlobalScope where
-  toJSRef = return . unDedicatedWorkerGlobalScope
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef DedicatedWorkerGlobalScope where
-  fromJSRef = return . fmap DedicatedWorkerGlobalScope . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsWorkerGlobalScope DedicatedWorkerGlobalScope
-instance IsEventTarget DedicatedWorkerGlobalScope
-instance IsGObject DedicatedWorkerGlobalScope where
-  toGObject = GObject . castRef . unDedicatedWorkerGlobalScope
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = DedicatedWorkerGlobalScope . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToDedicatedWorkerGlobalScope :: IsGObject obj => obj -> DedicatedWorkerGlobalScope
-castToDedicatedWorkerGlobalScope = castTo gTypeDedicatedWorkerGlobalScope "DedicatedWorkerGlobalScope"
-
-foreign import javascript unsafe "window[\"DedicatedWorkerGlobalScope\"]" gTypeDedicatedWorkerGlobalScope' :: JSRef GType
-gTypeDedicatedWorkerGlobalScope = GType gTypeDedicatedWorkerGlobalScope'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.DelayNode".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.AudioNode"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/DelayNode Mozilla DelayNode documentation>
-newtype DelayNode = DelayNode { unDelayNode :: JSRef DelayNode }
-
-instance Eq (DelayNode) where
-  (DelayNode a) == (DelayNode b) = js_eq a b
-
-instance PToJSRef DelayNode where
-  pToJSRef = unDelayNode
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef DelayNode where
-  pFromJSRef = DelayNode
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef DelayNode where
-  toJSRef = return . unDelayNode
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef DelayNode where
-  fromJSRef = return . fmap DelayNode . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsAudioNode DelayNode
-instance IsEventTarget DelayNode
-instance IsGObject DelayNode where
-  toGObject = GObject . castRef . unDelayNode
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = DelayNode . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToDelayNode :: IsGObject obj => obj -> DelayNode
-castToDelayNode = castTo gTypeDelayNode "DelayNode"
-
-foreign import javascript unsafe "window[\"DelayNode\"]" gTypeDelayNode' :: JSRef GType
-gTypeDelayNode = GType gTypeDelayNode'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.DeviceMotionEvent".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.Event"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/DeviceMotionEvent Mozilla DeviceMotionEvent documentation>
-newtype DeviceMotionEvent = DeviceMotionEvent { unDeviceMotionEvent :: JSRef DeviceMotionEvent }
-
-instance Eq (DeviceMotionEvent) where
-  (DeviceMotionEvent a) == (DeviceMotionEvent b) = js_eq a b
-
-instance PToJSRef DeviceMotionEvent where
-  pToJSRef = unDeviceMotionEvent
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef DeviceMotionEvent where
-  pFromJSRef = DeviceMotionEvent
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef DeviceMotionEvent where
-  toJSRef = return . unDeviceMotionEvent
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef DeviceMotionEvent where
-  fromJSRef = return . fmap DeviceMotionEvent . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEvent DeviceMotionEvent
-instance IsGObject DeviceMotionEvent where
-  toGObject = GObject . castRef . unDeviceMotionEvent
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = DeviceMotionEvent . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToDeviceMotionEvent :: IsGObject obj => obj -> DeviceMotionEvent
-castToDeviceMotionEvent = castTo gTypeDeviceMotionEvent "DeviceMotionEvent"
-
-foreign import javascript unsafe "window[\"DeviceMotionEvent\"]" gTypeDeviceMotionEvent' :: JSRef GType
-gTypeDeviceMotionEvent = GType gTypeDeviceMotionEvent'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.DeviceOrientationEvent".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.Event"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/DeviceOrientationEvent Mozilla DeviceOrientationEvent documentation>
-newtype DeviceOrientationEvent = DeviceOrientationEvent { unDeviceOrientationEvent :: JSRef DeviceOrientationEvent }
-
-instance Eq (DeviceOrientationEvent) where
-  (DeviceOrientationEvent a) == (DeviceOrientationEvent b) = js_eq a b
-
-instance PToJSRef DeviceOrientationEvent where
-  pToJSRef = unDeviceOrientationEvent
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef DeviceOrientationEvent where
-  pFromJSRef = DeviceOrientationEvent
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef DeviceOrientationEvent where
-  toJSRef = return . unDeviceOrientationEvent
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef DeviceOrientationEvent where
-  fromJSRef = return . fmap DeviceOrientationEvent . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEvent DeviceOrientationEvent
-instance IsGObject DeviceOrientationEvent where
-  toGObject = GObject . castRef . unDeviceOrientationEvent
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = DeviceOrientationEvent . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToDeviceOrientationEvent :: IsGObject obj => obj -> DeviceOrientationEvent
-castToDeviceOrientationEvent = castTo gTypeDeviceOrientationEvent "DeviceOrientationEvent"
-
-foreign import javascript unsafe "window[\"DeviceOrientationEvent\"]" gTypeDeviceOrientationEvent' :: JSRef GType
-gTypeDeviceOrientationEvent = GType gTypeDeviceOrientationEvent'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.DeviceProximityEvent".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.Event"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/DeviceProximityEvent Mozilla DeviceProximityEvent documentation>
-newtype DeviceProximityEvent = DeviceProximityEvent { unDeviceProximityEvent :: JSRef DeviceProximityEvent }
-
-instance Eq (DeviceProximityEvent) where
-  (DeviceProximityEvent a) == (DeviceProximityEvent b) = js_eq a b
-
-instance PToJSRef DeviceProximityEvent where
-  pToJSRef = unDeviceProximityEvent
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef DeviceProximityEvent where
-  pFromJSRef = DeviceProximityEvent
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef DeviceProximityEvent where
-  toJSRef = return . unDeviceProximityEvent
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef DeviceProximityEvent where
-  fromJSRef = return . fmap DeviceProximityEvent . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEvent DeviceProximityEvent
-instance IsGObject DeviceProximityEvent where
-  toGObject = GObject . castRef . unDeviceProximityEvent
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = DeviceProximityEvent . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToDeviceProximityEvent :: IsGObject obj => obj -> DeviceProximityEvent
-castToDeviceProximityEvent = castTo gTypeDeviceProximityEvent "DeviceProximityEvent"
-
-foreign import javascript unsafe "window[\"DeviceProximityEvent\"]" gTypeDeviceProximityEvent' :: JSRef GType
-gTypeDeviceProximityEvent = GType gTypeDeviceProximityEvent'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.Document".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/Document Mozilla Document documentation>
-newtype Document = Document { unDocument :: JSRef Document }
-
-instance Eq (Document) where
-  (Document a) == (Document b) = js_eq a b
-
-instance PToJSRef Document where
-  pToJSRef = unDocument
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef Document where
-  pFromJSRef = Document
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef Document where
-  toJSRef = return . unDocument
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef Document where
-  fromJSRef = return . fmap Document . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsNode o => IsDocument o
-toDocument :: IsDocument o => o -> Document
-toDocument = unsafeCastGObject . toGObject
-
-instance IsDocument Document
-instance IsNode Document
-instance IsEventTarget Document
-instance IsGObject Document where
-  toGObject = GObject . castRef . unDocument
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = Document . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToDocument :: IsGObject obj => obj -> Document
-castToDocument = castTo gTypeDocument "Document"
-
-foreign import javascript unsafe "window[\"Document\"]" gTypeDocument' :: JSRef GType
-gTypeDocument = GType gTypeDocument'
-#else
-type IsDocument o = DocumentClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.DocumentFragment".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/DocumentFragment Mozilla DocumentFragment documentation>
-newtype DocumentFragment = DocumentFragment { unDocumentFragment :: JSRef DocumentFragment }
-
-instance Eq (DocumentFragment) where
-  (DocumentFragment a) == (DocumentFragment b) = js_eq a b
-
-instance PToJSRef DocumentFragment where
-  pToJSRef = unDocumentFragment
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef DocumentFragment where
-  pFromJSRef = DocumentFragment
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef DocumentFragment where
-  toJSRef = return . unDocumentFragment
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef DocumentFragment where
-  fromJSRef = return . fmap DocumentFragment . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsNode DocumentFragment
-instance IsEventTarget DocumentFragment
-instance IsGObject DocumentFragment where
-  toGObject = GObject . castRef . unDocumentFragment
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = DocumentFragment . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToDocumentFragment :: IsGObject obj => obj -> DocumentFragment
-castToDocumentFragment = castTo gTypeDocumentFragment "DocumentFragment"
-
-foreign import javascript unsafe "window[\"DocumentFragment\"]" gTypeDocumentFragment' :: JSRef GType
-gTypeDocumentFragment = GType gTypeDocumentFragment'
-#else
-type IsDocumentFragment o = DocumentFragmentClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.DocumentType".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/DocumentType Mozilla DocumentType documentation>
-newtype DocumentType = DocumentType { unDocumentType :: JSRef DocumentType }
-
-instance Eq (DocumentType) where
-  (DocumentType a) == (DocumentType b) = js_eq a b
-
-instance PToJSRef DocumentType where
-  pToJSRef = unDocumentType
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef DocumentType where
-  pFromJSRef = DocumentType
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef DocumentType where
-  toJSRef = return . unDocumentType
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef DocumentType where
-  fromJSRef = return . fmap DocumentType . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsNode DocumentType
-instance IsEventTarget DocumentType
-instance IsGObject DocumentType where
-  toGObject = GObject . castRef . unDocumentType
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = DocumentType . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToDocumentType :: IsGObject obj => obj -> DocumentType
-castToDocumentType = castTo gTypeDocumentType "DocumentType"
-
-foreign import javascript unsafe "window[\"DocumentType\"]" gTypeDocumentType' :: JSRef GType
-gTypeDocumentType = GType gTypeDocumentType'
-#else
-type IsDocumentType o = DocumentTypeClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.DynamicsCompressorNode".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.AudioNode"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/DynamicsCompressorNode Mozilla DynamicsCompressorNode documentation>
-newtype DynamicsCompressorNode = DynamicsCompressorNode { unDynamicsCompressorNode :: JSRef DynamicsCompressorNode }
-
-instance Eq (DynamicsCompressorNode) where
-  (DynamicsCompressorNode a) == (DynamicsCompressorNode b) = js_eq a b
-
-instance PToJSRef DynamicsCompressorNode where
-  pToJSRef = unDynamicsCompressorNode
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef DynamicsCompressorNode where
-  pFromJSRef = DynamicsCompressorNode
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef DynamicsCompressorNode where
-  toJSRef = return . unDynamicsCompressorNode
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef DynamicsCompressorNode where
-  fromJSRef = return . fmap DynamicsCompressorNode . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsAudioNode DynamicsCompressorNode
-instance IsEventTarget DynamicsCompressorNode
-instance IsGObject DynamicsCompressorNode where
-  toGObject = GObject . castRef . unDynamicsCompressorNode
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = DynamicsCompressorNode . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToDynamicsCompressorNode :: IsGObject obj => obj -> DynamicsCompressorNode
-castToDynamicsCompressorNode = castTo gTypeDynamicsCompressorNode "DynamicsCompressorNode"
-
-foreign import javascript unsafe "window[\"DynamicsCompressorNode\"]" gTypeDynamicsCompressorNode' :: JSRef GType
-gTypeDynamicsCompressorNode = GType gTypeDynamicsCompressorNode'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.EXTBlendMinMax".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/EXTBlendMinMax Mozilla EXTBlendMinMax documentation>
-newtype EXTBlendMinMax = EXTBlendMinMax { unEXTBlendMinMax :: JSRef EXTBlendMinMax }
-
-instance Eq (EXTBlendMinMax) where
-  (EXTBlendMinMax a) == (EXTBlendMinMax b) = js_eq a b
-
-instance PToJSRef EXTBlendMinMax where
-  pToJSRef = unEXTBlendMinMax
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef EXTBlendMinMax where
-  pFromJSRef = EXTBlendMinMax
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef EXTBlendMinMax where
-  toJSRef = return . unEXTBlendMinMax
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef EXTBlendMinMax where
-  fromJSRef = return . fmap EXTBlendMinMax . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject EXTBlendMinMax where
-  toGObject = GObject . castRef . unEXTBlendMinMax
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = EXTBlendMinMax . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToEXTBlendMinMax :: IsGObject obj => obj -> EXTBlendMinMax
-castToEXTBlendMinMax = castTo gTypeEXTBlendMinMax "EXTBlendMinMax"
-
-foreign import javascript unsafe "window[\"EXTBlendMinMax\"]" gTypeEXTBlendMinMax' :: JSRef GType
-gTypeEXTBlendMinMax = GType gTypeEXTBlendMinMax'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.EXTFragDepth".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/EXTFragDepth Mozilla EXTFragDepth documentation>
-newtype EXTFragDepth = EXTFragDepth { unEXTFragDepth :: JSRef EXTFragDepth }
-
-instance Eq (EXTFragDepth) where
-  (EXTFragDepth a) == (EXTFragDepth b) = js_eq a b
-
-instance PToJSRef EXTFragDepth where
-  pToJSRef = unEXTFragDepth
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef EXTFragDepth where
-  pFromJSRef = EXTFragDepth
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef EXTFragDepth where
-  toJSRef = return . unEXTFragDepth
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef EXTFragDepth where
-  fromJSRef = return . fmap EXTFragDepth . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject EXTFragDepth where
-  toGObject = GObject . castRef . unEXTFragDepth
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = EXTFragDepth . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToEXTFragDepth :: IsGObject obj => obj -> EXTFragDepth
-castToEXTFragDepth = castTo gTypeEXTFragDepth "EXTFragDepth"
-
-foreign import javascript unsafe "window[\"EXTFragDepth\"]" gTypeEXTFragDepth' :: JSRef GType
-gTypeEXTFragDepth = GType gTypeEXTFragDepth'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.EXTShaderTextureLOD".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/EXTShaderTextureLOD Mozilla EXTShaderTextureLOD documentation>
-newtype EXTShaderTextureLOD = EXTShaderTextureLOD { unEXTShaderTextureLOD :: JSRef EXTShaderTextureLOD }
-
-instance Eq (EXTShaderTextureLOD) where
-  (EXTShaderTextureLOD a) == (EXTShaderTextureLOD b) = js_eq a b
-
-instance PToJSRef EXTShaderTextureLOD where
-  pToJSRef = unEXTShaderTextureLOD
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef EXTShaderTextureLOD where
-  pFromJSRef = EXTShaderTextureLOD
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef EXTShaderTextureLOD where
-  toJSRef = return . unEXTShaderTextureLOD
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef EXTShaderTextureLOD where
-  fromJSRef = return . fmap EXTShaderTextureLOD . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject EXTShaderTextureLOD where
-  toGObject = GObject . castRef . unEXTShaderTextureLOD
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = EXTShaderTextureLOD . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToEXTShaderTextureLOD :: IsGObject obj => obj -> EXTShaderTextureLOD
-castToEXTShaderTextureLOD = castTo gTypeEXTShaderTextureLOD "EXTShaderTextureLOD"
-
-foreign import javascript unsafe "window[\"EXTShaderTextureLOD\"]" gTypeEXTShaderTextureLOD' :: JSRef GType
-gTypeEXTShaderTextureLOD = GType gTypeEXTShaderTextureLOD'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.EXTTextureFilterAnisotropic".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/EXTTextureFilterAnisotropic Mozilla EXTTextureFilterAnisotropic documentation>
-newtype EXTTextureFilterAnisotropic = EXTTextureFilterAnisotropic { unEXTTextureFilterAnisotropic :: JSRef EXTTextureFilterAnisotropic }
-
-instance Eq (EXTTextureFilterAnisotropic) where
-  (EXTTextureFilterAnisotropic a) == (EXTTextureFilterAnisotropic b) = js_eq a b
-
-instance PToJSRef EXTTextureFilterAnisotropic where
-  pToJSRef = unEXTTextureFilterAnisotropic
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef EXTTextureFilterAnisotropic where
-  pFromJSRef = EXTTextureFilterAnisotropic
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef EXTTextureFilterAnisotropic where
-  toJSRef = return . unEXTTextureFilterAnisotropic
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef EXTTextureFilterAnisotropic where
-  fromJSRef = return . fmap EXTTextureFilterAnisotropic . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject EXTTextureFilterAnisotropic where
-  toGObject = GObject . castRef . unEXTTextureFilterAnisotropic
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = EXTTextureFilterAnisotropic . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToEXTTextureFilterAnisotropic :: IsGObject obj => obj -> EXTTextureFilterAnisotropic
-castToEXTTextureFilterAnisotropic = castTo gTypeEXTTextureFilterAnisotropic "EXTTextureFilterAnisotropic"
-
-foreign import javascript unsafe "window[\"EXTTextureFilterAnisotropic\"]" gTypeEXTTextureFilterAnisotropic' :: JSRef GType
-gTypeEXTTextureFilterAnisotropic = GType gTypeEXTTextureFilterAnisotropic'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.EXTsRGB".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/EXTsRGB Mozilla EXTsRGB documentation>
-newtype EXTsRGB = EXTsRGB { unEXTsRGB :: JSRef EXTsRGB }
-
-instance Eq (EXTsRGB) where
-  (EXTsRGB a) == (EXTsRGB b) = js_eq a b
-
-instance PToJSRef EXTsRGB where
-  pToJSRef = unEXTsRGB
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef EXTsRGB where
-  pFromJSRef = EXTsRGB
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef EXTsRGB where
-  toJSRef = return . unEXTsRGB
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef EXTsRGB where
-  fromJSRef = return . fmap EXTsRGB . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject EXTsRGB where
-  toGObject = GObject . castRef . unEXTsRGB
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = EXTsRGB . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToEXTsRGB :: IsGObject obj => obj -> EXTsRGB
-castToEXTsRGB = castTo gTypeEXTsRGB "EXTsRGB"
-
-foreign import javascript unsafe "window[\"EXTsRGB\"]" gTypeEXTsRGB' :: JSRef GType
-gTypeEXTsRGB = GType gTypeEXTsRGB'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.Element".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/Element Mozilla Element documentation>
-newtype Element = Element { unElement :: JSRef Element }
-
-instance Eq (Element) where
-  (Element a) == (Element b) = js_eq a b
-
-instance PToJSRef Element where
-  pToJSRef = unElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef Element where
-  pFromJSRef = Element
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef Element where
-  toJSRef = return . unElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef Element where
-  fromJSRef = return . fmap Element . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsNode o => IsElement o
-toElement :: IsElement o => o -> Element
-toElement = unsafeCastGObject . toGObject
-
-instance IsElement Element
-instance IsNode Element
-instance IsEventTarget Element
-instance IsGObject Element where
-  toGObject = GObject . castRef . unElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = Element . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToElement :: IsGObject obj => obj -> Element
-castToElement = castTo gTypeElement "Element"
-
-foreign import javascript unsafe "window[\"Element\"]" gTypeElement' :: JSRef GType
-gTypeElement = GType gTypeElement'
-#else
-type IsElement o = ElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.Entity".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/Entity Mozilla Entity documentation>
-newtype Entity = Entity { unEntity :: JSRef Entity }
-
-instance Eq (Entity) where
-  (Entity a) == (Entity b) = js_eq a b
-
-instance PToJSRef Entity where
-  pToJSRef = unEntity
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef Entity where
-  pFromJSRef = Entity
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef Entity where
-  toJSRef = return . unEntity
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef Entity where
-  fromJSRef = return . fmap Entity . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsNode Entity
-instance IsEventTarget Entity
-instance IsGObject Entity where
-  toGObject = GObject . castRef . unEntity
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = Entity . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToEntity :: IsGObject obj => obj -> Entity
-castToEntity = castTo gTypeEntity "Entity"
-
-foreign import javascript unsafe "window[\"Entity\"]" gTypeEntity' :: JSRef GType
-gTypeEntity = GType gTypeEntity'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.EntityReference".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/EntityReference Mozilla EntityReference documentation>
-newtype EntityReference = EntityReference { unEntityReference :: JSRef EntityReference }
-
-instance Eq (EntityReference) where
-  (EntityReference a) == (EntityReference b) = js_eq a b
-
-instance PToJSRef EntityReference where
-  pToJSRef = unEntityReference
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef EntityReference where
-  pFromJSRef = EntityReference
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef EntityReference where
-  toJSRef = return . unEntityReference
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef EntityReference where
-  fromJSRef = return . fmap EntityReference . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsNode EntityReference
-instance IsEventTarget EntityReference
-instance IsGObject EntityReference where
-  toGObject = GObject . castRef . unEntityReference
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = EntityReference . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToEntityReference :: IsGObject obj => obj -> EntityReference
-castToEntityReference = castTo gTypeEntityReference "EntityReference"
-
-foreign import javascript unsafe "window[\"EntityReference\"]" gTypeEntityReference' :: JSRef GType
-gTypeEntityReference = GType gTypeEntityReference'
-#else
-type IsEntityReference o = EntityReferenceClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.ErrorEvent".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.Event"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/ErrorEvent Mozilla ErrorEvent documentation>
-newtype ErrorEvent = ErrorEvent { unErrorEvent :: JSRef ErrorEvent }
-
-instance Eq (ErrorEvent) where
-  (ErrorEvent a) == (ErrorEvent b) = js_eq a b
-
-instance PToJSRef ErrorEvent where
-  pToJSRef = unErrorEvent
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef ErrorEvent where
-  pFromJSRef = ErrorEvent
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef ErrorEvent where
-  toJSRef = return . unErrorEvent
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef ErrorEvent where
-  fromJSRef = return . fmap ErrorEvent . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEvent ErrorEvent
-instance IsGObject ErrorEvent where
-  toGObject = GObject . castRef . unErrorEvent
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = ErrorEvent . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToErrorEvent :: IsGObject obj => obj -> ErrorEvent
-castToErrorEvent = castTo gTypeErrorEvent "ErrorEvent"
-
-foreign import javascript unsafe "window[\"ErrorEvent\"]" gTypeErrorEvent' :: JSRef GType
-gTypeErrorEvent = GType gTypeErrorEvent'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.Event".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/Event Mozilla Event documentation>
-newtype Event = Event { unEvent :: JSRef Event }
-
-instance Eq (Event) where
-  (Event a) == (Event b) = js_eq a b
-
-instance PToJSRef Event where
-  pToJSRef = unEvent
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef Event where
-  pFromJSRef = Event
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef Event where
-  toJSRef = return . unEvent
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef Event where
-  fromJSRef = return . fmap Event . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsGObject o => IsEvent o
-toEvent :: IsEvent o => o -> Event
-toEvent = unsafeCastGObject . toGObject
-
-instance IsEvent Event
-instance IsGObject Event where
-  toGObject = GObject . castRef . unEvent
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = Event . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToEvent :: IsGObject obj => obj -> Event
-castToEvent = castTo gTypeEvent "Event"
-
-foreign import javascript unsafe "window[\"Event\"]" gTypeEvent' :: JSRef GType
-gTypeEvent = GType gTypeEvent'
-#else
-type IsEvent o = EventClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.EventListener".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/EventListener Mozilla EventListener documentation>
-newtype EventListener = EventListener { unEventListener :: JSRef EventListener }
-
-instance Eq (EventListener) where
-  (EventListener a) == (EventListener b) = js_eq a b
-
-instance PToJSRef EventListener where
-  pToJSRef = unEventListener
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef EventListener where
-  pFromJSRef = EventListener
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef EventListener where
-  toJSRef = return . unEventListener
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef EventListener where
-  fromJSRef = return . fmap EventListener . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject EventListener where
-  toGObject = GObject . castRef . unEventListener
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = EventListener . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToEventListener :: IsGObject obj => obj -> EventListener
-castToEventListener = castTo gTypeEventListener "EventListener"
-
-foreign import javascript unsafe "window[\"EventListener\"]" gTypeEventListener' :: JSRef GType
-gTypeEventListener = GType gTypeEventListener'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.EventSource".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/EventSource Mozilla EventSource documentation>
-newtype EventSource = EventSource { unEventSource :: JSRef EventSource }
-
-instance Eq (EventSource) where
-  (EventSource a) == (EventSource b) = js_eq a b
-
-instance PToJSRef EventSource where
-  pToJSRef = unEventSource
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef EventSource where
-  pFromJSRef = EventSource
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef EventSource where
-  toJSRef = return . unEventSource
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef EventSource where
-  fromJSRef = return . fmap EventSource . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEventTarget EventSource
-instance IsGObject EventSource where
-  toGObject = GObject . castRef . unEventSource
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = EventSource . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToEventSource :: IsGObject obj => obj -> EventSource
-castToEventSource = castTo gTypeEventSource "EventSource"
-
-foreign import javascript unsafe "window[\"EventSource\"]" gTypeEventSource' :: JSRef GType
-gTypeEventSource = GType gTypeEventSource'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.EventTarget".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/EventTarget Mozilla EventTarget documentation>
-newtype EventTarget = EventTarget { unEventTarget :: JSRef EventTarget }
-
-instance Eq (EventTarget) where
-  (EventTarget a) == (EventTarget b) = js_eq a b
-
-instance PToJSRef EventTarget where
-  pToJSRef = unEventTarget
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef EventTarget where
-  pFromJSRef = EventTarget
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef EventTarget where
-  toJSRef = return . unEventTarget
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef EventTarget where
-  fromJSRef = return . fmap EventTarget . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsGObject o => IsEventTarget o
-toEventTarget :: IsEventTarget o => o -> EventTarget
-toEventTarget = unsafeCastGObject . toGObject
-
-instance IsEventTarget EventTarget
-instance IsGObject EventTarget where
-  toGObject = GObject . castRef . unEventTarget
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = EventTarget . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToEventTarget :: IsGObject obj => obj -> EventTarget
-castToEventTarget = castTo gTypeEventTarget "EventTarget"
-
-foreign import javascript unsafe "window[\"EventTarget\"]" gTypeEventTarget' :: JSRef GType
-gTypeEventTarget = GType gTypeEventTarget'
-#else
-type IsEventTarget o = EventTargetClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.File".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.Blob"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/File Mozilla File documentation>
-newtype File = File { unFile :: JSRef File }
-
-instance Eq (File) where
-  (File a) == (File b) = js_eq a b
-
-instance PToJSRef File where
-  pToJSRef = unFile
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef File where
-  pFromJSRef = File
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef File where
-  toJSRef = return . unFile
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef File where
-  fromJSRef = return . fmap File . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsBlob File
-instance IsGObject File where
-  toGObject = GObject . castRef . unFile
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = File . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToFile :: IsGObject obj => obj -> File
-castToFile = castTo gTypeFile "File"
-
-foreign import javascript unsafe "window[\"File\"]" gTypeFile' :: JSRef GType
-gTypeFile = GType gTypeFile'
-#else
-type IsFile o = FileClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.FileError".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/FileError Mozilla FileError documentation>
-newtype FileError = FileError { unFileError :: JSRef FileError }
-
-instance Eq (FileError) where
-  (FileError a) == (FileError b) = js_eq a b
-
-instance PToJSRef FileError where
-  pToJSRef = unFileError
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef FileError where
-  pFromJSRef = FileError
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef FileError where
-  toJSRef = return . unFileError
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef FileError where
-  fromJSRef = return . fmap FileError . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject FileError where
-  toGObject = GObject . castRef . unFileError
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = FileError . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToFileError :: IsGObject obj => obj -> FileError
-castToFileError = castTo gTypeFileError "FileError"
-
-foreign import javascript unsafe "window[\"FileError\"]" gTypeFileError' :: JSRef GType
-gTypeFileError = GType gTypeFileError'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.FileList".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/FileList Mozilla FileList documentation>
-newtype FileList = FileList { unFileList :: JSRef FileList }
-
-instance Eq (FileList) where
-  (FileList a) == (FileList b) = js_eq a b
-
-instance PToJSRef FileList where
-  pToJSRef = unFileList
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef FileList where
-  pFromJSRef = FileList
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef FileList where
-  toJSRef = return . unFileList
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef FileList where
-  fromJSRef = return . fmap FileList . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject FileList where
-  toGObject = GObject . castRef . unFileList
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = FileList . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToFileList :: IsGObject obj => obj -> FileList
-castToFileList = castTo gTypeFileList "FileList"
-
-foreign import javascript unsafe "window[\"FileList\"]" gTypeFileList' :: JSRef GType
-gTypeFileList = GType gTypeFileList'
-#else
-type IsFileList o = FileListClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.FileReader".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/FileReader Mozilla FileReader documentation>
-newtype FileReader = FileReader { unFileReader :: JSRef FileReader }
-
-instance Eq (FileReader) where
-  (FileReader a) == (FileReader b) = js_eq a b
-
-instance PToJSRef FileReader where
-  pToJSRef = unFileReader
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef FileReader where
-  pFromJSRef = FileReader
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef FileReader where
-  toJSRef = return . unFileReader
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef FileReader where
-  fromJSRef = return . fmap FileReader . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEventTarget FileReader
-instance IsGObject FileReader where
-  toGObject = GObject . castRef . unFileReader
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = FileReader . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToFileReader :: IsGObject obj => obj -> FileReader
-castToFileReader = castTo gTypeFileReader "FileReader"
-
-foreign import javascript unsafe "window[\"FileReader\"]" gTypeFileReader' :: JSRef GType
-gTypeFileReader = GType gTypeFileReader'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.FileReaderSync".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/FileReaderSync Mozilla FileReaderSync documentation>
-newtype FileReaderSync = FileReaderSync { unFileReaderSync :: JSRef FileReaderSync }
-
-instance Eq (FileReaderSync) where
-  (FileReaderSync a) == (FileReaderSync b) = js_eq a b
-
-instance PToJSRef FileReaderSync where
-  pToJSRef = unFileReaderSync
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef FileReaderSync where
-  pFromJSRef = FileReaderSync
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef FileReaderSync where
-  toJSRef = return . unFileReaderSync
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef FileReaderSync where
-  fromJSRef = return . fmap FileReaderSync . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject FileReaderSync where
-  toGObject = GObject . castRef . unFileReaderSync
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = FileReaderSync . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToFileReaderSync :: IsGObject obj => obj -> FileReaderSync
-castToFileReaderSync = castTo gTypeFileReaderSync "FileReaderSync"
-
-foreign import javascript unsafe "window[\"FileReaderSync\"]" gTypeFileReaderSync' :: JSRef GType
-gTypeFileReaderSync = GType gTypeFileReaderSync'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.FocusEvent".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.UIEvent"
---     * "GHCJS.DOM.Event"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/FocusEvent Mozilla FocusEvent documentation>
-newtype FocusEvent = FocusEvent { unFocusEvent :: JSRef FocusEvent }
-
-instance Eq (FocusEvent) where
-  (FocusEvent a) == (FocusEvent b) = js_eq a b
-
-instance PToJSRef FocusEvent where
-  pToJSRef = unFocusEvent
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef FocusEvent where
-  pFromJSRef = FocusEvent
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef FocusEvent where
-  toJSRef = return . unFocusEvent
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef FocusEvent where
-  fromJSRef = return . fmap FocusEvent . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsUIEvent FocusEvent
-instance IsEvent FocusEvent
-instance IsGObject FocusEvent where
-  toGObject = GObject . castRef . unFocusEvent
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = FocusEvent . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToFocusEvent :: IsGObject obj => obj -> FocusEvent
-castToFocusEvent = castTo gTypeFocusEvent "FocusEvent"
-
-foreign import javascript unsafe "window[\"FocusEvent\"]" gTypeFocusEvent' :: JSRef GType
-gTypeFocusEvent = GType gTypeFocusEvent'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.FontLoader".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/FontLoader Mozilla FontLoader documentation>
-newtype FontLoader = FontLoader { unFontLoader :: JSRef FontLoader }
-
-instance Eq (FontLoader) where
-  (FontLoader a) == (FontLoader b) = js_eq a b
-
-instance PToJSRef FontLoader where
-  pToJSRef = unFontLoader
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef FontLoader where
-  pFromJSRef = FontLoader
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef FontLoader where
-  toJSRef = return . unFontLoader
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef FontLoader where
-  fromJSRef = return . fmap FontLoader . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEventTarget FontLoader
-instance IsGObject FontLoader where
-  toGObject = GObject . castRef . unFontLoader
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = FontLoader . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToFontLoader :: IsGObject obj => obj -> FontLoader
-castToFontLoader = castTo gTypeFontLoader "FontLoader"
-
-foreign import javascript unsafe "window[\"FontLoader\"]" gTypeFontLoader' :: JSRef GType
-gTypeFontLoader = GType gTypeFontLoader'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.FormData".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/FormData Mozilla FormData documentation>
-newtype FormData = FormData { unFormData :: JSRef FormData }
-
-instance Eq (FormData) where
-  (FormData a) == (FormData b) = js_eq a b
-
-instance PToJSRef FormData where
-  pToJSRef = unFormData
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef FormData where
-  pFromJSRef = FormData
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef FormData where
-  toJSRef = return . unFormData
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef FormData where
-  fromJSRef = return . fmap FormData . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject FormData where
-  toGObject = GObject . castRef . unFormData
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = FormData . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToFormData :: IsGObject obj => obj -> FormData
-castToFormData = castTo gTypeFormData "FormData"
-
-foreign import javascript unsafe "window[\"FormData\"]" gTypeFormData' :: JSRef GType
-gTypeFormData = GType gTypeFormData'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.GainNode".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.AudioNode"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/GainNode Mozilla GainNode documentation>
-newtype GainNode = GainNode { unGainNode :: JSRef GainNode }
-
-instance Eq (GainNode) where
-  (GainNode a) == (GainNode b) = js_eq a b
-
-instance PToJSRef GainNode where
-  pToJSRef = unGainNode
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef GainNode where
-  pFromJSRef = GainNode
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef GainNode where
-  toJSRef = return . unGainNode
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef GainNode where
-  fromJSRef = return . fmap GainNode . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsAudioNode GainNode
-instance IsEventTarget GainNode
-instance IsGObject GainNode where
-  toGObject = GObject . castRef . unGainNode
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = GainNode . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToGainNode :: IsGObject obj => obj -> GainNode
-castToGainNode = castTo gTypeGainNode "GainNode"
-
-foreign import javascript unsafe "window[\"GainNode\"]" gTypeGainNode' :: JSRef GType
-gTypeGainNode = GType gTypeGainNode'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.Gamepad".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/Gamepad Mozilla Gamepad documentation>
-newtype Gamepad = Gamepad { unGamepad :: JSRef Gamepad }
-
-instance Eq (Gamepad) where
-  (Gamepad a) == (Gamepad b) = js_eq a b
-
-instance PToJSRef Gamepad where
-  pToJSRef = unGamepad
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef Gamepad where
-  pFromJSRef = Gamepad
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef Gamepad where
-  toJSRef = return . unGamepad
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef Gamepad where
-  fromJSRef = return . fmap Gamepad . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject Gamepad where
-  toGObject = GObject . castRef . unGamepad
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = Gamepad . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToGamepad :: IsGObject obj => obj -> Gamepad
-castToGamepad = castTo gTypeGamepad "Gamepad"
-
-foreign import javascript unsafe "window[\"Gamepad\"]" gTypeGamepad' :: JSRef GType
-gTypeGamepad = GType gTypeGamepad'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.GamepadButton".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/GamepadButton Mozilla GamepadButton documentation>
-newtype GamepadButton = GamepadButton { unGamepadButton :: JSRef GamepadButton }
-
-instance Eq (GamepadButton) where
-  (GamepadButton a) == (GamepadButton b) = js_eq a b
-
-instance PToJSRef GamepadButton where
-  pToJSRef = unGamepadButton
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef GamepadButton where
-  pFromJSRef = GamepadButton
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef GamepadButton where
-  toJSRef = return . unGamepadButton
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef GamepadButton where
-  fromJSRef = return . fmap GamepadButton . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject GamepadButton where
-  toGObject = GObject . castRef . unGamepadButton
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = GamepadButton . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToGamepadButton :: IsGObject obj => obj -> GamepadButton
-castToGamepadButton = castTo gTypeGamepadButton "GamepadButton"
-
-foreign import javascript unsafe "window[\"GamepadButton\"]" gTypeGamepadButton' :: JSRef GType
-gTypeGamepadButton = GType gTypeGamepadButton'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.GamepadEvent".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.Event"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/GamepadEvent Mozilla GamepadEvent documentation>
-newtype GamepadEvent = GamepadEvent { unGamepadEvent :: JSRef GamepadEvent }
-
-instance Eq (GamepadEvent) where
-  (GamepadEvent a) == (GamepadEvent b) = js_eq a b
-
-instance PToJSRef GamepadEvent where
-  pToJSRef = unGamepadEvent
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef GamepadEvent where
-  pFromJSRef = GamepadEvent
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef GamepadEvent where
-  toJSRef = return . unGamepadEvent
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef GamepadEvent where
-  fromJSRef = return . fmap GamepadEvent . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEvent GamepadEvent
-instance IsGObject GamepadEvent where
-  toGObject = GObject . castRef . unGamepadEvent
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = GamepadEvent . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToGamepadEvent :: IsGObject obj => obj -> GamepadEvent
-castToGamepadEvent = castTo gTypeGamepadEvent "GamepadEvent"
-
-foreign import javascript unsafe "window[\"GamepadEvent\"]" gTypeGamepadEvent' :: JSRef GType
-gTypeGamepadEvent = GType gTypeGamepadEvent'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.Geolocation".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/Geolocation Mozilla Geolocation documentation>
-newtype Geolocation = Geolocation { unGeolocation :: JSRef Geolocation }
-
-instance Eq (Geolocation) where
-  (Geolocation a) == (Geolocation b) = js_eq a b
-
-instance PToJSRef Geolocation where
-  pToJSRef = unGeolocation
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef Geolocation where
-  pFromJSRef = Geolocation
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef Geolocation where
-  toJSRef = return . unGeolocation
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef Geolocation where
-  fromJSRef = return . fmap Geolocation . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject Geolocation where
-  toGObject = GObject . castRef . unGeolocation
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = Geolocation . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToGeolocation :: IsGObject obj => obj -> Geolocation
-castToGeolocation = castTo gTypeGeolocation "Geolocation"
-
-foreign import javascript unsafe "window[\"Geolocation\"]" gTypeGeolocation' :: JSRef GType
-gTypeGeolocation = GType gTypeGeolocation'
-#else
-type IsGeolocation o = GeolocationClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.Geoposition".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/Geoposition Mozilla Geoposition documentation>
-newtype Geoposition = Geoposition { unGeoposition :: JSRef Geoposition }
-
-instance Eq (Geoposition) where
-  (Geoposition a) == (Geoposition b) = js_eq a b
-
-instance PToJSRef Geoposition where
-  pToJSRef = unGeoposition
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef Geoposition where
-  pFromJSRef = Geoposition
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef Geoposition where
-  toJSRef = return . unGeoposition
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef Geoposition where
-  fromJSRef = return . fmap Geoposition . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject Geoposition where
-  toGObject = GObject . castRef . unGeoposition
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = Geoposition . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToGeoposition :: IsGObject obj => obj -> Geoposition
-castToGeoposition = castTo gTypeGeoposition "Geoposition"
-
-foreign import javascript unsafe "window[\"Geoposition\"]" gTypeGeoposition' :: JSRef GType
-gTypeGeoposition = GType gTypeGeoposition'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLAllCollection".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAllCollection Mozilla HTMLAllCollection documentation>
-newtype HTMLAllCollection = HTMLAllCollection { unHTMLAllCollection :: JSRef HTMLAllCollection }
-
-instance Eq (HTMLAllCollection) where
-  (HTMLAllCollection a) == (HTMLAllCollection b) = js_eq a b
-
-instance PToJSRef HTMLAllCollection where
-  pToJSRef = unHTMLAllCollection
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLAllCollection where
-  pFromJSRef = HTMLAllCollection
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLAllCollection where
-  toJSRef = return . unHTMLAllCollection
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLAllCollection where
-  fromJSRef = return . fmap HTMLAllCollection . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject HTMLAllCollection where
-  toGObject = GObject . castRef . unHTMLAllCollection
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLAllCollection . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLAllCollection :: IsGObject obj => obj -> HTMLAllCollection
-castToHTMLAllCollection = castTo gTypeHTMLAllCollection "HTMLAllCollection"
-
-foreign import javascript unsafe "window[\"HTMLAllCollection\"]" gTypeHTMLAllCollection' :: JSRef GType
-gTypeHTMLAllCollection = GType gTypeHTMLAllCollection'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLAnchorElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement Mozilla HTMLAnchorElement documentation>
-newtype HTMLAnchorElement = HTMLAnchorElement { unHTMLAnchorElement :: JSRef HTMLAnchorElement }
-
-instance Eq (HTMLAnchorElement) where
-  (HTMLAnchorElement a) == (HTMLAnchorElement b) = js_eq a b
-
-instance PToJSRef HTMLAnchorElement where
-  pToJSRef = unHTMLAnchorElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLAnchorElement where
-  pFromJSRef = HTMLAnchorElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLAnchorElement where
-  toJSRef = return . unHTMLAnchorElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLAnchorElement where
-  fromJSRef = return . fmap HTMLAnchorElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLAnchorElement
-instance IsElement HTMLAnchorElement
-instance IsNode HTMLAnchorElement
-instance IsEventTarget HTMLAnchorElement
-instance IsGObject HTMLAnchorElement where
-  toGObject = GObject . castRef . unHTMLAnchorElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLAnchorElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLAnchorElement :: IsGObject obj => obj -> HTMLAnchorElement
-castToHTMLAnchorElement = castTo gTypeHTMLAnchorElement "HTMLAnchorElement"
-
-foreign import javascript unsafe "window[\"HTMLAnchorElement\"]" gTypeHTMLAnchorElement' :: JSRef GType
-gTypeHTMLAnchorElement = GType gTypeHTMLAnchorElement'
-#else
-type IsHTMLAnchorElement o = HTMLAnchorElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLAppletElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAppletElement Mozilla HTMLAppletElement documentation>
-newtype HTMLAppletElement = HTMLAppletElement { unHTMLAppletElement :: JSRef HTMLAppletElement }
-
-instance Eq (HTMLAppletElement) where
-  (HTMLAppletElement a) == (HTMLAppletElement b) = js_eq a b
-
-instance PToJSRef HTMLAppletElement where
-  pToJSRef = unHTMLAppletElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLAppletElement where
-  pFromJSRef = HTMLAppletElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLAppletElement where
-  toJSRef = return . unHTMLAppletElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLAppletElement where
-  fromJSRef = return . fmap HTMLAppletElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLAppletElement
-instance IsElement HTMLAppletElement
-instance IsNode HTMLAppletElement
-instance IsEventTarget HTMLAppletElement
-instance IsGObject HTMLAppletElement where
-  toGObject = GObject . castRef . unHTMLAppletElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLAppletElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLAppletElement :: IsGObject obj => obj -> HTMLAppletElement
-castToHTMLAppletElement = castTo gTypeHTMLAppletElement "HTMLAppletElement"
-
-foreign import javascript unsafe "window[\"HTMLAppletElement\"]" gTypeHTMLAppletElement' :: JSRef GType
-gTypeHTMLAppletElement = GType gTypeHTMLAppletElement'
-#else
-type IsHTMLAppletElement o = HTMLAppletElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLAreaElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAreaElement Mozilla HTMLAreaElement documentation>
-newtype HTMLAreaElement = HTMLAreaElement { unHTMLAreaElement :: JSRef HTMLAreaElement }
-
-instance Eq (HTMLAreaElement) where
-  (HTMLAreaElement a) == (HTMLAreaElement b) = js_eq a b
-
-instance PToJSRef HTMLAreaElement where
-  pToJSRef = unHTMLAreaElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLAreaElement where
-  pFromJSRef = HTMLAreaElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLAreaElement where
-  toJSRef = return . unHTMLAreaElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLAreaElement where
-  fromJSRef = return . fmap HTMLAreaElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLAreaElement
-instance IsElement HTMLAreaElement
-instance IsNode HTMLAreaElement
-instance IsEventTarget HTMLAreaElement
-instance IsGObject HTMLAreaElement where
-  toGObject = GObject . castRef . unHTMLAreaElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLAreaElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLAreaElement :: IsGObject obj => obj -> HTMLAreaElement
-castToHTMLAreaElement = castTo gTypeHTMLAreaElement "HTMLAreaElement"
-
-foreign import javascript unsafe "window[\"HTMLAreaElement\"]" gTypeHTMLAreaElement' :: JSRef GType
-gTypeHTMLAreaElement = GType gTypeHTMLAreaElement'
-#else
-type IsHTMLAreaElement o = HTMLAreaElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLAudioElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLMediaElement"
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAudioElement Mozilla HTMLAudioElement documentation>
-newtype HTMLAudioElement = HTMLAudioElement { unHTMLAudioElement :: JSRef HTMLAudioElement }
-
-instance Eq (HTMLAudioElement) where
-  (HTMLAudioElement a) == (HTMLAudioElement b) = js_eq a b
-
-instance PToJSRef HTMLAudioElement where
-  pToJSRef = unHTMLAudioElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLAudioElement where
-  pFromJSRef = HTMLAudioElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLAudioElement where
-  toJSRef = return . unHTMLAudioElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLAudioElement where
-  fromJSRef = return . fmap HTMLAudioElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLMediaElement HTMLAudioElement
-instance IsHTMLElement HTMLAudioElement
-instance IsElement HTMLAudioElement
-instance IsNode HTMLAudioElement
-instance IsEventTarget HTMLAudioElement
-instance IsGObject HTMLAudioElement where
-  toGObject = GObject . castRef . unHTMLAudioElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLAudioElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLAudioElement :: IsGObject obj => obj -> HTMLAudioElement
-castToHTMLAudioElement = castTo gTypeHTMLAudioElement "HTMLAudioElement"
-
-foreign import javascript unsafe "window[\"HTMLAudioElement\"]" gTypeHTMLAudioElement' :: JSRef GType
-gTypeHTMLAudioElement = GType gTypeHTMLAudioElement'
-#else
-type IsHTMLAudioElement o = HTMLAudioElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLBRElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLBRElement Mozilla HTMLBRElement documentation>
-newtype HTMLBRElement = HTMLBRElement { unHTMLBRElement :: JSRef HTMLBRElement }
-
-instance Eq (HTMLBRElement) where
-  (HTMLBRElement a) == (HTMLBRElement b) = js_eq a b
-
-instance PToJSRef HTMLBRElement where
-  pToJSRef = unHTMLBRElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLBRElement where
-  pFromJSRef = HTMLBRElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLBRElement where
-  toJSRef = return . unHTMLBRElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLBRElement where
-  fromJSRef = return . fmap HTMLBRElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLBRElement
-instance IsElement HTMLBRElement
-instance IsNode HTMLBRElement
-instance IsEventTarget HTMLBRElement
-instance IsGObject HTMLBRElement where
-  toGObject = GObject . castRef . unHTMLBRElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLBRElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLBRElement :: IsGObject obj => obj -> HTMLBRElement
-castToHTMLBRElement = castTo gTypeHTMLBRElement "HTMLBRElement"
-
-foreign import javascript unsafe "window[\"HTMLBRElement\"]" gTypeHTMLBRElement' :: JSRef GType
-gTypeHTMLBRElement = GType gTypeHTMLBRElement'
-#else
-type IsHTMLBRElement o = HTMLBRElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLBaseElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLBaseElement Mozilla HTMLBaseElement documentation>
-newtype HTMLBaseElement = HTMLBaseElement { unHTMLBaseElement :: JSRef HTMLBaseElement }
-
-instance Eq (HTMLBaseElement) where
-  (HTMLBaseElement a) == (HTMLBaseElement b) = js_eq a b
-
-instance PToJSRef HTMLBaseElement where
-  pToJSRef = unHTMLBaseElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLBaseElement where
-  pFromJSRef = HTMLBaseElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLBaseElement where
-  toJSRef = return . unHTMLBaseElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLBaseElement where
-  fromJSRef = return . fmap HTMLBaseElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLBaseElement
-instance IsElement HTMLBaseElement
-instance IsNode HTMLBaseElement
-instance IsEventTarget HTMLBaseElement
-instance IsGObject HTMLBaseElement where
-  toGObject = GObject . castRef . unHTMLBaseElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLBaseElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLBaseElement :: IsGObject obj => obj -> HTMLBaseElement
-castToHTMLBaseElement = castTo gTypeHTMLBaseElement "HTMLBaseElement"
-
-foreign import javascript unsafe "window[\"HTMLBaseElement\"]" gTypeHTMLBaseElement' :: JSRef GType
-gTypeHTMLBaseElement = GType gTypeHTMLBaseElement'
-#else
-type IsHTMLBaseElement o = HTMLBaseElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLBaseFontElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLBaseFontElement Mozilla HTMLBaseFontElement documentation>
-newtype HTMLBaseFontElement = HTMLBaseFontElement { unHTMLBaseFontElement :: JSRef HTMLBaseFontElement }
-
-instance Eq (HTMLBaseFontElement) where
-  (HTMLBaseFontElement a) == (HTMLBaseFontElement b) = js_eq a b
-
-instance PToJSRef HTMLBaseFontElement where
-  pToJSRef = unHTMLBaseFontElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLBaseFontElement where
-  pFromJSRef = HTMLBaseFontElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLBaseFontElement where
-  toJSRef = return . unHTMLBaseFontElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLBaseFontElement where
-  fromJSRef = return . fmap HTMLBaseFontElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLBaseFontElement
-instance IsElement HTMLBaseFontElement
-instance IsNode HTMLBaseFontElement
-instance IsEventTarget HTMLBaseFontElement
-instance IsGObject HTMLBaseFontElement where
-  toGObject = GObject . castRef . unHTMLBaseFontElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLBaseFontElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLBaseFontElement :: IsGObject obj => obj -> HTMLBaseFontElement
-castToHTMLBaseFontElement = castTo gTypeHTMLBaseFontElement "HTMLBaseFontElement"
-
-foreign import javascript unsafe "window[\"HTMLBaseFontElement\"]" gTypeHTMLBaseFontElement' :: JSRef GType
-gTypeHTMLBaseFontElement = GType gTypeHTMLBaseFontElement'
-#else
-type IsHTMLBaseFontElement o = HTMLBaseFontElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLBodyElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLBodyElement Mozilla HTMLBodyElement documentation>
-newtype HTMLBodyElement = HTMLBodyElement { unHTMLBodyElement :: JSRef HTMLBodyElement }
-
-instance Eq (HTMLBodyElement) where
-  (HTMLBodyElement a) == (HTMLBodyElement b) = js_eq a b
-
-instance PToJSRef HTMLBodyElement where
-  pToJSRef = unHTMLBodyElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLBodyElement where
-  pFromJSRef = HTMLBodyElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLBodyElement where
-  toJSRef = return . unHTMLBodyElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLBodyElement where
-  fromJSRef = return . fmap HTMLBodyElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLBodyElement
-instance IsElement HTMLBodyElement
-instance IsNode HTMLBodyElement
-instance IsEventTarget HTMLBodyElement
-instance IsGObject HTMLBodyElement where
-  toGObject = GObject . castRef . unHTMLBodyElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLBodyElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLBodyElement :: IsGObject obj => obj -> HTMLBodyElement
-castToHTMLBodyElement = castTo gTypeHTMLBodyElement "HTMLBodyElement"
-
-foreign import javascript unsafe "window[\"HTMLBodyElement\"]" gTypeHTMLBodyElement' :: JSRef GType
-gTypeHTMLBodyElement = GType gTypeHTMLBodyElement'
-#else
-type IsHTMLBodyElement o = HTMLBodyElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLButtonElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLButtonElement Mozilla HTMLButtonElement documentation>
-newtype HTMLButtonElement = HTMLButtonElement { unHTMLButtonElement :: JSRef HTMLButtonElement }
-
-instance Eq (HTMLButtonElement) where
-  (HTMLButtonElement a) == (HTMLButtonElement b) = js_eq a b
-
-instance PToJSRef HTMLButtonElement where
-  pToJSRef = unHTMLButtonElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLButtonElement where
-  pFromJSRef = HTMLButtonElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLButtonElement where
-  toJSRef = return . unHTMLButtonElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLButtonElement where
-  fromJSRef = return . fmap HTMLButtonElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLButtonElement
-instance IsElement HTMLButtonElement
-instance IsNode HTMLButtonElement
-instance IsEventTarget HTMLButtonElement
-instance IsGObject HTMLButtonElement where
-  toGObject = GObject . castRef . unHTMLButtonElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLButtonElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLButtonElement :: IsGObject obj => obj -> HTMLButtonElement
-castToHTMLButtonElement = castTo gTypeHTMLButtonElement "HTMLButtonElement"
-
-foreign import javascript unsafe "window[\"HTMLButtonElement\"]" gTypeHTMLButtonElement' :: JSRef GType
-gTypeHTMLButtonElement = GType gTypeHTMLButtonElement'
-#else
-type IsHTMLButtonElement o = HTMLButtonElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLCanvasElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement Mozilla HTMLCanvasElement documentation>
-newtype HTMLCanvasElement = HTMLCanvasElement { unHTMLCanvasElement :: JSRef HTMLCanvasElement }
-
-instance Eq (HTMLCanvasElement) where
-  (HTMLCanvasElement a) == (HTMLCanvasElement b) = js_eq a b
-
-instance PToJSRef HTMLCanvasElement where
-  pToJSRef = unHTMLCanvasElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLCanvasElement where
-  pFromJSRef = HTMLCanvasElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLCanvasElement where
-  toJSRef = return . unHTMLCanvasElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLCanvasElement where
-  fromJSRef = return . fmap HTMLCanvasElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLCanvasElement
-instance IsElement HTMLCanvasElement
-instance IsNode HTMLCanvasElement
-instance IsEventTarget HTMLCanvasElement
-instance IsGObject HTMLCanvasElement where
-  toGObject = GObject . castRef . unHTMLCanvasElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLCanvasElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLCanvasElement :: IsGObject obj => obj -> HTMLCanvasElement
-castToHTMLCanvasElement = castTo gTypeHTMLCanvasElement "HTMLCanvasElement"
-
-foreign import javascript unsafe "window[\"HTMLCanvasElement\"]" gTypeHTMLCanvasElement' :: JSRef GType
-gTypeHTMLCanvasElement = GType gTypeHTMLCanvasElement'
-#else
-type IsHTMLCanvasElement o = HTMLCanvasElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLCollection".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLCollection Mozilla HTMLCollection documentation>
-newtype HTMLCollection = HTMLCollection { unHTMLCollection :: JSRef HTMLCollection }
-
-instance Eq (HTMLCollection) where
-  (HTMLCollection a) == (HTMLCollection b) = js_eq a b
-
-instance PToJSRef HTMLCollection where
-  pToJSRef = unHTMLCollection
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLCollection where
-  pFromJSRef = HTMLCollection
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLCollection where
-  toJSRef = return . unHTMLCollection
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLCollection where
-  fromJSRef = return . fmap HTMLCollection . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsGObject o => IsHTMLCollection o
-toHTMLCollection :: IsHTMLCollection o => o -> HTMLCollection
-toHTMLCollection = unsafeCastGObject . toGObject
-
-instance IsHTMLCollection HTMLCollection
-instance IsGObject HTMLCollection where
-  toGObject = GObject . castRef . unHTMLCollection
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLCollection . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLCollection :: IsGObject obj => obj -> HTMLCollection
-castToHTMLCollection = castTo gTypeHTMLCollection "HTMLCollection"
-
-foreign import javascript unsafe "window[\"HTMLCollection\"]" gTypeHTMLCollection' :: JSRef GType
-gTypeHTMLCollection = GType gTypeHTMLCollection'
-#else
-type IsHTMLCollection o = HTMLCollectionClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLDListElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLDListElement Mozilla HTMLDListElement documentation>
-newtype HTMLDListElement = HTMLDListElement { unHTMLDListElement :: JSRef HTMLDListElement }
-
-instance Eq (HTMLDListElement) where
-  (HTMLDListElement a) == (HTMLDListElement b) = js_eq a b
-
-instance PToJSRef HTMLDListElement where
-  pToJSRef = unHTMLDListElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLDListElement where
-  pFromJSRef = HTMLDListElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLDListElement where
-  toJSRef = return . unHTMLDListElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLDListElement where
-  fromJSRef = return . fmap HTMLDListElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLDListElement
-instance IsElement HTMLDListElement
-instance IsNode HTMLDListElement
-instance IsEventTarget HTMLDListElement
-instance IsGObject HTMLDListElement where
-  toGObject = GObject . castRef . unHTMLDListElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLDListElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLDListElement :: IsGObject obj => obj -> HTMLDListElement
-castToHTMLDListElement = castTo gTypeHTMLDListElement "HTMLDListElement"
-
-foreign import javascript unsafe "window[\"HTMLDListElement\"]" gTypeHTMLDListElement' :: JSRef GType
-gTypeHTMLDListElement = GType gTypeHTMLDListElement'
-#else
-type IsHTMLDListElement o = HTMLDListElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLDataListElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLDataListElement Mozilla HTMLDataListElement documentation>
-newtype HTMLDataListElement = HTMLDataListElement { unHTMLDataListElement :: JSRef HTMLDataListElement }
-
-instance Eq (HTMLDataListElement) where
-  (HTMLDataListElement a) == (HTMLDataListElement b) = js_eq a b
-
-instance PToJSRef HTMLDataListElement where
-  pToJSRef = unHTMLDataListElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLDataListElement where
-  pFromJSRef = HTMLDataListElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLDataListElement where
-  toJSRef = return . unHTMLDataListElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLDataListElement where
-  fromJSRef = return . fmap HTMLDataListElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLDataListElement
-instance IsElement HTMLDataListElement
-instance IsNode HTMLDataListElement
-instance IsEventTarget HTMLDataListElement
-instance IsGObject HTMLDataListElement where
-  toGObject = GObject . castRef . unHTMLDataListElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLDataListElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLDataListElement :: IsGObject obj => obj -> HTMLDataListElement
-castToHTMLDataListElement = castTo gTypeHTMLDataListElement "HTMLDataListElement"
-
-foreign import javascript unsafe "window[\"HTMLDataListElement\"]" gTypeHTMLDataListElement' :: JSRef GType
-gTypeHTMLDataListElement = GType gTypeHTMLDataListElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLDetailsElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLDetailsElement Mozilla HTMLDetailsElement documentation>
-newtype HTMLDetailsElement = HTMLDetailsElement { unHTMLDetailsElement :: JSRef HTMLDetailsElement }
-
-instance Eq (HTMLDetailsElement) where
-  (HTMLDetailsElement a) == (HTMLDetailsElement b) = js_eq a b
-
-instance PToJSRef HTMLDetailsElement where
-  pToJSRef = unHTMLDetailsElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLDetailsElement where
-  pFromJSRef = HTMLDetailsElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLDetailsElement where
-  toJSRef = return . unHTMLDetailsElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLDetailsElement where
-  fromJSRef = return . fmap HTMLDetailsElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLDetailsElement
-instance IsElement HTMLDetailsElement
-instance IsNode HTMLDetailsElement
-instance IsEventTarget HTMLDetailsElement
-instance IsGObject HTMLDetailsElement where
-  toGObject = GObject . castRef . unHTMLDetailsElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLDetailsElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLDetailsElement :: IsGObject obj => obj -> HTMLDetailsElement
-castToHTMLDetailsElement = castTo gTypeHTMLDetailsElement "HTMLDetailsElement"
-
-foreign import javascript unsafe "window[\"HTMLDetailsElement\"]" gTypeHTMLDetailsElement' :: JSRef GType
-gTypeHTMLDetailsElement = GType gTypeHTMLDetailsElement'
-#else
-type IsHTMLDetailsElement o = HTMLDetailsElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLDirectoryElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLDirectoryElement Mozilla HTMLDirectoryElement documentation>
-newtype HTMLDirectoryElement = HTMLDirectoryElement { unHTMLDirectoryElement :: JSRef HTMLDirectoryElement }
-
-instance Eq (HTMLDirectoryElement) where
-  (HTMLDirectoryElement a) == (HTMLDirectoryElement b) = js_eq a b
-
-instance PToJSRef HTMLDirectoryElement where
-  pToJSRef = unHTMLDirectoryElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLDirectoryElement where
-  pFromJSRef = HTMLDirectoryElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLDirectoryElement where
-  toJSRef = return . unHTMLDirectoryElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLDirectoryElement where
-  fromJSRef = return . fmap HTMLDirectoryElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLDirectoryElement
-instance IsElement HTMLDirectoryElement
-instance IsNode HTMLDirectoryElement
-instance IsEventTarget HTMLDirectoryElement
-instance IsGObject HTMLDirectoryElement where
-  toGObject = GObject . castRef . unHTMLDirectoryElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLDirectoryElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLDirectoryElement :: IsGObject obj => obj -> HTMLDirectoryElement
-castToHTMLDirectoryElement = castTo gTypeHTMLDirectoryElement "HTMLDirectoryElement"
-
-foreign import javascript unsafe "window[\"HTMLDirectoryElement\"]" gTypeHTMLDirectoryElement' :: JSRef GType
-gTypeHTMLDirectoryElement = GType gTypeHTMLDirectoryElement'
-#else
-type IsHTMLDirectoryElement o = HTMLDirectoryElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLDivElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLDivElement Mozilla HTMLDivElement documentation>
-newtype HTMLDivElement = HTMLDivElement { unHTMLDivElement :: JSRef HTMLDivElement }
-
-instance Eq (HTMLDivElement) where
-  (HTMLDivElement a) == (HTMLDivElement b) = js_eq a b
-
-instance PToJSRef HTMLDivElement where
-  pToJSRef = unHTMLDivElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLDivElement where
-  pFromJSRef = HTMLDivElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLDivElement where
-  toJSRef = return . unHTMLDivElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLDivElement where
-  fromJSRef = return . fmap HTMLDivElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLDivElement
-instance IsElement HTMLDivElement
-instance IsNode HTMLDivElement
-instance IsEventTarget HTMLDivElement
-instance IsGObject HTMLDivElement where
-  toGObject = GObject . castRef . unHTMLDivElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLDivElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLDivElement :: IsGObject obj => obj -> HTMLDivElement
-castToHTMLDivElement = castTo gTypeHTMLDivElement "HTMLDivElement"
-
-foreign import javascript unsafe "window[\"HTMLDivElement\"]" gTypeHTMLDivElement' :: JSRef GType
-gTypeHTMLDivElement = GType gTypeHTMLDivElement'
-#else
-type IsHTMLDivElement o = HTMLDivElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLDocument".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.Document"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLDocument Mozilla HTMLDocument documentation>
-newtype HTMLDocument = HTMLDocument { unHTMLDocument :: JSRef HTMLDocument }
-
-instance Eq (HTMLDocument) where
-  (HTMLDocument a) == (HTMLDocument b) = js_eq a b
-
-instance PToJSRef HTMLDocument where
-  pToJSRef = unHTMLDocument
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLDocument where
-  pFromJSRef = HTMLDocument
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLDocument where
-  toJSRef = return . unHTMLDocument
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLDocument where
-  fromJSRef = return . fmap HTMLDocument . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsDocument HTMLDocument
-instance IsNode HTMLDocument
-instance IsEventTarget HTMLDocument
-instance IsGObject HTMLDocument where
-  toGObject = GObject . castRef . unHTMLDocument
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLDocument . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLDocument :: IsGObject obj => obj -> HTMLDocument
-castToHTMLDocument = castTo gTypeHTMLDocument "HTMLDocument"
-
-foreign import javascript unsafe "window[\"HTMLDocument\"]" gTypeHTMLDocument' :: JSRef GType
-gTypeHTMLDocument = GType gTypeHTMLDocument'
-#else
-type IsHTMLDocument o = HTMLDocumentClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement Mozilla HTMLElement documentation>
-newtype HTMLElement = HTMLElement { unHTMLElement :: JSRef HTMLElement }
-
-instance Eq (HTMLElement) where
-  (HTMLElement a) == (HTMLElement b) = js_eq a b
-
-instance PToJSRef HTMLElement where
-  pToJSRef = unHTMLElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLElement where
-  pFromJSRef = HTMLElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLElement where
-  toJSRef = return . unHTMLElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLElement where
-  fromJSRef = return . fmap HTMLElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsElement o => IsHTMLElement o
-toHTMLElement :: IsHTMLElement o => o -> HTMLElement
-toHTMLElement = unsafeCastGObject . toGObject
-
-instance IsHTMLElement HTMLElement
-instance IsElement HTMLElement
-instance IsNode HTMLElement
-instance IsEventTarget HTMLElement
-instance IsGObject HTMLElement where
-  toGObject = GObject . castRef . unHTMLElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLElement :: IsGObject obj => obj -> HTMLElement
-castToHTMLElement = castTo gTypeHTMLElement "HTMLElement"
-
-foreign import javascript unsafe "window[\"HTMLElement\"]" gTypeHTMLElement' :: JSRef GType
-gTypeHTMLElement = GType gTypeHTMLElement'
-#else
-type IsHTMLElement o = HTMLElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLEmbedElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLEmbedElement Mozilla HTMLEmbedElement documentation>
-newtype HTMLEmbedElement = HTMLEmbedElement { unHTMLEmbedElement :: JSRef HTMLEmbedElement }
-
-instance Eq (HTMLEmbedElement) where
-  (HTMLEmbedElement a) == (HTMLEmbedElement b) = js_eq a b
-
-instance PToJSRef HTMLEmbedElement where
-  pToJSRef = unHTMLEmbedElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLEmbedElement where
-  pFromJSRef = HTMLEmbedElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLEmbedElement where
-  toJSRef = return . unHTMLEmbedElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLEmbedElement where
-  fromJSRef = return . fmap HTMLEmbedElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLEmbedElement
-instance IsElement HTMLEmbedElement
-instance IsNode HTMLEmbedElement
-instance IsEventTarget HTMLEmbedElement
-instance IsGObject HTMLEmbedElement where
-  toGObject = GObject . castRef . unHTMLEmbedElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLEmbedElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLEmbedElement :: IsGObject obj => obj -> HTMLEmbedElement
-castToHTMLEmbedElement = castTo gTypeHTMLEmbedElement "HTMLEmbedElement"
-
-foreign import javascript unsafe "window[\"HTMLEmbedElement\"]" gTypeHTMLEmbedElement' :: JSRef GType
-gTypeHTMLEmbedElement = GType gTypeHTMLEmbedElement'
-#else
-type IsHTMLEmbedElement o = HTMLEmbedElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLFieldSetElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFieldSetElement Mozilla HTMLFieldSetElement documentation>
-newtype HTMLFieldSetElement = HTMLFieldSetElement { unHTMLFieldSetElement :: JSRef HTMLFieldSetElement }
-
-instance Eq (HTMLFieldSetElement) where
-  (HTMLFieldSetElement a) == (HTMLFieldSetElement b) = js_eq a b
-
-instance PToJSRef HTMLFieldSetElement where
-  pToJSRef = unHTMLFieldSetElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLFieldSetElement where
-  pFromJSRef = HTMLFieldSetElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLFieldSetElement where
-  toJSRef = return . unHTMLFieldSetElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLFieldSetElement where
-  fromJSRef = return . fmap HTMLFieldSetElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLFieldSetElement
-instance IsElement HTMLFieldSetElement
-instance IsNode HTMLFieldSetElement
-instance IsEventTarget HTMLFieldSetElement
-instance IsGObject HTMLFieldSetElement where
-  toGObject = GObject . castRef . unHTMLFieldSetElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLFieldSetElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLFieldSetElement :: IsGObject obj => obj -> HTMLFieldSetElement
-castToHTMLFieldSetElement = castTo gTypeHTMLFieldSetElement "HTMLFieldSetElement"
-
-foreign import javascript unsafe "window[\"HTMLFieldSetElement\"]" gTypeHTMLFieldSetElement' :: JSRef GType
-gTypeHTMLFieldSetElement = GType gTypeHTMLFieldSetElement'
-#else
-type IsHTMLFieldSetElement o = HTMLFieldSetElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLFontElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFontElement Mozilla HTMLFontElement documentation>
-newtype HTMLFontElement = HTMLFontElement { unHTMLFontElement :: JSRef HTMLFontElement }
-
-instance Eq (HTMLFontElement) where
-  (HTMLFontElement a) == (HTMLFontElement b) = js_eq a b
-
-instance PToJSRef HTMLFontElement where
-  pToJSRef = unHTMLFontElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLFontElement where
-  pFromJSRef = HTMLFontElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLFontElement where
-  toJSRef = return . unHTMLFontElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLFontElement where
-  fromJSRef = return . fmap HTMLFontElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLFontElement
-instance IsElement HTMLFontElement
-instance IsNode HTMLFontElement
-instance IsEventTarget HTMLFontElement
-instance IsGObject HTMLFontElement where
-  toGObject = GObject . castRef . unHTMLFontElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLFontElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLFontElement :: IsGObject obj => obj -> HTMLFontElement
-castToHTMLFontElement = castTo gTypeHTMLFontElement "HTMLFontElement"
-
-foreign import javascript unsafe "window[\"HTMLFontElement\"]" gTypeHTMLFontElement' :: JSRef GType
-gTypeHTMLFontElement = GType gTypeHTMLFontElement'
-#else
-type IsHTMLFontElement o = HTMLFontElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLFormControlsCollection".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLCollection"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormControlsCollection Mozilla HTMLFormControlsCollection documentation>
-newtype HTMLFormControlsCollection = HTMLFormControlsCollection { unHTMLFormControlsCollection :: JSRef HTMLFormControlsCollection }
-
-instance Eq (HTMLFormControlsCollection) where
-  (HTMLFormControlsCollection a) == (HTMLFormControlsCollection b) = js_eq a b
-
-instance PToJSRef HTMLFormControlsCollection where
-  pToJSRef = unHTMLFormControlsCollection
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLFormControlsCollection where
-  pFromJSRef = HTMLFormControlsCollection
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLFormControlsCollection where
-  toJSRef = return . unHTMLFormControlsCollection
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLFormControlsCollection where
-  fromJSRef = return . fmap HTMLFormControlsCollection . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLCollection HTMLFormControlsCollection
-instance IsGObject HTMLFormControlsCollection where
-  toGObject = GObject . castRef . unHTMLFormControlsCollection
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLFormControlsCollection . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLFormControlsCollection :: IsGObject obj => obj -> HTMLFormControlsCollection
-castToHTMLFormControlsCollection = castTo gTypeHTMLFormControlsCollection "HTMLFormControlsCollection"
-
-foreign import javascript unsafe "window[\"HTMLFormControlsCollection\"]" gTypeHTMLFormControlsCollection' :: JSRef GType
-gTypeHTMLFormControlsCollection = GType gTypeHTMLFormControlsCollection'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLFormElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement Mozilla HTMLFormElement documentation>
-newtype HTMLFormElement = HTMLFormElement { unHTMLFormElement :: JSRef HTMLFormElement }
-
-instance Eq (HTMLFormElement) where
-  (HTMLFormElement a) == (HTMLFormElement b) = js_eq a b
-
-instance PToJSRef HTMLFormElement where
-  pToJSRef = unHTMLFormElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLFormElement where
-  pFromJSRef = HTMLFormElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLFormElement where
-  toJSRef = return . unHTMLFormElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLFormElement where
-  fromJSRef = return . fmap HTMLFormElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLFormElement
-instance IsElement HTMLFormElement
-instance IsNode HTMLFormElement
-instance IsEventTarget HTMLFormElement
-instance IsGObject HTMLFormElement where
-  toGObject = GObject . castRef . unHTMLFormElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLFormElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLFormElement :: IsGObject obj => obj -> HTMLFormElement
-castToHTMLFormElement = castTo gTypeHTMLFormElement "HTMLFormElement"
-
-foreign import javascript unsafe "window[\"HTMLFormElement\"]" gTypeHTMLFormElement' :: JSRef GType
-gTypeHTMLFormElement = GType gTypeHTMLFormElement'
-#else
-type IsHTMLFormElement o = HTMLFormElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLFrameElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFrameElement Mozilla HTMLFrameElement documentation>
-newtype HTMLFrameElement = HTMLFrameElement { unHTMLFrameElement :: JSRef HTMLFrameElement }
-
-instance Eq (HTMLFrameElement) where
-  (HTMLFrameElement a) == (HTMLFrameElement b) = js_eq a b
-
-instance PToJSRef HTMLFrameElement where
-  pToJSRef = unHTMLFrameElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLFrameElement where
-  pFromJSRef = HTMLFrameElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLFrameElement where
-  toJSRef = return . unHTMLFrameElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLFrameElement where
-  fromJSRef = return . fmap HTMLFrameElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLFrameElement
-instance IsElement HTMLFrameElement
-instance IsNode HTMLFrameElement
-instance IsEventTarget HTMLFrameElement
-instance IsGObject HTMLFrameElement where
-  toGObject = GObject . castRef . unHTMLFrameElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLFrameElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLFrameElement :: IsGObject obj => obj -> HTMLFrameElement
-castToHTMLFrameElement = castTo gTypeHTMLFrameElement "HTMLFrameElement"
-
-foreign import javascript unsafe "window[\"HTMLFrameElement\"]" gTypeHTMLFrameElement' :: JSRef GType
-gTypeHTMLFrameElement = GType gTypeHTMLFrameElement'
-#else
-type IsHTMLFrameElement o = HTMLFrameElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLFrameSetElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFrameSetElement Mozilla HTMLFrameSetElement documentation>
-newtype HTMLFrameSetElement = HTMLFrameSetElement { unHTMLFrameSetElement :: JSRef HTMLFrameSetElement }
-
-instance Eq (HTMLFrameSetElement) where
-  (HTMLFrameSetElement a) == (HTMLFrameSetElement b) = js_eq a b
-
-instance PToJSRef HTMLFrameSetElement where
-  pToJSRef = unHTMLFrameSetElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLFrameSetElement where
-  pFromJSRef = HTMLFrameSetElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLFrameSetElement where
-  toJSRef = return . unHTMLFrameSetElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLFrameSetElement where
-  fromJSRef = return . fmap HTMLFrameSetElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLFrameSetElement
-instance IsElement HTMLFrameSetElement
-instance IsNode HTMLFrameSetElement
-instance IsEventTarget HTMLFrameSetElement
-instance IsGObject HTMLFrameSetElement where
-  toGObject = GObject . castRef . unHTMLFrameSetElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLFrameSetElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLFrameSetElement :: IsGObject obj => obj -> HTMLFrameSetElement
-castToHTMLFrameSetElement = castTo gTypeHTMLFrameSetElement "HTMLFrameSetElement"
-
-foreign import javascript unsafe "window[\"HTMLFrameSetElement\"]" gTypeHTMLFrameSetElement' :: JSRef GType
-gTypeHTMLFrameSetElement = GType gTypeHTMLFrameSetElement'
-#else
-type IsHTMLFrameSetElement o = HTMLFrameSetElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLHRElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLHRElement Mozilla HTMLHRElement documentation>
-newtype HTMLHRElement = HTMLHRElement { unHTMLHRElement :: JSRef HTMLHRElement }
-
-instance Eq (HTMLHRElement) where
-  (HTMLHRElement a) == (HTMLHRElement b) = js_eq a b
-
-instance PToJSRef HTMLHRElement where
-  pToJSRef = unHTMLHRElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLHRElement where
-  pFromJSRef = HTMLHRElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLHRElement where
-  toJSRef = return . unHTMLHRElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLHRElement where
-  fromJSRef = return . fmap HTMLHRElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLHRElement
-instance IsElement HTMLHRElement
-instance IsNode HTMLHRElement
-instance IsEventTarget HTMLHRElement
-instance IsGObject HTMLHRElement where
-  toGObject = GObject . castRef . unHTMLHRElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLHRElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLHRElement :: IsGObject obj => obj -> HTMLHRElement
-castToHTMLHRElement = castTo gTypeHTMLHRElement "HTMLHRElement"
-
-foreign import javascript unsafe "window[\"HTMLHRElement\"]" gTypeHTMLHRElement' :: JSRef GType
-gTypeHTMLHRElement = GType gTypeHTMLHRElement'
-#else
-type IsHTMLHRElement o = HTMLHRElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLHeadElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLHeadElement Mozilla HTMLHeadElement documentation>
-newtype HTMLHeadElement = HTMLHeadElement { unHTMLHeadElement :: JSRef HTMLHeadElement }
-
-instance Eq (HTMLHeadElement) where
-  (HTMLHeadElement a) == (HTMLHeadElement b) = js_eq a b
-
-instance PToJSRef HTMLHeadElement where
-  pToJSRef = unHTMLHeadElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLHeadElement where
-  pFromJSRef = HTMLHeadElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLHeadElement where
-  toJSRef = return . unHTMLHeadElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLHeadElement where
-  fromJSRef = return . fmap HTMLHeadElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLHeadElement
-instance IsElement HTMLHeadElement
-instance IsNode HTMLHeadElement
-instance IsEventTarget HTMLHeadElement
-instance IsGObject HTMLHeadElement where
-  toGObject = GObject . castRef . unHTMLHeadElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLHeadElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLHeadElement :: IsGObject obj => obj -> HTMLHeadElement
-castToHTMLHeadElement = castTo gTypeHTMLHeadElement "HTMLHeadElement"
-
-foreign import javascript unsafe "window[\"HTMLHeadElement\"]" gTypeHTMLHeadElement' :: JSRef GType
-gTypeHTMLHeadElement = GType gTypeHTMLHeadElement'
-#else
-type IsHTMLHeadElement o = HTMLHeadElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLHeadingElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLHeadingElement Mozilla HTMLHeadingElement documentation>
-newtype HTMLHeadingElement = HTMLHeadingElement { unHTMLHeadingElement :: JSRef HTMLHeadingElement }
-
-instance Eq (HTMLHeadingElement) where
-  (HTMLHeadingElement a) == (HTMLHeadingElement b) = js_eq a b
-
-instance PToJSRef HTMLHeadingElement where
-  pToJSRef = unHTMLHeadingElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLHeadingElement where
-  pFromJSRef = HTMLHeadingElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLHeadingElement where
-  toJSRef = return . unHTMLHeadingElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLHeadingElement where
-  fromJSRef = return . fmap HTMLHeadingElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLHeadingElement
-instance IsElement HTMLHeadingElement
-instance IsNode HTMLHeadingElement
-instance IsEventTarget HTMLHeadingElement
-instance IsGObject HTMLHeadingElement where
-  toGObject = GObject . castRef . unHTMLHeadingElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLHeadingElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLHeadingElement :: IsGObject obj => obj -> HTMLHeadingElement
-castToHTMLHeadingElement = castTo gTypeHTMLHeadingElement "HTMLHeadingElement"
-
-foreign import javascript unsafe "window[\"HTMLHeadingElement\"]" gTypeHTMLHeadingElement' :: JSRef GType
-gTypeHTMLHeadingElement = GType gTypeHTMLHeadingElement'
-#else
-type IsHTMLHeadingElement o = HTMLHeadingElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLHtmlElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLHtmlElement Mozilla HTMLHtmlElement documentation>
-newtype HTMLHtmlElement = HTMLHtmlElement { unHTMLHtmlElement :: JSRef HTMLHtmlElement }
-
-instance Eq (HTMLHtmlElement) where
-  (HTMLHtmlElement a) == (HTMLHtmlElement b) = js_eq a b
-
-instance PToJSRef HTMLHtmlElement where
-  pToJSRef = unHTMLHtmlElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLHtmlElement where
-  pFromJSRef = HTMLHtmlElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLHtmlElement where
-  toJSRef = return . unHTMLHtmlElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLHtmlElement where
-  fromJSRef = return . fmap HTMLHtmlElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLHtmlElement
-instance IsElement HTMLHtmlElement
-instance IsNode HTMLHtmlElement
-instance IsEventTarget HTMLHtmlElement
-instance IsGObject HTMLHtmlElement where
-  toGObject = GObject . castRef . unHTMLHtmlElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLHtmlElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLHtmlElement :: IsGObject obj => obj -> HTMLHtmlElement
-castToHTMLHtmlElement = castTo gTypeHTMLHtmlElement "HTMLHtmlElement"
-
-foreign import javascript unsafe "window[\"HTMLHtmlElement\"]" gTypeHTMLHtmlElement' :: JSRef GType
-gTypeHTMLHtmlElement = GType gTypeHTMLHtmlElement'
-#else
-type IsHTMLHtmlElement o = HTMLHtmlElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLIFrameElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement Mozilla HTMLIFrameElement documentation>
-newtype HTMLIFrameElement = HTMLIFrameElement { unHTMLIFrameElement :: JSRef HTMLIFrameElement }
-
-instance Eq (HTMLIFrameElement) where
-  (HTMLIFrameElement a) == (HTMLIFrameElement b) = js_eq a b
-
-instance PToJSRef HTMLIFrameElement where
-  pToJSRef = unHTMLIFrameElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLIFrameElement where
-  pFromJSRef = HTMLIFrameElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLIFrameElement where
-  toJSRef = return . unHTMLIFrameElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLIFrameElement where
-  fromJSRef = return . fmap HTMLIFrameElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLIFrameElement
-instance IsElement HTMLIFrameElement
-instance IsNode HTMLIFrameElement
-instance IsEventTarget HTMLIFrameElement
-instance IsGObject HTMLIFrameElement where
-  toGObject = GObject . castRef . unHTMLIFrameElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLIFrameElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLIFrameElement :: IsGObject obj => obj -> HTMLIFrameElement
-castToHTMLIFrameElement = castTo gTypeHTMLIFrameElement "HTMLIFrameElement"
-
-foreign import javascript unsafe "window[\"HTMLIFrameElement\"]" gTypeHTMLIFrameElement' :: JSRef GType
-gTypeHTMLIFrameElement = GType gTypeHTMLIFrameElement'
-#else
-type IsHTMLIFrameElement o = HTMLIFrameElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLImageElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement Mozilla HTMLImageElement documentation>
-newtype HTMLImageElement = HTMLImageElement { unHTMLImageElement :: JSRef HTMLImageElement }
-
-instance Eq (HTMLImageElement) where
-  (HTMLImageElement a) == (HTMLImageElement b) = js_eq a b
-
-instance PToJSRef HTMLImageElement where
-  pToJSRef = unHTMLImageElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLImageElement where
-  pFromJSRef = HTMLImageElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLImageElement where
-  toJSRef = return . unHTMLImageElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLImageElement where
-  fromJSRef = return . fmap HTMLImageElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLImageElement
-instance IsElement HTMLImageElement
-instance IsNode HTMLImageElement
-instance IsEventTarget HTMLImageElement
-instance IsGObject HTMLImageElement where
-  toGObject = GObject . castRef . unHTMLImageElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLImageElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLImageElement :: IsGObject obj => obj -> HTMLImageElement
-castToHTMLImageElement = castTo gTypeHTMLImageElement "HTMLImageElement"
-
-foreign import javascript unsafe "window[\"HTMLImageElement\"]" gTypeHTMLImageElement' :: JSRef GType
-gTypeHTMLImageElement = GType gTypeHTMLImageElement'
-#else
-type IsHTMLImageElement o = HTMLImageElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLInputElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement Mozilla HTMLInputElement documentation>
-newtype HTMLInputElement = HTMLInputElement { unHTMLInputElement :: JSRef HTMLInputElement }
-
-instance Eq (HTMLInputElement) where
-  (HTMLInputElement a) == (HTMLInputElement b) = js_eq a b
-
-instance PToJSRef HTMLInputElement where
-  pToJSRef = unHTMLInputElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLInputElement where
-  pFromJSRef = HTMLInputElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLInputElement where
-  toJSRef = return . unHTMLInputElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLInputElement where
-  fromJSRef = return . fmap HTMLInputElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLInputElement
-instance IsElement HTMLInputElement
-instance IsNode HTMLInputElement
-instance IsEventTarget HTMLInputElement
-instance IsGObject HTMLInputElement where
-  toGObject = GObject . castRef . unHTMLInputElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLInputElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLInputElement :: IsGObject obj => obj -> HTMLInputElement
-castToHTMLInputElement = castTo gTypeHTMLInputElement "HTMLInputElement"
-
-foreign import javascript unsafe "window[\"HTMLInputElement\"]" gTypeHTMLInputElement' :: JSRef GType
-gTypeHTMLInputElement = GType gTypeHTMLInputElement'
-#else
-type IsHTMLInputElement o = HTMLInputElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLKeygenElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLKeygenElement Mozilla HTMLKeygenElement documentation>
-newtype HTMLKeygenElement = HTMLKeygenElement { unHTMLKeygenElement :: JSRef HTMLKeygenElement }
-
-instance Eq (HTMLKeygenElement) where
-  (HTMLKeygenElement a) == (HTMLKeygenElement b) = js_eq a b
-
-instance PToJSRef HTMLKeygenElement where
-  pToJSRef = unHTMLKeygenElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLKeygenElement where
-  pFromJSRef = HTMLKeygenElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLKeygenElement where
-  toJSRef = return . unHTMLKeygenElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLKeygenElement where
-  fromJSRef = return . fmap HTMLKeygenElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLKeygenElement
-instance IsElement HTMLKeygenElement
-instance IsNode HTMLKeygenElement
-instance IsEventTarget HTMLKeygenElement
-instance IsGObject HTMLKeygenElement where
-  toGObject = GObject . castRef . unHTMLKeygenElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLKeygenElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLKeygenElement :: IsGObject obj => obj -> HTMLKeygenElement
-castToHTMLKeygenElement = castTo gTypeHTMLKeygenElement "HTMLKeygenElement"
-
-foreign import javascript unsafe "window[\"HTMLKeygenElement\"]" gTypeHTMLKeygenElement' :: JSRef GType
-gTypeHTMLKeygenElement = GType gTypeHTMLKeygenElement'
-#else
-type IsHTMLKeygenElement o = HTMLKeygenElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLLIElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLLIElement Mozilla HTMLLIElement documentation>
-newtype HTMLLIElement = HTMLLIElement { unHTMLLIElement :: JSRef HTMLLIElement }
-
-instance Eq (HTMLLIElement) where
-  (HTMLLIElement a) == (HTMLLIElement b) = js_eq a b
-
-instance PToJSRef HTMLLIElement where
-  pToJSRef = unHTMLLIElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLLIElement where
-  pFromJSRef = HTMLLIElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLLIElement where
-  toJSRef = return . unHTMLLIElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLLIElement where
-  fromJSRef = return . fmap HTMLLIElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLLIElement
-instance IsElement HTMLLIElement
-instance IsNode HTMLLIElement
-instance IsEventTarget HTMLLIElement
-instance IsGObject HTMLLIElement where
-  toGObject = GObject . castRef . unHTMLLIElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLLIElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLLIElement :: IsGObject obj => obj -> HTMLLIElement
-castToHTMLLIElement = castTo gTypeHTMLLIElement "HTMLLIElement"
-
-foreign import javascript unsafe "window[\"HTMLLIElement\"]" gTypeHTMLLIElement' :: JSRef GType
-gTypeHTMLLIElement = GType gTypeHTMLLIElement'
-#else
-type IsHTMLLIElement o = HTMLLIElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLLabelElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLLabelElement Mozilla HTMLLabelElement documentation>
-newtype HTMLLabelElement = HTMLLabelElement { unHTMLLabelElement :: JSRef HTMLLabelElement }
-
-instance Eq (HTMLLabelElement) where
-  (HTMLLabelElement a) == (HTMLLabelElement b) = js_eq a b
-
-instance PToJSRef HTMLLabelElement where
-  pToJSRef = unHTMLLabelElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLLabelElement where
-  pFromJSRef = HTMLLabelElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLLabelElement where
-  toJSRef = return . unHTMLLabelElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLLabelElement where
-  fromJSRef = return . fmap HTMLLabelElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLLabelElement
-instance IsElement HTMLLabelElement
-instance IsNode HTMLLabelElement
-instance IsEventTarget HTMLLabelElement
-instance IsGObject HTMLLabelElement where
-  toGObject = GObject . castRef . unHTMLLabelElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLLabelElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLLabelElement :: IsGObject obj => obj -> HTMLLabelElement
-castToHTMLLabelElement = castTo gTypeHTMLLabelElement "HTMLLabelElement"
-
-foreign import javascript unsafe "window[\"HTMLLabelElement\"]" gTypeHTMLLabelElement' :: JSRef GType
-gTypeHTMLLabelElement = GType gTypeHTMLLabelElement'
-#else
-type IsHTMLLabelElement o = HTMLLabelElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLLegendElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLLegendElement Mozilla HTMLLegendElement documentation>
-newtype HTMLLegendElement = HTMLLegendElement { unHTMLLegendElement :: JSRef HTMLLegendElement }
-
-instance Eq (HTMLLegendElement) where
-  (HTMLLegendElement a) == (HTMLLegendElement b) = js_eq a b
-
-instance PToJSRef HTMLLegendElement where
-  pToJSRef = unHTMLLegendElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLLegendElement where
-  pFromJSRef = HTMLLegendElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLLegendElement where
-  toJSRef = return . unHTMLLegendElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLLegendElement where
-  fromJSRef = return . fmap HTMLLegendElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLLegendElement
-instance IsElement HTMLLegendElement
-instance IsNode HTMLLegendElement
-instance IsEventTarget HTMLLegendElement
-instance IsGObject HTMLLegendElement where
-  toGObject = GObject . castRef . unHTMLLegendElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLLegendElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLLegendElement :: IsGObject obj => obj -> HTMLLegendElement
-castToHTMLLegendElement = castTo gTypeHTMLLegendElement "HTMLLegendElement"
-
-foreign import javascript unsafe "window[\"HTMLLegendElement\"]" gTypeHTMLLegendElement' :: JSRef GType
-gTypeHTMLLegendElement = GType gTypeHTMLLegendElement'
-#else
-type IsHTMLLegendElement o = HTMLLegendElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLLinkElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLLinkElement Mozilla HTMLLinkElement documentation>
-newtype HTMLLinkElement = HTMLLinkElement { unHTMLLinkElement :: JSRef HTMLLinkElement }
-
-instance Eq (HTMLLinkElement) where
-  (HTMLLinkElement a) == (HTMLLinkElement b) = js_eq a b
-
-instance PToJSRef HTMLLinkElement where
-  pToJSRef = unHTMLLinkElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLLinkElement where
-  pFromJSRef = HTMLLinkElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLLinkElement where
-  toJSRef = return . unHTMLLinkElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLLinkElement where
-  fromJSRef = return . fmap HTMLLinkElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLLinkElement
-instance IsElement HTMLLinkElement
-instance IsNode HTMLLinkElement
-instance IsEventTarget HTMLLinkElement
-instance IsGObject HTMLLinkElement where
-  toGObject = GObject . castRef . unHTMLLinkElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLLinkElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLLinkElement :: IsGObject obj => obj -> HTMLLinkElement
-castToHTMLLinkElement = castTo gTypeHTMLLinkElement "HTMLLinkElement"
-
-foreign import javascript unsafe "window[\"HTMLLinkElement\"]" gTypeHTMLLinkElement' :: JSRef GType
-gTypeHTMLLinkElement = GType gTypeHTMLLinkElement'
-#else
-type IsHTMLLinkElement o = HTMLLinkElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLMapElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMapElement Mozilla HTMLMapElement documentation>
-newtype HTMLMapElement = HTMLMapElement { unHTMLMapElement :: JSRef HTMLMapElement }
-
-instance Eq (HTMLMapElement) where
-  (HTMLMapElement a) == (HTMLMapElement b) = js_eq a b
-
-instance PToJSRef HTMLMapElement where
-  pToJSRef = unHTMLMapElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLMapElement where
-  pFromJSRef = HTMLMapElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLMapElement where
-  toJSRef = return . unHTMLMapElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLMapElement where
-  fromJSRef = return . fmap HTMLMapElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLMapElement
-instance IsElement HTMLMapElement
-instance IsNode HTMLMapElement
-instance IsEventTarget HTMLMapElement
-instance IsGObject HTMLMapElement where
-  toGObject = GObject . castRef . unHTMLMapElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLMapElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLMapElement :: IsGObject obj => obj -> HTMLMapElement
-castToHTMLMapElement = castTo gTypeHTMLMapElement "HTMLMapElement"
-
-foreign import javascript unsafe "window[\"HTMLMapElement\"]" gTypeHTMLMapElement' :: JSRef GType
-gTypeHTMLMapElement = GType gTypeHTMLMapElement'
-#else
-type IsHTMLMapElement o = HTMLMapElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLMarqueeElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMarqueeElement Mozilla HTMLMarqueeElement documentation>
-newtype HTMLMarqueeElement = HTMLMarqueeElement { unHTMLMarqueeElement :: JSRef HTMLMarqueeElement }
-
-instance Eq (HTMLMarqueeElement) where
-  (HTMLMarqueeElement a) == (HTMLMarqueeElement b) = js_eq a b
-
-instance PToJSRef HTMLMarqueeElement where
-  pToJSRef = unHTMLMarqueeElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLMarqueeElement where
-  pFromJSRef = HTMLMarqueeElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLMarqueeElement where
-  toJSRef = return . unHTMLMarqueeElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLMarqueeElement where
-  fromJSRef = return . fmap HTMLMarqueeElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLMarqueeElement
-instance IsElement HTMLMarqueeElement
-instance IsNode HTMLMarqueeElement
-instance IsEventTarget HTMLMarqueeElement
-instance IsGObject HTMLMarqueeElement where
-  toGObject = GObject . castRef . unHTMLMarqueeElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLMarqueeElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLMarqueeElement :: IsGObject obj => obj -> HTMLMarqueeElement
-castToHTMLMarqueeElement = castTo gTypeHTMLMarqueeElement "HTMLMarqueeElement"
-
-foreign import javascript unsafe "window[\"HTMLMarqueeElement\"]" gTypeHTMLMarqueeElement' :: JSRef GType
-gTypeHTMLMarqueeElement = GType gTypeHTMLMarqueeElement'
-#else
-type IsHTMLMarqueeElement o = HTMLMarqueeElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLMediaElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement Mozilla HTMLMediaElement documentation>
-newtype HTMLMediaElement = HTMLMediaElement { unHTMLMediaElement :: JSRef HTMLMediaElement }
-
-instance Eq (HTMLMediaElement) where
-  (HTMLMediaElement a) == (HTMLMediaElement b) = js_eq a b
-
-instance PToJSRef HTMLMediaElement where
-  pToJSRef = unHTMLMediaElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLMediaElement where
-  pFromJSRef = HTMLMediaElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLMediaElement where
-  toJSRef = return . unHTMLMediaElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLMediaElement where
-  fromJSRef = return . fmap HTMLMediaElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsHTMLElement o => IsHTMLMediaElement o
-toHTMLMediaElement :: IsHTMLMediaElement o => o -> HTMLMediaElement
-toHTMLMediaElement = unsafeCastGObject . toGObject
-
-instance IsHTMLMediaElement HTMLMediaElement
-instance IsHTMLElement HTMLMediaElement
-instance IsElement HTMLMediaElement
-instance IsNode HTMLMediaElement
-instance IsEventTarget HTMLMediaElement
-instance IsGObject HTMLMediaElement where
-  toGObject = GObject . castRef . unHTMLMediaElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLMediaElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLMediaElement :: IsGObject obj => obj -> HTMLMediaElement
-castToHTMLMediaElement = castTo gTypeHTMLMediaElement "HTMLMediaElement"
-
-foreign import javascript unsafe "window[\"HTMLMediaElement\"]" gTypeHTMLMediaElement' :: JSRef GType
-gTypeHTMLMediaElement = GType gTypeHTMLMediaElement'
-#else
-type IsHTMLMediaElement o = HTMLMediaElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLMenuElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMenuElement Mozilla HTMLMenuElement documentation>
-newtype HTMLMenuElement = HTMLMenuElement { unHTMLMenuElement :: JSRef HTMLMenuElement }
-
-instance Eq (HTMLMenuElement) where
-  (HTMLMenuElement a) == (HTMLMenuElement b) = js_eq a b
-
-instance PToJSRef HTMLMenuElement where
-  pToJSRef = unHTMLMenuElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLMenuElement where
-  pFromJSRef = HTMLMenuElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLMenuElement where
-  toJSRef = return . unHTMLMenuElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLMenuElement where
-  fromJSRef = return . fmap HTMLMenuElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLMenuElement
-instance IsElement HTMLMenuElement
-instance IsNode HTMLMenuElement
-instance IsEventTarget HTMLMenuElement
-instance IsGObject HTMLMenuElement where
-  toGObject = GObject . castRef . unHTMLMenuElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLMenuElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLMenuElement :: IsGObject obj => obj -> HTMLMenuElement
-castToHTMLMenuElement = castTo gTypeHTMLMenuElement "HTMLMenuElement"
-
-foreign import javascript unsafe "window[\"HTMLMenuElement\"]" gTypeHTMLMenuElement' :: JSRef GType
-gTypeHTMLMenuElement = GType gTypeHTMLMenuElement'
-#else
-type IsHTMLMenuElement o = HTMLMenuElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLMetaElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMetaElement Mozilla HTMLMetaElement documentation>
-newtype HTMLMetaElement = HTMLMetaElement { unHTMLMetaElement :: JSRef HTMLMetaElement }
-
-instance Eq (HTMLMetaElement) where
-  (HTMLMetaElement a) == (HTMLMetaElement b) = js_eq a b
-
-instance PToJSRef HTMLMetaElement where
-  pToJSRef = unHTMLMetaElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLMetaElement where
-  pFromJSRef = HTMLMetaElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLMetaElement where
-  toJSRef = return . unHTMLMetaElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLMetaElement where
-  fromJSRef = return . fmap HTMLMetaElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLMetaElement
-instance IsElement HTMLMetaElement
-instance IsNode HTMLMetaElement
-instance IsEventTarget HTMLMetaElement
-instance IsGObject HTMLMetaElement where
-  toGObject = GObject . castRef . unHTMLMetaElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLMetaElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLMetaElement :: IsGObject obj => obj -> HTMLMetaElement
-castToHTMLMetaElement = castTo gTypeHTMLMetaElement "HTMLMetaElement"
-
-foreign import javascript unsafe "window[\"HTMLMetaElement\"]" gTypeHTMLMetaElement' :: JSRef GType
-gTypeHTMLMetaElement = GType gTypeHTMLMetaElement'
-#else
-type IsHTMLMetaElement o = HTMLMetaElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLMeterElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMeterElement Mozilla HTMLMeterElement documentation>
-newtype HTMLMeterElement = HTMLMeterElement { unHTMLMeterElement :: JSRef HTMLMeterElement }
-
-instance Eq (HTMLMeterElement) where
-  (HTMLMeterElement a) == (HTMLMeterElement b) = js_eq a b
-
-instance PToJSRef HTMLMeterElement where
-  pToJSRef = unHTMLMeterElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLMeterElement where
-  pFromJSRef = HTMLMeterElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLMeterElement where
-  toJSRef = return . unHTMLMeterElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLMeterElement where
-  fromJSRef = return . fmap HTMLMeterElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLMeterElement
-instance IsElement HTMLMeterElement
-instance IsNode HTMLMeterElement
-instance IsEventTarget HTMLMeterElement
-instance IsGObject HTMLMeterElement where
-  toGObject = GObject . castRef . unHTMLMeterElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLMeterElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLMeterElement :: IsGObject obj => obj -> HTMLMeterElement
-castToHTMLMeterElement = castTo gTypeHTMLMeterElement "HTMLMeterElement"
-
-foreign import javascript unsafe "window[\"HTMLMeterElement\"]" gTypeHTMLMeterElement' :: JSRef GType
-gTypeHTMLMeterElement = GType gTypeHTMLMeterElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLModElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLModElement Mozilla HTMLModElement documentation>
-newtype HTMLModElement = HTMLModElement { unHTMLModElement :: JSRef HTMLModElement }
-
-instance Eq (HTMLModElement) where
-  (HTMLModElement a) == (HTMLModElement b) = js_eq a b
-
-instance PToJSRef HTMLModElement where
-  pToJSRef = unHTMLModElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLModElement where
-  pFromJSRef = HTMLModElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLModElement where
-  toJSRef = return . unHTMLModElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLModElement where
-  fromJSRef = return . fmap HTMLModElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLModElement
-instance IsElement HTMLModElement
-instance IsNode HTMLModElement
-instance IsEventTarget HTMLModElement
-instance IsGObject HTMLModElement where
-  toGObject = GObject . castRef . unHTMLModElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLModElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLModElement :: IsGObject obj => obj -> HTMLModElement
-castToHTMLModElement = castTo gTypeHTMLModElement "HTMLModElement"
-
-foreign import javascript unsafe "window[\"HTMLModElement\"]" gTypeHTMLModElement' :: JSRef GType
-gTypeHTMLModElement = GType gTypeHTMLModElement'
-#else
-type IsHTMLModElement o = HTMLModElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLOListElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOListElement Mozilla HTMLOListElement documentation>
-newtype HTMLOListElement = HTMLOListElement { unHTMLOListElement :: JSRef HTMLOListElement }
-
-instance Eq (HTMLOListElement) where
-  (HTMLOListElement a) == (HTMLOListElement b) = js_eq a b
-
-instance PToJSRef HTMLOListElement where
-  pToJSRef = unHTMLOListElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLOListElement where
-  pFromJSRef = HTMLOListElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLOListElement where
-  toJSRef = return . unHTMLOListElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLOListElement where
-  fromJSRef = return . fmap HTMLOListElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLOListElement
-instance IsElement HTMLOListElement
-instance IsNode HTMLOListElement
-instance IsEventTarget HTMLOListElement
-instance IsGObject HTMLOListElement where
-  toGObject = GObject . castRef . unHTMLOListElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLOListElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLOListElement :: IsGObject obj => obj -> HTMLOListElement
-castToHTMLOListElement = castTo gTypeHTMLOListElement "HTMLOListElement"
-
-foreign import javascript unsafe "window[\"HTMLOListElement\"]" gTypeHTMLOListElement' :: JSRef GType
-gTypeHTMLOListElement = GType gTypeHTMLOListElement'
-#else
-type IsHTMLOListElement o = HTMLOListElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLObjectElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLObjectElement Mozilla HTMLObjectElement documentation>
-newtype HTMLObjectElement = HTMLObjectElement { unHTMLObjectElement :: JSRef HTMLObjectElement }
-
-instance Eq (HTMLObjectElement) where
-  (HTMLObjectElement a) == (HTMLObjectElement b) = js_eq a b
-
-instance PToJSRef HTMLObjectElement where
-  pToJSRef = unHTMLObjectElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLObjectElement where
-  pFromJSRef = HTMLObjectElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLObjectElement where
-  toJSRef = return . unHTMLObjectElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLObjectElement where
-  fromJSRef = return . fmap HTMLObjectElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLObjectElement
-instance IsElement HTMLObjectElement
-instance IsNode HTMLObjectElement
-instance IsEventTarget HTMLObjectElement
-instance IsGObject HTMLObjectElement where
-  toGObject = GObject . castRef . unHTMLObjectElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLObjectElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLObjectElement :: IsGObject obj => obj -> HTMLObjectElement
-castToHTMLObjectElement = castTo gTypeHTMLObjectElement "HTMLObjectElement"
-
-foreign import javascript unsafe "window[\"HTMLObjectElement\"]" gTypeHTMLObjectElement' :: JSRef GType
-gTypeHTMLObjectElement = GType gTypeHTMLObjectElement'
-#else
-type IsHTMLObjectElement o = HTMLObjectElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLOptGroupElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOptGroupElement Mozilla HTMLOptGroupElement documentation>
-newtype HTMLOptGroupElement = HTMLOptGroupElement { unHTMLOptGroupElement :: JSRef HTMLOptGroupElement }
-
-instance Eq (HTMLOptGroupElement) where
-  (HTMLOptGroupElement a) == (HTMLOptGroupElement b) = js_eq a b
-
-instance PToJSRef HTMLOptGroupElement where
-  pToJSRef = unHTMLOptGroupElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLOptGroupElement where
-  pFromJSRef = HTMLOptGroupElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLOptGroupElement where
-  toJSRef = return . unHTMLOptGroupElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLOptGroupElement where
-  fromJSRef = return . fmap HTMLOptGroupElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLOptGroupElement
-instance IsElement HTMLOptGroupElement
-instance IsNode HTMLOptGroupElement
-instance IsEventTarget HTMLOptGroupElement
-instance IsGObject HTMLOptGroupElement where
-  toGObject = GObject . castRef . unHTMLOptGroupElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLOptGroupElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLOptGroupElement :: IsGObject obj => obj -> HTMLOptGroupElement
-castToHTMLOptGroupElement = castTo gTypeHTMLOptGroupElement "HTMLOptGroupElement"
-
-foreign import javascript unsafe "window[\"HTMLOptGroupElement\"]" gTypeHTMLOptGroupElement' :: JSRef GType
-gTypeHTMLOptGroupElement = GType gTypeHTMLOptGroupElement'
-#else
-type IsHTMLOptGroupElement o = HTMLOptGroupElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLOptionElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOptionElement Mozilla HTMLOptionElement documentation>
-newtype HTMLOptionElement = HTMLOptionElement { unHTMLOptionElement :: JSRef HTMLOptionElement }
-
-instance Eq (HTMLOptionElement) where
-  (HTMLOptionElement a) == (HTMLOptionElement b) = js_eq a b
-
-instance PToJSRef HTMLOptionElement where
-  pToJSRef = unHTMLOptionElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLOptionElement where
-  pFromJSRef = HTMLOptionElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLOptionElement where
-  toJSRef = return . unHTMLOptionElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLOptionElement where
-  fromJSRef = return . fmap HTMLOptionElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLOptionElement
-instance IsElement HTMLOptionElement
-instance IsNode HTMLOptionElement
-instance IsEventTarget HTMLOptionElement
-instance IsGObject HTMLOptionElement where
-  toGObject = GObject . castRef . unHTMLOptionElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLOptionElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLOptionElement :: IsGObject obj => obj -> HTMLOptionElement
-castToHTMLOptionElement = castTo gTypeHTMLOptionElement "HTMLOptionElement"
-
-foreign import javascript unsafe "window[\"HTMLOptionElement\"]" gTypeHTMLOptionElement' :: JSRef GType
-gTypeHTMLOptionElement = GType gTypeHTMLOptionElement'
-#else
-type IsHTMLOptionElement o = HTMLOptionElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLOptionsCollection".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLCollection"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOptionsCollection Mozilla HTMLOptionsCollection documentation>
-newtype HTMLOptionsCollection = HTMLOptionsCollection { unHTMLOptionsCollection :: JSRef HTMLOptionsCollection }
-
-instance Eq (HTMLOptionsCollection) where
-  (HTMLOptionsCollection a) == (HTMLOptionsCollection b) = js_eq a b
-
-instance PToJSRef HTMLOptionsCollection where
-  pToJSRef = unHTMLOptionsCollection
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLOptionsCollection where
-  pFromJSRef = HTMLOptionsCollection
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLOptionsCollection where
-  toJSRef = return . unHTMLOptionsCollection
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLOptionsCollection where
-  fromJSRef = return . fmap HTMLOptionsCollection . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLCollection HTMLOptionsCollection
-instance IsGObject HTMLOptionsCollection where
-  toGObject = GObject . castRef . unHTMLOptionsCollection
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLOptionsCollection . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLOptionsCollection :: IsGObject obj => obj -> HTMLOptionsCollection
-castToHTMLOptionsCollection = castTo gTypeHTMLOptionsCollection "HTMLOptionsCollection"
-
-foreign import javascript unsafe "window[\"HTMLOptionsCollection\"]" gTypeHTMLOptionsCollection' :: JSRef GType
-gTypeHTMLOptionsCollection = GType gTypeHTMLOptionsCollection'
-#else
-type IsHTMLOptionsCollection o = HTMLOptionsCollectionClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLOutputElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOutputElement Mozilla HTMLOutputElement documentation>
-newtype HTMLOutputElement = HTMLOutputElement { unHTMLOutputElement :: JSRef HTMLOutputElement }
-
-instance Eq (HTMLOutputElement) where
-  (HTMLOutputElement a) == (HTMLOutputElement b) = js_eq a b
-
-instance PToJSRef HTMLOutputElement where
-  pToJSRef = unHTMLOutputElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLOutputElement where
-  pFromJSRef = HTMLOutputElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLOutputElement where
-  toJSRef = return . unHTMLOutputElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLOutputElement where
-  fromJSRef = return . fmap HTMLOutputElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLOutputElement
-instance IsElement HTMLOutputElement
-instance IsNode HTMLOutputElement
-instance IsEventTarget HTMLOutputElement
-instance IsGObject HTMLOutputElement where
-  toGObject = GObject . castRef . unHTMLOutputElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLOutputElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLOutputElement :: IsGObject obj => obj -> HTMLOutputElement
-castToHTMLOutputElement = castTo gTypeHTMLOutputElement "HTMLOutputElement"
-
-foreign import javascript unsafe "window[\"HTMLOutputElement\"]" gTypeHTMLOutputElement' :: JSRef GType
-gTypeHTMLOutputElement = GType gTypeHTMLOutputElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLParagraphElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLParagraphElement Mozilla HTMLParagraphElement documentation>
-newtype HTMLParagraphElement = HTMLParagraphElement { unHTMLParagraphElement :: JSRef HTMLParagraphElement }
-
-instance Eq (HTMLParagraphElement) where
-  (HTMLParagraphElement a) == (HTMLParagraphElement b) = js_eq a b
-
-instance PToJSRef HTMLParagraphElement where
-  pToJSRef = unHTMLParagraphElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLParagraphElement where
-  pFromJSRef = HTMLParagraphElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLParagraphElement where
-  toJSRef = return . unHTMLParagraphElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLParagraphElement where
-  fromJSRef = return . fmap HTMLParagraphElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLParagraphElement
-instance IsElement HTMLParagraphElement
-instance IsNode HTMLParagraphElement
-instance IsEventTarget HTMLParagraphElement
-instance IsGObject HTMLParagraphElement where
-  toGObject = GObject . castRef . unHTMLParagraphElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLParagraphElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLParagraphElement :: IsGObject obj => obj -> HTMLParagraphElement
-castToHTMLParagraphElement = castTo gTypeHTMLParagraphElement "HTMLParagraphElement"
-
-foreign import javascript unsafe "window[\"HTMLParagraphElement\"]" gTypeHTMLParagraphElement' :: JSRef GType
-gTypeHTMLParagraphElement = GType gTypeHTMLParagraphElement'
-#else
-type IsHTMLParagraphElement o = HTMLParagraphElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLParamElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLParamElement Mozilla HTMLParamElement documentation>
-newtype HTMLParamElement = HTMLParamElement { unHTMLParamElement :: JSRef HTMLParamElement }
-
-instance Eq (HTMLParamElement) where
-  (HTMLParamElement a) == (HTMLParamElement b) = js_eq a b
-
-instance PToJSRef HTMLParamElement where
-  pToJSRef = unHTMLParamElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLParamElement where
-  pFromJSRef = HTMLParamElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLParamElement where
-  toJSRef = return . unHTMLParamElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLParamElement where
-  fromJSRef = return . fmap HTMLParamElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLParamElement
-instance IsElement HTMLParamElement
-instance IsNode HTMLParamElement
-instance IsEventTarget HTMLParamElement
-instance IsGObject HTMLParamElement where
-  toGObject = GObject . castRef . unHTMLParamElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLParamElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLParamElement :: IsGObject obj => obj -> HTMLParamElement
-castToHTMLParamElement = castTo gTypeHTMLParamElement "HTMLParamElement"
-
-foreign import javascript unsafe "window[\"HTMLParamElement\"]" gTypeHTMLParamElement' :: JSRef GType
-gTypeHTMLParamElement = GType gTypeHTMLParamElement'
-#else
-type IsHTMLParamElement o = HTMLParamElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLPreElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLPreElement Mozilla HTMLPreElement documentation>
-newtype HTMLPreElement = HTMLPreElement { unHTMLPreElement :: JSRef HTMLPreElement }
-
-instance Eq (HTMLPreElement) where
-  (HTMLPreElement a) == (HTMLPreElement b) = js_eq a b
-
-instance PToJSRef HTMLPreElement where
-  pToJSRef = unHTMLPreElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLPreElement where
-  pFromJSRef = HTMLPreElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLPreElement where
-  toJSRef = return . unHTMLPreElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLPreElement where
-  fromJSRef = return . fmap HTMLPreElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLPreElement
-instance IsElement HTMLPreElement
-instance IsNode HTMLPreElement
-instance IsEventTarget HTMLPreElement
-instance IsGObject HTMLPreElement where
-  toGObject = GObject . castRef . unHTMLPreElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLPreElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLPreElement :: IsGObject obj => obj -> HTMLPreElement
-castToHTMLPreElement = castTo gTypeHTMLPreElement "HTMLPreElement"
-
-foreign import javascript unsafe "window[\"HTMLPreElement\"]" gTypeHTMLPreElement' :: JSRef GType
-gTypeHTMLPreElement = GType gTypeHTMLPreElement'
-#else
-type IsHTMLPreElement o = HTMLPreElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLProgressElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLProgressElement Mozilla HTMLProgressElement documentation>
-newtype HTMLProgressElement = HTMLProgressElement { unHTMLProgressElement :: JSRef HTMLProgressElement }
-
-instance Eq (HTMLProgressElement) where
-  (HTMLProgressElement a) == (HTMLProgressElement b) = js_eq a b
-
-instance PToJSRef HTMLProgressElement where
-  pToJSRef = unHTMLProgressElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLProgressElement where
-  pFromJSRef = HTMLProgressElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLProgressElement where
-  toJSRef = return . unHTMLProgressElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLProgressElement where
-  fromJSRef = return . fmap HTMLProgressElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLProgressElement
-instance IsElement HTMLProgressElement
-instance IsNode HTMLProgressElement
-instance IsEventTarget HTMLProgressElement
-instance IsGObject HTMLProgressElement where
-  toGObject = GObject . castRef . unHTMLProgressElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLProgressElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLProgressElement :: IsGObject obj => obj -> HTMLProgressElement
-castToHTMLProgressElement = castTo gTypeHTMLProgressElement "HTMLProgressElement"
-
-foreign import javascript unsafe "window[\"HTMLProgressElement\"]" gTypeHTMLProgressElement' :: JSRef GType
-gTypeHTMLProgressElement = GType gTypeHTMLProgressElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLQuoteElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLQuoteElement Mozilla HTMLQuoteElement documentation>
-newtype HTMLQuoteElement = HTMLQuoteElement { unHTMLQuoteElement :: JSRef HTMLQuoteElement }
-
-instance Eq (HTMLQuoteElement) where
-  (HTMLQuoteElement a) == (HTMLQuoteElement b) = js_eq a b
-
-instance PToJSRef HTMLQuoteElement where
-  pToJSRef = unHTMLQuoteElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLQuoteElement where
-  pFromJSRef = HTMLQuoteElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLQuoteElement where
-  toJSRef = return . unHTMLQuoteElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLQuoteElement where
-  fromJSRef = return . fmap HTMLQuoteElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLQuoteElement
-instance IsElement HTMLQuoteElement
-instance IsNode HTMLQuoteElement
-instance IsEventTarget HTMLQuoteElement
-instance IsGObject HTMLQuoteElement where
-  toGObject = GObject . castRef . unHTMLQuoteElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLQuoteElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLQuoteElement :: IsGObject obj => obj -> HTMLQuoteElement
-castToHTMLQuoteElement = castTo gTypeHTMLQuoteElement "HTMLQuoteElement"
-
-foreign import javascript unsafe "window[\"HTMLQuoteElement\"]" gTypeHTMLQuoteElement' :: JSRef GType
-gTypeHTMLQuoteElement = GType gTypeHTMLQuoteElement'
-#else
-type IsHTMLQuoteElement o = HTMLQuoteElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLScriptElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLScriptElement Mozilla HTMLScriptElement documentation>
-newtype HTMLScriptElement = HTMLScriptElement { unHTMLScriptElement :: JSRef HTMLScriptElement }
-
-instance Eq (HTMLScriptElement) where
-  (HTMLScriptElement a) == (HTMLScriptElement b) = js_eq a b
-
-instance PToJSRef HTMLScriptElement where
-  pToJSRef = unHTMLScriptElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLScriptElement where
-  pFromJSRef = HTMLScriptElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLScriptElement where
-  toJSRef = return . unHTMLScriptElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLScriptElement where
-  fromJSRef = return . fmap HTMLScriptElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLScriptElement
-instance IsElement HTMLScriptElement
-instance IsNode HTMLScriptElement
-instance IsEventTarget HTMLScriptElement
-instance IsGObject HTMLScriptElement where
-  toGObject = GObject . castRef . unHTMLScriptElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLScriptElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLScriptElement :: IsGObject obj => obj -> HTMLScriptElement
-castToHTMLScriptElement = castTo gTypeHTMLScriptElement "HTMLScriptElement"
-
-foreign import javascript unsafe "window[\"HTMLScriptElement\"]" gTypeHTMLScriptElement' :: JSRef GType
-gTypeHTMLScriptElement = GType gTypeHTMLScriptElement'
-#else
-type IsHTMLScriptElement o = HTMLScriptElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLSelectElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement Mozilla HTMLSelectElement documentation>
-newtype HTMLSelectElement = HTMLSelectElement { unHTMLSelectElement :: JSRef HTMLSelectElement }
-
-instance Eq (HTMLSelectElement) where
-  (HTMLSelectElement a) == (HTMLSelectElement b) = js_eq a b
-
-instance PToJSRef HTMLSelectElement where
-  pToJSRef = unHTMLSelectElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLSelectElement where
-  pFromJSRef = HTMLSelectElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLSelectElement where
-  toJSRef = return . unHTMLSelectElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLSelectElement where
-  fromJSRef = return . fmap HTMLSelectElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLSelectElement
-instance IsElement HTMLSelectElement
-instance IsNode HTMLSelectElement
-instance IsEventTarget HTMLSelectElement
-instance IsGObject HTMLSelectElement where
-  toGObject = GObject . castRef . unHTMLSelectElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLSelectElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLSelectElement :: IsGObject obj => obj -> HTMLSelectElement
-castToHTMLSelectElement = castTo gTypeHTMLSelectElement "HTMLSelectElement"
-
-foreign import javascript unsafe "window[\"HTMLSelectElement\"]" gTypeHTMLSelectElement' :: JSRef GType
-gTypeHTMLSelectElement = GType gTypeHTMLSelectElement'
-#else
-type IsHTMLSelectElement o = HTMLSelectElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLSourceElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLSourceElement Mozilla HTMLSourceElement documentation>
-newtype HTMLSourceElement = HTMLSourceElement { unHTMLSourceElement :: JSRef HTMLSourceElement }
-
-instance Eq (HTMLSourceElement) where
-  (HTMLSourceElement a) == (HTMLSourceElement b) = js_eq a b
-
-instance PToJSRef HTMLSourceElement where
-  pToJSRef = unHTMLSourceElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLSourceElement where
-  pFromJSRef = HTMLSourceElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLSourceElement where
-  toJSRef = return . unHTMLSourceElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLSourceElement where
-  fromJSRef = return . fmap HTMLSourceElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLSourceElement
-instance IsElement HTMLSourceElement
-instance IsNode HTMLSourceElement
-instance IsEventTarget HTMLSourceElement
-instance IsGObject HTMLSourceElement where
-  toGObject = GObject . castRef . unHTMLSourceElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLSourceElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLSourceElement :: IsGObject obj => obj -> HTMLSourceElement
-castToHTMLSourceElement = castTo gTypeHTMLSourceElement "HTMLSourceElement"
-
-foreign import javascript unsafe "window[\"HTMLSourceElement\"]" gTypeHTMLSourceElement' :: JSRef GType
-gTypeHTMLSourceElement = GType gTypeHTMLSourceElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLSpanElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLSpanElement Mozilla HTMLSpanElement documentation>
-newtype HTMLSpanElement = HTMLSpanElement { unHTMLSpanElement :: JSRef HTMLSpanElement }
-
-instance Eq (HTMLSpanElement) where
-  (HTMLSpanElement a) == (HTMLSpanElement b) = js_eq a b
-
-instance PToJSRef HTMLSpanElement where
-  pToJSRef = unHTMLSpanElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLSpanElement where
-  pFromJSRef = HTMLSpanElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLSpanElement where
-  toJSRef = return . unHTMLSpanElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLSpanElement where
-  fromJSRef = return . fmap HTMLSpanElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLSpanElement
-instance IsElement HTMLSpanElement
-instance IsNode HTMLSpanElement
-instance IsEventTarget HTMLSpanElement
-instance IsGObject HTMLSpanElement where
-  toGObject = GObject . castRef . unHTMLSpanElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLSpanElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLSpanElement :: IsGObject obj => obj -> HTMLSpanElement
-castToHTMLSpanElement = castTo gTypeHTMLSpanElement "HTMLSpanElement"
-
-foreign import javascript unsafe "window[\"HTMLSpanElement\"]" gTypeHTMLSpanElement' :: JSRef GType
-gTypeHTMLSpanElement = GType gTypeHTMLSpanElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLStyleElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLStyleElement Mozilla HTMLStyleElement documentation>
-newtype HTMLStyleElement = HTMLStyleElement { unHTMLStyleElement :: JSRef HTMLStyleElement }
-
-instance Eq (HTMLStyleElement) where
-  (HTMLStyleElement a) == (HTMLStyleElement b) = js_eq a b
-
-instance PToJSRef HTMLStyleElement where
-  pToJSRef = unHTMLStyleElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLStyleElement where
-  pFromJSRef = HTMLStyleElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLStyleElement where
-  toJSRef = return . unHTMLStyleElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLStyleElement where
-  fromJSRef = return . fmap HTMLStyleElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLStyleElement
-instance IsElement HTMLStyleElement
-instance IsNode HTMLStyleElement
-instance IsEventTarget HTMLStyleElement
-instance IsGObject HTMLStyleElement where
-  toGObject = GObject . castRef . unHTMLStyleElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLStyleElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLStyleElement :: IsGObject obj => obj -> HTMLStyleElement
-castToHTMLStyleElement = castTo gTypeHTMLStyleElement "HTMLStyleElement"
-
-foreign import javascript unsafe "window[\"HTMLStyleElement\"]" gTypeHTMLStyleElement' :: JSRef GType
-gTypeHTMLStyleElement = GType gTypeHTMLStyleElement'
-#else
-type IsHTMLStyleElement o = HTMLStyleElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLTableCaptionElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableCaptionElement Mozilla HTMLTableCaptionElement documentation>
-newtype HTMLTableCaptionElement = HTMLTableCaptionElement { unHTMLTableCaptionElement :: JSRef HTMLTableCaptionElement }
-
-instance Eq (HTMLTableCaptionElement) where
-  (HTMLTableCaptionElement a) == (HTMLTableCaptionElement b) = js_eq a b
-
-instance PToJSRef HTMLTableCaptionElement where
-  pToJSRef = unHTMLTableCaptionElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLTableCaptionElement where
-  pFromJSRef = HTMLTableCaptionElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLTableCaptionElement where
-  toJSRef = return . unHTMLTableCaptionElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLTableCaptionElement where
-  fromJSRef = return . fmap HTMLTableCaptionElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLTableCaptionElement
-instance IsElement HTMLTableCaptionElement
-instance IsNode HTMLTableCaptionElement
-instance IsEventTarget HTMLTableCaptionElement
-instance IsGObject HTMLTableCaptionElement where
-  toGObject = GObject . castRef . unHTMLTableCaptionElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLTableCaptionElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLTableCaptionElement :: IsGObject obj => obj -> HTMLTableCaptionElement
-castToHTMLTableCaptionElement = castTo gTypeHTMLTableCaptionElement "HTMLTableCaptionElement"
-
-foreign import javascript unsafe "window[\"HTMLTableCaptionElement\"]" gTypeHTMLTableCaptionElement' :: JSRef GType
-gTypeHTMLTableCaptionElement = GType gTypeHTMLTableCaptionElement'
-#else
-type IsHTMLTableCaptionElement o = HTMLTableCaptionElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLTableCellElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableCellElement Mozilla HTMLTableCellElement documentation>
-newtype HTMLTableCellElement = HTMLTableCellElement { unHTMLTableCellElement :: JSRef HTMLTableCellElement }
-
-instance Eq (HTMLTableCellElement) where
-  (HTMLTableCellElement a) == (HTMLTableCellElement b) = js_eq a b
-
-instance PToJSRef HTMLTableCellElement where
-  pToJSRef = unHTMLTableCellElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLTableCellElement where
-  pFromJSRef = HTMLTableCellElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLTableCellElement where
-  toJSRef = return . unHTMLTableCellElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLTableCellElement where
-  fromJSRef = return . fmap HTMLTableCellElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLTableCellElement
-instance IsElement HTMLTableCellElement
-instance IsNode HTMLTableCellElement
-instance IsEventTarget HTMLTableCellElement
-instance IsGObject HTMLTableCellElement where
-  toGObject = GObject . castRef . unHTMLTableCellElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLTableCellElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLTableCellElement :: IsGObject obj => obj -> HTMLTableCellElement
-castToHTMLTableCellElement = castTo gTypeHTMLTableCellElement "HTMLTableCellElement"
-
-foreign import javascript unsafe "window[\"HTMLTableCellElement\"]" gTypeHTMLTableCellElement' :: JSRef GType
-gTypeHTMLTableCellElement = GType gTypeHTMLTableCellElement'
-#else
-type IsHTMLTableCellElement o = HTMLTableCellElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLTableColElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableColElement Mozilla HTMLTableColElement documentation>
-newtype HTMLTableColElement = HTMLTableColElement { unHTMLTableColElement :: JSRef HTMLTableColElement }
-
-instance Eq (HTMLTableColElement) where
-  (HTMLTableColElement a) == (HTMLTableColElement b) = js_eq a b
-
-instance PToJSRef HTMLTableColElement where
-  pToJSRef = unHTMLTableColElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLTableColElement where
-  pFromJSRef = HTMLTableColElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLTableColElement where
-  toJSRef = return . unHTMLTableColElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLTableColElement where
-  fromJSRef = return . fmap HTMLTableColElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLTableColElement
-instance IsElement HTMLTableColElement
-instance IsNode HTMLTableColElement
-instance IsEventTarget HTMLTableColElement
-instance IsGObject HTMLTableColElement where
-  toGObject = GObject . castRef . unHTMLTableColElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLTableColElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLTableColElement :: IsGObject obj => obj -> HTMLTableColElement
-castToHTMLTableColElement = castTo gTypeHTMLTableColElement "HTMLTableColElement"
-
-foreign import javascript unsafe "window[\"HTMLTableColElement\"]" gTypeHTMLTableColElement' :: JSRef GType
-gTypeHTMLTableColElement = GType gTypeHTMLTableColElement'
-#else
-type IsHTMLTableColElement o = HTMLTableColElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLTableElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableElement Mozilla HTMLTableElement documentation>
-newtype HTMLTableElement = HTMLTableElement { unHTMLTableElement :: JSRef HTMLTableElement }
-
-instance Eq (HTMLTableElement) where
-  (HTMLTableElement a) == (HTMLTableElement b) = js_eq a b
-
-instance PToJSRef HTMLTableElement where
-  pToJSRef = unHTMLTableElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLTableElement where
-  pFromJSRef = HTMLTableElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLTableElement where
-  toJSRef = return . unHTMLTableElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLTableElement where
-  fromJSRef = return . fmap HTMLTableElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLTableElement
-instance IsElement HTMLTableElement
-instance IsNode HTMLTableElement
-instance IsEventTarget HTMLTableElement
-instance IsGObject HTMLTableElement where
-  toGObject = GObject . castRef . unHTMLTableElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLTableElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLTableElement :: IsGObject obj => obj -> HTMLTableElement
-castToHTMLTableElement = castTo gTypeHTMLTableElement "HTMLTableElement"
-
-foreign import javascript unsafe "window[\"HTMLTableElement\"]" gTypeHTMLTableElement' :: JSRef GType
-gTypeHTMLTableElement = GType gTypeHTMLTableElement'
-#else
-type IsHTMLTableElement o = HTMLTableElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLTableRowElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableRowElement Mozilla HTMLTableRowElement documentation>
-newtype HTMLTableRowElement = HTMLTableRowElement { unHTMLTableRowElement :: JSRef HTMLTableRowElement }
-
-instance Eq (HTMLTableRowElement) where
-  (HTMLTableRowElement a) == (HTMLTableRowElement b) = js_eq a b
-
-instance PToJSRef HTMLTableRowElement where
-  pToJSRef = unHTMLTableRowElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLTableRowElement where
-  pFromJSRef = HTMLTableRowElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLTableRowElement where
-  toJSRef = return . unHTMLTableRowElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLTableRowElement where
-  fromJSRef = return . fmap HTMLTableRowElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLTableRowElement
-instance IsElement HTMLTableRowElement
-instance IsNode HTMLTableRowElement
-instance IsEventTarget HTMLTableRowElement
-instance IsGObject HTMLTableRowElement where
-  toGObject = GObject . castRef . unHTMLTableRowElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLTableRowElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLTableRowElement :: IsGObject obj => obj -> HTMLTableRowElement
-castToHTMLTableRowElement = castTo gTypeHTMLTableRowElement "HTMLTableRowElement"
-
-foreign import javascript unsafe "window[\"HTMLTableRowElement\"]" gTypeHTMLTableRowElement' :: JSRef GType
-gTypeHTMLTableRowElement = GType gTypeHTMLTableRowElement'
-#else
-type IsHTMLTableRowElement o = HTMLTableRowElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLTableSectionElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableSectionElement Mozilla HTMLTableSectionElement documentation>
-newtype HTMLTableSectionElement = HTMLTableSectionElement { unHTMLTableSectionElement :: JSRef HTMLTableSectionElement }
-
-instance Eq (HTMLTableSectionElement) where
-  (HTMLTableSectionElement a) == (HTMLTableSectionElement b) = js_eq a b
-
-instance PToJSRef HTMLTableSectionElement where
-  pToJSRef = unHTMLTableSectionElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLTableSectionElement where
-  pFromJSRef = HTMLTableSectionElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLTableSectionElement where
-  toJSRef = return . unHTMLTableSectionElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLTableSectionElement where
-  fromJSRef = return . fmap HTMLTableSectionElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLTableSectionElement
-instance IsElement HTMLTableSectionElement
-instance IsNode HTMLTableSectionElement
-instance IsEventTarget HTMLTableSectionElement
-instance IsGObject HTMLTableSectionElement where
-  toGObject = GObject . castRef . unHTMLTableSectionElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLTableSectionElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLTableSectionElement :: IsGObject obj => obj -> HTMLTableSectionElement
-castToHTMLTableSectionElement = castTo gTypeHTMLTableSectionElement "HTMLTableSectionElement"
-
-foreign import javascript unsafe "window[\"HTMLTableSectionElement\"]" gTypeHTMLTableSectionElement' :: JSRef GType
-gTypeHTMLTableSectionElement = GType gTypeHTMLTableSectionElement'
-#else
-type IsHTMLTableSectionElement o = HTMLTableSectionElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLTemplateElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTemplateElement Mozilla HTMLTemplateElement documentation>
-newtype HTMLTemplateElement = HTMLTemplateElement { unHTMLTemplateElement :: JSRef HTMLTemplateElement }
-
-instance Eq (HTMLTemplateElement) where
-  (HTMLTemplateElement a) == (HTMLTemplateElement b) = js_eq a b
-
-instance PToJSRef HTMLTemplateElement where
-  pToJSRef = unHTMLTemplateElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLTemplateElement where
-  pFromJSRef = HTMLTemplateElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLTemplateElement where
-  toJSRef = return . unHTMLTemplateElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLTemplateElement where
-  fromJSRef = return . fmap HTMLTemplateElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLTemplateElement
-instance IsElement HTMLTemplateElement
-instance IsNode HTMLTemplateElement
-instance IsEventTarget HTMLTemplateElement
-instance IsGObject HTMLTemplateElement where
-  toGObject = GObject . castRef . unHTMLTemplateElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLTemplateElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLTemplateElement :: IsGObject obj => obj -> HTMLTemplateElement
-castToHTMLTemplateElement = castTo gTypeHTMLTemplateElement "HTMLTemplateElement"
-
-foreign import javascript unsafe "window[\"HTMLTemplateElement\"]" gTypeHTMLTemplateElement' :: JSRef GType
-gTypeHTMLTemplateElement = GType gTypeHTMLTemplateElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLTextAreaElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElement Mozilla HTMLTextAreaElement documentation>
-newtype HTMLTextAreaElement = HTMLTextAreaElement { unHTMLTextAreaElement :: JSRef HTMLTextAreaElement }
-
-instance Eq (HTMLTextAreaElement) where
-  (HTMLTextAreaElement a) == (HTMLTextAreaElement b) = js_eq a b
-
-instance PToJSRef HTMLTextAreaElement where
-  pToJSRef = unHTMLTextAreaElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLTextAreaElement where
-  pFromJSRef = HTMLTextAreaElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLTextAreaElement where
-  toJSRef = return . unHTMLTextAreaElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLTextAreaElement where
-  fromJSRef = return . fmap HTMLTextAreaElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLTextAreaElement
-instance IsElement HTMLTextAreaElement
-instance IsNode HTMLTextAreaElement
-instance IsEventTarget HTMLTextAreaElement
-instance IsGObject HTMLTextAreaElement where
-  toGObject = GObject . castRef . unHTMLTextAreaElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLTextAreaElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLTextAreaElement :: IsGObject obj => obj -> HTMLTextAreaElement
-castToHTMLTextAreaElement = castTo gTypeHTMLTextAreaElement "HTMLTextAreaElement"
-
-foreign import javascript unsafe "window[\"HTMLTextAreaElement\"]" gTypeHTMLTextAreaElement' :: JSRef GType
-gTypeHTMLTextAreaElement = GType gTypeHTMLTextAreaElement'
-#else
-type IsHTMLTextAreaElement o = HTMLTextAreaElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLTitleElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTitleElement Mozilla HTMLTitleElement documentation>
-newtype HTMLTitleElement = HTMLTitleElement { unHTMLTitleElement :: JSRef HTMLTitleElement }
-
-instance Eq (HTMLTitleElement) where
-  (HTMLTitleElement a) == (HTMLTitleElement b) = js_eq a b
-
-instance PToJSRef HTMLTitleElement where
-  pToJSRef = unHTMLTitleElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLTitleElement where
-  pFromJSRef = HTMLTitleElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLTitleElement where
-  toJSRef = return . unHTMLTitleElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLTitleElement where
-  fromJSRef = return . fmap HTMLTitleElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLTitleElement
-instance IsElement HTMLTitleElement
-instance IsNode HTMLTitleElement
-instance IsEventTarget HTMLTitleElement
-instance IsGObject HTMLTitleElement where
-  toGObject = GObject . castRef . unHTMLTitleElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLTitleElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLTitleElement :: IsGObject obj => obj -> HTMLTitleElement
-castToHTMLTitleElement = castTo gTypeHTMLTitleElement "HTMLTitleElement"
-
-foreign import javascript unsafe "window[\"HTMLTitleElement\"]" gTypeHTMLTitleElement' :: JSRef GType
-gTypeHTMLTitleElement = GType gTypeHTMLTitleElement'
-#else
-type IsHTMLTitleElement o = HTMLTitleElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLTrackElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTrackElement Mozilla HTMLTrackElement documentation>
-newtype HTMLTrackElement = HTMLTrackElement { unHTMLTrackElement :: JSRef HTMLTrackElement }
-
-instance Eq (HTMLTrackElement) where
-  (HTMLTrackElement a) == (HTMLTrackElement b) = js_eq a b
-
-instance PToJSRef HTMLTrackElement where
-  pToJSRef = unHTMLTrackElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLTrackElement where
-  pFromJSRef = HTMLTrackElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLTrackElement where
-  toJSRef = return . unHTMLTrackElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLTrackElement where
-  fromJSRef = return . fmap HTMLTrackElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLTrackElement
-instance IsElement HTMLTrackElement
-instance IsNode HTMLTrackElement
-instance IsEventTarget HTMLTrackElement
-instance IsGObject HTMLTrackElement where
-  toGObject = GObject . castRef . unHTMLTrackElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLTrackElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLTrackElement :: IsGObject obj => obj -> HTMLTrackElement
-castToHTMLTrackElement = castTo gTypeHTMLTrackElement "HTMLTrackElement"
-
-foreign import javascript unsafe "window[\"HTMLTrackElement\"]" gTypeHTMLTrackElement' :: JSRef GType
-gTypeHTMLTrackElement = GType gTypeHTMLTrackElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLUListElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLUListElement Mozilla HTMLUListElement documentation>
-newtype HTMLUListElement = HTMLUListElement { unHTMLUListElement :: JSRef HTMLUListElement }
-
-instance Eq (HTMLUListElement) where
-  (HTMLUListElement a) == (HTMLUListElement b) = js_eq a b
-
-instance PToJSRef HTMLUListElement where
-  pToJSRef = unHTMLUListElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLUListElement where
-  pFromJSRef = HTMLUListElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLUListElement where
-  toJSRef = return . unHTMLUListElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLUListElement where
-  fromJSRef = return . fmap HTMLUListElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLUListElement
-instance IsElement HTMLUListElement
-instance IsNode HTMLUListElement
-instance IsEventTarget HTMLUListElement
-instance IsGObject HTMLUListElement where
-  toGObject = GObject . castRef . unHTMLUListElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLUListElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLUListElement :: IsGObject obj => obj -> HTMLUListElement
-castToHTMLUListElement = castTo gTypeHTMLUListElement "HTMLUListElement"
-
-foreign import javascript unsafe "window[\"HTMLUListElement\"]" gTypeHTMLUListElement' :: JSRef GType
-gTypeHTMLUListElement = GType gTypeHTMLUListElement'
-#else
-type IsHTMLUListElement o = HTMLUListElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLUnknownElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLUnknownElement Mozilla HTMLUnknownElement documentation>
-newtype HTMLUnknownElement = HTMLUnknownElement { unHTMLUnknownElement :: JSRef HTMLUnknownElement }
-
-instance Eq (HTMLUnknownElement) where
-  (HTMLUnknownElement a) == (HTMLUnknownElement b) = js_eq a b
-
-instance PToJSRef HTMLUnknownElement where
-  pToJSRef = unHTMLUnknownElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLUnknownElement where
-  pFromJSRef = HTMLUnknownElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLUnknownElement where
-  toJSRef = return . unHTMLUnknownElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLUnknownElement where
-  fromJSRef = return . fmap HTMLUnknownElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLElement HTMLUnknownElement
-instance IsElement HTMLUnknownElement
-instance IsNode HTMLUnknownElement
-instance IsEventTarget HTMLUnknownElement
-instance IsGObject HTMLUnknownElement where
-  toGObject = GObject . castRef . unHTMLUnknownElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLUnknownElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLUnknownElement :: IsGObject obj => obj -> HTMLUnknownElement
-castToHTMLUnknownElement = castTo gTypeHTMLUnknownElement "HTMLUnknownElement"
-
-foreign import javascript unsafe "window[\"HTMLUnknownElement\"]" gTypeHTMLUnknownElement' :: JSRef GType
-gTypeHTMLUnknownElement = GType gTypeHTMLUnknownElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HTMLVideoElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.HTMLMediaElement"
---     * "GHCJS.DOM.HTMLElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement Mozilla HTMLVideoElement documentation>
-newtype HTMLVideoElement = HTMLVideoElement { unHTMLVideoElement :: JSRef HTMLVideoElement }
-
-instance Eq (HTMLVideoElement) where
-  (HTMLVideoElement a) == (HTMLVideoElement b) = js_eq a b
-
-instance PToJSRef HTMLVideoElement where
-  pToJSRef = unHTMLVideoElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HTMLVideoElement where
-  pFromJSRef = HTMLVideoElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HTMLVideoElement where
-  toJSRef = return . unHTMLVideoElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HTMLVideoElement where
-  fromJSRef = return . fmap HTMLVideoElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsHTMLMediaElement HTMLVideoElement
-instance IsHTMLElement HTMLVideoElement
-instance IsElement HTMLVideoElement
-instance IsNode HTMLVideoElement
-instance IsEventTarget HTMLVideoElement
-instance IsGObject HTMLVideoElement where
-  toGObject = GObject . castRef . unHTMLVideoElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HTMLVideoElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHTMLVideoElement :: IsGObject obj => obj -> HTMLVideoElement
-castToHTMLVideoElement = castTo gTypeHTMLVideoElement "HTMLVideoElement"
-
-foreign import javascript unsafe "window[\"HTMLVideoElement\"]" gTypeHTMLVideoElement' :: JSRef GType
-gTypeHTMLVideoElement = GType gTypeHTMLVideoElement'
-#else
-type IsHTMLVideoElement o = HTMLVideoElementClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.HashChangeEvent".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.Event"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/HashChangeEvent Mozilla HashChangeEvent documentation>
-newtype HashChangeEvent = HashChangeEvent { unHashChangeEvent :: JSRef HashChangeEvent }
-
-instance Eq (HashChangeEvent) where
-  (HashChangeEvent a) == (HashChangeEvent b) = js_eq a b
-
-instance PToJSRef HashChangeEvent where
-  pToJSRef = unHashChangeEvent
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef HashChangeEvent where
-  pFromJSRef = HashChangeEvent
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef HashChangeEvent where
-  toJSRef = return . unHashChangeEvent
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef HashChangeEvent where
-  fromJSRef = return . fmap HashChangeEvent . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEvent HashChangeEvent
-instance IsGObject HashChangeEvent where
-  toGObject = GObject . castRef . unHashChangeEvent
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = HashChangeEvent . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHashChangeEvent :: IsGObject obj => obj -> HashChangeEvent
-castToHashChangeEvent = castTo gTypeHashChangeEvent "HashChangeEvent"
-
-foreign import javascript unsafe "window[\"HashChangeEvent\"]" gTypeHashChangeEvent' :: JSRef GType
-gTypeHashChangeEvent = GType gTypeHashChangeEvent'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.History".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/History Mozilla History documentation>
-newtype History = History { unHistory :: JSRef History }
-
-instance Eq (History) where
-  (History a) == (History b) = js_eq a b
-
-instance PToJSRef History where
-  pToJSRef = unHistory
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef History where
-  pFromJSRef = History
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef History where
-  toJSRef = return . unHistory
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef History where
-  fromJSRef = return . fmap History . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject History where
-  toGObject = GObject . castRef . unHistory
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = History . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToHistory :: IsGObject obj => obj -> History
-castToHistory = castTo gTypeHistory "History"
-
-foreign import javascript unsafe "window[\"History\"]" gTypeHistory' :: JSRef GType
-gTypeHistory = GType gTypeHistory'
-#else
-type IsHistory o = HistoryClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.IDBAny".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/IDBAny Mozilla IDBAny documentation>
-newtype IDBAny = IDBAny { unIDBAny :: JSRef IDBAny }
-
-instance Eq (IDBAny) where
-  (IDBAny a) == (IDBAny b) = js_eq a b
-
-instance PToJSRef IDBAny where
-  pToJSRef = unIDBAny
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef IDBAny where
-  pFromJSRef = IDBAny
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef IDBAny where
-  toJSRef = return . unIDBAny
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef IDBAny where
-  fromJSRef = return . fmap IDBAny . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject IDBAny where
-  toGObject = GObject . castRef . unIDBAny
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = IDBAny . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToIDBAny :: IsGObject obj => obj -> IDBAny
-castToIDBAny = castTo gTypeIDBAny "IDBAny"
-
-foreign import javascript unsafe "window[\"IDBAny\"]" gTypeIDBAny' :: JSRef GType
-gTypeIDBAny = GType gTypeIDBAny'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.IDBCursor".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/IDBCursor Mozilla IDBCursor documentation>
-newtype IDBCursor = IDBCursor { unIDBCursor :: JSRef IDBCursor }
-
-instance Eq (IDBCursor) where
-  (IDBCursor a) == (IDBCursor b) = js_eq a b
-
-instance PToJSRef IDBCursor where
-  pToJSRef = unIDBCursor
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef IDBCursor where
-  pFromJSRef = IDBCursor
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef IDBCursor where
-  toJSRef = return . unIDBCursor
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef IDBCursor where
-  fromJSRef = return . fmap IDBCursor . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsGObject o => IsIDBCursor o
-toIDBCursor :: IsIDBCursor o => o -> IDBCursor
-toIDBCursor = unsafeCastGObject . toGObject
-
-instance IsIDBCursor IDBCursor
-instance IsGObject IDBCursor where
-  toGObject = GObject . castRef . unIDBCursor
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = IDBCursor . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToIDBCursor :: IsGObject obj => obj -> IDBCursor
-castToIDBCursor = castTo gTypeIDBCursor "IDBCursor"
-
-foreign import javascript unsafe "window[\"IDBCursor\"]" gTypeIDBCursor' :: JSRef GType
-gTypeIDBCursor = GType gTypeIDBCursor'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.IDBCursorWithValue".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.IDBCursor"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/IDBCursorWithValue Mozilla IDBCursorWithValue documentation>
-newtype IDBCursorWithValue = IDBCursorWithValue { unIDBCursorWithValue :: JSRef IDBCursorWithValue }
-
-instance Eq (IDBCursorWithValue) where
-  (IDBCursorWithValue a) == (IDBCursorWithValue b) = js_eq a b
-
-instance PToJSRef IDBCursorWithValue where
-  pToJSRef = unIDBCursorWithValue
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef IDBCursorWithValue where
-  pFromJSRef = IDBCursorWithValue
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef IDBCursorWithValue where
-  toJSRef = return . unIDBCursorWithValue
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef IDBCursorWithValue where
-  fromJSRef = return . fmap IDBCursorWithValue . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsIDBCursor IDBCursorWithValue
-instance IsGObject IDBCursorWithValue where
-  toGObject = GObject . castRef . unIDBCursorWithValue
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = IDBCursorWithValue . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToIDBCursorWithValue :: IsGObject obj => obj -> IDBCursorWithValue
-castToIDBCursorWithValue = castTo gTypeIDBCursorWithValue "IDBCursorWithValue"
-
-foreign import javascript unsafe "window[\"IDBCursorWithValue\"]" gTypeIDBCursorWithValue' :: JSRef GType
-gTypeIDBCursorWithValue = GType gTypeIDBCursorWithValue'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.IDBDatabase".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/IDBDatabase Mozilla IDBDatabase documentation>
-newtype IDBDatabase = IDBDatabase { unIDBDatabase :: JSRef IDBDatabase }
-
-instance Eq (IDBDatabase) where
-  (IDBDatabase a) == (IDBDatabase b) = js_eq a b
-
-instance PToJSRef IDBDatabase where
-  pToJSRef = unIDBDatabase
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef IDBDatabase where
-  pFromJSRef = IDBDatabase
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef IDBDatabase where
-  toJSRef = return . unIDBDatabase
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef IDBDatabase where
-  fromJSRef = return . fmap IDBDatabase . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEventTarget IDBDatabase
-instance IsGObject IDBDatabase where
-  toGObject = GObject . castRef . unIDBDatabase
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = IDBDatabase . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToIDBDatabase :: IsGObject obj => obj -> IDBDatabase
-castToIDBDatabase = castTo gTypeIDBDatabase "IDBDatabase"
-
-foreign import javascript unsafe "window[\"IDBDatabase\"]" gTypeIDBDatabase' :: JSRef GType
-gTypeIDBDatabase = GType gTypeIDBDatabase'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.IDBFactory".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/IDBFactory Mozilla IDBFactory documentation>
-newtype IDBFactory = IDBFactory { unIDBFactory :: JSRef IDBFactory }
-
-instance Eq (IDBFactory) where
-  (IDBFactory a) == (IDBFactory b) = js_eq a b
-
-instance PToJSRef IDBFactory where
-  pToJSRef = unIDBFactory
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef IDBFactory where
-  pFromJSRef = IDBFactory
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef IDBFactory where
-  toJSRef = return . unIDBFactory
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef IDBFactory where
-  fromJSRef = return . fmap IDBFactory . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject IDBFactory where
-  toGObject = GObject . castRef . unIDBFactory
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = IDBFactory . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToIDBFactory :: IsGObject obj => obj -> IDBFactory
-castToIDBFactory = castTo gTypeIDBFactory "IDBFactory"
-
-foreign import javascript unsafe "window[\"IDBFactory\"]" gTypeIDBFactory' :: JSRef GType
-gTypeIDBFactory = GType gTypeIDBFactory'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.IDBIndex".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/IDBIndex Mozilla IDBIndex documentation>
-newtype IDBIndex = IDBIndex { unIDBIndex :: JSRef IDBIndex }
-
-instance Eq (IDBIndex) where
-  (IDBIndex a) == (IDBIndex b) = js_eq a b
-
-instance PToJSRef IDBIndex where
-  pToJSRef = unIDBIndex
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef IDBIndex where
-  pFromJSRef = IDBIndex
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef IDBIndex where
-  toJSRef = return . unIDBIndex
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef IDBIndex where
-  fromJSRef = return . fmap IDBIndex . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject IDBIndex where
-  toGObject = GObject . castRef . unIDBIndex
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = IDBIndex . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToIDBIndex :: IsGObject obj => obj -> IDBIndex
-castToIDBIndex = castTo gTypeIDBIndex "IDBIndex"
-
-foreign import javascript unsafe "window[\"IDBIndex\"]" gTypeIDBIndex' :: JSRef GType
-gTypeIDBIndex = GType gTypeIDBIndex'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.IDBKeyRange".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/IDBKeyRange Mozilla IDBKeyRange documentation>
-newtype IDBKeyRange = IDBKeyRange { unIDBKeyRange :: JSRef IDBKeyRange }
-
-instance Eq (IDBKeyRange) where
-  (IDBKeyRange a) == (IDBKeyRange b) = js_eq a b
-
-instance PToJSRef IDBKeyRange where
-  pToJSRef = unIDBKeyRange
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef IDBKeyRange where
-  pFromJSRef = IDBKeyRange
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef IDBKeyRange where
-  toJSRef = return . unIDBKeyRange
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef IDBKeyRange where
-  fromJSRef = return . fmap IDBKeyRange . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject IDBKeyRange where
-  toGObject = GObject . castRef . unIDBKeyRange
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = IDBKeyRange . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToIDBKeyRange :: IsGObject obj => obj -> IDBKeyRange
-castToIDBKeyRange = castTo gTypeIDBKeyRange "IDBKeyRange"
-
-foreign import javascript unsafe "window[\"IDBKeyRange\"]" gTypeIDBKeyRange' :: JSRef GType
-gTypeIDBKeyRange = GType gTypeIDBKeyRange'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.IDBObjectStore".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/IDBObjectStore Mozilla IDBObjectStore documentation>
-newtype IDBObjectStore = IDBObjectStore { unIDBObjectStore :: JSRef IDBObjectStore }
-
-instance Eq (IDBObjectStore) where
-  (IDBObjectStore a) == (IDBObjectStore b) = js_eq a b
-
-instance PToJSRef IDBObjectStore where
-  pToJSRef = unIDBObjectStore
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef IDBObjectStore where
-  pFromJSRef = IDBObjectStore
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef IDBObjectStore where
-  toJSRef = return . unIDBObjectStore
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef IDBObjectStore where
-  fromJSRef = return . fmap IDBObjectStore . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject IDBObjectStore where
-  toGObject = GObject . castRef . unIDBObjectStore
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = IDBObjectStore . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToIDBObjectStore :: IsGObject obj => obj -> IDBObjectStore
-castToIDBObjectStore = castTo gTypeIDBObjectStore "IDBObjectStore"
-
-foreign import javascript unsafe "window[\"IDBObjectStore\"]" gTypeIDBObjectStore' :: JSRef GType
-gTypeIDBObjectStore = GType gTypeIDBObjectStore'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.IDBOpenDBRequest".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.IDBRequest"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/IDBOpenDBRequest Mozilla IDBOpenDBRequest documentation>
-newtype IDBOpenDBRequest = IDBOpenDBRequest { unIDBOpenDBRequest :: JSRef IDBOpenDBRequest }
-
-instance Eq (IDBOpenDBRequest) where
-  (IDBOpenDBRequest a) == (IDBOpenDBRequest b) = js_eq a b
-
-instance PToJSRef IDBOpenDBRequest where
-  pToJSRef = unIDBOpenDBRequest
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef IDBOpenDBRequest where
-  pFromJSRef = IDBOpenDBRequest
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef IDBOpenDBRequest where
-  toJSRef = return . unIDBOpenDBRequest
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef IDBOpenDBRequest where
-  fromJSRef = return . fmap IDBOpenDBRequest . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsIDBRequest IDBOpenDBRequest
-instance IsEventTarget IDBOpenDBRequest
-instance IsGObject IDBOpenDBRequest where
-  toGObject = GObject . castRef . unIDBOpenDBRequest
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = IDBOpenDBRequest . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToIDBOpenDBRequest :: IsGObject obj => obj -> IDBOpenDBRequest
-castToIDBOpenDBRequest = castTo gTypeIDBOpenDBRequest "IDBOpenDBRequest"
-
-foreign import javascript unsafe "window[\"IDBOpenDBRequest\"]" gTypeIDBOpenDBRequest' :: JSRef GType
-gTypeIDBOpenDBRequest = GType gTypeIDBOpenDBRequest'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.IDBRequest".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/IDBRequest Mozilla IDBRequest documentation>
-newtype IDBRequest = IDBRequest { unIDBRequest :: JSRef IDBRequest }
-
-instance Eq (IDBRequest) where
-  (IDBRequest a) == (IDBRequest b) = js_eq a b
-
-instance PToJSRef IDBRequest where
-  pToJSRef = unIDBRequest
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef IDBRequest where
-  pFromJSRef = IDBRequest
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef IDBRequest where
-  toJSRef = return . unIDBRequest
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef IDBRequest where
-  fromJSRef = return . fmap IDBRequest . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsEventTarget o => IsIDBRequest o
-toIDBRequest :: IsIDBRequest o => o -> IDBRequest
-toIDBRequest = unsafeCastGObject . toGObject
-
-instance IsIDBRequest IDBRequest
-instance IsEventTarget IDBRequest
-instance IsGObject IDBRequest where
-  toGObject = GObject . castRef . unIDBRequest
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = IDBRequest . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToIDBRequest :: IsGObject obj => obj -> IDBRequest
-castToIDBRequest = castTo gTypeIDBRequest "IDBRequest"
-
-foreign import javascript unsafe "window[\"IDBRequest\"]" gTypeIDBRequest' :: JSRef GType
-gTypeIDBRequest = GType gTypeIDBRequest'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.IDBTransaction".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/IDBTransaction Mozilla IDBTransaction documentation>
-newtype IDBTransaction = IDBTransaction { unIDBTransaction :: JSRef IDBTransaction }
-
-instance Eq (IDBTransaction) where
-  (IDBTransaction a) == (IDBTransaction b) = js_eq a b
-
-instance PToJSRef IDBTransaction where
-  pToJSRef = unIDBTransaction
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef IDBTransaction where
-  pFromJSRef = IDBTransaction
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef IDBTransaction where
-  toJSRef = return . unIDBTransaction
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef IDBTransaction where
-  fromJSRef = return . fmap IDBTransaction . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEventTarget IDBTransaction
-instance IsGObject IDBTransaction where
-  toGObject = GObject . castRef . unIDBTransaction
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = IDBTransaction . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToIDBTransaction :: IsGObject obj => obj -> IDBTransaction
-castToIDBTransaction = castTo gTypeIDBTransaction "IDBTransaction"
-
-foreign import javascript unsafe "window[\"IDBTransaction\"]" gTypeIDBTransaction' :: JSRef GType
-gTypeIDBTransaction = GType gTypeIDBTransaction'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.IDBVersionChangeEvent".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.Event"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/IDBVersionChangeEvent Mozilla IDBVersionChangeEvent documentation>
-newtype IDBVersionChangeEvent = IDBVersionChangeEvent { unIDBVersionChangeEvent :: JSRef IDBVersionChangeEvent }
-
-instance Eq (IDBVersionChangeEvent) where
-  (IDBVersionChangeEvent a) == (IDBVersionChangeEvent b) = js_eq a b
-
-instance PToJSRef IDBVersionChangeEvent where
-  pToJSRef = unIDBVersionChangeEvent
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef IDBVersionChangeEvent where
-  pFromJSRef = IDBVersionChangeEvent
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef IDBVersionChangeEvent where
-  toJSRef = return . unIDBVersionChangeEvent
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef IDBVersionChangeEvent where
-  fromJSRef = return . fmap IDBVersionChangeEvent . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEvent IDBVersionChangeEvent
-instance IsGObject IDBVersionChangeEvent where
-  toGObject = GObject . castRef . unIDBVersionChangeEvent
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = IDBVersionChangeEvent . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToIDBVersionChangeEvent :: IsGObject obj => obj -> IDBVersionChangeEvent
-castToIDBVersionChangeEvent = castTo gTypeIDBVersionChangeEvent "IDBVersionChangeEvent"
-
-foreign import javascript unsafe "window[\"IDBVersionChangeEvent\"]" gTypeIDBVersionChangeEvent' :: JSRef GType
-gTypeIDBVersionChangeEvent = GType gTypeIDBVersionChangeEvent'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.ImageData".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/ImageData Mozilla ImageData documentation>
-newtype ImageData = ImageData { unImageData :: JSRef ImageData }
-
-instance Eq (ImageData) where
-  (ImageData a) == (ImageData b) = js_eq a b
-
-instance PToJSRef ImageData where
-  pToJSRef = unImageData
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef ImageData where
-  pFromJSRef = ImageData
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef ImageData where
-  toJSRef = return . unImageData
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef ImageData where
-  fromJSRef = return . fmap ImageData . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject ImageData where
-  toGObject = GObject . castRef . unImageData
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = ImageData . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToImageData :: IsGObject obj => obj -> ImageData
-castToImageData = castTo gTypeImageData "ImageData"
-
-foreign import javascript unsafe "window[\"ImageData\"]" gTypeImageData' :: JSRef GType
-gTypeImageData = GType gTypeImageData'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.InspectorFrontendHost".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/InspectorFrontendHost Mozilla InspectorFrontendHost documentation>
-newtype InspectorFrontendHost = InspectorFrontendHost { unInspectorFrontendHost :: JSRef InspectorFrontendHost }
-
-instance Eq (InspectorFrontendHost) where
-  (InspectorFrontendHost a) == (InspectorFrontendHost b) = js_eq a b
-
-instance PToJSRef InspectorFrontendHost where
-  pToJSRef = unInspectorFrontendHost
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef InspectorFrontendHost where
-  pFromJSRef = InspectorFrontendHost
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef InspectorFrontendHost where
-  toJSRef = return . unInspectorFrontendHost
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef InspectorFrontendHost where
-  fromJSRef = return . fmap InspectorFrontendHost . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject InspectorFrontendHost where
-  toGObject = GObject . castRef . unInspectorFrontendHost
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = InspectorFrontendHost . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToInspectorFrontendHost :: IsGObject obj => obj -> InspectorFrontendHost
-castToInspectorFrontendHost = castTo gTypeInspectorFrontendHost "InspectorFrontendHost"
-
-foreign import javascript unsafe "window[\"InspectorFrontendHost\"]" gTypeInspectorFrontendHost' :: JSRef GType
-gTypeInspectorFrontendHost = GType gTypeInspectorFrontendHost'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.InternalSettings".
--- Base interface functions are in:
---
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/InternalSettings Mozilla InternalSettings documentation>
-newtype InternalSettings = InternalSettings { unInternalSettings :: JSRef InternalSettings }
-
-instance Eq (InternalSettings) where
-  (InternalSettings a) == (InternalSettings b) = js_eq a b
-
-instance PToJSRef InternalSettings where
-  pToJSRef = unInternalSettings
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef InternalSettings where
-  pFromJSRef = InternalSettings
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef InternalSettings where
-  toJSRef = return . unInternalSettings
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef InternalSettings where
-  fromJSRef = return . fmap InternalSettings . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject InternalSettings where
-  toGObject = GObject . castRef . unInternalSettings
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = InternalSettings . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToInternalSettings :: IsGObject obj => obj -> InternalSettings
-castToInternalSettings = castTo gTypeInternalSettings "InternalSettings"
-
-foreign import javascript unsafe "window[\"InternalSettings\"]" gTypeInternalSettings' :: JSRef GType
-gTypeInternalSettings = GType gTypeInternalSettings'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.Internals".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/Internals Mozilla Internals documentation>
-newtype Internals = Internals { unInternals :: JSRef Internals }
-
-instance Eq (Internals) where
-  (Internals a) == (Internals b) = js_eq a b
-
-instance PToJSRef Internals where
-  pToJSRef = unInternals
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef Internals where
-  pFromJSRef = Internals
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef Internals where
-  toJSRef = return . unInternals
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef Internals where
-  fromJSRef = return . fmap Internals . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject Internals where
-  toGObject = GObject . castRef . unInternals
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = Internals . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToInternals :: IsGObject obj => obj -> Internals
-castToInternals = castTo gTypeInternals "Internals"
-
-foreign import javascript unsafe "window[\"Internals\"]" gTypeInternals' :: JSRef GType
-gTypeInternals = GType gTypeInternals'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.KeyboardEvent".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.UIEvent"
---     * "GHCJS.DOM.Event"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent Mozilla KeyboardEvent documentation>
-newtype KeyboardEvent = KeyboardEvent { unKeyboardEvent :: JSRef KeyboardEvent }
-
-instance Eq (KeyboardEvent) where
-  (KeyboardEvent a) == (KeyboardEvent b) = js_eq a b
-
-instance PToJSRef KeyboardEvent where
-  pToJSRef = unKeyboardEvent
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef KeyboardEvent where
-  pFromJSRef = KeyboardEvent
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef KeyboardEvent where
-  toJSRef = return . unKeyboardEvent
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef KeyboardEvent where
-  fromJSRef = return . fmap KeyboardEvent . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsUIEvent KeyboardEvent
-instance IsEvent KeyboardEvent
-instance IsGObject KeyboardEvent where
-  toGObject = GObject . castRef . unKeyboardEvent
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = KeyboardEvent . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToKeyboardEvent :: IsGObject obj => obj -> KeyboardEvent
-castToKeyboardEvent = castTo gTypeKeyboardEvent "KeyboardEvent"
-
-foreign import javascript unsafe "window[\"KeyboardEvent\"]" gTypeKeyboardEvent' :: JSRef GType
-gTypeKeyboardEvent = GType gTypeKeyboardEvent'
-#else
-#ifndef USE_OLD_WEBKIT
-type IsKeyboardEvent o = KeyboardEventClass o
-#endif
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.Location".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/Location Mozilla Location documentation>
-newtype Location = Location { unLocation :: JSRef Location }
-
-instance Eq (Location) where
-  (Location a) == (Location b) = js_eq a b
-
-instance PToJSRef Location where
-  pToJSRef = unLocation
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef Location where
-  pFromJSRef = Location
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef Location where
-  toJSRef = return . unLocation
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef Location where
-  fromJSRef = return . fmap Location . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject Location where
-  toGObject = GObject . castRef . unLocation
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = Location . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToLocation :: IsGObject obj => obj -> Location
-castToLocation = castTo gTypeLocation "Location"
-
-foreign import javascript unsafe "window[\"Location\"]" gTypeLocation' :: JSRef GType
-gTypeLocation = GType gTypeLocation'
-#else
-type IsLocation o = LocationClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.MallocStatistics".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/MallocStatistics Mozilla MallocStatistics documentation>
-newtype MallocStatistics = MallocStatistics { unMallocStatistics :: JSRef MallocStatistics }
-
-instance Eq (MallocStatistics) where
-  (MallocStatistics a) == (MallocStatistics b) = js_eq a b
-
-instance PToJSRef MallocStatistics where
-  pToJSRef = unMallocStatistics
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef MallocStatistics where
-  pFromJSRef = MallocStatistics
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef MallocStatistics where
-  toJSRef = return . unMallocStatistics
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef MallocStatistics where
-  fromJSRef = return . fmap MallocStatistics . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject MallocStatistics where
-  toGObject = GObject . castRef . unMallocStatistics
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = MallocStatistics . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToMallocStatistics :: IsGObject obj => obj -> MallocStatistics
-castToMallocStatistics = castTo gTypeMallocStatistics "MallocStatistics"
-
-foreign import javascript unsafe "window[\"MallocStatistics\"]" gTypeMallocStatistics' :: JSRef GType
-gTypeMallocStatistics = GType gTypeMallocStatistics'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.MediaController".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/MediaController Mozilla MediaController documentation>
-newtype MediaController = MediaController { unMediaController :: JSRef MediaController }
-
-instance Eq (MediaController) where
-  (MediaController a) == (MediaController b) = js_eq a b
-
-instance PToJSRef MediaController where
-  pToJSRef = unMediaController
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef MediaController where
-  pFromJSRef = MediaController
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef MediaController where
-  toJSRef = return . unMediaController
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef MediaController where
-  fromJSRef = return . fmap MediaController . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEventTarget MediaController
-instance IsGObject MediaController where
-  toGObject = GObject . castRef . unMediaController
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = MediaController . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToMediaController :: IsGObject obj => obj -> MediaController
-castToMediaController = castTo gTypeMediaController "MediaController"
-
-foreign import javascript unsafe "window[\"MediaController\"]" gTypeMediaController' :: JSRef GType
-gTypeMediaController = GType gTypeMediaController'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.MediaControlsHost".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/MediaControlsHost Mozilla MediaControlsHost documentation>
-newtype MediaControlsHost = MediaControlsHost { unMediaControlsHost :: JSRef MediaControlsHost }
-
-instance Eq (MediaControlsHost) where
-  (MediaControlsHost a) == (MediaControlsHost b) = js_eq a b
-
-instance PToJSRef MediaControlsHost where
-  pToJSRef = unMediaControlsHost
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef MediaControlsHost where
-  pFromJSRef = MediaControlsHost
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef MediaControlsHost where
-  toJSRef = return . unMediaControlsHost
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef MediaControlsHost where
-  fromJSRef = return . fmap MediaControlsHost . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject MediaControlsHost where
-  toGObject = GObject . castRef . unMediaControlsHost
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = MediaControlsHost . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToMediaControlsHost :: IsGObject obj => obj -> MediaControlsHost
-castToMediaControlsHost = castTo gTypeMediaControlsHost "MediaControlsHost"
-
-foreign import javascript unsafe "window[\"MediaControlsHost\"]" gTypeMediaControlsHost' :: JSRef GType
-gTypeMediaControlsHost = GType gTypeMediaControlsHost'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.MediaElementAudioSourceNode".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.AudioNode"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/MediaElementAudioSourceNode Mozilla MediaElementAudioSourceNode documentation>
-newtype MediaElementAudioSourceNode = MediaElementAudioSourceNode { unMediaElementAudioSourceNode :: JSRef MediaElementAudioSourceNode }
-
-instance Eq (MediaElementAudioSourceNode) where
-  (MediaElementAudioSourceNode a) == (MediaElementAudioSourceNode b) = js_eq a b
-
-instance PToJSRef MediaElementAudioSourceNode where
-  pToJSRef = unMediaElementAudioSourceNode
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef MediaElementAudioSourceNode where
-  pFromJSRef = MediaElementAudioSourceNode
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef MediaElementAudioSourceNode where
-  toJSRef = return . unMediaElementAudioSourceNode
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef MediaElementAudioSourceNode where
-  fromJSRef = return . fmap MediaElementAudioSourceNode . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsAudioNode MediaElementAudioSourceNode
-instance IsEventTarget MediaElementAudioSourceNode
-instance IsGObject MediaElementAudioSourceNode where
-  toGObject = GObject . castRef . unMediaElementAudioSourceNode
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = MediaElementAudioSourceNode . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToMediaElementAudioSourceNode :: IsGObject obj => obj -> MediaElementAudioSourceNode
-castToMediaElementAudioSourceNode = castTo gTypeMediaElementAudioSourceNode "MediaElementAudioSourceNode"
-
-foreign import javascript unsafe "window[\"MediaElementAudioSourceNode\"]" gTypeMediaElementAudioSourceNode' :: JSRef GType
-gTypeMediaElementAudioSourceNode = GType gTypeMediaElementAudioSourceNode'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.MediaError".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/MediaError Mozilla MediaError documentation>
-newtype MediaError = MediaError { unMediaError :: JSRef MediaError }
-
-instance Eq (MediaError) where
-  (MediaError a) == (MediaError b) = js_eq a b
-
-instance PToJSRef MediaError where
-  pToJSRef = unMediaError
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef MediaError where
-  pFromJSRef = MediaError
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef MediaError where
-  toJSRef = return . unMediaError
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef MediaError where
-  fromJSRef = return . fmap MediaError . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject MediaError where
-  toGObject = GObject . castRef . unMediaError
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = MediaError . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToMediaError :: IsGObject obj => obj -> MediaError
-castToMediaError = castTo gTypeMediaError "MediaError"
-
-foreign import javascript unsafe "window[\"MediaError\"]" gTypeMediaError' :: JSRef GType
-gTypeMediaError = GType gTypeMediaError'
-#else
-type IsMediaError o = MediaErrorClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.MediaKeyError".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/WebKitMediaKeyError Mozilla WebKitMediaKeyError documentation>
-newtype MediaKeyError = MediaKeyError { unMediaKeyError :: JSRef MediaKeyError }
-
-instance Eq (MediaKeyError) where
-  (MediaKeyError a) == (MediaKeyError b) = js_eq a b
-
-instance PToJSRef MediaKeyError where
-  pToJSRef = unMediaKeyError
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef MediaKeyError where
-  pFromJSRef = MediaKeyError
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef MediaKeyError where
-  toJSRef = return . unMediaKeyError
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef MediaKeyError where
-  fromJSRef = return . fmap MediaKeyError . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject MediaKeyError where
-  toGObject = GObject . castRef . unMediaKeyError
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = MediaKeyError . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToMediaKeyError :: IsGObject obj => obj -> MediaKeyError
-castToMediaKeyError = castTo gTypeMediaKeyError "MediaKeyError"
-
-foreign import javascript unsafe "window[\"WebKitMediaKeyError\"]" gTypeMediaKeyError' :: JSRef GType
-gTypeMediaKeyError = GType gTypeMediaKeyError'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.MediaKeyEvent".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.Event"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/MediaKeyEvent Mozilla MediaKeyEvent documentation>
-newtype MediaKeyEvent = MediaKeyEvent { unMediaKeyEvent :: JSRef MediaKeyEvent }
-
-instance Eq (MediaKeyEvent) where
-  (MediaKeyEvent a) == (MediaKeyEvent b) = js_eq a b
-
-instance PToJSRef MediaKeyEvent where
-  pToJSRef = unMediaKeyEvent
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef MediaKeyEvent where
-  pFromJSRef = MediaKeyEvent
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef MediaKeyEvent where
-  toJSRef = return . unMediaKeyEvent
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef MediaKeyEvent where
-  fromJSRef = return . fmap MediaKeyEvent . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEvent MediaKeyEvent
-instance IsGObject MediaKeyEvent where
-  toGObject = GObject . castRef . unMediaKeyEvent
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = MediaKeyEvent . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToMediaKeyEvent :: IsGObject obj => obj -> MediaKeyEvent
-castToMediaKeyEvent = castTo gTypeMediaKeyEvent "MediaKeyEvent"
-
-foreign import javascript unsafe "window[\"MediaKeyEvent\"]" gTypeMediaKeyEvent' :: JSRef GType
-gTypeMediaKeyEvent = GType gTypeMediaKeyEvent'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.MediaKeyMessageEvent".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.Event"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/WebKitMediaKeyMessageEvent Mozilla WebKitMediaKeyMessageEvent documentation>
-newtype MediaKeyMessageEvent = MediaKeyMessageEvent { unMediaKeyMessageEvent :: JSRef MediaKeyMessageEvent }
-
-instance Eq (MediaKeyMessageEvent) where
-  (MediaKeyMessageEvent a) == (MediaKeyMessageEvent b) = js_eq a b
-
-instance PToJSRef MediaKeyMessageEvent where
-  pToJSRef = unMediaKeyMessageEvent
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef MediaKeyMessageEvent where
-  pFromJSRef = MediaKeyMessageEvent
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef MediaKeyMessageEvent where
-  toJSRef = return . unMediaKeyMessageEvent
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef MediaKeyMessageEvent where
-  fromJSRef = return . fmap MediaKeyMessageEvent . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEvent MediaKeyMessageEvent
-instance IsGObject MediaKeyMessageEvent where
-  toGObject = GObject . castRef . unMediaKeyMessageEvent
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = MediaKeyMessageEvent . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToMediaKeyMessageEvent :: IsGObject obj => obj -> MediaKeyMessageEvent
-castToMediaKeyMessageEvent = castTo gTypeMediaKeyMessageEvent "MediaKeyMessageEvent"
-
-foreign import javascript unsafe "window[\"WebKitMediaKeyMessageEvent\"]" gTypeMediaKeyMessageEvent' :: JSRef GType
-gTypeMediaKeyMessageEvent = GType gTypeMediaKeyMessageEvent'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.MediaKeyNeededEvent".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.Event"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/MediaKeyNeededEvent Mozilla MediaKeyNeededEvent documentation>
-newtype MediaKeyNeededEvent = MediaKeyNeededEvent { unMediaKeyNeededEvent :: JSRef MediaKeyNeededEvent }
-
-instance Eq (MediaKeyNeededEvent) where
-  (MediaKeyNeededEvent a) == (MediaKeyNeededEvent b) = js_eq a b
-
-instance PToJSRef MediaKeyNeededEvent where
-  pToJSRef = unMediaKeyNeededEvent
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef MediaKeyNeededEvent where
-  pFromJSRef = MediaKeyNeededEvent
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef MediaKeyNeededEvent where
-  toJSRef = return . unMediaKeyNeededEvent
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef MediaKeyNeededEvent where
-  fromJSRef = return . fmap MediaKeyNeededEvent . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEvent MediaKeyNeededEvent
-instance IsGObject MediaKeyNeededEvent where
-  toGObject = GObject . castRef . unMediaKeyNeededEvent
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = MediaKeyNeededEvent . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToMediaKeyNeededEvent :: IsGObject obj => obj -> MediaKeyNeededEvent
-castToMediaKeyNeededEvent = castTo gTypeMediaKeyNeededEvent "MediaKeyNeededEvent"
-
-foreign import javascript unsafe "window[\"MediaKeyNeededEvent\"]" gTypeMediaKeyNeededEvent' :: JSRef GType
-gTypeMediaKeyNeededEvent = GType gTypeMediaKeyNeededEvent'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.MediaKeySession".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/WebKitMediaKeySession Mozilla WebKitMediaKeySession documentation>
-newtype MediaKeySession = MediaKeySession { unMediaKeySession :: JSRef MediaKeySession }
-
-instance Eq (MediaKeySession) where
-  (MediaKeySession a) == (MediaKeySession b) = js_eq a b
-
-instance PToJSRef MediaKeySession where
-  pToJSRef = unMediaKeySession
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef MediaKeySession where
-  pFromJSRef = MediaKeySession
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef MediaKeySession where
-  toJSRef = return . unMediaKeySession
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef MediaKeySession where
-  fromJSRef = return . fmap MediaKeySession . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEventTarget MediaKeySession
-instance IsGObject MediaKeySession where
-  toGObject = GObject . castRef . unMediaKeySession
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = MediaKeySession . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToMediaKeySession :: IsGObject obj => obj -> MediaKeySession
-castToMediaKeySession = castTo gTypeMediaKeySession "MediaKeySession"
-
-foreign import javascript unsafe "window[\"WebKitMediaKeySession\"]" gTypeMediaKeySession' :: JSRef GType
-gTypeMediaKeySession = GType gTypeMediaKeySession'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.MediaKeys".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/WebKitMediaKeys Mozilla WebKitMediaKeys documentation>
-newtype MediaKeys = MediaKeys { unMediaKeys :: JSRef MediaKeys }
-
-instance Eq (MediaKeys) where
-  (MediaKeys a) == (MediaKeys b) = js_eq a b
-
-instance PToJSRef MediaKeys where
-  pToJSRef = unMediaKeys
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef MediaKeys where
-  pFromJSRef = MediaKeys
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef MediaKeys where
-  toJSRef = return . unMediaKeys
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef MediaKeys where
-  fromJSRef = return . fmap MediaKeys . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject MediaKeys where
-  toGObject = GObject . castRef . unMediaKeys
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = MediaKeys . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToMediaKeys :: IsGObject obj => obj -> MediaKeys
-castToMediaKeys = castTo gTypeMediaKeys "MediaKeys"
-
-foreign import javascript unsafe "window[\"WebKitMediaKeys\"]" gTypeMediaKeys' :: JSRef GType
-gTypeMediaKeys = GType gTypeMediaKeys'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.MediaList".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/MediaList Mozilla MediaList documentation>
-newtype MediaList = MediaList { unMediaList :: JSRef MediaList }
-
-instance Eq (MediaList) where
-  (MediaList a) == (MediaList b) = js_eq a b
-
-instance PToJSRef MediaList where
-  pToJSRef = unMediaList
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef MediaList where
-  pFromJSRef = MediaList
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef MediaList where
-  toJSRef = return . unMediaList
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef MediaList where
-  fromJSRef = return . fmap MediaList . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject MediaList where
-  toGObject = GObject . castRef . unMediaList
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = MediaList . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToMediaList :: IsGObject obj => obj -> MediaList
-castToMediaList = castTo gTypeMediaList "MediaList"
-
-foreign import javascript unsafe "window[\"MediaList\"]" gTypeMediaList' :: JSRef GType
-gTypeMediaList = GType gTypeMediaList'
-#else
-type IsMediaList o = MediaListClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.MediaQueryList".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/MediaQueryList Mozilla MediaQueryList documentation>
-newtype MediaQueryList = MediaQueryList { unMediaQueryList :: JSRef MediaQueryList }
-
-instance Eq (MediaQueryList) where
-  (MediaQueryList a) == (MediaQueryList b) = js_eq a b
-
-instance PToJSRef MediaQueryList where
-  pToJSRef = unMediaQueryList
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef MediaQueryList where
-  pFromJSRef = MediaQueryList
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef MediaQueryList where
-  toJSRef = return . unMediaQueryList
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef MediaQueryList where
-  fromJSRef = return . fmap MediaQueryList . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject MediaQueryList where
-  toGObject = GObject . castRef . unMediaQueryList
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = MediaQueryList . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToMediaQueryList :: IsGObject obj => obj -> MediaQueryList
-castToMediaQueryList = castTo gTypeMediaQueryList "MediaQueryList"
-
-foreign import javascript unsafe "window[\"MediaQueryList\"]" gTypeMediaQueryList' :: JSRef GType
-gTypeMediaQueryList = GType gTypeMediaQueryList'
-#else
-type IsMediaQueryList o = MediaQueryListClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.MediaSource".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/MediaSource Mozilla MediaSource documentation>
-newtype MediaSource = MediaSource { unMediaSource :: JSRef MediaSource }
-
-instance Eq (MediaSource) where
-  (MediaSource a) == (MediaSource b) = js_eq a b
-
-instance PToJSRef MediaSource where
-  pToJSRef = unMediaSource
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef MediaSource where
-  pFromJSRef = MediaSource
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef MediaSource where
-  toJSRef = return . unMediaSource
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef MediaSource where
-  fromJSRef = return . fmap MediaSource . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEventTarget MediaSource
-instance IsGObject MediaSource where
-  toGObject = GObject . castRef . unMediaSource
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = MediaSource . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToMediaSource :: IsGObject obj => obj -> MediaSource
-castToMediaSource = castTo gTypeMediaSource "MediaSource"
-
-foreign import javascript unsafe "window[\"MediaSource\"]" gTypeMediaSource' :: JSRef GType
-gTypeMediaSource = GType gTypeMediaSource'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.MediaSourceStates".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/MediaSourceStates Mozilla MediaSourceStates documentation>
-newtype MediaSourceStates = MediaSourceStates { unMediaSourceStates :: JSRef MediaSourceStates }
-
-instance Eq (MediaSourceStates) where
-  (MediaSourceStates a) == (MediaSourceStates b) = js_eq a b
-
-instance PToJSRef MediaSourceStates where
-  pToJSRef = unMediaSourceStates
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef MediaSourceStates where
-  pFromJSRef = MediaSourceStates
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef MediaSourceStates where
-  toJSRef = return . unMediaSourceStates
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef MediaSourceStates where
-  fromJSRef = return . fmap MediaSourceStates . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject MediaSourceStates where
-  toGObject = GObject . castRef . unMediaSourceStates
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = MediaSourceStates . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToMediaSourceStates :: IsGObject obj => obj -> MediaSourceStates
-castToMediaSourceStates = castTo gTypeMediaSourceStates "MediaSourceStates"
-
-foreign import javascript unsafe "window[\"MediaSourceStates\"]" gTypeMediaSourceStates' :: JSRef GType
-gTypeMediaSourceStates = GType gTypeMediaSourceStates'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.MediaStream".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/webkitMediaStream Mozilla webkitMediaStream documentation>
-newtype MediaStream = MediaStream { unMediaStream :: JSRef MediaStream }
-
-instance Eq (MediaStream) where
-  (MediaStream a) == (MediaStream b) = js_eq a b
-
-instance PToJSRef MediaStream where
-  pToJSRef = unMediaStream
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef MediaStream where
-  pFromJSRef = MediaStream
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef MediaStream where
-  toJSRef = return . unMediaStream
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef MediaStream where
-  fromJSRef = return . fmap MediaStream . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEventTarget MediaStream
-instance IsGObject MediaStream where
-  toGObject = GObject . castRef . unMediaStream
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = MediaStream . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToMediaStream :: IsGObject obj => obj -> MediaStream
-castToMediaStream = castTo gTypeMediaStream "MediaStream"
-
-foreign import javascript unsafe "window[\"webkitMediaStream\"]" gTypeMediaStream' :: JSRef GType
-gTypeMediaStream = GType gTypeMediaStream'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.MediaStreamAudioDestinationNode".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.AudioNode"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamAudioDestinationNode Mozilla MediaStreamAudioDestinationNode documentation>
-newtype MediaStreamAudioDestinationNode = MediaStreamAudioDestinationNode { unMediaStreamAudioDestinationNode :: JSRef MediaStreamAudioDestinationNode }
-
-instance Eq (MediaStreamAudioDestinationNode) where
-  (MediaStreamAudioDestinationNode a) == (MediaStreamAudioDestinationNode b) = js_eq a b
-
-instance PToJSRef MediaStreamAudioDestinationNode where
-  pToJSRef = unMediaStreamAudioDestinationNode
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef MediaStreamAudioDestinationNode where
-  pFromJSRef = MediaStreamAudioDestinationNode
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef MediaStreamAudioDestinationNode where
-  toJSRef = return . unMediaStreamAudioDestinationNode
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef MediaStreamAudioDestinationNode where
-  fromJSRef = return . fmap MediaStreamAudioDestinationNode . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsAudioNode MediaStreamAudioDestinationNode
-instance IsEventTarget MediaStreamAudioDestinationNode
-instance IsGObject MediaStreamAudioDestinationNode where
-  toGObject = GObject . castRef . unMediaStreamAudioDestinationNode
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = MediaStreamAudioDestinationNode . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToMediaStreamAudioDestinationNode :: IsGObject obj => obj -> MediaStreamAudioDestinationNode
-castToMediaStreamAudioDestinationNode = castTo gTypeMediaStreamAudioDestinationNode "MediaStreamAudioDestinationNode"
-
-foreign import javascript unsafe "window[\"MediaStreamAudioDestinationNode\"]" gTypeMediaStreamAudioDestinationNode' :: JSRef GType
-gTypeMediaStreamAudioDestinationNode = GType gTypeMediaStreamAudioDestinationNode'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.MediaStreamAudioSourceNode".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.AudioNode"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamAudioSourceNode Mozilla MediaStreamAudioSourceNode documentation>
-newtype MediaStreamAudioSourceNode = MediaStreamAudioSourceNode { unMediaStreamAudioSourceNode :: JSRef MediaStreamAudioSourceNode }
-
-instance Eq (MediaStreamAudioSourceNode) where
-  (MediaStreamAudioSourceNode a) == (MediaStreamAudioSourceNode b) = js_eq a b
-
-instance PToJSRef MediaStreamAudioSourceNode where
-  pToJSRef = unMediaStreamAudioSourceNode
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef MediaStreamAudioSourceNode where
-  pFromJSRef = MediaStreamAudioSourceNode
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef MediaStreamAudioSourceNode where
-  toJSRef = return . unMediaStreamAudioSourceNode
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef MediaStreamAudioSourceNode where
-  fromJSRef = return . fmap MediaStreamAudioSourceNode . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsAudioNode MediaStreamAudioSourceNode
-instance IsEventTarget MediaStreamAudioSourceNode
-instance IsGObject MediaStreamAudioSourceNode where
-  toGObject = GObject . castRef . unMediaStreamAudioSourceNode
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = MediaStreamAudioSourceNode . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToMediaStreamAudioSourceNode :: IsGObject obj => obj -> MediaStreamAudioSourceNode
-castToMediaStreamAudioSourceNode = castTo gTypeMediaStreamAudioSourceNode "MediaStreamAudioSourceNode"
-
-foreign import javascript unsafe "window[\"MediaStreamAudioSourceNode\"]" gTypeMediaStreamAudioSourceNode' :: JSRef GType
-gTypeMediaStreamAudioSourceNode = GType gTypeMediaStreamAudioSourceNode'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.MediaStreamCapabilities".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamCapabilities Mozilla MediaStreamCapabilities documentation>
-newtype MediaStreamCapabilities = MediaStreamCapabilities { unMediaStreamCapabilities :: JSRef MediaStreamCapabilities }
-
-instance Eq (MediaStreamCapabilities) where
-  (MediaStreamCapabilities a) == (MediaStreamCapabilities b) = js_eq a b
-
-instance PToJSRef MediaStreamCapabilities where
-  pToJSRef = unMediaStreamCapabilities
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef MediaStreamCapabilities where
-  pFromJSRef = MediaStreamCapabilities
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef MediaStreamCapabilities where
-  toJSRef = return . unMediaStreamCapabilities
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef MediaStreamCapabilities where
-  fromJSRef = return . fmap MediaStreamCapabilities . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsGObject o => IsMediaStreamCapabilities o
-toMediaStreamCapabilities :: IsMediaStreamCapabilities o => o -> MediaStreamCapabilities
-toMediaStreamCapabilities = unsafeCastGObject . toGObject
-
-instance IsMediaStreamCapabilities MediaStreamCapabilities
-instance IsGObject MediaStreamCapabilities where
-  toGObject = GObject . castRef . unMediaStreamCapabilities
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = MediaStreamCapabilities . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToMediaStreamCapabilities :: IsGObject obj => obj -> MediaStreamCapabilities
-castToMediaStreamCapabilities = castTo gTypeMediaStreamCapabilities "MediaStreamCapabilities"
-
-foreign import javascript unsafe "window[\"MediaStreamCapabilities\"]" gTypeMediaStreamCapabilities' :: JSRef GType
-gTypeMediaStreamCapabilities = GType gTypeMediaStreamCapabilities'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.MediaStreamEvent".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.Event"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamEvent Mozilla MediaStreamEvent documentation>
-newtype MediaStreamEvent = MediaStreamEvent { unMediaStreamEvent :: JSRef MediaStreamEvent }
-
-instance Eq (MediaStreamEvent) where
-  (MediaStreamEvent a) == (MediaStreamEvent b) = js_eq a b
-
-instance PToJSRef MediaStreamEvent where
-  pToJSRef = unMediaStreamEvent
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef MediaStreamEvent where
-  pFromJSRef = MediaStreamEvent
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef MediaStreamEvent where
-  toJSRef = return . unMediaStreamEvent
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef MediaStreamEvent where
-  fromJSRef = return . fmap MediaStreamEvent . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEvent MediaStreamEvent
-instance IsGObject MediaStreamEvent where
-  toGObject = GObject . castRef . unMediaStreamEvent
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = MediaStreamEvent . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToMediaStreamEvent :: IsGObject obj => obj -> MediaStreamEvent
-castToMediaStreamEvent = castTo gTypeMediaStreamEvent "MediaStreamEvent"
-
-foreign import javascript unsafe "window[\"MediaStreamEvent\"]" gTypeMediaStreamEvent' :: JSRef GType
-gTypeMediaStreamEvent = GType gTypeMediaStreamEvent'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.MediaStreamTrack".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack Mozilla MediaStreamTrack documentation>
-newtype MediaStreamTrack = MediaStreamTrack { unMediaStreamTrack :: JSRef MediaStreamTrack }
-
-instance Eq (MediaStreamTrack) where
-  (MediaStreamTrack a) == (MediaStreamTrack b) = js_eq a b
-
-instance PToJSRef MediaStreamTrack where
-  pToJSRef = unMediaStreamTrack
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef MediaStreamTrack where
-  pFromJSRef = MediaStreamTrack
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef MediaStreamTrack where
-  toJSRef = return . unMediaStreamTrack
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef MediaStreamTrack where
-  fromJSRef = return . fmap MediaStreamTrack . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsEventTarget o => IsMediaStreamTrack o
-toMediaStreamTrack :: IsMediaStreamTrack o => o -> MediaStreamTrack
-toMediaStreamTrack = unsafeCastGObject . toGObject
-
-instance IsMediaStreamTrack MediaStreamTrack
-instance IsEventTarget MediaStreamTrack
-instance IsGObject MediaStreamTrack where
-  toGObject = GObject . castRef . unMediaStreamTrack
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = MediaStreamTrack . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToMediaStreamTrack :: IsGObject obj => obj -> MediaStreamTrack
-castToMediaStreamTrack = castTo gTypeMediaStreamTrack "MediaStreamTrack"
-
-foreign import javascript unsafe "window[\"MediaStreamTrack\"]" gTypeMediaStreamTrack' :: JSRef GType
-gTypeMediaStreamTrack = GType gTypeMediaStreamTrack'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.MediaStreamTrackEvent".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.Event"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrackEvent Mozilla MediaStreamTrackEvent documentation>
-newtype MediaStreamTrackEvent = MediaStreamTrackEvent { unMediaStreamTrackEvent :: JSRef MediaStreamTrackEvent }
-
-instance Eq (MediaStreamTrackEvent) where
-  (MediaStreamTrackEvent a) == (MediaStreamTrackEvent b) = js_eq a b
-
-instance PToJSRef MediaStreamTrackEvent where
-  pToJSRef = unMediaStreamTrackEvent
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef MediaStreamTrackEvent where
-  pFromJSRef = MediaStreamTrackEvent
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef MediaStreamTrackEvent where
-  toJSRef = return . unMediaStreamTrackEvent
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef MediaStreamTrackEvent where
-  fromJSRef = return . fmap MediaStreamTrackEvent . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEvent MediaStreamTrackEvent
-instance IsGObject MediaStreamTrackEvent where
-  toGObject = GObject . castRef . unMediaStreamTrackEvent
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = MediaStreamTrackEvent . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToMediaStreamTrackEvent :: IsGObject obj => obj -> MediaStreamTrackEvent
-castToMediaStreamTrackEvent = castTo gTypeMediaStreamTrackEvent "MediaStreamTrackEvent"
-
-foreign import javascript unsafe "window[\"MediaStreamTrackEvent\"]" gTypeMediaStreamTrackEvent' :: JSRef GType
-gTypeMediaStreamTrackEvent = GType gTypeMediaStreamTrackEvent'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.MediaTrackConstraint".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraint Mozilla MediaTrackConstraint documentation>
-newtype MediaTrackConstraint = MediaTrackConstraint { unMediaTrackConstraint :: JSRef MediaTrackConstraint }
-
-instance Eq (MediaTrackConstraint) where
-  (MediaTrackConstraint a) == (MediaTrackConstraint b) = js_eq a b
-
-instance PToJSRef MediaTrackConstraint where
-  pToJSRef = unMediaTrackConstraint
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef MediaTrackConstraint where
-  pFromJSRef = MediaTrackConstraint
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef MediaTrackConstraint where
-  toJSRef = return . unMediaTrackConstraint
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef MediaTrackConstraint where
-  fromJSRef = return . fmap MediaTrackConstraint . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject MediaTrackConstraint where
-  toGObject = GObject . castRef . unMediaTrackConstraint
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = MediaTrackConstraint . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToMediaTrackConstraint :: IsGObject obj => obj -> MediaTrackConstraint
-castToMediaTrackConstraint = castTo gTypeMediaTrackConstraint "MediaTrackConstraint"
-
-foreign import javascript unsafe "window[\"MediaTrackConstraint\"]" gTypeMediaTrackConstraint' :: JSRef GType
-gTypeMediaTrackConstraint = GType gTypeMediaTrackConstraint'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.MediaTrackConstraintSet".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraintSet Mozilla MediaTrackConstraintSet documentation>
-newtype MediaTrackConstraintSet = MediaTrackConstraintSet { unMediaTrackConstraintSet :: JSRef MediaTrackConstraintSet }
-
-instance Eq (MediaTrackConstraintSet) where
-  (MediaTrackConstraintSet a) == (MediaTrackConstraintSet b) = js_eq a b
-
-instance PToJSRef MediaTrackConstraintSet where
-  pToJSRef = unMediaTrackConstraintSet
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef MediaTrackConstraintSet where
-  pFromJSRef = MediaTrackConstraintSet
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef MediaTrackConstraintSet where
-  toJSRef = return . unMediaTrackConstraintSet
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef MediaTrackConstraintSet where
-  fromJSRef = return . fmap MediaTrackConstraintSet . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject MediaTrackConstraintSet where
-  toGObject = GObject . castRef . unMediaTrackConstraintSet
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = MediaTrackConstraintSet . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToMediaTrackConstraintSet :: IsGObject obj => obj -> MediaTrackConstraintSet
-castToMediaTrackConstraintSet = castTo gTypeMediaTrackConstraintSet "MediaTrackConstraintSet"
-
-foreign import javascript unsafe "window[\"MediaTrackConstraintSet\"]" gTypeMediaTrackConstraintSet' :: JSRef GType
-gTypeMediaTrackConstraintSet = GType gTypeMediaTrackConstraintSet'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.MediaTrackConstraints".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraints Mozilla MediaTrackConstraints documentation>
-newtype MediaTrackConstraints = MediaTrackConstraints { unMediaTrackConstraints :: JSRef MediaTrackConstraints }
-
-instance Eq (MediaTrackConstraints) where
-  (MediaTrackConstraints a) == (MediaTrackConstraints b) = js_eq a b
-
-instance PToJSRef MediaTrackConstraints where
-  pToJSRef = unMediaTrackConstraints
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef MediaTrackConstraints where
-  pFromJSRef = MediaTrackConstraints
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef MediaTrackConstraints where
-  toJSRef = return . unMediaTrackConstraints
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef MediaTrackConstraints where
-  fromJSRef = return . fmap MediaTrackConstraints . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject MediaTrackConstraints where
-  toGObject = GObject . castRef . unMediaTrackConstraints
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = MediaTrackConstraints . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToMediaTrackConstraints :: IsGObject obj => obj -> MediaTrackConstraints
-castToMediaTrackConstraints = castTo gTypeMediaTrackConstraints "MediaTrackConstraints"
-
-foreign import javascript unsafe "window[\"MediaTrackConstraints\"]" gTypeMediaTrackConstraints' :: JSRef GType
-gTypeMediaTrackConstraints = GType gTypeMediaTrackConstraints'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.MemoryInfo".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/MemoryInfo Mozilla MemoryInfo documentation>
-newtype MemoryInfo = MemoryInfo { unMemoryInfo :: JSRef MemoryInfo }
-
-instance Eq (MemoryInfo) where
-  (MemoryInfo a) == (MemoryInfo b) = js_eq a b
-
-instance PToJSRef MemoryInfo where
-  pToJSRef = unMemoryInfo
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef MemoryInfo where
-  pFromJSRef = MemoryInfo
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef MemoryInfo where
-  toJSRef = return . unMemoryInfo
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef MemoryInfo where
-  fromJSRef = return . fmap MemoryInfo . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject MemoryInfo where
-  toGObject = GObject . castRef . unMemoryInfo
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = MemoryInfo . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToMemoryInfo :: IsGObject obj => obj -> MemoryInfo
-castToMemoryInfo = castTo gTypeMemoryInfo "MemoryInfo"
-
-foreign import javascript unsafe "window[\"MemoryInfo\"]" gTypeMemoryInfo' :: JSRef GType
-gTypeMemoryInfo = GType gTypeMemoryInfo'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.MessageChannel".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/MessageChannel Mozilla MessageChannel documentation>
-newtype MessageChannel = MessageChannel { unMessageChannel :: JSRef MessageChannel }
-
-instance Eq (MessageChannel) where
-  (MessageChannel a) == (MessageChannel b) = js_eq a b
-
-instance PToJSRef MessageChannel where
-  pToJSRef = unMessageChannel
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef MessageChannel where
-  pFromJSRef = MessageChannel
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef MessageChannel where
-  toJSRef = return . unMessageChannel
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef MessageChannel where
-  fromJSRef = return . fmap MessageChannel . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject MessageChannel where
-  toGObject = GObject . castRef . unMessageChannel
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = MessageChannel . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToMessageChannel :: IsGObject obj => obj -> MessageChannel
-castToMessageChannel = castTo gTypeMessageChannel "MessageChannel"
-
-foreign import javascript unsafe "window[\"MessageChannel\"]" gTypeMessageChannel' :: JSRef GType
-gTypeMessageChannel = GType gTypeMessageChannel'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.MessageEvent".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.Event"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/MessageEvent Mozilla MessageEvent documentation>
-newtype MessageEvent = MessageEvent { unMessageEvent :: JSRef MessageEvent }
-
-instance Eq (MessageEvent) where
-  (MessageEvent a) == (MessageEvent b) = js_eq a b
-
-instance PToJSRef MessageEvent where
-  pToJSRef = unMessageEvent
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef MessageEvent where
-  pFromJSRef = MessageEvent
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef MessageEvent where
-  toJSRef = return . unMessageEvent
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef MessageEvent where
-  fromJSRef = return . fmap MessageEvent . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEvent MessageEvent
-instance IsGObject MessageEvent where
-  toGObject = GObject . castRef . unMessageEvent
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = MessageEvent . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToMessageEvent :: IsGObject obj => obj -> MessageEvent
-castToMessageEvent = castTo gTypeMessageEvent "MessageEvent"
-
-foreign import javascript unsafe "window[\"MessageEvent\"]" gTypeMessageEvent' :: JSRef GType
-gTypeMessageEvent = GType gTypeMessageEvent'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.MessagePort".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/MessagePort Mozilla MessagePort documentation>
-newtype MessagePort = MessagePort { unMessagePort :: JSRef MessagePort }
-
-instance Eq (MessagePort) where
-  (MessagePort a) == (MessagePort b) = js_eq a b
-
-instance PToJSRef MessagePort where
-  pToJSRef = unMessagePort
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef MessagePort where
-  pFromJSRef = MessagePort
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef MessagePort where
-  toJSRef = return . unMessagePort
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef MessagePort where
-  fromJSRef = return . fmap MessagePort . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEventTarget MessagePort
-instance IsGObject MessagePort where
-  toGObject = GObject . castRef . unMessagePort
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = MessagePort . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToMessagePort :: IsGObject obj => obj -> MessagePort
-castToMessagePort = castTo gTypeMessagePort "MessagePort"
-
-foreign import javascript unsafe "window[\"MessagePort\"]" gTypeMessagePort' :: JSRef GType
-gTypeMessagePort = GType gTypeMessagePort'
-#else
-type IsMessagePort o = MessagePortClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.MimeType".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/MimeType Mozilla MimeType documentation>
-newtype MimeType = MimeType { unMimeType :: JSRef MimeType }
-
-instance Eq (MimeType) where
-  (MimeType a) == (MimeType b) = js_eq a b
-
-instance PToJSRef MimeType where
-  pToJSRef = unMimeType
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef MimeType where
-  pFromJSRef = MimeType
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef MimeType where
-  toJSRef = return . unMimeType
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef MimeType where
-  fromJSRef = return . fmap MimeType . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject MimeType where
-  toGObject = GObject . castRef . unMimeType
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = MimeType . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToMimeType :: IsGObject obj => obj -> MimeType
-castToMimeType = castTo gTypeMimeType "MimeType"
-
-foreign import javascript unsafe "window[\"MimeType\"]" gTypeMimeType' :: JSRef GType
-gTypeMimeType = GType gTypeMimeType'
-#else
-type IsMimeType o = MimeTypeClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.MimeTypeArray".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/MimeTypeArray Mozilla MimeTypeArray documentation>
-newtype MimeTypeArray = MimeTypeArray { unMimeTypeArray :: JSRef MimeTypeArray }
-
-instance Eq (MimeTypeArray) where
-  (MimeTypeArray a) == (MimeTypeArray b) = js_eq a b
-
-instance PToJSRef MimeTypeArray where
-  pToJSRef = unMimeTypeArray
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef MimeTypeArray where
-  pFromJSRef = MimeTypeArray
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef MimeTypeArray where
-  toJSRef = return . unMimeTypeArray
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef MimeTypeArray where
-  fromJSRef = return . fmap MimeTypeArray . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject MimeTypeArray where
-  toGObject = GObject . castRef . unMimeTypeArray
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = MimeTypeArray . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToMimeTypeArray :: IsGObject obj => obj -> MimeTypeArray
-castToMimeTypeArray = castTo gTypeMimeTypeArray "MimeTypeArray"
-
-foreign import javascript unsafe "window[\"MimeTypeArray\"]" gTypeMimeTypeArray' :: JSRef GType
-gTypeMimeTypeArray = GType gTypeMimeTypeArray'
-#else
-type IsMimeTypeArray o = MimeTypeArrayClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.MouseEvent".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.UIEvent"
---     * "GHCJS.DOM.Event"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent Mozilla MouseEvent documentation>
-newtype MouseEvent = MouseEvent { unMouseEvent :: JSRef MouseEvent }
-
-instance Eq (MouseEvent) where
-  (MouseEvent a) == (MouseEvent b) = js_eq a b
-
-instance PToJSRef MouseEvent where
-  pToJSRef = unMouseEvent
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef MouseEvent where
-  pFromJSRef = MouseEvent
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef MouseEvent where
-  toJSRef = return . unMouseEvent
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef MouseEvent where
-  fromJSRef = return . fmap MouseEvent . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsUIEvent o => IsMouseEvent o
-toMouseEvent :: IsMouseEvent o => o -> MouseEvent
-toMouseEvent = unsafeCastGObject . toGObject
-
-instance IsMouseEvent MouseEvent
-instance IsUIEvent MouseEvent
-instance IsEvent MouseEvent
-instance IsGObject MouseEvent where
-  toGObject = GObject . castRef . unMouseEvent
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = MouseEvent . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToMouseEvent :: IsGObject obj => obj -> MouseEvent
-castToMouseEvent = castTo gTypeMouseEvent "MouseEvent"
-
-foreign import javascript unsafe "window[\"MouseEvent\"]" gTypeMouseEvent' :: JSRef GType
-gTypeMouseEvent = GType gTypeMouseEvent'
-#else
-type IsMouseEvent o = MouseEventClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.MutationEvent".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.Event"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/MutationEvent Mozilla MutationEvent documentation>
-newtype MutationEvent = MutationEvent { unMutationEvent :: JSRef MutationEvent }
-
-instance Eq (MutationEvent) where
-  (MutationEvent a) == (MutationEvent b) = js_eq a b
-
-instance PToJSRef MutationEvent where
-  pToJSRef = unMutationEvent
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef MutationEvent where
-  pFromJSRef = MutationEvent
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef MutationEvent where
-  toJSRef = return . unMutationEvent
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef MutationEvent where
-  fromJSRef = return . fmap MutationEvent . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEvent MutationEvent
-instance IsGObject MutationEvent where
-  toGObject = GObject . castRef . unMutationEvent
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = MutationEvent . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToMutationEvent :: IsGObject obj => obj -> MutationEvent
-castToMutationEvent = castTo gTypeMutationEvent "MutationEvent"
-
-foreign import javascript unsafe "window[\"MutationEvent\"]" gTypeMutationEvent' :: JSRef GType
-gTypeMutationEvent = GType gTypeMutationEvent'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.MutationObserver".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver Mozilla MutationObserver documentation>
-newtype MutationObserver = MutationObserver { unMutationObserver :: JSRef MutationObserver }
-
-instance Eq (MutationObserver) where
-  (MutationObserver a) == (MutationObserver b) = js_eq a b
-
-instance PToJSRef MutationObserver where
-  pToJSRef = unMutationObserver
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef MutationObserver where
-  pFromJSRef = MutationObserver
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef MutationObserver where
-  toJSRef = return . unMutationObserver
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef MutationObserver where
-  fromJSRef = return . fmap MutationObserver . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject MutationObserver where
-  toGObject = GObject . castRef . unMutationObserver
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = MutationObserver . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToMutationObserver :: IsGObject obj => obj -> MutationObserver
-castToMutationObserver = castTo gTypeMutationObserver "MutationObserver"
-
-foreign import javascript unsafe "window[\"MutationObserver\"]" gTypeMutationObserver' :: JSRef GType
-gTypeMutationObserver = GType gTypeMutationObserver'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.MutationRecord".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/MutationRecord Mozilla MutationRecord documentation>
-newtype MutationRecord = MutationRecord { unMutationRecord :: JSRef MutationRecord }
-
-instance Eq (MutationRecord) where
-  (MutationRecord a) == (MutationRecord b) = js_eq a b
-
-instance PToJSRef MutationRecord where
-  pToJSRef = unMutationRecord
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef MutationRecord where
-  pFromJSRef = MutationRecord
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef MutationRecord where
-  toJSRef = return . unMutationRecord
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef MutationRecord where
-  fromJSRef = return . fmap MutationRecord . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject MutationRecord where
-  toGObject = GObject . castRef . unMutationRecord
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = MutationRecord . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToMutationRecord :: IsGObject obj => obj -> MutationRecord
-castToMutationRecord = castTo gTypeMutationRecord "MutationRecord"
-
-foreign import javascript unsafe "window[\"MutationRecord\"]" gTypeMutationRecord' :: JSRef GType
-gTypeMutationRecord = GType gTypeMutationRecord'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.NamedNodeMap".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/NamedNodeMap Mozilla NamedNodeMap documentation>
-newtype NamedNodeMap = NamedNodeMap { unNamedNodeMap :: JSRef NamedNodeMap }
-
-instance Eq (NamedNodeMap) where
-  (NamedNodeMap a) == (NamedNodeMap b) = js_eq a b
-
-instance PToJSRef NamedNodeMap where
-  pToJSRef = unNamedNodeMap
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef NamedNodeMap where
-  pFromJSRef = NamedNodeMap
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef NamedNodeMap where
-  toJSRef = return . unNamedNodeMap
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef NamedNodeMap where
-  fromJSRef = return . fmap NamedNodeMap . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject NamedNodeMap where
-  toGObject = GObject . castRef . unNamedNodeMap
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = NamedNodeMap . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToNamedNodeMap :: IsGObject obj => obj -> NamedNodeMap
-castToNamedNodeMap = castTo gTypeNamedNodeMap "NamedNodeMap"
-
-foreign import javascript unsafe "window[\"NamedNodeMap\"]" gTypeNamedNodeMap' :: JSRef GType
-gTypeNamedNodeMap = GType gTypeNamedNodeMap'
-#else
-type IsNamedNodeMap o = NamedNodeMapClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.Navigator".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/Navigator Mozilla Navigator documentation>
-newtype Navigator = Navigator { unNavigator :: JSRef Navigator }
-
-instance Eq (Navigator) where
-  (Navigator a) == (Navigator b) = js_eq a b
-
-instance PToJSRef Navigator where
-  pToJSRef = unNavigator
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef Navigator where
-  pFromJSRef = Navigator
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef Navigator where
-  toJSRef = return . unNavigator
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef Navigator where
-  fromJSRef = return . fmap Navigator . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject Navigator where
-  toGObject = GObject . castRef . unNavigator
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = Navigator . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToNavigator :: IsGObject obj => obj -> Navigator
-castToNavigator = castTo gTypeNavigator "Navigator"
-
-foreign import javascript unsafe "window[\"Navigator\"]" gTypeNavigator' :: JSRef GType
-gTypeNavigator = GType gTypeNavigator'
-#else
-type IsNavigator o = NavigatorClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.NavigatorUserMediaError".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.DOMError"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/NavigatorUserMediaError Mozilla NavigatorUserMediaError documentation>
-newtype NavigatorUserMediaError = NavigatorUserMediaError { unNavigatorUserMediaError :: JSRef NavigatorUserMediaError }
-
-instance Eq (NavigatorUserMediaError) where
-  (NavigatorUserMediaError a) == (NavigatorUserMediaError b) = js_eq a b
-
-instance PToJSRef NavigatorUserMediaError where
-  pToJSRef = unNavigatorUserMediaError
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef NavigatorUserMediaError where
-  pFromJSRef = NavigatorUserMediaError
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef NavigatorUserMediaError where
-  toJSRef = return . unNavigatorUserMediaError
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef NavigatorUserMediaError where
-  fromJSRef = return . fmap NavigatorUserMediaError . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsDOMError NavigatorUserMediaError
-instance IsGObject NavigatorUserMediaError where
-  toGObject = GObject . castRef . unNavigatorUserMediaError
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = NavigatorUserMediaError . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToNavigatorUserMediaError :: IsGObject obj => obj -> NavigatorUserMediaError
-castToNavigatorUserMediaError = castTo gTypeNavigatorUserMediaError "NavigatorUserMediaError"
-
-foreign import javascript unsafe "window[\"NavigatorUserMediaError\"]" gTypeNavigatorUserMediaError' :: JSRef GType
-gTypeNavigatorUserMediaError = GType gTypeNavigatorUserMediaError'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.Node".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/Node Mozilla Node documentation>
-newtype Node = Node { unNode :: JSRef Node }
-
-instance Eq (Node) where
-  (Node a) == (Node b) = js_eq a b
-
-instance PToJSRef Node where
-  pToJSRef = unNode
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef Node where
-  pFromJSRef = Node
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef Node where
-  toJSRef = return . unNode
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef Node where
-  fromJSRef = return . fmap Node . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsEventTarget o => IsNode o
-toNode :: IsNode o => o -> Node
-toNode = unsafeCastGObject . toGObject
-
-instance IsNode Node
-instance IsEventTarget Node
-instance IsGObject Node where
-  toGObject = GObject . castRef . unNode
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = Node . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToNode :: IsGObject obj => obj -> Node
-castToNode = castTo gTypeNode "Node"
-
-foreign import javascript unsafe "window[\"Node\"]" gTypeNode' :: JSRef GType
-gTypeNode = GType gTypeNode'
-#else
-type IsNode o = NodeClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.NodeFilter".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/NodeFilter Mozilla NodeFilter documentation>
-newtype NodeFilter = NodeFilter { unNodeFilter :: JSRef NodeFilter }
-
-instance Eq (NodeFilter) where
-  (NodeFilter a) == (NodeFilter b) = js_eq a b
-
-instance PToJSRef NodeFilter where
-  pToJSRef = unNodeFilter
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef NodeFilter where
-  pFromJSRef = NodeFilter
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef NodeFilter where
-  toJSRef = return . unNodeFilter
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef NodeFilter where
-  fromJSRef = return . fmap NodeFilter . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject NodeFilter where
-  toGObject = GObject . castRef . unNodeFilter
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = NodeFilter . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToNodeFilter :: IsGObject obj => obj -> NodeFilter
-castToNodeFilter = castTo gTypeNodeFilter "NodeFilter"
-
-foreign import javascript unsafe "window[\"NodeFilter\"]" gTypeNodeFilter' :: JSRef GType
-gTypeNodeFilter = GType gTypeNodeFilter'
-#else
-type IsNodeFilter o = NodeFilterClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.NodeIterator".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/NodeIterator Mozilla NodeIterator documentation>
-newtype NodeIterator = NodeIterator { unNodeIterator :: JSRef NodeIterator }
-
-instance Eq (NodeIterator) where
-  (NodeIterator a) == (NodeIterator b) = js_eq a b
-
-instance PToJSRef NodeIterator where
-  pToJSRef = unNodeIterator
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef NodeIterator where
-  pFromJSRef = NodeIterator
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef NodeIterator where
-  toJSRef = return . unNodeIterator
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef NodeIterator where
-  fromJSRef = return . fmap NodeIterator . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject NodeIterator where
-  toGObject = GObject . castRef . unNodeIterator
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = NodeIterator . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToNodeIterator :: IsGObject obj => obj -> NodeIterator
-castToNodeIterator = castTo gTypeNodeIterator "NodeIterator"
-
-foreign import javascript unsafe "window[\"NodeIterator\"]" gTypeNodeIterator' :: JSRef GType
-gTypeNodeIterator = GType gTypeNodeIterator'
-#else
-type IsNodeIterator o = NodeIteratorClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.NodeList".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/NodeList Mozilla NodeList documentation>
-newtype NodeList = NodeList { unNodeList :: JSRef NodeList }
-
-instance Eq (NodeList) where
-  (NodeList a) == (NodeList b) = js_eq a b
-
-instance PToJSRef NodeList where
-  pToJSRef = unNodeList
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef NodeList where
-  pFromJSRef = NodeList
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef NodeList where
-  toJSRef = return . unNodeList
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef NodeList where
-  fromJSRef = return . fmap NodeList . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsGObject o => IsNodeList o
-toNodeList :: IsNodeList o => o -> NodeList
-toNodeList = unsafeCastGObject . toGObject
-
-instance IsNodeList NodeList
-instance IsGObject NodeList where
-  toGObject = GObject . castRef . unNodeList
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = NodeList . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToNodeList :: IsGObject obj => obj -> NodeList
-castToNodeList = castTo gTypeNodeList "NodeList"
-
-foreign import javascript unsafe "window[\"NodeList\"]" gTypeNodeList' :: JSRef GType
-gTypeNodeList = GType gTypeNodeList'
-#else
-type IsNodeList o = NodeListClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.Notification".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/Notification Mozilla Notification documentation>
-newtype Notification = Notification { unNotification :: JSRef Notification }
-
-instance Eq (Notification) where
-  (Notification a) == (Notification b) = js_eq a b
-
-instance PToJSRef Notification where
-  pToJSRef = unNotification
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef Notification where
-  pFromJSRef = Notification
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef Notification where
-  toJSRef = return . unNotification
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef Notification where
-  fromJSRef = return . fmap Notification . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEventTarget Notification
-instance IsGObject Notification where
-  toGObject = GObject . castRef . unNotification
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = Notification . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToNotification :: IsGObject obj => obj -> Notification
-castToNotification = castTo gTypeNotification "Notification"
-
-foreign import javascript unsafe "window[\"Notification\"]" gTypeNotification' :: JSRef GType
-gTypeNotification = GType gTypeNotification'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.NotificationCenter".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/NotificationCenter Mozilla NotificationCenter documentation>
-newtype NotificationCenter = NotificationCenter { unNotificationCenter :: JSRef NotificationCenter }
-
-instance Eq (NotificationCenter) where
-  (NotificationCenter a) == (NotificationCenter b) = js_eq a b
-
-instance PToJSRef NotificationCenter where
-  pToJSRef = unNotificationCenter
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef NotificationCenter where
-  pFromJSRef = NotificationCenter
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef NotificationCenter where
-  toJSRef = return . unNotificationCenter
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef NotificationCenter where
-  fromJSRef = return . fmap NotificationCenter . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject NotificationCenter where
-  toGObject = GObject . castRef . unNotificationCenter
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = NotificationCenter . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToNotificationCenter :: IsGObject obj => obj -> NotificationCenter
-castToNotificationCenter = castTo gTypeNotificationCenter "NotificationCenter"
-
-foreign import javascript unsafe "window[\"NotificationCenter\"]" gTypeNotificationCenter' :: JSRef GType
-gTypeNotificationCenter = GType gTypeNotificationCenter'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.OESElementIndexUint".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/OESElementIndexUint Mozilla OESElementIndexUint documentation>
-newtype OESElementIndexUint = OESElementIndexUint { unOESElementIndexUint :: JSRef OESElementIndexUint }
-
-instance Eq (OESElementIndexUint) where
-  (OESElementIndexUint a) == (OESElementIndexUint b) = js_eq a b
-
-instance PToJSRef OESElementIndexUint where
-  pToJSRef = unOESElementIndexUint
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef OESElementIndexUint where
-  pFromJSRef = OESElementIndexUint
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef OESElementIndexUint where
-  toJSRef = return . unOESElementIndexUint
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef OESElementIndexUint where
-  fromJSRef = return . fmap OESElementIndexUint . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject OESElementIndexUint where
-  toGObject = GObject . castRef . unOESElementIndexUint
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = OESElementIndexUint . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToOESElementIndexUint :: IsGObject obj => obj -> OESElementIndexUint
-castToOESElementIndexUint = castTo gTypeOESElementIndexUint "OESElementIndexUint"
-
-foreign import javascript unsafe "window[\"OESElementIndexUint\"]" gTypeOESElementIndexUint' :: JSRef GType
-gTypeOESElementIndexUint = GType gTypeOESElementIndexUint'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.OESStandardDerivatives".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/OESStandardDerivatives Mozilla OESStandardDerivatives documentation>
-newtype OESStandardDerivatives = OESStandardDerivatives { unOESStandardDerivatives :: JSRef OESStandardDerivatives }
-
-instance Eq (OESStandardDerivatives) where
-  (OESStandardDerivatives a) == (OESStandardDerivatives b) = js_eq a b
-
-instance PToJSRef OESStandardDerivatives where
-  pToJSRef = unOESStandardDerivatives
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef OESStandardDerivatives where
-  pFromJSRef = OESStandardDerivatives
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef OESStandardDerivatives where
-  toJSRef = return . unOESStandardDerivatives
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef OESStandardDerivatives where
-  fromJSRef = return . fmap OESStandardDerivatives . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject OESStandardDerivatives where
-  toGObject = GObject . castRef . unOESStandardDerivatives
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = OESStandardDerivatives . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToOESStandardDerivatives :: IsGObject obj => obj -> OESStandardDerivatives
-castToOESStandardDerivatives = castTo gTypeOESStandardDerivatives "OESStandardDerivatives"
-
-foreign import javascript unsafe "window[\"OESStandardDerivatives\"]" gTypeOESStandardDerivatives' :: JSRef GType
-gTypeOESStandardDerivatives = GType gTypeOESStandardDerivatives'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.OESTextureFloat".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/OESTextureFloat Mozilla OESTextureFloat documentation>
-newtype OESTextureFloat = OESTextureFloat { unOESTextureFloat :: JSRef OESTextureFloat }
-
-instance Eq (OESTextureFloat) where
-  (OESTextureFloat a) == (OESTextureFloat b) = js_eq a b
-
-instance PToJSRef OESTextureFloat where
-  pToJSRef = unOESTextureFloat
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef OESTextureFloat where
-  pFromJSRef = OESTextureFloat
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef OESTextureFloat where
-  toJSRef = return . unOESTextureFloat
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef OESTextureFloat where
-  fromJSRef = return . fmap OESTextureFloat . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject OESTextureFloat where
-  toGObject = GObject . castRef . unOESTextureFloat
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = OESTextureFloat . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToOESTextureFloat :: IsGObject obj => obj -> OESTextureFloat
-castToOESTextureFloat = castTo gTypeOESTextureFloat "OESTextureFloat"
-
-foreign import javascript unsafe "window[\"OESTextureFloat\"]" gTypeOESTextureFloat' :: JSRef GType
-gTypeOESTextureFloat = GType gTypeOESTextureFloat'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.OESTextureFloatLinear".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/OESTextureFloatLinear Mozilla OESTextureFloatLinear documentation>
-newtype OESTextureFloatLinear = OESTextureFloatLinear { unOESTextureFloatLinear :: JSRef OESTextureFloatLinear }
-
-instance Eq (OESTextureFloatLinear) where
-  (OESTextureFloatLinear a) == (OESTextureFloatLinear b) = js_eq a b
-
-instance PToJSRef OESTextureFloatLinear where
-  pToJSRef = unOESTextureFloatLinear
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef OESTextureFloatLinear where
-  pFromJSRef = OESTextureFloatLinear
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef OESTextureFloatLinear where
-  toJSRef = return . unOESTextureFloatLinear
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef OESTextureFloatLinear where
-  fromJSRef = return . fmap OESTextureFloatLinear . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject OESTextureFloatLinear where
-  toGObject = GObject . castRef . unOESTextureFloatLinear
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = OESTextureFloatLinear . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToOESTextureFloatLinear :: IsGObject obj => obj -> OESTextureFloatLinear
-castToOESTextureFloatLinear = castTo gTypeOESTextureFloatLinear "OESTextureFloatLinear"
-
-foreign import javascript unsafe "window[\"OESTextureFloatLinear\"]" gTypeOESTextureFloatLinear' :: JSRef GType
-gTypeOESTextureFloatLinear = GType gTypeOESTextureFloatLinear'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.OESTextureHalfFloat".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/OESTextureHalfFloat Mozilla OESTextureHalfFloat documentation>
-newtype OESTextureHalfFloat = OESTextureHalfFloat { unOESTextureHalfFloat :: JSRef OESTextureHalfFloat }
-
-instance Eq (OESTextureHalfFloat) where
-  (OESTextureHalfFloat a) == (OESTextureHalfFloat b) = js_eq a b
-
-instance PToJSRef OESTextureHalfFloat where
-  pToJSRef = unOESTextureHalfFloat
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef OESTextureHalfFloat where
-  pFromJSRef = OESTextureHalfFloat
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef OESTextureHalfFloat where
-  toJSRef = return . unOESTextureHalfFloat
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef OESTextureHalfFloat where
-  fromJSRef = return . fmap OESTextureHalfFloat . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject OESTextureHalfFloat where
-  toGObject = GObject . castRef . unOESTextureHalfFloat
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = OESTextureHalfFloat . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToOESTextureHalfFloat :: IsGObject obj => obj -> OESTextureHalfFloat
-castToOESTextureHalfFloat = castTo gTypeOESTextureHalfFloat "OESTextureHalfFloat"
-
-foreign import javascript unsafe "window[\"OESTextureHalfFloat\"]" gTypeOESTextureHalfFloat' :: JSRef GType
-gTypeOESTextureHalfFloat = GType gTypeOESTextureHalfFloat'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.OESTextureHalfFloatLinear".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/OESTextureHalfFloatLinear Mozilla OESTextureHalfFloatLinear documentation>
-newtype OESTextureHalfFloatLinear = OESTextureHalfFloatLinear { unOESTextureHalfFloatLinear :: JSRef OESTextureHalfFloatLinear }
-
-instance Eq (OESTextureHalfFloatLinear) where
-  (OESTextureHalfFloatLinear a) == (OESTextureHalfFloatLinear b) = js_eq a b
-
-instance PToJSRef OESTextureHalfFloatLinear where
-  pToJSRef = unOESTextureHalfFloatLinear
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef OESTextureHalfFloatLinear where
-  pFromJSRef = OESTextureHalfFloatLinear
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef OESTextureHalfFloatLinear where
-  toJSRef = return . unOESTextureHalfFloatLinear
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef OESTextureHalfFloatLinear where
-  fromJSRef = return . fmap OESTextureHalfFloatLinear . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject OESTextureHalfFloatLinear where
-  toGObject = GObject . castRef . unOESTextureHalfFloatLinear
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = OESTextureHalfFloatLinear . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToOESTextureHalfFloatLinear :: IsGObject obj => obj -> OESTextureHalfFloatLinear
-castToOESTextureHalfFloatLinear = castTo gTypeOESTextureHalfFloatLinear "OESTextureHalfFloatLinear"
-
-foreign import javascript unsafe "window[\"OESTextureHalfFloatLinear\"]" gTypeOESTextureHalfFloatLinear' :: JSRef GType
-gTypeOESTextureHalfFloatLinear = GType gTypeOESTextureHalfFloatLinear'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.OESVertexArrayObject".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/OESVertexArrayObject Mozilla OESVertexArrayObject documentation>
-newtype OESVertexArrayObject = OESVertexArrayObject { unOESVertexArrayObject :: JSRef OESVertexArrayObject }
-
-instance Eq (OESVertexArrayObject) where
-  (OESVertexArrayObject a) == (OESVertexArrayObject b) = js_eq a b
-
-instance PToJSRef OESVertexArrayObject where
-  pToJSRef = unOESVertexArrayObject
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef OESVertexArrayObject where
-  pFromJSRef = OESVertexArrayObject
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef OESVertexArrayObject where
-  toJSRef = return . unOESVertexArrayObject
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef OESVertexArrayObject where
-  fromJSRef = return . fmap OESVertexArrayObject . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject OESVertexArrayObject where
-  toGObject = GObject . castRef . unOESVertexArrayObject
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = OESVertexArrayObject . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToOESVertexArrayObject :: IsGObject obj => obj -> OESVertexArrayObject
-castToOESVertexArrayObject = castTo gTypeOESVertexArrayObject "OESVertexArrayObject"
-
-foreign import javascript unsafe "window[\"OESVertexArrayObject\"]" gTypeOESVertexArrayObject' :: JSRef GType
-gTypeOESVertexArrayObject = GType gTypeOESVertexArrayObject'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.OfflineAudioCompletionEvent".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.Event"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/OfflineAudioCompletionEvent Mozilla OfflineAudioCompletionEvent documentation>
-newtype OfflineAudioCompletionEvent = OfflineAudioCompletionEvent { unOfflineAudioCompletionEvent :: JSRef OfflineAudioCompletionEvent }
-
-instance Eq (OfflineAudioCompletionEvent) where
-  (OfflineAudioCompletionEvent a) == (OfflineAudioCompletionEvent b) = js_eq a b
-
-instance PToJSRef OfflineAudioCompletionEvent where
-  pToJSRef = unOfflineAudioCompletionEvent
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef OfflineAudioCompletionEvent where
-  pFromJSRef = OfflineAudioCompletionEvent
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef OfflineAudioCompletionEvent where
-  toJSRef = return . unOfflineAudioCompletionEvent
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef OfflineAudioCompletionEvent where
-  fromJSRef = return . fmap OfflineAudioCompletionEvent . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEvent OfflineAudioCompletionEvent
-instance IsGObject OfflineAudioCompletionEvent where
-  toGObject = GObject . castRef . unOfflineAudioCompletionEvent
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = OfflineAudioCompletionEvent . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToOfflineAudioCompletionEvent :: IsGObject obj => obj -> OfflineAudioCompletionEvent
-castToOfflineAudioCompletionEvent = castTo gTypeOfflineAudioCompletionEvent "OfflineAudioCompletionEvent"
-
-foreign import javascript unsafe "window[\"OfflineAudioCompletionEvent\"]" gTypeOfflineAudioCompletionEvent' :: JSRef GType
-gTypeOfflineAudioCompletionEvent = GType gTypeOfflineAudioCompletionEvent'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.OfflineAudioContext".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.AudioContext"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/OfflineAudioContext Mozilla OfflineAudioContext documentation>
-newtype OfflineAudioContext = OfflineAudioContext { unOfflineAudioContext :: JSRef OfflineAudioContext }
-
-instance Eq (OfflineAudioContext) where
-  (OfflineAudioContext a) == (OfflineAudioContext b) = js_eq a b
-
-instance PToJSRef OfflineAudioContext where
-  pToJSRef = unOfflineAudioContext
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef OfflineAudioContext where
-  pFromJSRef = OfflineAudioContext
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef OfflineAudioContext where
-  toJSRef = return . unOfflineAudioContext
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef OfflineAudioContext where
-  fromJSRef = return . fmap OfflineAudioContext . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsAudioContext OfflineAudioContext
-instance IsEventTarget OfflineAudioContext
-instance IsGObject OfflineAudioContext where
-  toGObject = GObject . castRef . unOfflineAudioContext
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = OfflineAudioContext . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToOfflineAudioContext :: IsGObject obj => obj -> OfflineAudioContext
-castToOfflineAudioContext = castTo gTypeOfflineAudioContext "OfflineAudioContext"
-
-foreign import javascript unsafe "window[\"OfflineAudioContext\"]" gTypeOfflineAudioContext' :: JSRef GType
-gTypeOfflineAudioContext = GType gTypeOfflineAudioContext'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.OscillatorNode".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.AudioNode"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/OscillatorNode Mozilla OscillatorNode documentation>
-newtype OscillatorNode = OscillatorNode { unOscillatorNode :: JSRef OscillatorNode }
-
-instance Eq (OscillatorNode) where
-  (OscillatorNode a) == (OscillatorNode b) = js_eq a b
-
-instance PToJSRef OscillatorNode where
-  pToJSRef = unOscillatorNode
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef OscillatorNode where
-  pFromJSRef = OscillatorNode
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef OscillatorNode where
-  toJSRef = return . unOscillatorNode
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef OscillatorNode where
-  fromJSRef = return . fmap OscillatorNode . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsAudioNode OscillatorNode
-instance IsEventTarget OscillatorNode
-instance IsGObject OscillatorNode where
-  toGObject = GObject . castRef . unOscillatorNode
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = OscillatorNode . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToOscillatorNode :: IsGObject obj => obj -> OscillatorNode
-castToOscillatorNode = castTo gTypeOscillatorNode "OscillatorNode"
-
-foreign import javascript unsafe "window[\"OscillatorNode\"]" gTypeOscillatorNode' :: JSRef GType
-gTypeOscillatorNode = GType gTypeOscillatorNode'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.OverflowEvent".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.Event"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/OverflowEvent Mozilla OverflowEvent documentation>
-newtype OverflowEvent = OverflowEvent { unOverflowEvent :: JSRef OverflowEvent }
-
-instance Eq (OverflowEvent) where
-  (OverflowEvent a) == (OverflowEvent b) = js_eq a b
-
-instance PToJSRef OverflowEvent where
-  pToJSRef = unOverflowEvent
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef OverflowEvent where
-  pFromJSRef = OverflowEvent
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef OverflowEvent where
-  toJSRef = return . unOverflowEvent
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef OverflowEvent where
-  fromJSRef = return . fmap OverflowEvent . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEvent OverflowEvent
-instance IsGObject OverflowEvent where
-  toGObject = GObject . castRef . unOverflowEvent
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = OverflowEvent . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToOverflowEvent :: IsGObject obj => obj -> OverflowEvent
-castToOverflowEvent = castTo gTypeOverflowEvent "OverflowEvent"
-
-foreign import javascript unsafe "window[\"OverflowEvent\"]" gTypeOverflowEvent' :: JSRef GType
-gTypeOverflowEvent = GType gTypeOverflowEvent'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.PageTransitionEvent".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.Event"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/PageTransitionEvent Mozilla PageTransitionEvent documentation>
-newtype PageTransitionEvent = PageTransitionEvent { unPageTransitionEvent :: JSRef PageTransitionEvent }
-
-instance Eq (PageTransitionEvent) where
-  (PageTransitionEvent a) == (PageTransitionEvent b) = js_eq a b
-
-instance PToJSRef PageTransitionEvent where
-  pToJSRef = unPageTransitionEvent
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef PageTransitionEvent where
-  pFromJSRef = PageTransitionEvent
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef PageTransitionEvent where
-  toJSRef = return . unPageTransitionEvent
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef PageTransitionEvent where
-  fromJSRef = return . fmap PageTransitionEvent . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEvent PageTransitionEvent
-instance IsGObject PageTransitionEvent where
-  toGObject = GObject . castRef . unPageTransitionEvent
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = PageTransitionEvent . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToPageTransitionEvent :: IsGObject obj => obj -> PageTransitionEvent
-castToPageTransitionEvent = castTo gTypePageTransitionEvent "PageTransitionEvent"
-
-foreign import javascript unsafe "window[\"PageTransitionEvent\"]" gTypePageTransitionEvent' :: JSRef GType
-gTypePageTransitionEvent = GType gTypePageTransitionEvent'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.PannerNode".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.AudioNode"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/webkitAudioPannerNode Mozilla webkitAudioPannerNode documentation>
-newtype PannerNode = PannerNode { unPannerNode :: JSRef PannerNode }
-
-instance Eq (PannerNode) where
-  (PannerNode a) == (PannerNode b) = js_eq a b
-
-instance PToJSRef PannerNode where
-  pToJSRef = unPannerNode
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef PannerNode where
-  pFromJSRef = PannerNode
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef PannerNode where
-  toJSRef = return . unPannerNode
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef PannerNode where
-  fromJSRef = return . fmap PannerNode . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsAudioNode PannerNode
-instance IsEventTarget PannerNode
-instance IsGObject PannerNode where
-  toGObject = GObject . castRef . unPannerNode
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = PannerNode . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToPannerNode :: IsGObject obj => obj -> PannerNode
-castToPannerNode = castTo gTypePannerNode "PannerNode"
-
-foreign import javascript unsafe "window[\"webkitAudioPannerNode\"]" gTypePannerNode' :: JSRef GType
-gTypePannerNode = GType gTypePannerNode'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.Path2D".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/Path2D Mozilla Path2D documentation>
-newtype Path2D = Path2D { unPath2D :: JSRef Path2D }
-
-instance Eq (Path2D) where
-  (Path2D a) == (Path2D b) = js_eq a b
-
-instance PToJSRef Path2D where
-  pToJSRef = unPath2D
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef Path2D where
-  pFromJSRef = Path2D
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef Path2D where
-  toJSRef = return . unPath2D
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef Path2D where
-  fromJSRef = return . fmap Path2D . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject Path2D where
-  toGObject = GObject . castRef . unPath2D
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = Path2D . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToPath2D :: IsGObject obj => obj -> Path2D
-castToPath2D = castTo gTypePath2D "Path2D"
-
-foreign import javascript unsafe "window[\"Path2D\"]" gTypePath2D' :: JSRef GType
-gTypePath2D = GType gTypePath2D'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.Performance".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/Performance Mozilla Performance documentation>
-newtype Performance = Performance { unPerformance :: JSRef Performance }
-
-instance Eq (Performance) where
-  (Performance a) == (Performance b) = js_eq a b
-
-instance PToJSRef Performance where
-  pToJSRef = unPerformance
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef Performance where
-  pFromJSRef = Performance
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef Performance where
-  toJSRef = return . unPerformance
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef Performance where
-  fromJSRef = return . fmap Performance . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEventTarget Performance
-instance IsGObject Performance where
-  toGObject = GObject . castRef . unPerformance
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = Performance . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToPerformance :: IsGObject obj => obj -> Performance
-castToPerformance = castTo gTypePerformance "Performance"
-
-foreign import javascript unsafe "window[\"Performance\"]" gTypePerformance' :: JSRef GType
-gTypePerformance = GType gTypePerformance'
-#else
-#ifndef USE_OLD_WEBKIT
-type IsPerformance o = PerformanceClass o
-#endif
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.PerformanceEntry".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/PerformanceEntry Mozilla PerformanceEntry documentation>
-newtype PerformanceEntry = PerformanceEntry { unPerformanceEntry :: JSRef PerformanceEntry }
-
-instance Eq (PerformanceEntry) where
-  (PerformanceEntry a) == (PerformanceEntry b) = js_eq a b
-
-instance PToJSRef PerformanceEntry where
-  pToJSRef = unPerformanceEntry
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef PerformanceEntry where
-  pFromJSRef = PerformanceEntry
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef PerformanceEntry where
-  toJSRef = return . unPerformanceEntry
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef PerformanceEntry where
-  fromJSRef = return . fmap PerformanceEntry . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsGObject o => IsPerformanceEntry o
-toPerformanceEntry :: IsPerformanceEntry o => o -> PerformanceEntry
-toPerformanceEntry = unsafeCastGObject . toGObject
-
-instance IsPerformanceEntry PerformanceEntry
-instance IsGObject PerformanceEntry where
-  toGObject = GObject . castRef . unPerformanceEntry
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = PerformanceEntry . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToPerformanceEntry :: IsGObject obj => obj -> PerformanceEntry
-castToPerformanceEntry = castTo gTypePerformanceEntry "PerformanceEntry"
-
-foreign import javascript unsafe "window[\"PerformanceEntry\"]" gTypePerformanceEntry' :: JSRef GType
-gTypePerformanceEntry = GType gTypePerformanceEntry'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.PerformanceEntryList".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/PerformanceEntryList Mozilla PerformanceEntryList documentation>
-newtype PerformanceEntryList = PerformanceEntryList { unPerformanceEntryList :: JSRef PerformanceEntryList }
-
-instance Eq (PerformanceEntryList) where
-  (PerformanceEntryList a) == (PerformanceEntryList b) = js_eq a b
-
-instance PToJSRef PerformanceEntryList where
-  pToJSRef = unPerformanceEntryList
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef PerformanceEntryList where
-  pFromJSRef = PerformanceEntryList
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef PerformanceEntryList where
-  toJSRef = return . unPerformanceEntryList
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef PerformanceEntryList where
-  fromJSRef = return . fmap PerformanceEntryList . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject PerformanceEntryList where
-  toGObject = GObject . castRef . unPerformanceEntryList
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = PerformanceEntryList . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToPerformanceEntryList :: IsGObject obj => obj -> PerformanceEntryList
-castToPerformanceEntryList = castTo gTypePerformanceEntryList "PerformanceEntryList"
-
-foreign import javascript unsafe "window[\"PerformanceEntryList\"]" gTypePerformanceEntryList' :: JSRef GType
-gTypePerformanceEntryList = GType gTypePerformanceEntryList'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.PerformanceMark".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.PerformanceEntry"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/PerformanceMark Mozilla PerformanceMark documentation>
-newtype PerformanceMark = PerformanceMark { unPerformanceMark :: JSRef PerformanceMark }
-
-instance Eq (PerformanceMark) where
-  (PerformanceMark a) == (PerformanceMark b) = js_eq a b
-
-instance PToJSRef PerformanceMark where
-  pToJSRef = unPerformanceMark
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef PerformanceMark where
-  pFromJSRef = PerformanceMark
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef PerformanceMark where
-  toJSRef = return . unPerformanceMark
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef PerformanceMark where
-  fromJSRef = return . fmap PerformanceMark . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsPerformanceEntry PerformanceMark
-instance IsGObject PerformanceMark where
-  toGObject = GObject . castRef . unPerformanceMark
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = PerformanceMark . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToPerformanceMark :: IsGObject obj => obj -> PerformanceMark
-castToPerformanceMark = castTo gTypePerformanceMark "PerformanceMark"
-
-foreign import javascript unsafe "window[\"PerformanceMark\"]" gTypePerformanceMark' :: JSRef GType
-gTypePerformanceMark = GType gTypePerformanceMark'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.PerformanceMeasure".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.PerformanceEntry"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/PerformanceMeasure Mozilla PerformanceMeasure documentation>
-newtype PerformanceMeasure = PerformanceMeasure { unPerformanceMeasure :: JSRef PerformanceMeasure }
-
-instance Eq (PerformanceMeasure) where
-  (PerformanceMeasure a) == (PerformanceMeasure b) = js_eq a b
-
-instance PToJSRef PerformanceMeasure where
-  pToJSRef = unPerformanceMeasure
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef PerformanceMeasure where
-  pFromJSRef = PerformanceMeasure
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef PerformanceMeasure where
-  toJSRef = return . unPerformanceMeasure
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef PerformanceMeasure where
-  fromJSRef = return . fmap PerformanceMeasure . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsPerformanceEntry PerformanceMeasure
-instance IsGObject PerformanceMeasure where
-  toGObject = GObject . castRef . unPerformanceMeasure
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = PerformanceMeasure . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToPerformanceMeasure :: IsGObject obj => obj -> PerformanceMeasure
-castToPerformanceMeasure = castTo gTypePerformanceMeasure "PerformanceMeasure"
-
-foreign import javascript unsafe "window[\"PerformanceMeasure\"]" gTypePerformanceMeasure' :: JSRef GType
-gTypePerformanceMeasure = GType gTypePerformanceMeasure'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.PerformanceNavigation".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/PerformanceNavigation Mozilla PerformanceNavigation documentation>
-newtype PerformanceNavigation = PerformanceNavigation { unPerformanceNavigation :: JSRef PerformanceNavigation }
-
-instance Eq (PerformanceNavigation) where
-  (PerformanceNavigation a) == (PerformanceNavigation b) = js_eq a b
-
-instance PToJSRef PerformanceNavigation where
-  pToJSRef = unPerformanceNavigation
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef PerformanceNavigation where
-  pFromJSRef = PerformanceNavigation
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef PerformanceNavigation where
-  toJSRef = return . unPerformanceNavigation
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef PerformanceNavigation where
-  fromJSRef = return . fmap PerformanceNavigation . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject PerformanceNavigation where
-  toGObject = GObject . castRef . unPerformanceNavigation
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = PerformanceNavigation . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToPerformanceNavigation :: IsGObject obj => obj -> PerformanceNavigation
-castToPerformanceNavigation = castTo gTypePerformanceNavigation "PerformanceNavigation"
-
-foreign import javascript unsafe "window[\"PerformanceNavigation\"]" gTypePerformanceNavigation' :: JSRef GType
-gTypePerformanceNavigation = GType gTypePerformanceNavigation'
-#else
-#ifndef USE_OLD_WEBKIT
-type IsPerformanceNavigation o = PerformanceNavigationClass o
-#endif
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.PerformanceResourceTiming".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.PerformanceEntry"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming Mozilla PerformanceResourceTiming documentation>
-newtype PerformanceResourceTiming = PerformanceResourceTiming { unPerformanceResourceTiming :: JSRef PerformanceResourceTiming }
-
-instance Eq (PerformanceResourceTiming) where
-  (PerformanceResourceTiming a) == (PerformanceResourceTiming b) = js_eq a b
-
-instance PToJSRef PerformanceResourceTiming where
-  pToJSRef = unPerformanceResourceTiming
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef PerformanceResourceTiming where
-  pFromJSRef = PerformanceResourceTiming
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef PerformanceResourceTiming where
-  toJSRef = return . unPerformanceResourceTiming
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef PerformanceResourceTiming where
-  fromJSRef = return . fmap PerformanceResourceTiming . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsPerformanceEntry PerformanceResourceTiming
-instance IsGObject PerformanceResourceTiming where
-  toGObject = GObject . castRef . unPerformanceResourceTiming
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = PerformanceResourceTiming . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToPerformanceResourceTiming :: IsGObject obj => obj -> PerformanceResourceTiming
-castToPerformanceResourceTiming = castTo gTypePerformanceResourceTiming "PerformanceResourceTiming"
-
-foreign import javascript unsafe "window[\"PerformanceResourceTiming\"]" gTypePerformanceResourceTiming' :: JSRef GType
-gTypePerformanceResourceTiming = GType gTypePerformanceResourceTiming'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.PerformanceTiming".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/PerformanceTiming Mozilla PerformanceTiming documentation>
-newtype PerformanceTiming = PerformanceTiming { unPerformanceTiming :: JSRef PerformanceTiming }
-
-instance Eq (PerformanceTiming) where
-  (PerformanceTiming a) == (PerformanceTiming b) = js_eq a b
-
-instance PToJSRef PerformanceTiming where
-  pToJSRef = unPerformanceTiming
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef PerformanceTiming where
-  pFromJSRef = PerformanceTiming
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef PerformanceTiming where
-  toJSRef = return . unPerformanceTiming
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef PerformanceTiming where
-  fromJSRef = return . fmap PerformanceTiming . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject PerformanceTiming where
-  toGObject = GObject . castRef . unPerformanceTiming
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = PerformanceTiming . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToPerformanceTiming :: IsGObject obj => obj -> PerformanceTiming
-castToPerformanceTiming = castTo gTypePerformanceTiming "PerformanceTiming"
-
-foreign import javascript unsafe "window[\"PerformanceTiming\"]" gTypePerformanceTiming' :: JSRef GType
-gTypePerformanceTiming = GType gTypePerformanceTiming'
-#else
-#ifndef USE_OLD_WEBKIT
-type IsPerformanceTiming o = PerformanceTimingClass o
-#endif
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.PeriodicWave".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/PeriodicWave Mozilla PeriodicWave documentation>
-newtype PeriodicWave = PeriodicWave { unPeriodicWave :: JSRef PeriodicWave }
-
-instance Eq (PeriodicWave) where
-  (PeriodicWave a) == (PeriodicWave b) = js_eq a b
-
-instance PToJSRef PeriodicWave where
-  pToJSRef = unPeriodicWave
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef PeriodicWave where
-  pFromJSRef = PeriodicWave
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef PeriodicWave where
-  toJSRef = return . unPeriodicWave
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef PeriodicWave where
-  fromJSRef = return . fmap PeriodicWave . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject PeriodicWave where
-  toGObject = GObject . castRef . unPeriodicWave
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = PeriodicWave . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToPeriodicWave :: IsGObject obj => obj -> PeriodicWave
-castToPeriodicWave = castTo gTypePeriodicWave "PeriodicWave"
-
-foreign import javascript unsafe "window[\"PeriodicWave\"]" gTypePeriodicWave' :: JSRef GType
-gTypePeriodicWave = GType gTypePeriodicWave'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.Plugin".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/Plugin Mozilla Plugin documentation>
-newtype Plugin = Plugin { unPlugin :: JSRef Plugin }
-
-instance Eq (Plugin) where
-  (Plugin a) == (Plugin b) = js_eq a b
-
-instance PToJSRef Plugin where
-  pToJSRef = unPlugin
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef Plugin where
-  pFromJSRef = Plugin
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef Plugin where
-  toJSRef = return . unPlugin
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef Plugin where
-  fromJSRef = return . fmap Plugin . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject Plugin where
-  toGObject = GObject . castRef . unPlugin
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = Plugin . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToPlugin :: IsGObject obj => obj -> Plugin
-castToPlugin = castTo gTypePlugin "Plugin"
-
-foreign import javascript unsafe "window[\"Plugin\"]" gTypePlugin' :: JSRef GType
-gTypePlugin = GType gTypePlugin'
-#else
-type IsPlugin o = PluginClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.PluginArray".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/PluginArray Mozilla PluginArray documentation>
-newtype PluginArray = PluginArray { unPluginArray :: JSRef PluginArray }
-
-instance Eq (PluginArray) where
-  (PluginArray a) == (PluginArray b) = js_eq a b
-
-instance PToJSRef PluginArray where
-  pToJSRef = unPluginArray
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef PluginArray where
-  pFromJSRef = PluginArray
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef PluginArray where
-  toJSRef = return . unPluginArray
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef PluginArray where
-  fromJSRef = return . fmap PluginArray . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject PluginArray where
-  toGObject = GObject . castRef . unPluginArray
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = PluginArray . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToPluginArray :: IsGObject obj => obj -> PluginArray
-castToPluginArray = castTo gTypePluginArray "PluginArray"
-
-foreign import javascript unsafe "window[\"PluginArray\"]" gTypePluginArray' :: JSRef GType
-gTypePluginArray = GType gTypePluginArray'
-#else
-type IsPluginArray o = PluginArrayClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.PopStateEvent".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.Event"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/PopStateEvent Mozilla PopStateEvent documentation>
-newtype PopStateEvent = PopStateEvent { unPopStateEvent :: JSRef PopStateEvent }
-
-instance Eq (PopStateEvent) where
-  (PopStateEvent a) == (PopStateEvent b) = js_eq a b
-
-instance PToJSRef PopStateEvent where
-  pToJSRef = unPopStateEvent
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef PopStateEvent where
-  pFromJSRef = PopStateEvent
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef PopStateEvent where
-  toJSRef = return . unPopStateEvent
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef PopStateEvent where
-  fromJSRef = return . fmap PopStateEvent . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEvent PopStateEvent
-instance IsGObject PopStateEvent where
-  toGObject = GObject . castRef . unPopStateEvent
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = PopStateEvent . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToPopStateEvent :: IsGObject obj => obj -> PopStateEvent
-castToPopStateEvent = castTo gTypePopStateEvent "PopStateEvent"
-
-foreign import javascript unsafe "window[\"PopStateEvent\"]" gTypePopStateEvent' :: JSRef GType
-gTypePopStateEvent = GType gTypePopStateEvent'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.PositionError".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/PositionError Mozilla PositionError documentation>
-newtype PositionError = PositionError { unPositionError :: JSRef PositionError }
-
-instance Eq (PositionError) where
-  (PositionError a) == (PositionError b) = js_eq a b
-
-instance PToJSRef PositionError where
-  pToJSRef = unPositionError
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef PositionError where
-  pFromJSRef = PositionError
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef PositionError where
-  toJSRef = return . unPositionError
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef PositionError where
-  fromJSRef = return . fmap PositionError . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject PositionError where
-  toGObject = GObject . castRef . unPositionError
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = PositionError . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToPositionError :: IsGObject obj => obj -> PositionError
-castToPositionError = castTo gTypePositionError "PositionError"
-
-foreign import javascript unsafe "window[\"PositionError\"]" gTypePositionError' :: JSRef GType
-gTypePositionError = GType gTypePositionError'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.ProcessingInstruction".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.CharacterData"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/ProcessingInstruction Mozilla ProcessingInstruction documentation>
-newtype ProcessingInstruction = ProcessingInstruction { unProcessingInstruction :: JSRef ProcessingInstruction }
-
-instance Eq (ProcessingInstruction) where
-  (ProcessingInstruction a) == (ProcessingInstruction b) = js_eq a b
-
-instance PToJSRef ProcessingInstruction where
-  pToJSRef = unProcessingInstruction
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef ProcessingInstruction where
-  pFromJSRef = ProcessingInstruction
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef ProcessingInstruction where
-  toJSRef = return . unProcessingInstruction
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef ProcessingInstruction where
-  fromJSRef = return . fmap ProcessingInstruction . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsCharacterData ProcessingInstruction
-instance IsNode ProcessingInstruction
-instance IsEventTarget ProcessingInstruction
-instance IsGObject ProcessingInstruction where
-  toGObject = GObject . castRef . unProcessingInstruction
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = ProcessingInstruction . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToProcessingInstruction :: IsGObject obj => obj -> ProcessingInstruction
-castToProcessingInstruction = castTo gTypeProcessingInstruction "ProcessingInstruction"
-
-foreign import javascript unsafe "window[\"ProcessingInstruction\"]" gTypeProcessingInstruction' :: JSRef GType
-gTypeProcessingInstruction = GType gTypeProcessingInstruction'
-#else
-type IsProcessingInstruction o = ProcessingInstructionClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.ProgressEvent".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.Event"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/ProgressEvent Mozilla ProgressEvent documentation>
-newtype ProgressEvent = ProgressEvent { unProgressEvent :: JSRef ProgressEvent }
-
-instance Eq (ProgressEvent) where
-  (ProgressEvent a) == (ProgressEvent b) = js_eq a b
-
-instance PToJSRef ProgressEvent where
-  pToJSRef = unProgressEvent
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef ProgressEvent where
-  pFromJSRef = ProgressEvent
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef ProgressEvent where
-  toJSRef = return . unProgressEvent
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef ProgressEvent where
-  fromJSRef = return . fmap ProgressEvent . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsEvent o => IsProgressEvent o
-toProgressEvent :: IsProgressEvent o => o -> ProgressEvent
-toProgressEvent = unsafeCastGObject . toGObject
-
-instance IsProgressEvent ProgressEvent
-instance IsEvent ProgressEvent
-instance IsGObject ProgressEvent where
-  toGObject = GObject . castRef . unProgressEvent
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = ProgressEvent . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToProgressEvent :: IsGObject obj => obj -> ProgressEvent
-castToProgressEvent = castTo gTypeProgressEvent "ProgressEvent"
-
-foreign import javascript unsafe "window[\"ProgressEvent\"]" gTypeProgressEvent' :: JSRef GType
-gTypeProgressEvent = GType gTypeProgressEvent'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.QuickTimePluginReplacement".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/QuickTimePluginReplacement Mozilla QuickTimePluginReplacement documentation>
-newtype QuickTimePluginReplacement = QuickTimePluginReplacement { unQuickTimePluginReplacement :: JSRef QuickTimePluginReplacement }
-
-instance Eq (QuickTimePluginReplacement) where
-  (QuickTimePluginReplacement a) == (QuickTimePluginReplacement b) = js_eq a b
-
-instance PToJSRef QuickTimePluginReplacement where
-  pToJSRef = unQuickTimePluginReplacement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef QuickTimePluginReplacement where
-  pFromJSRef = QuickTimePluginReplacement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef QuickTimePluginReplacement where
-  toJSRef = return . unQuickTimePluginReplacement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef QuickTimePluginReplacement where
-  fromJSRef = return . fmap QuickTimePluginReplacement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject QuickTimePluginReplacement where
-  toGObject = GObject . castRef . unQuickTimePluginReplacement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = QuickTimePluginReplacement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToQuickTimePluginReplacement :: IsGObject obj => obj -> QuickTimePluginReplacement
-castToQuickTimePluginReplacement = castTo gTypeQuickTimePluginReplacement "QuickTimePluginReplacement"
-
-foreign import javascript unsafe "window[\"QuickTimePluginReplacement\"]" gTypeQuickTimePluginReplacement' :: JSRef GType
-gTypeQuickTimePluginReplacement = GType gTypeQuickTimePluginReplacement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.RGBColor".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/RGBColor Mozilla RGBColor documentation>
-newtype RGBColor = RGBColor { unRGBColor :: JSRef RGBColor }
-
-instance Eq (RGBColor) where
-  (RGBColor a) == (RGBColor b) = js_eq a b
-
-instance PToJSRef RGBColor where
-  pToJSRef = unRGBColor
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef RGBColor where
-  pFromJSRef = RGBColor
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef RGBColor where
-  toJSRef = return . unRGBColor
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef RGBColor where
-  fromJSRef = return . fmap RGBColor . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject RGBColor where
-  toGObject = GObject . castRef . unRGBColor
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = RGBColor . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToRGBColor :: IsGObject obj => obj -> RGBColor
-castToRGBColor = castTo gTypeRGBColor "RGBColor"
-
-foreign import javascript unsafe "window[\"RGBColor\"]" gTypeRGBColor' :: JSRef GType
-gTypeRGBColor = GType gTypeRGBColor'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.RTCConfiguration".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/RTCConfiguration Mozilla RTCConfiguration documentation>
-newtype RTCConfiguration = RTCConfiguration { unRTCConfiguration :: JSRef RTCConfiguration }
-
-instance Eq (RTCConfiguration) where
-  (RTCConfiguration a) == (RTCConfiguration b) = js_eq a b
-
-instance PToJSRef RTCConfiguration where
-  pToJSRef = unRTCConfiguration
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef RTCConfiguration where
-  pFromJSRef = RTCConfiguration
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef RTCConfiguration where
-  toJSRef = return . unRTCConfiguration
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef RTCConfiguration where
-  fromJSRef = return . fmap RTCConfiguration . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject RTCConfiguration where
-  toGObject = GObject . castRef . unRTCConfiguration
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = RTCConfiguration . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToRTCConfiguration :: IsGObject obj => obj -> RTCConfiguration
-castToRTCConfiguration = castTo gTypeRTCConfiguration "RTCConfiguration"
-
-foreign import javascript unsafe "window[\"RTCConfiguration\"]" gTypeRTCConfiguration' :: JSRef GType
-gTypeRTCConfiguration = GType gTypeRTCConfiguration'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.RTCDTMFSender".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/RTCDTMFSender Mozilla RTCDTMFSender documentation>
-newtype RTCDTMFSender = RTCDTMFSender { unRTCDTMFSender :: JSRef RTCDTMFSender }
-
-instance Eq (RTCDTMFSender) where
-  (RTCDTMFSender a) == (RTCDTMFSender b) = js_eq a b
-
-instance PToJSRef RTCDTMFSender where
-  pToJSRef = unRTCDTMFSender
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef RTCDTMFSender where
-  pFromJSRef = RTCDTMFSender
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef RTCDTMFSender where
-  toJSRef = return . unRTCDTMFSender
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef RTCDTMFSender where
-  fromJSRef = return . fmap RTCDTMFSender . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEventTarget RTCDTMFSender
-instance IsGObject RTCDTMFSender where
-  toGObject = GObject . castRef . unRTCDTMFSender
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = RTCDTMFSender . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToRTCDTMFSender :: IsGObject obj => obj -> RTCDTMFSender
-castToRTCDTMFSender = castTo gTypeRTCDTMFSender "RTCDTMFSender"
-
-foreign import javascript unsafe "window[\"RTCDTMFSender\"]" gTypeRTCDTMFSender' :: JSRef GType
-gTypeRTCDTMFSender = GType gTypeRTCDTMFSender'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.RTCDTMFToneChangeEvent".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.Event"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/RTCDTMFToneChangeEvent Mozilla RTCDTMFToneChangeEvent documentation>
-newtype RTCDTMFToneChangeEvent = RTCDTMFToneChangeEvent { unRTCDTMFToneChangeEvent :: JSRef RTCDTMFToneChangeEvent }
-
-instance Eq (RTCDTMFToneChangeEvent) where
-  (RTCDTMFToneChangeEvent a) == (RTCDTMFToneChangeEvent b) = js_eq a b
-
-instance PToJSRef RTCDTMFToneChangeEvent where
-  pToJSRef = unRTCDTMFToneChangeEvent
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef RTCDTMFToneChangeEvent where
-  pFromJSRef = RTCDTMFToneChangeEvent
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef RTCDTMFToneChangeEvent where
-  toJSRef = return . unRTCDTMFToneChangeEvent
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef RTCDTMFToneChangeEvent where
-  fromJSRef = return . fmap RTCDTMFToneChangeEvent . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEvent RTCDTMFToneChangeEvent
-instance IsGObject RTCDTMFToneChangeEvent where
-  toGObject = GObject . castRef . unRTCDTMFToneChangeEvent
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = RTCDTMFToneChangeEvent . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToRTCDTMFToneChangeEvent :: IsGObject obj => obj -> RTCDTMFToneChangeEvent
-castToRTCDTMFToneChangeEvent = castTo gTypeRTCDTMFToneChangeEvent "RTCDTMFToneChangeEvent"
-
-foreign import javascript unsafe "window[\"RTCDTMFToneChangeEvent\"]" gTypeRTCDTMFToneChangeEvent' :: JSRef GType
-gTypeRTCDTMFToneChangeEvent = GType gTypeRTCDTMFToneChangeEvent'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.RTCDataChannel".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/RTCDataChannel Mozilla RTCDataChannel documentation>
-newtype RTCDataChannel = RTCDataChannel { unRTCDataChannel :: JSRef RTCDataChannel }
-
-instance Eq (RTCDataChannel) where
-  (RTCDataChannel a) == (RTCDataChannel b) = js_eq a b
-
-instance PToJSRef RTCDataChannel where
-  pToJSRef = unRTCDataChannel
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef RTCDataChannel where
-  pFromJSRef = RTCDataChannel
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef RTCDataChannel where
-  toJSRef = return . unRTCDataChannel
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef RTCDataChannel where
-  fromJSRef = return . fmap RTCDataChannel . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEventTarget RTCDataChannel
-instance IsGObject RTCDataChannel where
-  toGObject = GObject . castRef . unRTCDataChannel
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = RTCDataChannel . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToRTCDataChannel :: IsGObject obj => obj -> RTCDataChannel
-castToRTCDataChannel = castTo gTypeRTCDataChannel "RTCDataChannel"
-
-foreign import javascript unsafe "window[\"RTCDataChannel\"]" gTypeRTCDataChannel' :: JSRef GType
-gTypeRTCDataChannel = GType gTypeRTCDataChannel'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.RTCDataChannelEvent".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.Event"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/RTCDataChannelEvent Mozilla RTCDataChannelEvent documentation>
-newtype RTCDataChannelEvent = RTCDataChannelEvent { unRTCDataChannelEvent :: JSRef RTCDataChannelEvent }
-
-instance Eq (RTCDataChannelEvent) where
-  (RTCDataChannelEvent a) == (RTCDataChannelEvent b) = js_eq a b
-
-instance PToJSRef RTCDataChannelEvent where
-  pToJSRef = unRTCDataChannelEvent
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef RTCDataChannelEvent where
-  pFromJSRef = RTCDataChannelEvent
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef RTCDataChannelEvent where
-  toJSRef = return . unRTCDataChannelEvent
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef RTCDataChannelEvent where
-  fromJSRef = return . fmap RTCDataChannelEvent . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEvent RTCDataChannelEvent
-instance IsGObject RTCDataChannelEvent where
-  toGObject = GObject . castRef . unRTCDataChannelEvent
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = RTCDataChannelEvent . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToRTCDataChannelEvent :: IsGObject obj => obj -> RTCDataChannelEvent
-castToRTCDataChannelEvent = castTo gTypeRTCDataChannelEvent "RTCDataChannelEvent"
-
-foreign import javascript unsafe "window[\"RTCDataChannelEvent\"]" gTypeRTCDataChannelEvent' :: JSRef GType
-gTypeRTCDataChannelEvent = GType gTypeRTCDataChannelEvent'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.RTCIceCandidate".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/RTCIceCandidate Mozilla RTCIceCandidate documentation>
-newtype RTCIceCandidate = RTCIceCandidate { unRTCIceCandidate :: JSRef RTCIceCandidate }
-
-instance Eq (RTCIceCandidate) where
-  (RTCIceCandidate a) == (RTCIceCandidate b) = js_eq a b
-
-instance PToJSRef RTCIceCandidate where
-  pToJSRef = unRTCIceCandidate
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef RTCIceCandidate where
-  pFromJSRef = RTCIceCandidate
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef RTCIceCandidate where
-  toJSRef = return . unRTCIceCandidate
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef RTCIceCandidate where
-  fromJSRef = return . fmap RTCIceCandidate . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject RTCIceCandidate where
-  toGObject = GObject . castRef . unRTCIceCandidate
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = RTCIceCandidate . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToRTCIceCandidate :: IsGObject obj => obj -> RTCIceCandidate
-castToRTCIceCandidate = castTo gTypeRTCIceCandidate "RTCIceCandidate"
-
-foreign import javascript unsafe "window[\"RTCIceCandidate\"]" gTypeRTCIceCandidate' :: JSRef GType
-gTypeRTCIceCandidate = GType gTypeRTCIceCandidate'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.RTCIceCandidateEvent".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.Event"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/RTCIceCandidateEvent Mozilla RTCIceCandidateEvent documentation>
-newtype RTCIceCandidateEvent = RTCIceCandidateEvent { unRTCIceCandidateEvent :: JSRef RTCIceCandidateEvent }
-
-instance Eq (RTCIceCandidateEvent) where
-  (RTCIceCandidateEvent a) == (RTCIceCandidateEvent b) = js_eq a b
-
-instance PToJSRef RTCIceCandidateEvent where
-  pToJSRef = unRTCIceCandidateEvent
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef RTCIceCandidateEvent where
-  pFromJSRef = RTCIceCandidateEvent
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef RTCIceCandidateEvent where
-  toJSRef = return . unRTCIceCandidateEvent
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef RTCIceCandidateEvent where
-  fromJSRef = return . fmap RTCIceCandidateEvent . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEvent RTCIceCandidateEvent
-instance IsGObject RTCIceCandidateEvent where
-  toGObject = GObject . castRef . unRTCIceCandidateEvent
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = RTCIceCandidateEvent . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToRTCIceCandidateEvent :: IsGObject obj => obj -> RTCIceCandidateEvent
-castToRTCIceCandidateEvent = castTo gTypeRTCIceCandidateEvent "RTCIceCandidateEvent"
-
-foreign import javascript unsafe "window[\"RTCIceCandidateEvent\"]" gTypeRTCIceCandidateEvent' :: JSRef GType
-gTypeRTCIceCandidateEvent = GType gTypeRTCIceCandidateEvent'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.RTCIceServer".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/RTCIceServer Mozilla RTCIceServer documentation>
-newtype RTCIceServer = RTCIceServer { unRTCIceServer :: JSRef RTCIceServer }
-
-instance Eq (RTCIceServer) where
-  (RTCIceServer a) == (RTCIceServer b) = js_eq a b
-
-instance PToJSRef RTCIceServer where
-  pToJSRef = unRTCIceServer
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef RTCIceServer where
-  pFromJSRef = RTCIceServer
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef RTCIceServer where
-  toJSRef = return . unRTCIceServer
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef RTCIceServer where
-  fromJSRef = return . fmap RTCIceServer . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject RTCIceServer where
-  toGObject = GObject . castRef . unRTCIceServer
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = RTCIceServer . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToRTCIceServer :: IsGObject obj => obj -> RTCIceServer
-castToRTCIceServer = castTo gTypeRTCIceServer "RTCIceServer"
-
-foreign import javascript unsafe "window[\"RTCIceServer\"]" gTypeRTCIceServer' :: JSRef GType
-gTypeRTCIceServer = GType gTypeRTCIceServer'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.RTCPeerConnection".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/webkitRTCPeerConnection Mozilla webkitRTCPeerConnection documentation>
-newtype RTCPeerConnection = RTCPeerConnection { unRTCPeerConnection :: JSRef RTCPeerConnection }
-
-instance Eq (RTCPeerConnection) where
-  (RTCPeerConnection a) == (RTCPeerConnection b) = js_eq a b
-
-instance PToJSRef RTCPeerConnection where
-  pToJSRef = unRTCPeerConnection
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef RTCPeerConnection where
-  pFromJSRef = RTCPeerConnection
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef RTCPeerConnection where
-  toJSRef = return . unRTCPeerConnection
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef RTCPeerConnection where
-  fromJSRef = return . fmap RTCPeerConnection . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEventTarget RTCPeerConnection
-instance IsGObject RTCPeerConnection where
-  toGObject = GObject . castRef . unRTCPeerConnection
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = RTCPeerConnection . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToRTCPeerConnection :: IsGObject obj => obj -> RTCPeerConnection
-castToRTCPeerConnection = castTo gTypeRTCPeerConnection "RTCPeerConnection"
-
-foreign import javascript unsafe "window[\"webkitRTCPeerConnection\"]" gTypeRTCPeerConnection' :: JSRef GType
-gTypeRTCPeerConnection = GType gTypeRTCPeerConnection'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.RTCSessionDescription".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/RTCSessionDescription Mozilla RTCSessionDescription documentation>
-newtype RTCSessionDescription = RTCSessionDescription { unRTCSessionDescription :: JSRef RTCSessionDescription }
-
-instance Eq (RTCSessionDescription) where
-  (RTCSessionDescription a) == (RTCSessionDescription b) = js_eq a b
-
-instance PToJSRef RTCSessionDescription where
-  pToJSRef = unRTCSessionDescription
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef RTCSessionDescription where
-  pFromJSRef = RTCSessionDescription
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef RTCSessionDescription where
-  toJSRef = return . unRTCSessionDescription
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef RTCSessionDescription where
-  fromJSRef = return . fmap RTCSessionDescription . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject RTCSessionDescription where
-  toGObject = GObject . castRef . unRTCSessionDescription
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = RTCSessionDescription . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToRTCSessionDescription :: IsGObject obj => obj -> RTCSessionDescription
-castToRTCSessionDescription = castTo gTypeRTCSessionDescription "RTCSessionDescription"
-
-foreign import javascript unsafe "window[\"RTCSessionDescription\"]" gTypeRTCSessionDescription' :: JSRef GType
-gTypeRTCSessionDescription = GType gTypeRTCSessionDescription'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.RTCStatsReport".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/RTCStatsReport Mozilla RTCStatsReport documentation>
-newtype RTCStatsReport = RTCStatsReport { unRTCStatsReport :: JSRef RTCStatsReport }
-
-instance Eq (RTCStatsReport) where
-  (RTCStatsReport a) == (RTCStatsReport b) = js_eq a b
-
-instance PToJSRef RTCStatsReport where
-  pToJSRef = unRTCStatsReport
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef RTCStatsReport where
-  pFromJSRef = RTCStatsReport
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef RTCStatsReport where
-  toJSRef = return . unRTCStatsReport
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef RTCStatsReport where
-  fromJSRef = return . fmap RTCStatsReport . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject RTCStatsReport where
-  toGObject = GObject . castRef . unRTCStatsReport
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = RTCStatsReport . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToRTCStatsReport :: IsGObject obj => obj -> RTCStatsReport
-castToRTCStatsReport = castTo gTypeRTCStatsReport "RTCStatsReport"
-
-foreign import javascript unsafe "window[\"RTCStatsReport\"]" gTypeRTCStatsReport' :: JSRef GType
-gTypeRTCStatsReport = GType gTypeRTCStatsReport'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.RTCStatsResponse".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/RTCStatsResponse Mozilla RTCStatsResponse documentation>
-newtype RTCStatsResponse = RTCStatsResponse { unRTCStatsResponse :: JSRef RTCStatsResponse }
-
-instance Eq (RTCStatsResponse) where
-  (RTCStatsResponse a) == (RTCStatsResponse b) = js_eq a b
-
-instance PToJSRef RTCStatsResponse where
-  pToJSRef = unRTCStatsResponse
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef RTCStatsResponse where
-  pFromJSRef = RTCStatsResponse
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef RTCStatsResponse where
-  toJSRef = return . unRTCStatsResponse
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef RTCStatsResponse where
-  fromJSRef = return . fmap RTCStatsResponse . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject RTCStatsResponse where
-  toGObject = GObject . castRef . unRTCStatsResponse
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = RTCStatsResponse . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToRTCStatsResponse :: IsGObject obj => obj -> RTCStatsResponse
-castToRTCStatsResponse = castTo gTypeRTCStatsResponse "RTCStatsResponse"
-
-foreign import javascript unsafe "window[\"RTCStatsResponse\"]" gTypeRTCStatsResponse' :: JSRef GType
-gTypeRTCStatsResponse = GType gTypeRTCStatsResponse'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.RadioNodeList".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.NodeList"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/RadioNodeList Mozilla RadioNodeList documentation>
-newtype RadioNodeList = RadioNodeList { unRadioNodeList :: JSRef RadioNodeList }
-
-instance Eq (RadioNodeList) where
-  (RadioNodeList a) == (RadioNodeList b) = js_eq a b
-
-instance PToJSRef RadioNodeList where
-  pToJSRef = unRadioNodeList
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef RadioNodeList where
-  pFromJSRef = RadioNodeList
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef RadioNodeList where
-  toJSRef = return . unRadioNodeList
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef RadioNodeList where
-  fromJSRef = return . fmap RadioNodeList . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsNodeList RadioNodeList
-instance IsGObject RadioNodeList where
-  toGObject = GObject . castRef . unRadioNodeList
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = RadioNodeList . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToRadioNodeList :: IsGObject obj => obj -> RadioNodeList
-castToRadioNodeList = castTo gTypeRadioNodeList "RadioNodeList"
-
-foreign import javascript unsafe "window[\"RadioNodeList\"]" gTypeRadioNodeList' :: JSRef GType
-gTypeRadioNodeList = GType gTypeRadioNodeList'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.Range".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/Range Mozilla Range documentation>
-newtype Range = Range { unRange :: JSRef Range }
-
-instance Eq (Range) where
-  (Range a) == (Range b) = js_eq a b
-
-instance PToJSRef Range where
-  pToJSRef = unRange
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef Range where
-  pFromJSRef = Range
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef Range where
-  toJSRef = return . unRange
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef Range where
-  fromJSRef = return . fmap Range . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject Range where
-  toGObject = GObject . castRef . unRange
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = Range . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToRange :: IsGObject obj => obj -> Range
-castToRange = castTo gTypeRange "Range"
-
-foreign import javascript unsafe "window[\"Range\"]" gTypeRange' :: JSRef GType
-gTypeRange = GType gTypeRange'
-#else
-type IsRange o = RangeClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.ReadableStream".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream Mozilla ReadableStream documentation>
-newtype ReadableStream = ReadableStream { unReadableStream :: JSRef ReadableStream }
-
-instance Eq (ReadableStream) where
-  (ReadableStream a) == (ReadableStream b) = js_eq a b
-
-instance PToJSRef ReadableStream where
-  pToJSRef = unReadableStream
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef ReadableStream where
-  pFromJSRef = ReadableStream
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef ReadableStream where
-  toJSRef = return . unReadableStream
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef ReadableStream where
-  fromJSRef = return . fmap ReadableStream . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject ReadableStream where
-  toGObject = GObject . castRef . unReadableStream
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = ReadableStream . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToReadableStream :: IsGObject obj => obj -> ReadableStream
-castToReadableStream = castTo gTypeReadableStream "ReadableStream"
-
-foreign import javascript unsafe "window[\"ReadableStream\"]" gTypeReadableStream' :: JSRef GType
-gTypeReadableStream = GType gTypeReadableStream'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.Rect".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/Rect Mozilla Rect documentation>
-newtype Rect = Rect { unRect :: JSRef Rect }
-
-instance Eq (Rect) where
-  (Rect a) == (Rect b) = js_eq a b
-
-instance PToJSRef Rect where
-  pToJSRef = unRect
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef Rect where
-  pFromJSRef = Rect
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef Rect where
-  toJSRef = return . unRect
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef Rect where
-  fromJSRef = return . fmap Rect . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject Rect where
-  toGObject = GObject . castRef . unRect
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = Rect . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToRect :: IsGObject obj => obj -> Rect
-castToRect = castTo gTypeRect "Rect"
-
-foreign import javascript unsafe "window[\"Rect\"]" gTypeRect' :: JSRef GType
-gTypeRect = GType gTypeRect'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SQLError".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SQLError Mozilla SQLError documentation>
-newtype SQLError = SQLError { unSQLError :: JSRef SQLError }
-
-instance Eq (SQLError) where
-  (SQLError a) == (SQLError b) = js_eq a b
-
-instance PToJSRef SQLError where
-  pToJSRef = unSQLError
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SQLError where
-  pFromJSRef = SQLError
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SQLError where
-  toJSRef = return . unSQLError
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SQLError where
-  fromJSRef = return . fmap SQLError . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject SQLError where
-  toGObject = GObject . castRef . unSQLError
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SQLError . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSQLError :: IsGObject obj => obj -> SQLError
-castToSQLError = castTo gTypeSQLError "SQLError"
-
-foreign import javascript unsafe "window[\"SQLError\"]" gTypeSQLError' :: JSRef GType
-gTypeSQLError = GType gTypeSQLError'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SQLResultSet".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SQLResultSet Mozilla SQLResultSet documentation>
-newtype SQLResultSet = SQLResultSet { unSQLResultSet :: JSRef SQLResultSet }
-
-instance Eq (SQLResultSet) where
-  (SQLResultSet a) == (SQLResultSet b) = js_eq a b
-
-instance PToJSRef SQLResultSet where
-  pToJSRef = unSQLResultSet
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SQLResultSet where
-  pFromJSRef = SQLResultSet
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SQLResultSet where
-  toJSRef = return . unSQLResultSet
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SQLResultSet where
-  fromJSRef = return . fmap SQLResultSet . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject SQLResultSet where
-  toGObject = GObject . castRef . unSQLResultSet
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SQLResultSet . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSQLResultSet :: IsGObject obj => obj -> SQLResultSet
-castToSQLResultSet = castTo gTypeSQLResultSet "SQLResultSet"
-
-foreign import javascript unsafe "window[\"SQLResultSet\"]" gTypeSQLResultSet' :: JSRef GType
-gTypeSQLResultSet = GType gTypeSQLResultSet'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SQLResultSetRowList".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SQLResultSetRowList Mozilla SQLResultSetRowList documentation>
-newtype SQLResultSetRowList = SQLResultSetRowList { unSQLResultSetRowList :: JSRef SQLResultSetRowList }
-
-instance Eq (SQLResultSetRowList) where
-  (SQLResultSetRowList a) == (SQLResultSetRowList b) = js_eq a b
-
-instance PToJSRef SQLResultSetRowList where
-  pToJSRef = unSQLResultSetRowList
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SQLResultSetRowList where
-  pFromJSRef = SQLResultSetRowList
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SQLResultSetRowList where
-  toJSRef = return . unSQLResultSetRowList
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SQLResultSetRowList where
-  fromJSRef = return . fmap SQLResultSetRowList . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject SQLResultSetRowList where
-  toGObject = GObject . castRef . unSQLResultSetRowList
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SQLResultSetRowList . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSQLResultSetRowList :: IsGObject obj => obj -> SQLResultSetRowList
-castToSQLResultSetRowList = castTo gTypeSQLResultSetRowList "SQLResultSetRowList"
-
-foreign import javascript unsafe "window[\"SQLResultSetRowList\"]" gTypeSQLResultSetRowList' :: JSRef GType
-gTypeSQLResultSetRowList = GType gTypeSQLResultSetRowList'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SQLTransaction".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SQLTransaction Mozilla SQLTransaction documentation>
-newtype SQLTransaction = SQLTransaction { unSQLTransaction :: JSRef SQLTransaction }
-
-instance Eq (SQLTransaction) where
-  (SQLTransaction a) == (SQLTransaction b) = js_eq a b
-
-instance PToJSRef SQLTransaction where
-  pToJSRef = unSQLTransaction
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SQLTransaction where
-  pFromJSRef = SQLTransaction
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SQLTransaction where
-  toJSRef = return . unSQLTransaction
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SQLTransaction where
-  fromJSRef = return . fmap SQLTransaction . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject SQLTransaction where
-  toGObject = GObject . castRef . unSQLTransaction
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SQLTransaction . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSQLTransaction :: IsGObject obj => obj -> SQLTransaction
-castToSQLTransaction = castTo gTypeSQLTransaction "SQLTransaction"
-
-foreign import javascript unsafe "window[\"SQLTransaction\"]" gTypeSQLTransaction' :: JSRef GType
-gTypeSQLTransaction = GType gTypeSQLTransaction'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGAElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGGraphicsElement"
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGAElement Mozilla SVGAElement documentation>
-newtype SVGAElement = SVGAElement { unSVGAElement :: JSRef SVGAElement }
-
-instance Eq (SVGAElement) where
-  (SVGAElement a) == (SVGAElement b) = js_eq a b
-
-instance PToJSRef SVGAElement where
-  pToJSRef = unSVGAElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGAElement where
-  pFromJSRef = SVGAElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGAElement where
-  toJSRef = return . unSVGAElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGAElement where
-  fromJSRef = return . fmap SVGAElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGGraphicsElement SVGAElement
-instance IsSVGElement SVGAElement
-instance IsElement SVGAElement
-instance IsNode SVGAElement
-instance IsEventTarget SVGAElement
-instance IsGObject SVGAElement where
-  toGObject = GObject . castRef . unSVGAElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGAElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGAElement :: IsGObject obj => obj -> SVGAElement
-castToSVGAElement = castTo gTypeSVGAElement "SVGAElement"
-
-foreign import javascript unsafe "window[\"SVGAElement\"]" gTypeSVGAElement' :: JSRef GType
-gTypeSVGAElement = GType gTypeSVGAElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGAltGlyphDefElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGAltGlyphDefElement Mozilla SVGAltGlyphDefElement documentation>
-newtype SVGAltGlyphDefElement = SVGAltGlyphDefElement { unSVGAltGlyphDefElement :: JSRef SVGAltGlyphDefElement }
-
-instance Eq (SVGAltGlyphDefElement) where
-  (SVGAltGlyphDefElement a) == (SVGAltGlyphDefElement b) = js_eq a b
-
-instance PToJSRef SVGAltGlyphDefElement where
-  pToJSRef = unSVGAltGlyphDefElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGAltGlyphDefElement where
-  pFromJSRef = SVGAltGlyphDefElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGAltGlyphDefElement where
-  toJSRef = return . unSVGAltGlyphDefElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGAltGlyphDefElement where
-  fromJSRef = return . fmap SVGAltGlyphDefElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGElement SVGAltGlyphDefElement
-instance IsElement SVGAltGlyphDefElement
-instance IsNode SVGAltGlyphDefElement
-instance IsEventTarget SVGAltGlyphDefElement
-instance IsGObject SVGAltGlyphDefElement where
-  toGObject = GObject . castRef . unSVGAltGlyphDefElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGAltGlyphDefElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGAltGlyphDefElement :: IsGObject obj => obj -> SVGAltGlyphDefElement
-castToSVGAltGlyphDefElement = castTo gTypeSVGAltGlyphDefElement "SVGAltGlyphDefElement"
-
-foreign import javascript unsafe "window[\"SVGAltGlyphDefElement\"]" gTypeSVGAltGlyphDefElement' :: JSRef GType
-gTypeSVGAltGlyphDefElement = GType gTypeSVGAltGlyphDefElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGAltGlyphElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGTextPositioningElement"
---     * "GHCJS.DOM.SVGTextContentElement"
---     * "GHCJS.DOM.SVGGraphicsElement"
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGAltGlyphElement Mozilla SVGAltGlyphElement documentation>
-newtype SVGAltGlyphElement = SVGAltGlyphElement { unSVGAltGlyphElement :: JSRef SVGAltGlyphElement }
-
-instance Eq (SVGAltGlyphElement) where
-  (SVGAltGlyphElement a) == (SVGAltGlyphElement b) = js_eq a b
-
-instance PToJSRef SVGAltGlyphElement where
-  pToJSRef = unSVGAltGlyphElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGAltGlyphElement where
-  pFromJSRef = SVGAltGlyphElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGAltGlyphElement where
-  toJSRef = return . unSVGAltGlyphElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGAltGlyphElement where
-  fromJSRef = return . fmap SVGAltGlyphElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGTextPositioningElement SVGAltGlyphElement
-instance IsSVGTextContentElement SVGAltGlyphElement
-instance IsSVGGraphicsElement SVGAltGlyphElement
-instance IsSVGElement SVGAltGlyphElement
-instance IsElement SVGAltGlyphElement
-instance IsNode SVGAltGlyphElement
-instance IsEventTarget SVGAltGlyphElement
-instance IsGObject SVGAltGlyphElement where
-  toGObject = GObject . castRef . unSVGAltGlyphElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGAltGlyphElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGAltGlyphElement :: IsGObject obj => obj -> SVGAltGlyphElement
-castToSVGAltGlyphElement = castTo gTypeSVGAltGlyphElement "SVGAltGlyphElement"
-
-foreign import javascript unsafe "window[\"SVGAltGlyphElement\"]" gTypeSVGAltGlyphElement' :: JSRef GType
-gTypeSVGAltGlyphElement = GType gTypeSVGAltGlyphElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGAltGlyphItemElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGAltGlyphItemElement Mozilla SVGAltGlyphItemElement documentation>
-newtype SVGAltGlyphItemElement = SVGAltGlyphItemElement { unSVGAltGlyphItemElement :: JSRef SVGAltGlyphItemElement }
-
-instance Eq (SVGAltGlyphItemElement) where
-  (SVGAltGlyphItemElement a) == (SVGAltGlyphItemElement b) = js_eq a b
-
-instance PToJSRef SVGAltGlyphItemElement where
-  pToJSRef = unSVGAltGlyphItemElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGAltGlyphItemElement where
-  pFromJSRef = SVGAltGlyphItemElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGAltGlyphItemElement where
-  toJSRef = return . unSVGAltGlyphItemElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGAltGlyphItemElement where
-  fromJSRef = return . fmap SVGAltGlyphItemElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGElement SVGAltGlyphItemElement
-instance IsElement SVGAltGlyphItemElement
-instance IsNode SVGAltGlyphItemElement
-instance IsEventTarget SVGAltGlyphItemElement
-instance IsGObject SVGAltGlyphItemElement where
-  toGObject = GObject . castRef . unSVGAltGlyphItemElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGAltGlyphItemElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGAltGlyphItemElement :: IsGObject obj => obj -> SVGAltGlyphItemElement
-castToSVGAltGlyphItemElement = castTo gTypeSVGAltGlyphItemElement "SVGAltGlyphItemElement"
-
-foreign import javascript unsafe "window[\"SVGAltGlyphItemElement\"]" gTypeSVGAltGlyphItemElement' :: JSRef GType
-gTypeSVGAltGlyphItemElement = GType gTypeSVGAltGlyphItemElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGAngle".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGAngle Mozilla SVGAngle documentation>
-newtype SVGAngle = SVGAngle { unSVGAngle :: JSRef SVGAngle }
-
-instance Eq (SVGAngle) where
-  (SVGAngle a) == (SVGAngle b) = js_eq a b
-
-instance PToJSRef SVGAngle where
-  pToJSRef = unSVGAngle
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGAngle where
-  pFromJSRef = SVGAngle
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGAngle where
-  toJSRef = return . unSVGAngle
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGAngle where
-  fromJSRef = return . fmap SVGAngle . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject SVGAngle where
-  toGObject = GObject . castRef . unSVGAngle
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGAngle . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGAngle :: IsGObject obj => obj -> SVGAngle
-castToSVGAngle = castTo gTypeSVGAngle "SVGAngle"
-
-foreign import javascript unsafe "window[\"SVGAngle\"]" gTypeSVGAngle' :: JSRef GType
-gTypeSVGAngle = GType gTypeSVGAngle'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGAnimateColorElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGAnimationElement"
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimateColorElement Mozilla SVGAnimateColorElement documentation>
-newtype SVGAnimateColorElement = SVGAnimateColorElement { unSVGAnimateColorElement :: JSRef SVGAnimateColorElement }
-
-instance Eq (SVGAnimateColorElement) where
-  (SVGAnimateColorElement a) == (SVGAnimateColorElement b) = js_eq a b
-
-instance PToJSRef SVGAnimateColorElement where
-  pToJSRef = unSVGAnimateColorElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGAnimateColorElement where
-  pFromJSRef = SVGAnimateColorElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGAnimateColorElement where
-  toJSRef = return . unSVGAnimateColorElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGAnimateColorElement where
-  fromJSRef = return . fmap SVGAnimateColorElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGAnimationElement SVGAnimateColorElement
-instance IsSVGElement SVGAnimateColorElement
-instance IsElement SVGAnimateColorElement
-instance IsNode SVGAnimateColorElement
-instance IsEventTarget SVGAnimateColorElement
-instance IsGObject SVGAnimateColorElement where
-  toGObject = GObject . castRef . unSVGAnimateColorElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGAnimateColorElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGAnimateColorElement :: IsGObject obj => obj -> SVGAnimateColorElement
-castToSVGAnimateColorElement = castTo gTypeSVGAnimateColorElement "SVGAnimateColorElement"
-
-foreign import javascript unsafe "window[\"SVGAnimateColorElement\"]" gTypeSVGAnimateColorElement' :: JSRef GType
-gTypeSVGAnimateColorElement = GType gTypeSVGAnimateColorElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGAnimateElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGAnimationElement"
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimateElement Mozilla SVGAnimateElement documentation>
-newtype SVGAnimateElement = SVGAnimateElement { unSVGAnimateElement :: JSRef SVGAnimateElement }
-
-instance Eq (SVGAnimateElement) where
-  (SVGAnimateElement a) == (SVGAnimateElement b) = js_eq a b
-
-instance PToJSRef SVGAnimateElement where
-  pToJSRef = unSVGAnimateElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGAnimateElement where
-  pFromJSRef = SVGAnimateElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGAnimateElement where
-  toJSRef = return . unSVGAnimateElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGAnimateElement where
-  fromJSRef = return . fmap SVGAnimateElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGAnimationElement SVGAnimateElement
-instance IsSVGElement SVGAnimateElement
-instance IsElement SVGAnimateElement
-instance IsNode SVGAnimateElement
-instance IsEventTarget SVGAnimateElement
-instance IsGObject SVGAnimateElement where
-  toGObject = GObject . castRef . unSVGAnimateElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGAnimateElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGAnimateElement :: IsGObject obj => obj -> SVGAnimateElement
-castToSVGAnimateElement = castTo gTypeSVGAnimateElement "SVGAnimateElement"
-
-foreign import javascript unsafe "window[\"SVGAnimateElement\"]" gTypeSVGAnimateElement' :: JSRef GType
-gTypeSVGAnimateElement = GType gTypeSVGAnimateElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGAnimateMotionElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGAnimationElement"
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimateMotionElement Mozilla SVGAnimateMotionElement documentation>
-newtype SVGAnimateMotionElement = SVGAnimateMotionElement { unSVGAnimateMotionElement :: JSRef SVGAnimateMotionElement }
-
-instance Eq (SVGAnimateMotionElement) where
-  (SVGAnimateMotionElement a) == (SVGAnimateMotionElement b) = js_eq a b
-
-instance PToJSRef SVGAnimateMotionElement where
-  pToJSRef = unSVGAnimateMotionElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGAnimateMotionElement where
-  pFromJSRef = SVGAnimateMotionElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGAnimateMotionElement where
-  toJSRef = return . unSVGAnimateMotionElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGAnimateMotionElement where
-  fromJSRef = return . fmap SVGAnimateMotionElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGAnimationElement SVGAnimateMotionElement
-instance IsSVGElement SVGAnimateMotionElement
-instance IsElement SVGAnimateMotionElement
-instance IsNode SVGAnimateMotionElement
-instance IsEventTarget SVGAnimateMotionElement
-instance IsGObject SVGAnimateMotionElement where
-  toGObject = GObject . castRef . unSVGAnimateMotionElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGAnimateMotionElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGAnimateMotionElement :: IsGObject obj => obj -> SVGAnimateMotionElement
-castToSVGAnimateMotionElement = castTo gTypeSVGAnimateMotionElement "SVGAnimateMotionElement"
-
-foreign import javascript unsafe "window[\"SVGAnimateMotionElement\"]" gTypeSVGAnimateMotionElement' :: JSRef GType
-gTypeSVGAnimateMotionElement = GType gTypeSVGAnimateMotionElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGAnimateTransformElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGAnimationElement"
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimateTransformElement Mozilla SVGAnimateTransformElement documentation>
-newtype SVGAnimateTransformElement = SVGAnimateTransformElement { unSVGAnimateTransformElement :: JSRef SVGAnimateTransformElement }
-
-instance Eq (SVGAnimateTransformElement) where
-  (SVGAnimateTransformElement a) == (SVGAnimateTransformElement b) = js_eq a b
-
-instance PToJSRef SVGAnimateTransformElement where
-  pToJSRef = unSVGAnimateTransformElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGAnimateTransformElement where
-  pFromJSRef = SVGAnimateTransformElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGAnimateTransformElement where
-  toJSRef = return . unSVGAnimateTransformElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGAnimateTransformElement where
-  fromJSRef = return . fmap SVGAnimateTransformElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGAnimationElement SVGAnimateTransformElement
-instance IsSVGElement SVGAnimateTransformElement
-instance IsElement SVGAnimateTransformElement
-instance IsNode SVGAnimateTransformElement
-instance IsEventTarget SVGAnimateTransformElement
-instance IsGObject SVGAnimateTransformElement where
-  toGObject = GObject . castRef . unSVGAnimateTransformElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGAnimateTransformElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGAnimateTransformElement :: IsGObject obj => obj -> SVGAnimateTransformElement
-castToSVGAnimateTransformElement = castTo gTypeSVGAnimateTransformElement "SVGAnimateTransformElement"
-
-foreign import javascript unsafe "window[\"SVGAnimateTransformElement\"]" gTypeSVGAnimateTransformElement' :: JSRef GType
-gTypeSVGAnimateTransformElement = GType gTypeSVGAnimateTransformElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGAnimatedAngle".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimatedAngle Mozilla SVGAnimatedAngle documentation>
-newtype SVGAnimatedAngle = SVGAnimatedAngle { unSVGAnimatedAngle :: JSRef SVGAnimatedAngle }
-
-instance Eq (SVGAnimatedAngle) where
-  (SVGAnimatedAngle a) == (SVGAnimatedAngle b) = js_eq a b
-
-instance PToJSRef SVGAnimatedAngle where
-  pToJSRef = unSVGAnimatedAngle
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGAnimatedAngle where
-  pFromJSRef = SVGAnimatedAngle
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGAnimatedAngle where
-  toJSRef = return . unSVGAnimatedAngle
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGAnimatedAngle where
-  fromJSRef = return . fmap SVGAnimatedAngle . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject SVGAnimatedAngle where
-  toGObject = GObject . castRef . unSVGAnimatedAngle
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGAnimatedAngle . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGAnimatedAngle :: IsGObject obj => obj -> SVGAnimatedAngle
-castToSVGAnimatedAngle = castTo gTypeSVGAnimatedAngle "SVGAnimatedAngle"
-
-foreign import javascript unsafe "window[\"SVGAnimatedAngle\"]" gTypeSVGAnimatedAngle' :: JSRef GType
-gTypeSVGAnimatedAngle = GType gTypeSVGAnimatedAngle'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGAnimatedBoolean".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimatedBoolean Mozilla SVGAnimatedBoolean documentation>
-newtype SVGAnimatedBoolean = SVGAnimatedBoolean { unSVGAnimatedBoolean :: JSRef SVGAnimatedBoolean }
-
-instance Eq (SVGAnimatedBoolean) where
-  (SVGAnimatedBoolean a) == (SVGAnimatedBoolean b) = js_eq a b
-
-instance PToJSRef SVGAnimatedBoolean where
-  pToJSRef = unSVGAnimatedBoolean
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGAnimatedBoolean where
-  pFromJSRef = SVGAnimatedBoolean
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGAnimatedBoolean where
-  toJSRef = return . unSVGAnimatedBoolean
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGAnimatedBoolean where
-  fromJSRef = return . fmap SVGAnimatedBoolean . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject SVGAnimatedBoolean where
-  toGObject = GObject . castRef . unSVGAnimatedBoolean
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGAnimatedBoolean . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGAnimatedBoolean :: IsGObject obj => obj -> SVGAnimatedBoolean
-castToSVGAnimatedBoolean = castTo gTypeSVGAnimatedBoolean "SVGAnimatedBoolean"
-
-foreign import javascript unsafe "window[\"SVGAnimatedBoolean\"]" gTypeSVGAnimatedBoolean' :: JSRef GType
-gTypeSVGAnimatedBoolean = GType gTypeSVGAnimatedBoolean'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGAnimatedEnumeration".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimatedEnumeration Mozilla SVGAnimatedEnumeration documentation>
-newtype SVGAnimatedEnumeration = SVGAnimatedEnumeration { unSVGAnimatedEnumeration :: JSRef SVGAnimatedEnumeration }
-
-instance Eq (SVGAnimatedEnumeration) where
-  (SVGAnimatedEnumeration a) == (SVGAnimatedEnumeration b) = js_eq a b
-
-instance PToJSRef SVGAnimatedEnumeration where
-  pToJSRef = unSVGAnimatedEnumeration
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGAnimatedEnumeration where
-  pFromJSRef = SVGAnimatedEnumeration
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGAnimatedEnumeration where
-  toJSRef = return . unSVGAnimatedEnumeration
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGAnimatedEnumeration where
-  fromJSRef = return . fmap SVGAnimatedEnumeration . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject SVGAnimatedEnumeration where
-  toGObject = GObject . castRef . unSVGAnimatedEnumeration
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGAnimatedEnumeration . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGAnimatedEnumeration :: IsGObject obj => obj -> SVGAnimatedEnumeration
-castToSVGAnimatedEnumeration = castTo gTypeSVGAnimatedEnumeration "SVGAnimatedEnumeration"
-
-foreign import javascript unsafe "window[\"SVGAnimatedEnumeration\"]" gTypeSVGAnimatedEnumeration' :: JSRef GType
-gTypeSVGAnimatedEnumeration = GType gTypeSVGAnimatedEnumeration'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGAnimatedInteger".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimatedInteger Mozilla SVGAnimatedInteger documentation>
-newtype SVGAnimatedInteger = SVGAnimatedInteger { unSVGAnimatedInteger :: JSRef SVGAnimatedInteger }
-
-instance Eq (SVGAnimatedInteger) where
-  (SVGAnimatedInteger a) == (SVGAnimatedInteger b) = js_eq a b
-
-instance PToJSRef SVGAnimatedInteger where
-  pToJSRef = unSVGAnimatedInteger
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGAnimatedInteger where
-  pFromJSRef = SVGAnimatedInteger
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGAnimatedInteger where
-  toJSRef = return . unSVGAnimatedInteger
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGAnimatedInteger where
-  fromJSRef = return . fmap SVGAnimatedInteger . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject SVGAnimatedInteger where
-  toGObject = GObject . castRef . unSVGAnimatedInteger
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGAnimatedInteger . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGAnimatedInteger :: IsGObject obj => obj -> SVGAnimatedInteger
-castToSVGAnimatedInteger = castTo gTypeSVGAnimatedInteger "SVGAnimatedInteger"
-
-foreign import javascript unsafe "window[\"SVGAnimatedInteger\"]" gTypeSVGAnimatedInteger' :: JSRef GType
-gTypeSVGAnimatedInteger = GType gTypeSVGAnimatedInteger'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGAnimatedLength".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimatedLength Mozilla SVGAnimatedLength documentation>
-newtype SVGAnimatedLength = SVGAnimatedLength { unSVGAnimatedLength :: JSRef SVGAnimatedLength }
-
-instance Eq (SVGAnimatedLength) where
-  (SVGAnimatedLength a) == (SVGAnimatedLength b) = js_eq a b
-
-instance PToJSRef SVGAnimatedLength where
-  pToJSRef = unSVGAnimatedLength
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGAnimatedLength where
-  pFromJSRef = SVGAnimatedLength
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGAnimatedLength where
-  toJSRef = return . unSVGAnimatedLength
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGAnimatedLength where
-  fromJSRef = return . fmap SVGAnimatedLength . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject SVGAnimatedLength where
-  toGObject = GObject . castRef . unSVGAnimatedLength
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGAnimatedLength . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGAnimatedLength :: IsGObject obj => obj -> SVGAnimatedLength
-castToSVGAnimatedLength = castTo gTypeSVGAnimatedLength "SVGAnimatedLength"
-
-foreign import javascript unsafe "window[\"SVGAnimatedLength\"]" gTypeSVGAnimatedLength' :: JSRef GType
-gTypeSVGAnimatedLength = GType gTypeSVGAnimatedLength'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGAnimatedLengthList".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimatedLengthList Mozilla SVGAnimatedLengthList documentation>
-newtype SVGAnimatedLengthList = SVGAnimatedLengthList { unSVGAnimatedLengthList :: JSRef SVGAnimatedLengthList }
-
-instance Eq (SVGAnimatedLengthList) where
-  (SVGAnimatedLengthList a) == (SVGAnimatedLengthList b) = js_eq a b
-
-instance PToJSRef SVGAnimatedLengthList where
-  pToJSRef = unSVGAnimatedLengthList
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGAnimatedLengthList where
-  pFromJSRef = SVGAnimatedLengthList
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGAnimatedLengthList where
-  toJSRef = return . unSVGAnimatedLengthList
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGAnimatedLengthList where
-  fromJSRef = return . fmap SVGAnimatedLengthList . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject SVGAnimatedLengthList where
-  toGObject = GObject . castRef . unSVGAnimatedLengthList
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGAnimatedLengthList . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGAnimatedLengthList :: IsGObject obj => obj -> SVGAnimatedLengthList
-castToSVGAnimatedLengthList = castTo gTypeSVGAnimatedLengthList "SVGAnimatedLengthList"
-
-foreign import javascript unsafe "window[\"SVGAnimatedLengthList\"]" gTypeSVGAnimatedLengthList' :: JSRef GType
-gTypeSVGAnimatedLengthList = GType gTypeSVGAnimatedLengthList'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGAnimatedNumber".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimatedNumber Mozilla SVGAnimatedNumber documentation>
-newtype SVGAnimatedNumber = SVGAnimatedNumber { unSVGAnimatedNumber :: JSRef SVGAnimatedNumber }
-
-instance Eq (SVGAnimatedNumber) where
-  (SVGAnimatedNumber a) == (SVGAnimatedNumber b) = js_eq a b
-
-instance PToJSRef SVGAnimatedNumber where
-  pToJSRef = unSVGAnimatedNumber
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGAnimatedNumber where
-  pFromJSRef = SVGAnimatedNumber
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGAnimatedNumber where
-  toJSRef = return . unSVGAnimatedNumber
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGAnimatedNumber where
-  fromJSRef = return . fmap SVGAnimatedNumber . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject SVGAnimatedNumber where
-  toGObject = GObject . castRef . unSVGAnimatedNumber
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGAnimatedNumber . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGAnimatedNumber :: IsGObject obj => obj -> SVGAnimatedNumber
-castToSVGAnimatedNumber = castTo gTypeSVGAnimatedNumber "SVGAnimatedNumber"
-
-foreign import javascript unsafe "window[\"SVGAnimatedNumber\"]" gTypeSVGAnimatedNumber' :: JSRef GType
-gTypeSVGAnimatedNumber = GType gTypeSVGAnimatedNumber'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGAnimatedNumberList".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimatedNumberList Mozilla SVGAnimatedNumberList documentation>
-newtype SVGAnimatedNumberList = SVGAnimatedNumberList { unSVGAnimatedNumberList :: JSRef SVGAnimatedNumberList }
-
-instance Eq (SVGAnimatedNumberList) where
-  (SVGAnimatedNumberList a) == (SVGAnimatedNumberList b) = js_eq a b
-
-instance PToJSRef SVGAnimatedNumberList where
-  pToJSRef = unSVGAnimatedNumberList
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGAnimatedNumberList where
-  pFromJSRef = SVGAnimatedNumberList
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGAnimatedNumberList where
-  toJSRef = return . unSVGAnimatedNumberList
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGAnimatedNumberList where
-  fromJSRef = return . fmap SVGAnimatedNumberList . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject SVGAnimatedNumberList where
-  toGObject = GObject . castRef . unSVGAnimatedNumberList
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGAnimatedNumberList . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGAnimatedNumberList :: IsGObject obj => obj -> SVGAnimatedNumberList
-castToSVGAnimatedNumberList = castTo gTypeSVGAnimatedNumberList "SVGAnimatedNumberList"
-
-foreign import javascript unsafe "window[\"SVGAnimatedNumberList\"]" gTypeSVGAnimatedNumberList' :: JSRef GType
-gTypeSVGAnimatedNumberList = GType gTypeSVGAnimatedNumberList'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGAnimatedPreserveAspectRatio".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimatedPreserveAspectRatio Mozilla SVGAnimatedPreserveAspectRatio documentation>
-newtype SVGAnimatedPreserveAspectRatio = SVGAnimatedPreserveAspectRatio { unSVGAnimatedPreserveAspectRatio :: JSRef SVGAnimatedPreserveAspectRatio }
-
-instance Eq (SVGAnimatedPreserveAspectRatio) where
-  (SVGAnimatedPreserveAspectRatio a) == (SVGAnimatedPreserveAspectRatio b) = js_eq a b
-
-instance PToJSRef SVGAnimatedPreserveAspectRatio where
-  pToJSRef = unSVGAnimatedPreserveAspectRatio
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGAnimatedPreserveAspectRatio where
-  pFromJSRef = SVGAnimatedPreserveAspectRatio
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGAnimatedPreserveAspectRatio where
-  toJSRef = return . unSVGAnimatedPreserveAspectRatio
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGAnimatedPreserveAspectRatio where
-  fromJSRef = return . fmap SVGAnimatedPreserveAspectRatio . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject SVGAnimatedPreserveAspectRatio where
-  toGObject = GObject . castRef . unSVGAnimatedPreserveAspectRatio
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGAnimatedPreserveAspectRatio . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGAnimatedPreserveAspectRatio :: IsGObject obj => obj -> SVGAnimatedPreserveAspectRatio
-castToSVGAnimatedPreserveAspectRatio = castTo gTypeSVGAnimatedPreserveAspectRatio "SVGAnimatedPreserveAspectRatio"
-
-foreign import javascript unsafe "window[\"SVGAnimatedPreserveAspectRatio\"]" gTypeSVGAnimatedPreserveAspectRatio' :: JSRef GType
-gTypeSVGAnimatedPreserveAspectRatio = GType gTypeSVGAnimatedPreserveAspectRatio'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGAnimatedRect".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimatedRect Mozilla SVGAnimatedRect documentation>
-newtype SVGAnimatedRect = SVGAnimatedRect { unSVGAnimatedRect :: JSRef SVGAnimatedRect }
-
-instance Eq (SVGAnimatedRect) where
-  (SVGAnimatedRect a) == (SVGAnimatedRect b) = js_eq a b
-
-instance PToJSRef SVGAnimatedRect where
-  pToJSRef = unSVGAnimatedRect
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGAnimatedRect where
-  pFromJSRef = SVGAnimatedRect
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGAnimatedRect where
-  toJSRef = return . unSVGAnimatedRect
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGAnimatedRect where
-  fromJSRef = return . fmap SVGAnimatedRect . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject SVGAnimatedRect where
-  toGObject = GObject . castRef . unSVGAnimatedRect
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGAnimatedRect . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGAnimatedRect :: IsGObject obj => obj -> SVGAnimatedRect
-castToSVGAnimatedRect = castTo gTypeSVGAnimatedRect "SVGAnimatedRect"
-
-foreign import javascript unsafe "window[\"SVGAnimatedRect\"]" gTypeSVGAnimatedRect' :: JSRef GType
-gTypeSVGAnimatedRect = GType gTypeSVGAnimatedRect'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGAnimatedString".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimatedString Mozilla SVGAnimatedString documentation>
-newtype SVGAnimatedString = SVGAnimatedString { unSVGAnimatedString :: JSRef SVGAnimatedString }
-
-instance Eq (SVGAnimatedString) where
-  (SVGAnimatedString a) == (SVGAnimatedString b) = js_eq a b
-
-instance PToJSRef SVGAnimatedString where
-  pToJSRef = unSVGAnimatedString
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGAnimatedString where
-  pFromJSRef = SVGAnimatedString
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGAnimatedString where
-  toJSRef = return . unSVGAnimatedString
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGAnimatedString where
-  fromJSRef = return . fmap SVGAnimatedString . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject SVGAnimatedString where
-  toGObject = GObject . castRef . unSVGAnimatedString
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGAnimatedString . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGAnimatedString :: IsGObject obj => obj -> SVGAnimatedString
-castToSVGAnimatedString = castTo gTypeSVGAnimatedString "SVGAnimatedString"
-
-foreign import javascript unsafe "window[\"SVGAnimatedString\"]" gTypeSVGAnimatedString' :: JSRef GType
-gTypeSVGAnimatedString = GType gTypeSVGAnimatedString'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGAnimatedTransformList".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimatedTransformList Mozilla SVGAnimatedTransformList documentation>
-newtype SVGAnimatedTransformList = SVGAnimatedTransformList { unSVGAnimatedTransformList :: JSRef SVGAnimatedTransformList }
-
-instance Eq (SVGAnimatedTransformList) where
-  (SVGAnimatedTransformList a) == (SVGAnimatedTransformList b) = js_eq a b
-
-instance PToJSRef SVGAnimatedTransformList where
-  pToJSRef = unSVGAnimatedTransformList
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGAnimatedTransformList where
-  pFromJSRef = SVGAnimatedTransformList
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGAnimatedTransformList where
-  toJSRef = return . unSVGAnimatedTransformList
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGAnimatedTransformList where
-  fromJSRef = return . fmap SVGAnimatedTransformList . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject SVGAnimatedTransformList where
-  toGObject = GObject . castRef . unSVGAnimatedTransformList
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGAnimatedTransformList . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGAnimatedTransformList :: IsGObject obj => obj -> SVGAnimatedTransformList
-castToSVGAnimatedTransformList = castTo gTypeSVGAnimatedTransformList "SVGAnimatedTransformList"
-
-foreign import javascript unsafe "window[\"SVGAnimatedTransformList\"]" gTypeSVGAnimatedTransformList' :: JSRef GType
-gTypeSVGAnimatedTransformList = GType gTypeSVGAnimatedTransformList'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGAnimationElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimationElement Mozilla SVGAnimationElement documentation>
-newtype SVGAnimationElement = SVGAnimationElement { unSVGAnimationElement :: JSRef SVGAnimationElement }
-
-instance Eq (SVGAnimationElement) where
-  (SVGAnimationElement a) == (SVGAnimationElement b) = js_eq a b
-
-instance PToJSRef SVGAnimationElement where
-  pToJSRef = unSVGAnimationElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGAnimationElement where
-  pFromJSRef = SVGAnimationElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGAnimationElement where
-  toJSRef = return . unSVGAnimationElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGAnimationElement where
-  fromJSRef = return . fmap SVGAnimationElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsSVGElement o => IsSVGAnimationElement o
-toSVGAnimationElement :: IsSVGAnimationElement o => o -> SVGAnimationElement
-toSVGAnimationElement = unsafeCastGObject . toGObject
-
-instance IsSVGAnimationElement SVGAnimationElement
-instance IsSVGElement SVGAnimationElement
-instance IsElement SVGAnimationElement
-instance IsNode SVGAnimationElement
-instance IsEventTarget SVGAnimationElement
-instance IsGObject SVGAnimationElement where
-  toGObject = GObject . castRef . unSVGAnimationElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGAnimationElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGAnimationElement :: IsGObject obj => obj -> SVGAnimationElement
-castToSVGAnimationElement = castTo gTypeSVGAnimationElement "SVGAnimationElement"
-
-foreign import javascript unsafe "window[\"SVGAnimationElement\"]" gTypeSVGAnimationElement' :: JSRef GType
-gTypeSVGAnimationElement = GType gTypeSVGAnimationElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGCircleElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGGraphicsElement"
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGCircleElement Mozilla SVGCircleElement documentation>
-newtype SVGCircleElement = SVGCircleElement { unSVGCircleElement :: JSRef SVGCircleElement }
-
-instance Eq (SVGCircleElement) where
-  (SVGCircleElement a) == (SVGCircleElement b) = js_eq a b
-
-instance PToJSRef SVGCircleElement where
-  pToJSRef = unSVGCircleElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGCircleElement where
-  pFromJSRef = SVGCircleElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGCircleElement where
-  toJSRef = return . unSVGCircleElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGCircleElement where
-  fromJSRef = return . fmap SVGCircleElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGGraphicsElement SVGCircleElement
-instance IsSVGElement SVGCircleElement
-instance IsElement SVGCircleElement
-instance IsNode SVGCircleElement
-instance IsEventTarget SVGCircleElement
-instance IsGObject SVGCircleElement where
-  toGObject = GObject . castRef . unSVGCircleElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGCircleElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGCircleElement :: IsGObject obj => obj -> SVGCircleElement
-castToSVGCircleElement = castTo gTypeSVGCircleElement "SVGCircleElement"
-
-foreign import javascript unsafe "window[\"SVGCircleElement\"]" gTypeSVGCircleElement' :: JSRef GType
-gTypeSVGCircleElement = GType gTypeSVGCircleElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGClipPathElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGGraphicsElement"
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGClipPathElement Mozilla SVGClipPathElement documentation>
-newtype SVGClipPathElement = SVGClipPathElement { unSVGClipPathElement :: JSRef SVGClipPathElement }
-
-instance Eq (SVGClipPathElement) where
-  (SVGClipPathElement a) == (SVGClipPathElement b) = js_eq a b
-
-instance PToJSRef SVGClipPathElement where
-  pToJSRef = unSVGClipPathElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGClipPathElement where
-  pFromJSRef = SVGClipPathElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGClipPathElement where
-  toJSRef = return . unSVGClipPathElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGClipPathElement where
-  fromJSRef = return . fmap SVGClipPathElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGGraphicsElement SVGClipPathElement
-instance IsSVGElement SVGClipPathElement
-instance IsElement SVGClipPathElement
-instance IsNode SVGClipPathElement
-instance IsEventTarget SVGClipPathElement
-instance IsGObject SVGClipPathElement where
-  toGObject = GObject . castRef . unSVGClipPathElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGClipPathElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGClipPathElement :: IsGObject obj => obj -> SVGClipPathElement
-castToSVGClipPathElement = castTo gTypeSVGClipPathElement "SVGClipPathElement"
-
-foreign import javascript unsafe "window[\"SVGClipPathElement\"]" gTypeSVGClipPathElement' :: JSRef GType
-gTypeSVGClipPathElement = GType gTypeSVGClipPathElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGColor".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.CSSValue"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGColor Mozilla SVGColor documentation>
-newtype SVGColor = SVGColor { unSVGColor :: JSRef SVGColor }
-
-instance Eq (SVGColor) where
-  (SVGColor a) == (SVGColor b) = js_eq a b
-
-instance PToJSRef SVGColor where
-  pToJSRef = unSVGColor
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGColor where
-  pFromJSRef = SVGColor
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGColor where
-  toJSRef = return . unSVGColor
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGColor where
-  fromJSRef = return . fmap SVGColor . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsCSSValue o => IsSVGColor o
-toSVGColor :: IsSVGColor o => o -> SVGColor
-toSVGColor = unsafeCastGObject . toGObject
-
-instance IsSVGColor SVGColor
-instance IsCSSValue SVGColor
-instance IsGObject SVGColor where
-  toGObject = GObject . castRef . unSVGColor
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGColor . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGColor :: IsGObject obj => obj -> SVGColor
-castToSVGColor = castTo gTypeSVGColor "SVGColor"
-
-foreign import javascript unsafe "window[\"SVGColor\"]" gTypeSVGColor' :: JSRef GType
-gTypeSVGColor = GType gTypeSVGColor'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGComponentTransferFunctionElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGComponentTransferFunctionElement Mozilla SVGComponentTransferFunctionElement documentation>
-newtype SVGComponentTransferFunctionElement = SVGComponentTransferFunctionElement { unSVGComponentTransferFunctionElement :: JSRef SVGComponentTransferFunctionElement }
-
-instance Eq (SVGComponentTransferFunctionElement) where
-  (SVGComponentTransferFunctionElement a) == (SVGComponentTransferFunctionElement b) = js_eq a b
-
-instance PToJSRef SVGComponentTransferFunctionElement where
-  pToJSRef = unSVGComponentTransferFunctionElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGComponentTransferFunctionElement where
-  pFromJSRef = SVGComponentTransferFunctionElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGComponentTransferFunctionElement where
-  toJSRef = return . unSVGComponentTransferFunctionElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGComponentTransferFunctionElement where
-  fromJSRef = return . fmap SVGComponentTransferFunctionElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsSVGElement o => IsSVGComponentTransferFunctionElement o
-toSVGComponentTransferFunctionElement :: IsSVGComponentTransferFunctionElement o => o -> SVGComponentTransferFunctionElement
-toSVGComponentTransferFunctionElement = unsafeCastGObject . toGObject
-
-instance IsSVGComponentTransferFunctionElement SVGComponentTransferFunctionElement
-instance IsSVGElement SVGComponentTransferFunctionElement
-instance IsElement SVGComponentTransferFunctionElement
-instance IsNode SVGComponentTransferFunctionElement
-instance IsEventTarget SVGComponentTransferFunctionElement
-instance IsGObject SVGComponentTransferFunctionElement where
-  toGObject = GObject . castRef . unSVGComponentTransferFunctionElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGComponentTransferFunctionElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGComponentTransferFunctionElement :: IsGObject obj => obj -> SVGComponentTransferFunctionElement
-castToSVGComponentTransferFunctionElement = castTo gTypeSVGComponentTransferFunctionElement "SVGComponentTransferFunctionElement"
-
-foreign import javascript unsafe "window[\"SVGComponentTransferFunctionElement\"]" gTypeSVGComponentTransferFunctionElement' :: JSRef GType
-gTypeSVGComponentTransferFunctionElement = GType gTypeSVGComponentTransferFunctionElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGCursorElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGCursorElement Mozilla SVGCursorElement documentation>
-newtype SVGCursorElement = SVGCursorElement { unSVGCursorElement :: JSRef SVGCursorElement }
-
-instance Eq (SVGCursorElement) where
-  (SVGCursorElement a) == (SVGCursorElement b) = js_eq a b
-
-instance PToJSRef SVGCursorElement where
-  pToJSRef = unSVGCursorElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGCursorElement where
-  pFromJSRef = SVGCursorElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGCursorElement where
-  toJSRef = return . unSVGCursorElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGCursorElement where
-  fromJSRef = return . fmap SVGCursorElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGElement SVGCursorElement
-instance IsElement SVGCursorElement
-instance IsNode SVGCursorElement
-instance IsEventTarget SVGCursorElement
-instance IsGObject SVGCursorElement where
-  toGObject = GObject . castRef . unSVGCursorElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGCursorElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGCursorElement :: IsGObject obj => obj -> SVGCursorElement
-castToSVGCursorElement = castTo gTypeSVGCursorElement "SVGCursorElement"
-
-foreign import javascript unsafe "window[\"SVGCursorElement\"]" gTypeSVGCursorElement' :: JSRef GType
-gTypeSVGCursorElement = GType gTypeSVGCursorElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGDefsElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGGraphicsElement"
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGDefsElement Mozilla SVGDefsElement documentation>
-newtype SVGDefsElement = SVGDefsElement { unSVGDefsElement :: JSRef SVGDefsElement }
-
-instance Eq (SVGDefsElement) where
-  (SVGDefsElement a) == (SVGDefsElement b) = js_eq a b
-
-instance PToJSRef SVGDefsElement where
-  pToJSRef = unSVGDefsElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGDefsElement where
-  pFromJSRef = SVGDefsElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGDefsElement where
-  toJSRef = return . unSVGDefsElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGDefsElement where
-  fromJSRef = return . fmap SVGDefsElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGGraphicsElement SVGDefsElement
-instance IsSVGElement SVGDefsElement
-instance IsElement SVGDefsElement
-instance IsNode SVGDefsElement
-instance IsEventTarget SVGDefsElement
-instance IsGObject SVGDefsElement where
-  toGObject = GObject . castRef . unSVGDefsElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGDefsElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGDefsElement :: IsGObject obj => obj -> SVGDefsElement
-castToSVGDefsElement = castTo gTypeSVGDefsElement "SVGDefsElement"
-
-foreign import javascript unsafe "window[\"SVGDefsElement\"]" gTypeSVGDefsElement' :: JSRef GType
-gTypeSVGDefsElement = GType gTypeSVGDefsElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGDescElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGDescElement Mozilla SVGDescElement documentation>
-newtype SVGDescElement = SVGDescElement { unSVGDescElement :: JSRef SVGDescElement }
-
-instance Eq (SVGDescElement) where
-  (SVGDescElement a) == (SVGDescElement b) = js_eq a b
-
-instance PToJSRef SVGDescElement where
-  pToJSRef = unSVGDescElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGDescElement where
-  pFromJSRef = SVGDescElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGDescElement where
-  toJSRef = return . unSVGDescElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGDescElement where
-  fromJSRef = return . fmap SVGDescElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGElement SVGDescElement
-instance IsElement SVGDescElement
-instance IsNode SVGDescElement
-instance IsEventTarget SVGDescElement
-instance IsGObject SVGDescElement where
-  toGObject = GObject . castRef . unSVGDescElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGDescElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGDescElement :: IsGObject obj => obj -> SVGDescElement
-castToSVGDescElement = castTo gTypeSVGDescElement "SVGDescElement"
-
-foreign import javascript unsafe "window[\"SVGDescElement\"]" gTypeSVGDescElement' :: JSRef GType
-gTypeSVGDescElement = GType gTypeSVGDescElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGDocument".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.Document"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGDocument Mozilla SVGDocument documentation>
-newtype SVGDocument = SVGDocument { unSVGDocument :: JSRef SVGDocument }
-
-instance Eq (SVGDocument) where
-  (SVGDocument a) == (SVGDocument b) = js_eq a b
-
-instance PToJSRef SVGDocument where
-  pToJSRef = unSVGDocument
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGDocument where
-  pFromJSRef = SVGDocument
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGDocument where
-  toJSRef = return . unSVGDocument
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGDocument where
-  fromJSRef = return . fmap SVGDocument . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsDocument SVGDocument
-instance IsNode SVGDocument
-instance IsEventTarget SVGDocument
-instance IsGObject SVGDocument where
-  toGObject = GObject . castRef . unSVGDocument
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGDocument . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGDocument :: IsGObject obj => obj -> SVGDocument
-castToSVGDocument = castTo gTypeSVGDocument "SVGDocument"
-
-foreign import javascript unsafe "window[\"SVGDocument\"]" gTypeSVGDocument' :: JSRef GType
-gTypeSVGDocument = GType gTypeSVGDocument'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGElement Mozilla SVGElement documentation>
-newtype SVGElement = SVGElement { unSVGElement :: JSRef SVGElement }
-
-instance Eq (SVGElement) where
-  (SVGElement a) == (SVGElement b) = js_eq a b
-
-instance PToJSRef SVGElement where
-  pToJSRef = unSVGElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGElement where
-  pFromJSRef = SVGElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGElement where
-  toJSRef = return . unSVGElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGElement where
-  fromJSRef = return . fmap SVGElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsElement o => IsSVGElement o
-toSVGElement :: IsSVGElement o => o -> SVGElement
-toSVGElement = unsafeCastGObject . toGObject
-
-instance IsSVGElement SVGElement
-instance IsElement SVGElement
-instance IsNode SVGElement
-instance IsEventTarget SVGElement
-instance IsGObject SVGElement where
-  toGObject = GObject . castRef . unSVGElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGElement :: IsGObject obj => obj -> SVGElement
-castToSVGElement = castTo gTypeSVGElement "SVGElement"
-
-foreign import javascript unsafe "window[\"SVGElement\"]" gTypeSVGElement' :: JSRef GType
-gTypeSVGElement = GType gTypeSVGElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGEllipseElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGGraphicsElement"
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGEllipseElement Mozilla SVGEllipseElement documentation>
-newtype SVGEllipseElement = SVGEllipseElement { unSVGEllipseElement :: JSRef SVGEllipseElement }
-
-instance Eq (SVGEllipseElement) where
-  (SVGEllipseElement a) == (SVGEllipseElement b) = js_eq a b
-
-instance PToJSRef SVGEllipseElement where
-  pToJSRef = unSVGEllipseElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGEllipseElement where
-  pFromJSRef = SVGEllipseElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGEllipseElement where
-  toJSRef = return . unSVGEllipseElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGEllipseElement where
-  fromJSRef = return . fmap SVGEllipseElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGGraphicsElement SVGEllipseElement
-instance IsSVGElement SVGEllipseElement
-instance IsElement SVGEllipseElement
-instance IsNode SVGEllipseElement
-instance IsEventTarget SVGEllipseElement
-instance IsGObject SVGEllipseElement where
-  toGObject = GObject . castRef . unSVGEllipseElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGEllipseElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGEllipseElement :: IsGObject obj => obj -> SVGEllipseElement
-castToSVGEllipseElement = castTo gTypeSVGEllipseElement "SVGEllipseElement"
-
-foreign import javascript unsafe "window[\"SVGEllipseElement\"]" gTypeSVGEllipseElement' :: JSRef GType
-gTypeSVGEllipseElement = GType gTypeSVGEllipseElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGExternalResourcesRequired".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGExternalResourcesRequired Mozilla SVGExternalResourcesRequired documentation>
-newtype SVGExternalResourcesRequired = SVGExternalResourcesRequired { unSVGExternalResourcesRequired :: JSRef SVGExternalResourcesRequired }
-
-instance Eq (SVGExternalResourcesRequired) where
-  (SVGExternalResourcesRequired a) == (SVGExternalResourcesRequired b) = js_eq a b
-
-instance PToJSRef SVGExternalResourcesRequired where
-  pToJSRef = unSVGExternalResourcesRequired
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGExternalResourcesRequired where
-  pFromJSRef = SVGExternalResourcesRequired
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGExternalResourcesRequired where
-  toJSRef = return . unSVGExternalResourcesRequired
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGExternalResourcesRequired where
-  fromJSRef = return . fmap SVGExternalResourcesRequired . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject SVGExternalResourcesRequired where
-  toGObject = GObject . castRef . unSVGExternalResourcesRequired
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGExternalResourcesRequired . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGExternalResourcesRequired :: IsGObject obj => obj -> SVGExternalResourcesRequired
-castToSVGExternalResourcesRequired = castTo gTypeSVGExternalResourcesRequired "SVGExternalResourcesRequired"
-
-foreign import javascript unsafe "window[\"SVGExternalResourcesRequired\"]" gTypeSVGExternalResourcesRequired' :: JSRef GType
-gTypeSVGExternalResourcesRequired = GType gTypeSVGExternalResourcesRequired'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGFEBlendElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEBlendElement Mozilla SVGFEBlendElement documentation>
-newtype SVGFEBlendElement = SVGFEBlendElement { unSVGFEBlendElement :: JSRef SVGFEBlendElement }
-
-instance Eq (SVGFEBlendElement) where
-  (SVGFEBlendElement a) == (SVGFEBlendElement b) = js_eq a b
-
-instance PToJSRef SVGFEBlendElement where
-  pToJSRef = unSVGFEBlendElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGFEBlendElement where
-  pFromJSRef = SVGFEBlendElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGFEBlendElement where
-  toJSRef = return . unSVGFEBlendElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGFEBlendElement where
-  fromJSRef = return . fmap SVGFEBlendElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGElement SVGFEBlendElement
-instance IsElement SVGFEBlendElement
-instance IsNode SVGFEBlendElement
-instance IsEventTarget SVGFEBlendElement
-instance IsGObject SVGFEBlendElement where
-  toGObject = GObject . castRef . unSVGFEBlendElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGFEBlendElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGFEBlendElement :: IsGObject obj => obj -> SVGFEBlendElement
-castToSVGFEBlendElement = castTo gTypeSVGFEBlendElement "SVGFEBlendElement"
-
-foreign import javascript unsafe "window[\"SVGFEBlendElement\"]" gTypeSVGFEBlendElement' :: JSRef GType
-gTypeSVGFEBlendElement = GType gTypeSVGFEBlendElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGFEColorMatrixElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEColorMatrixElement Mozilla SVGFEColorMatrixElement documentation>
-newtype SVGFEColorMatrixElement = SVGFEColorMatrixElement { unSVGFEColorMatrixElement :: JSRef SVGFEColorMatrixElement }
-
-instance Eq (SVGFEColorMatrixElement) where
-  (SVGFEColorMatrixElement a) == (SVGFEColorMatrixElement b) = js_eq a b
-
-instance PToJSRef SVGFEColorMatrixElement where
-  pToJSRef = unSVGFEColorMatrixElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGFEColorMatrixElement where
-  pFromJSRef = SVGFEColorMatrixElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGFEColorMatrixElement where
-  toJSRef = return . unSVGFEColorMatrixElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGFEColorMatrixElement where
-  fromJSRef = return . fmap SVGFEColorMatrixElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGElement SVGFEColorMatrixElement
-instance IsElement SVGFEColorMatrixElement
-instance IsNode SVGFEColorMatrixElement
-instance IsEventTarget SVGFEColorMatrixElement
-instance IsGObject SVGFEColorMatrixElement where
-  toGObject = GObject . castRef . unSVGFEColorMatrixElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGFEColorMatrixElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGFEColorMatrixElement :: IsGObject obj => obj -> SVGFEColorMatrixElement
-castToSVGFEColorMatrixElement = castTo gTypeSVGFEColorMatrixElement "SVGFEColorMatrixElement"
-
-foreign import javascript unsafe "window[\"SVGFEColorMatrixElement\"]" gTypeSVGFEColorMatrixElement' :: JSRef GType
-gTypeSVGFEColorMatrixElement = GType gTypeSVGFEColorMatrixElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGFEComponentTransferElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEComponentTransferElement Mozilla SVGFEComponentTransferElement documentation>
-newtype SVGFEComponentTransferElement = SVGFEComponentTransferElement { unSVGFEComponentTransferElement :: JSRef SVGFEComponentTransferElement }
-
-instance Eq (SVGFEComponentTransferElement) where
-  (SVGFEComponentTransferElement a) == (SVGFEComponentTransferElement b) = js_eq a b
-
-instance PToJSRef SVGFEComponentTransferElement where
-  pToJSRef = unSVGFEComponentTransferElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGFEComponentTransferElement where
-  pFromJSRef = SVGFEComponentTransferElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGFEComponentTransferElement where
-  toJSRef = return . unSVGFEComponentTransferElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGFEComponentTransferElement where
-  fromJSRef = return . fmap SVGFEComponentTransferElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGElement SVGFEComponentTransferElement
-instance IsElement SVGFEComponentTransferElement
-instance IsNode SVGFEComponentTransferElement
-instance IsEventTarget SVGFEComponentTransferElement
-instance IsGObject SVGFEComponentTransferElement where
-  toGObject = GObject . castRef . unSVGFEComponentTransferElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGFEComponentTransferElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGFEComponentTransferElement :: IsGObject obj => obj -> SVGFEComponentTransferElement
-castToSVGFEComponentTransferElement = castTo gTypeSVGFEComponentTransferElement "SVGFEComponentTransferElement"
-
-foreign import javascript unsafe "window[\"SVGFEComponentTransferElement\"]" gTypeSVGFEComponentTransferElement' :: JSRef GType
-gTypeSVGFEComponentTransferElement = GType gTypeSVGFEComponentTransferElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGFECompositeElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFECompositeElement Mozilla SVGFECompositeElement documentation>
-newtype SVGFECompositeElement = SVGFECompositeElement { unSVGFECompositeElement :: JSRef SVGFECompositeElement }
-
-instance Eq (SVGFECompositeElement) where
-  (SVGFECompositeElement a) == (SVGFECompositeElement b) = js_eq a b
-
-instance PToJSRef SVGFECompositeElement where
-  pToJSRef = unSVGFECompositeElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGFECompositeElement where
-  pFromJSRef = SVGFECompositeElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGFECompositeElement where
-  toJSRef = return . unSVGFECompositeElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGFECompositeElement where
-  fromJSRef = return . fmap SVGFECompositeElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGElement SVGFECompositeElement
-instance IsElement SVGFECompositeElement
-instance IsNode SVGFECompositeElement
-instance IsEventTarget SVGFECompositeElement
-instance IsGObject SVGFECompositeElement where
-  toGObject = GObject . castRef . unSVGFECompositeElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGFECompositeElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGFECompositeElement :: IsGObject obj => obj -> SVGFECompositeElement
-castToSVGFECompositeElement = castTo gTypeSVGFECompositeElement "SVGFECompositeElement"
-
-foreign import javascript unsafe "window[\"SVGFECompositeElement\"]" gTypeSVGFECompositeElement' :: JSRef GType
-gTypeSVGFECompositeElement = GType gTypeSVGFECompositeElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGFEConvolveMatrixElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEConvolveMatrixElement Mozilla SVGFEConvolveMatrixElement documentation>
-newtype SVGFEConvolveMatrixElement = SVGFEConvolveMatrixElement { unSVGFEConvolveMatrixElement :: JSRef SVGFEConvolveMatrixElement }
-
-instance Eq (SVGFEConvolveMatrixElement) where
-  (SVGFEConvolveMatrixElement a) == (SVGFEConvolveMatrixElement b) = js_eq a b
-
-instance PToJSRef SVGFEConvolveMatrixElement where
-  pToJSRef = unSVGFEConvolveMatrixElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGFEConvolveMatrixElement where
-  pFromJSRef = SVGFEConvolveMatrixElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGFEConvolveMatrixElement where
-  toJSRef = return . unSVGFEConvolveMatrixElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGFEConvolveMatrixElement where
-  fromJSRef = return . fmap SVGFEConvolveMatrixElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGElement SVGFEConvolveMatrixElement
-instance IsElement SVGFEConvolveMatrixElement
-instance IsNode SVGFEConvolveMatrixElement
-instance IsEventTarget SVGFEConvolveMatrixElement
-instance IsGObject SVGFEConvolveMatrixElement where
-  toGObject = GObject . castRef . unSVGFEConvolveMatrixElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGFEConvolveMatrixElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGFEConvolveMatrixElement :: IsGObject obj => obj -> SVGFEConvolveMatrixElement
-castToSVGFEConvolveMatrixElement = castTo gTypeSVGFEConvolveMatrixElement "SVGFEConvolveMatrixElement"
-
-foreign import javascript unsafe "window[\"SVGFEConvolveMatrixElement\"]" gTypeSVGFEConvolveMatrixElement' :: JSRef GType
-gTypeSVGFEConvolveMatrixElement = GType gTypeSVGFEConvolveMatrixElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGFEDiffuseLightingElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEDiffuseLightingElement Mozilla SVGFEDiffuseLightingElement documentation>
-newtype SVGFEDiffuseLightingElement = SVGFEDiffuseLightingElement { unSVGFEDiffuseLightingElement :: JSRef SVGFEDiffuseLightingElement }
-
-instance Eq (SVGFEDiffuseLightingElement) where
-  (SVGFEDiffuseLightingElement a) == (SVGFEDiffuseLightingElement b) = js_eq a b
-
-instance PToJSRef SVGFEDiffuseLightingElement where
-  pToJSRef = unSVGFEDiffuseLightingElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGFEDiffuseLightingElement where
-  pFromJSRef = SVGFEDiffuseLightingElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGFEDiffuseLightingElement where
-  toJSRef = return . unSVGFEDiffuseLightingElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGFEDiffuseLightingElement where
-  fromJSRef = return . fmap SVGFEDiffuseLightingElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGElement SVGFEDiffuseLightingElement
-instance IsElement SVGFEDiffuseLightingElement
-instance IsNode SVGFEDiffuseLightingElement
-instance IsEventTarget SVGFEDiffuseLightingElement
-instance IsGObject SVGFEDiffuseLightingElement where
-  toGObject = GObject . castRef . unSVGFEDiffuseLightingElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGFEDiffuseLightingElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGFEDiffuseLightingElement :: IsGObject obj => obj -> SVGFEDiffuseLightingElement
-castToSVGFEDiffuseLightingElement = castTo gTypeSVGFEDiffuseLightingElement "SVGFEDiffuseLightingElement"
-
-foreign import javascript unsafe "window[\"SVGFEDiffuseLightingElement\"]" gTypeSVGFEDiffuseLightingElement' :: JSRef GType
-gTypeSVGFEDiffuseLightingElement = GType gTypeSVGFEDiffuseLightingElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGFEDisplacementMapElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEDisplacementMapElement Mozilla SVGFEDisplacementMapElement documentation>
-newtype SVGFEDisplacementMapElement = SVGFEDisplacementMapElement { unSVGFEDisplacementMapElement :: JSRef SVGFEDisplacementMapElement }
-
-instance Eq (SVGFEDisplacementMapElement) where
-  (SVGFEDisplacementMapElement a) == (SVGFEDisplacementMapElement b) = js_eq a b
-
-instance PToJSRef SVGFEDisplacementMapElement where
-  pToJSRef = unSVGFEDisplacementMapElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGFEDisplacementMapElement where
-  pFromJSRef = SVGFEDisplacementMapElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGFEDisplacementMapElement where
-  toJSRef = return . unSVGFEDisplacementMapElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGFEDisplacementMapElement where
-  fromJSRef = return . fmap SVGFEDisplacementMapElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGElement SVGFEDisplacementMapElement
-instance IsElement SVGFEDisplacementMapElement
-instance IsNode SVGFEDisplacementMapElement
-instance IsEventTarget SVGFEDisplacementMapElement
-instance IsGObject SVGFEDisplacementMapElement where
-  toGObject = GObject . castRef . unSVGFEDisplacementMapElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGFEDisplacementMapElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGFEDisplacementMapElement :: IsGObject obj => obj -> SVGFEDisplacementMapElement
-castToSVGFEDisplacementMapElement = castTo gTypeSVGFEDisplacementMapElement "SVGFEDisplacementMapElement"
-
-foreign import javascript unsafe "window[\"SVGFEDisplacementMapElement\"]" gTypeSVGFEDisplacementMapElement' :: JSRef GType
-gTypeSVGFEDisplacementMapElement = GType gTypeSVGFEDisplacementMapElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGFEDistantLightElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEDistantLightElement Mozilla SVGFEDistantLightElement documentation>
-newtype SVGFEDistantLightElement = SVGFEDistantLightElement { unSVGFEDistantLightElement :: JSRef SVGFEDistantLightElement }
-
-instance Eq (SVGFEDistantLightElement) where
-  (SVGFEDistantLightElement a) == (SVGFEDistantLightElement b) = js_eq a b
-
-instance PToJSRef SVGFEDistantLightElement where
-  pToJSRef = unSVGFEDistantLightElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGFEDistantLightElement where
-  pFromJSRef = SVGFEDistantLightElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGFEDistantLightElement where
-  toJSRef = return . unSVGFEDistantLightElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGFEDistantLightElement where
-  fromJSRef = return . fmap SVGFEDistantLightElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGElement SVGFEDistantLightElement
-instance IsElement SVGFEDistantLightElement
-instance IsNode SVGFEDistantLightElement
-instance IsEventTarget SVGFEDistantLightElement
-instance IsGObject SVGFEDistantLightElement where
-  toGObject = GObject . castRef . unSVGFEDistantLightElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGFEDistantLightElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGFEDistantLightElement :: IsGObject obj => obj -> SVGFEDistantLightElement
-castToSVGFEDistantLightElement = castTo gTypeSVGFEDistantLightElement "SVGFEDistantLightElement"
-
-foreign import javascript unsafe "window[\"SVGFEDistantLightElement\"]" gTypeSVGFEDistantLightElement' :: JSRef GType
-gTypeSVGFEDistantLightElement = GType gTypeSVGFEDistantLightElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGFEDropShadowElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEDropShadowElement Mozilla SVGFEDropShadowElement documentation>
-newtype SVGFEDropShadowElement = SVGFEDropShadowElement { unSVGFEDropShadowElement :: JSRef SVGFEDropShadowElement }
-
-instance Eq (SVGFEDropShadowElement) where
-  (SVGFEDropShadowElement a) == (SVGFEDropShadowElement b) = js_eq a b
-
-instance PToJSRef SVGFEDropShadowElement where
-  pToJSRef = unSVGFEDropShadowElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGFEDropShadowElement where
-  pFromJSRef = SVGFEDropShadowElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGFEDropShadowElement where
-  toJSRef = return . unSVGFEDropShadowElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGFEDropShadowElement where
-  fromJSRef = return . fmap SVGFEDropShadowElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGElement SVGFEDropShadowElement
-instance IsElement SVGFEDropShadowElement
-instance IsNode SVGFEDropShadowElement
-instance IsEventTarget SVGFEDropShadowElement
-instance IsGObject SVGFEDropShadowElement where
-  toGObject = GObject . castRef . unSVGFEDropShadowElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGFEDropShadowElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGFEDropShadowElement :: IsGObject obj => obj -> SVGFEDropShadowElement
-castToSVGFEDropShadowElement = castTo gTypeSVGFEDropShadowElement "SVGFEDropShadowElement"
-
-foreign import javascript unsafe "window[\"SVGFEDropShadowElement\"]" gTypeSVGFEDropShadowElement' :: JSRef GType
-gTypeSVGFEDropShadowElement = GType gTypeSVGFEDropShadowElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGFEFloodElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEFloodElement Mozilla SVGFEFloodElement documentation>
-newtype SVGFEFloodElement = SVGFEFloodElement { unSVGFEFloodElement :: JSRef SVGFEFloodElement }
-
-instance Eq (SVGFEFloodElement) where
-  (SVGFEFloodElement a) == (SVGFEFloodElement b) = js_eq a b
-
-instance PToJSRef SVGFEFloodElement where
-  pToJSRef = unSVGFEFloodElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGFEFloodElement where
-  pFromJSRef = SVGFEFloodElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGFEFloodElement where
-  toJSRef = return . unSVGFEFloodElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGFEFloodElement where
-  fromJSRef = return . fmap SVGFEFloodElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGElement SVGFEFloodElement
-instance IsElement SVGFEFloodElement
-instance IsNode SVGFEFloodElement
-instance IsEventTarget SVGFEFloodElement
-instance IsGObject SVGFEFloodElement where
-  toGObject = GObject . castRef . unSVGFEFloodElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGFEFloodElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGFEFloodElement :: IsGObject obj => obj -> SVGFEFloodElement
-castToSVGFEFloodElement = castTo gTypeSVGFEFloodElement "SVGFEFloodElement"
-
-foreign import javascript unsafe "window[\"SVGFEFloodElement\"]" gTypeSVGFEFloodElement' :: JSRef GType
-gTypeSVGFEFloodElement = GType gTypeSVGFEFloodElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGFEFuncAElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGComponentTransferFunctionElement"
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEFuncAElement Mozilla SVGFEFuncAElement documentation>
-newtype SVGFEFuncAElement = SVGFEFuncAElement { unSVGFEFuncAElement :: JSRef SVGFEFuncAElement }
-
-instance Eq (SVGFEFuncAElement) where
-  (SVGFEFuncAElement a) == (SVGFEFuncAElement b) = js_eq a b
-
-instance PToJSRef SVGFEFuncAElement where
-  pToJSRef = unSVGFEFuncAElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGFEFuncAElement where
-  pFromJSRef = SVGFEFuncAElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGFEFuncAElement where
-  toJSRef = return . unSVGFEFuncAElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGFEFuncAElement where
-  fromJSRef = return . fmap SVGFEFuncAElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGComponentTransferFunctionElement SVGFEFuncAElement
-instance IsSVGElement SVGFEFuncAElement
-instance IsElement SVGFEFuncAElement
-instance IsNode SVGFEFuncAElement
-instance IsEventTarget SVGFEFuncAElement
-instance IsGObject SVGFEFuncAElement where
-  toGObject = GObject . castRef . unSVGFEFuncAElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGFEFuncAElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGFEFuncAElement :: IsGObject obj => obj -> SVGFEFuncAElement
-castToSVGFEFuncAElement = castTo gTypeSVGFEFuncAElement "SVGFEFuncAElement"
-
-foreign import javascript unsafe "window[\"SVGFEFuncAElement\"]" gTypeSVGFEFuncAElement' :: JSRef GType
-gTypeSVGFEFuncAElement = GType gTypeSVGFEFuncAElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGFEFuncBElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGComponentTransferFunctionElement"
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEFuncBElement Mozilla SVGFEFuncBElement documentation>
-newtype SVGFEFuncBElement = SVGFEFuncBElement { unSVGFEFuncBElement :: JSRef SVGFEFuncBElement }
-
-instance Eq (SVGFEFuncBElement) where
-  (SVGFEFuncBElement a) == (SVGFEFuncBElement b) = js_eq a b
-
-instance PToJSRef SVGFEFuncBElement where
-  pToJSRef = unSVGFEFuncBElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGFEFuncBElement where
-  pFromJSRef = SVGFEFuncBElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGFEFuncBElement where
-  toJSRef = return . unSVGFEFuncBElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGFEFuncBElement where
-  fromJSRef = return . fmap SVGFEFuncBElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGComponentTransferFunctionElement SVGFEFuncBElement
-instance IsSVGElement SVGFEFuncBElement
-instance IsElement SVGFEFuncBElement
-instance IsNode SVGFEFuncBElement
-instance IsEventTarget SVGFEFuncBElement
-instance IsGObject SVGFEFuncBElement where
-  toGObject = GObject . castRef . unSVGFEFuncBElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGFEFuncBElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGFEFuncBElement :: IsGObject obj => obj -> SVGFEFuncBElement
-castToSVGFEFuncBElement = castTo gTypeSVGFEFuncBElement "SVGFEFuncBElement"
-
-foreign import javascript unsafe "window[\"SVGFEFuncBElement\"]" gTypeSVGFEFuncBElement' :: JSRef GType
-gTypeSVGFEFuncBElement = GType gTypeSVGFEFuncBElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGFEFuncGElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGComponentTransferFunctionElement"
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEFuncGElement Mozilla SVGFEFuncGElement documentation>
-newtype SVGFEFuncGElement = SVGFEFuncGElement { unSVGFEFuncGElement :: JSRef SVGFEFuncGElement }
-
-instance Eq (SVGFEFuncGElement) where
-  (SVGFEFuncGElement a) == (SVGFEFuncGElement b) = js_eq a b
-
-instance PToJSRef SVGFEFuncGElement where
-  pToJSRef = unSVGFEFuncGElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGFEFuncGElement where
-  pFromJSRef = SVGFEFuncGElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGFEFuncGElement where
-  toJSRef = return . unSVGFEFuncGElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGFEFuncGElement where
-  fromJSRef = return . fmap SVGFEFuncGElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGComponentTransferFunctionElement SVGFEFuncGElement
-instance IsSVGElement SVGFEFuncGElement
-instance IsElement SVGFEFuncGElement
-instance IsNode SVGFEFuncGElement
-instance IsEventTarget SVGFEFuncGElement
-instance IsGObject SVGFEFuncGElement where
-  toGObject = GObject . castRef . unSVGFEFuncGElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGFEFuncGElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGFEFuncGElement :: IsGObject obj => obj -> SVGFEFuncGElement
-castToSVGFEFuncGElement = castTo gTypeSVGFEFuncGElement "SVGFEFuncGElement"
-
-foreign import javascript unsafe "window[\"SVGFEFuncGElement\"]" gTypeSVGFEFuncGElement' :: JSRef GType
-gTypeSVGFEFuncGElement = GType gTypeSVGFEFuncGElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGFEFuncRElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGComponentTransferFunctionElement"
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEFuncRElement Mozilla SVGFEFuncRElement documentation>
-newtype SVGFEFuncRElement = SVGFEFuncRElement { unSVGFEFuncRElement :: JSRef SVGFEFuncRElement }
-
-instance Eq (SVGFEFuncRElement) where
-  (SVGFEFuncRElement a) == (SVGFEFuncRElement b) = js_eq a b
-
-instance PToJSRef SVGFEFuncRElement where
-  pToJSRef = unSVGFEFuncRElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGFEFuncRElement where
-  pFromJSRef = SVGFEFuncRElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGFEFuncRElement where
-  toJSRef = return . unSVGFEFuncRElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGFEFuncRElement where
-  fromJSRef = return . fmap SVGFEFuncRElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGComponentTransferFunctionElement SVGFEFuncRElement
-instance IsSVGElement SVGFEFuncRElement
-instance IsElement SVGFEFuncRElement
-instance IsNode SVGFEFuncRElement
-instance IsEventTarget SVGFEFuncRElement
-instance IsGObject SVGFEFuncRElement where
-  toGObject = GObject . castRef . unSVGFEFuncRElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGFEFuncRElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGFEFuncRElement :: IsGObject obj => obj -> SVGFEFuncRElement
-castToSVGFEFuncRElement = castTo gTypeSVGFEFuncRElement "SVGFEFuncRElement"
-
-foreign import javascript unsafe "window[\"SVGFEFuncRElement\"]" gTypeSVGFEFuncRElement' :: JSRef GType
-gTypeSVGFEFuncRElement = GType gTypeSVGFEFuncRElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGFEGaussianBlurElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEGaussianBlurElement Mozilla SVGFEGaussianBlurElement documentation>
-newtype SVGFEGaussianBlurElement = SVGFEGaussianBlurElement { unSVGFEGaussianBlurElement :: JSRef SVGFEGaussianBlurElement }
-
-instance Eq (SVGFEGaussianBlurElement) where
-  (SVGFEGaussianBlurElement a) == (SVGFEGaussianBlurElement b) = js_eq a b
-
-instance PToJSRef SVGFEGaussianBlurElement where
-  pToJSRef = unSVGFEGaussianBlurElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGFEGaussianBlurElement where
-  pFromJSRef = SVGFEGaussianBlurElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGFEGaussianBlurElement where
-  toJSRef = return . unSVGFEGaussianBlurElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGFEGaussianBlurElement where
-  fromJSRef = return . fmap SVGFEGaussianBlurElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGElement SVGFEGaussianBlurElement
-instance IsElement SVGFEGaussianBlurElement
-instance IsNode SVGFEGaussianBlurElement
-instance IsEventTarget SVGFEGaussianBlurElement
-instance IsGObject SVGFEGaussianBlurElement where
-  toGObject = GObject . castRef . unSVGFEGaussianBlurElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGFEGaussianBlurElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGFEGaussianBlurElement :: IsGObject obj => obj -> SVGFEGaussianBlurElement
-castToSVGFEGaussianBlurElement = castTo gTypeSVGFEGaussianBlurElement "SVGFEGaussianBlurElement"
-
-foreign import javascript unsafe "window[\"SVGFEGaussianBlurElement\"]" gTypeSVGFEGaussianBlurElement' :: JSRef GType
-gTypeSVGFEGaussianBlurElement = GType gTypeSVGFEGaussianBlurElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGFEImageElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEImageElement Mozilla SVGFEImageElement documentation>
-newtype SVGFEImageElement = SVGFEImageElement { unSVGFEImageElement :: JSRef SVGFEImageElement }
-
-instance Eq (SVGFEImageElement) where
-  (SVGFEImageElement a) == (SVGFEImageElement b) = js_eq a b
-
-instance PToJSRef SVGFEImageElement where
-  pToJSRef = unSVGFEImageElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGFEImageElement where
-  pFromJSRef = SVGFEImageElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGFEImageElement where
-  toJSRef = return . unSVGFEImageElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGFEImageElement where
-  fromJSRef = return . fmap SVGFEImageElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGElement SVGFEImageElement
-instance IsElement SVGFEImageElement
-instance IsNode SVGFEImageElement
-instance IsEventTarget SVGFEImageElement
-instance IsGObject SVGFEImageElement where
-  toGObject = GObject . castRef . unSVGFEImageElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGFEImageElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGFEImageElement :: IsGObject obj => obj -> SVGFEImageElement
-castToSVGFEImageElement = castTo gTypeSVGFEImageElement "SVGFEImageElement"
-
-foreign import javascript unsafe "window[\"SVGFEImageElement\"]" gTypeSVGFEImageElement' :: JSRef GType
-gTypeSVGFEImageElement = GType gTypeSVGFEImageElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGFEMergeElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEMergeElement Mozilla SVGFEMergeElement documentation>
-newtype SVGFEMergeElement = SVGFEMergeElement { unSVGFEMergeElement :: JSRef SVGFEMergeElement }
-
-instance Eq (SVGFEMergeElement) where
-  (SVGFEMergeElement a) == (SVGFEMergeElement b) = js_eq a b
-
-instance PToJSRef SVGFEMergeElement where
-  pToJSRef = unSVGFEMergeElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGFEMergeElement where
-  pFromJSRef = SVGFEMergeElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGFEMergeElement where
-  toJSRef = return . unSVGFEMergeElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGFEMergeElement where
-  fromJSRef = return . fmap SVGFEMergeElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGElement SVGFEMergeElement
-instance IsElement SVGFEMergeElement
-instance IsNode SVGFEMergeElement
-instance IsEventTarget SVGFEMergeElement
-instance IsGObject SVGFEMergeElement where
-  toGObject = GObject . castRef . unSVGFEMergeElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGFEMergeElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGFEMergeElement :: IsGObject obj => obj -> SVGFEMergeElement
-castToSVGFEMergeElement = castTo gTypeSVGFEMergeElement "SVGFEMergeElement"
-
-foreign import javascript unsafe "window[\"SVGFEMergeElement\"]" gTypeSVGFEMergeElement' :: JSRef GType
-gTypeSVGFEMergeElement = GType gTypeSVGFEMergeElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGFEMergeNodeElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEMergeNodeElement Mozilla SVGFEMergeNodeElement documentation>
-newtype SVGFEMergeNodeElement = SVGFEMergeNodeElement { unSVGFEMergeNodeElement :: JSRef SVGFEMergeNodeElement }
-
-instance Eq (SVGFEMergeNodeElement) where
-  (SVGFEMergeNodeElement a) == (SVGFEMergeNodeElement b) = js_eq a b
-
-instance PToJSRef SVGFEMergeNodeElement where
-  pToJSRef = unSVGFEMergeNodeElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGFEMergeNodeElement where
-  pFromJSRef = SVGFEMergeNodeElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGFEMergeNodeElement where
-  toJSRef = return . unSVGFEMergeNodeElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGFEMergeNodeElement where
-  fromJSRef = return . fmap SVGFEMergeNodeElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGElement SVGFEMergeNodeElement
-instance IsElement SVGFEMergeNodeElement
-instance IsNode SVGFEMergeNodeElement
-instance IsEventTarget SVGFEMergeNodeElement
-instance IsGObject SVGFEMergeNodeElement where
-  toGObject = GObject . castRef . unSVGFEMergeNodeElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGFEMergeNodeElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGFEMergeNodeElement :: IsGObject obj => obj -> SVGFEMergeNodeElement
-castToSVGFEMergeNodeElement = castTo gTypeSVGFEMergeNodeElement "SVGFEMergeNodeElement"
-
-foreign import javascript unsafe "window[\"SVGFEMergeNodeElement\"]" gTypeSVGFEMergeNodeElement' :: JSRef GType
-gTypeSVGFEMergeNodeElement = GType gTypeSVGFEMergeNodeElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGFEMorphologyElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEMorphologyElement Mozilla SVGFEMorphologyElement documentation>
-newtype SVGFEMorphologyElement = SVGFEMorphologyElement { unSVGFEMorphologyElement :: JSRef SVGFEMorphologyElement }
-
-instance Eq (SVGFEMorphologyElement) where
-  (SVGFEMorphologyElement a) == (SVGFEMorphologyElement b) = js_eq a b
-
-instance PToJSRef SVGFEMorphologyElement where
-  pToJSRef = unSVGFEMorphologyElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGFEMorphologyElement where
-  pFromJSRef = SVGFEMorphologyElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGFEMorphologyElement where
-  toJSRef = return . unSVGFEMorphologyElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGFEMorphologyElement where
-  fromJSRef = return . fmap SVGFEMorphologyElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGElement SVGFEMorphologyElement
-instance IsElement SVGFEMorphologyElement
-instance IsNode SVGFEMorphologyElement
-instance IsEventTarget SVGFEMorphologyElement
-instance IsGObject SVGFEMorphologyElement where
-  toGObject = GObject . castRef . unSVGFEMorphologyElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGFEMorphologyElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGFEMorphologyElement :: IsGObject obj => obj -> SVGFEMorphologyElement
-castToSVGFEMorphologyElement = castTo gTypeSVGFEMorphologyElement "SVGFEMorphologyElement"
-
-foreign import javascript unsafe "window[\"SVGFEMorphologyElement\"]" gTypeSVGFEMorphologyElement' :: JSRef GType
-gTypeSVGFEMorphologyElement = GType gTypeSVGFEMorphologyElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGFEOffsetElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEOffsetElement Mozilla SVGFEOffsetElement documentation>
-newtype SVGFEOffsetElement = SVGFEOffsetElement { unSVGFEOffsetElement :: JSRef SVGFEOffsetElement }
-
-instance Eq (SVGFEOffsetElement) where
-  (SVGFEOffsetElement a) == (SVGFEOffsetElement b) = js_eq a b
-
-instance PToJSRef SVGFEOffsetElement where
-  pToJSRef = unSVGFEOffsetElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGFEOffsetElement where
-  pFromJSRef = SVGFEOffsetElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGFEOffsetElement where
-  toJSRef = return . unSVGFEOffsetElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGFEOffsetElement where
-  fromJSRef = return . fmap SVGFEOffsetElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGElement SVGFEOffsetElement
-instance IsElement SVGFEOffsetElement
-instance IsNode SVGFEOffsetElement
-instance IsEventTarget SVGFEOffsetElement
-instance IsGObject SVGFEOffsetElement where
-  toGObject = GObject . castRef . unSVGFEOffsetElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGFEOffsetElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGFEOffsetElement :: IsGObject obj => obj -> SVGFEOffsetElement
-castToSVGFEOffsetElement = castTo gTypeSVGFEOffsetElement "SVGFEOffsetElement"
-
-foreign import javascript unsafe "window[\"SVGFEOffsetElement\"]" gTypeSVGFEOffsetElement' :: JSRef GType
-gTypeSVGFEOffsetElement = GType gTypeSVGFEOffsetElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGFEPointLightElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEPointLightElement Mozilla SVGFEPointLightElement documentation>
-newtype SVGFEPointLightElement = SVGFEPointLightElement { unSVGFEPointLightElement :: JSRef SVGFEPointLightElement }
-
-instance Eq (SVGFEPointLightElement) where
-  (SVGFEPointLightElement a) == (SVGFEPointLightElement b) = js_eq a b
-
-instance PToJSRef SVGFEPointLightElement where
-  pToJSRef = unSVGFEPointLightElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGFEPointLightElement where
-  pFromJSRef = SVGFEPointLightElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGFEPointLightElement where
-  toJSRef = return . unSVGFEPointLightElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGFEPointLightElement where
-  fromJSRef = return . fmap SVGFEPointLightElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGElement SVGFEPointLightElement
-instance IsElement SVGFEPointLightElement
-instance IsNode SVGFEPointLightElement
-instance IsEventTarget SVGFEPointLightElement
-instance IsGObject SVGFEPointLightElement where
-  toGObject = GObject . castRef . unSVGFEPointLightElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGFEPointLightElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGFEPointLightElement :: IsGObject obj => obj -> SVGFEPointLightElement
-castToSVGFEPointLightElement = castTo gTypeSVGFEPointLightElement "SVGFEPointLightElement"
-
-foreign import javascript unsafe "window[\"SVGFEPointLightElement\"]" gTypeSVGFEPointLightElement' :: JSRef GType
-gTypeSVGFEPointLightElement = GType gTypeSVGFEPointLightElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGFESpecularLightingElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFESpecularLightingElement Mozilla SVGFESpecularLightingElement documentation>
-newtype SVGFESpecularLightingElement = SVGFESpecularLightingElement { unSVGFESpecularLightingElement :: JSRef SVGFESpecularLightingElement }
-
-instance Eq (SVGFESpecularLightingElement) where
-  (SVGFESpecularLightingElement a) == (SVGFESpecularLightingElement b) = js_eq a b
-
-instance PToJSRef SVGFESpecularLightingElement where
-  pToJSRef = unSVGFESpecularLightingElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGFESpecularLightingElement where
-  pFromJSRef = SVGFESpecularLightingElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGFESpecularLightingElement where
-  toJSRef = return . unSVGFESpecularLightingElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGFESpecularLightingElement where
-  fromJSRef = return . fmap SVGFESpecularLightingElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGElement SVGFESpecularLightingElement
-instance IsElement SVGFESpecularLightingElement
-instance IsNode SVGFESpecularLightingElement
-instance IsEventTarget SVGFESpecularLightingElement
-instance IsGObject SVGFESpecularLightingElement where
-  toGObject = GObject . castRef . unSVGFESpecularLightingElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGFESpecularLightingElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGFESpecularLightingElement :: IsGObject obj => obj -> SVGFESpecularLightingElement
-castToSVGFESpecularLightingElement = castTo gTypeSVGFESpecularLightingElement "SVGFESpecularLightingElement"
-
-foreign import javascript unsafe "window[\"SVGFESpecularLightingElement\"]" gTypeSVGFESpecularLightingElement' :: JSRef GType
-gTypeSVGFESpecularLightingElement = GType gTypeSVGFESpecularLightingElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGFESpotLightElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFESpotLightElement Mozilla SVGFESpotLightElement documentation>
-newtype SVGFESpotLightElement = SVGFESpotLightElement { unSVGFESpotLightElement :: JSRef SVGFESpotLightElement }
-
-instance Eq (SVGFESpotLightElement) where
-  (SVGFESpotLightElement a) == (SVGFESpotLightElement b) = js_eq a b
-
-instance PToJSRef SVGFESpotLightElement where
-  pToJSRef = unSVGFESpotLightElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGFESpotLightElement where
-  pFromJSRef = SVGFESpotLightElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGFESpotLightElement where
-  toJSRef = return . unSVGFESpotLightElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGFESpotLightElement where
-  fromJSRef = return . fmap SVGFESpotLightElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGElement SVGFESpotLightElement
-instance IsElement SVGFESpotLightElement
-instance IsNode SVGFESpotLightElement
-instance IsEventTarget SVGFESpotLightElement
-instance IsGObject SVGFESpotLightElement where
-  toGObject = GObject . castRef . unSVGFESpotLightElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGFESpotLightElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGFESpotLightElement :: IsGObject obj => obj -> SVGFESpotLightElement
-castToSVGFESpotLightElement = castTo gTypeSVGFESpotLightElement "SVGFESpotLightElement"
-
-foreign import javascript unsafe "window[\"SVGFESpotLightElement\"]" gTypeSVGFESpotLightElement' :: JSRef GType
-gTypeSVGFESpotLightElement = GType gTypeSVGFESpotLightElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGFETileElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFETileElement Mozilla SVGFETileElement documentation>
-newtype SVGFETileElement = SVGFETileElement { unSVGFETileElement :: JSRef SVGFETileElement }
-
-instance Eq (SVGFETileElement) where
-  (SVGFETileElement a) == (SVGFETileElement b) = js_eq a b
-
-instance PToJSRef SVGFETileElement where
-  pToJSRef = unSVGFETileElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGFETileElement where
-  pFromJSRef = SVGFETileElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGFETileElement where
-  toJSRef = return . unSVGFETileElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGFETileElement where
-  fromJSRef = return . fmap SVGFETileElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGElement SVGFETileElement
-instance IsElement SVGFETileElement
-instance IsNode SVGFETileElement
-instance IsEventTarget SVGFETileElement
-instance IsGObject SVGFETileElement where
-  toGObject = GObject . castRef . unSVGFETileElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGFETileElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGFETileElement :: IsGObject obj => obj -> SVGFETileElement
-castToSVGFETileElement = castTo gTypeSVGFETileElement "SVGFETileElement"
-
-foreign import javascript unsafe "window[\"SVGFETileElement\"]" gTypeSVGFETileElement' :: JSRef GType
-gTypeSVGFETileElement = GType gTypeSVGFETileElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGFETurbulenceElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFETurbulenceElement Mozilla SVGFETurbulenceElement documentation>
-newtype SVGFETurbulenceElement = SVGFETurbulenceElement { unSVGFETurbulenceElement :: JSRef SVGFETurbulenceElement }
-
-instance Eq (SVGFETurbulenceElement) where
-  (SVGFETurbulenceElement a) == (SVGFETurbulenceElement b) = js_eq a b
-
-instance PToJSRef SVGFETurbulenceElement where
-  pToJSRef = unSVGFETurbulenceElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGFETurbulenceElement where
-  pFromJSRef = SVGFETurbulenceElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGFETurbulenceElement where
-  toJSRef = return . unSVGFETurbulenceElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGFETurbulenceElement where
-  fromJSRef = return . fmap SVGFETurbulenceElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGElement SVGFETurbulenceElement
-instance IsElement SVGFETurbulenceElement
-instance IsNode SVGFETurbulenceElement
-instance IsEventTarget SVGFETurbulenceElement
-instance IsGObject SVGFETurbulenceElement where
-  toGObject = GObject . castRef . unSVGFETurbulenceElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGFETurbulenceElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGFETurbulenceElement :: IsGObject obj => obj -> SVGFETurbulenceElement
-castToSVGFETurbulenceElement = castTo gTypeSVGFETurbulenceElement "SVGFETurbulenceElement"
-
-foreign import javascript unsafe "window[\"SVGFETurbulenceElement\"]" gTypeSVGFETurbulenceElement' :: JSRef GType
-gTypeSVGFETurbulenceElement = GType gTypeSVGFETurbulenceElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGFilterElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFilterElement Mozilla SVGFilterElement documentation>
-newtype SVGFilterElement = SVGFilterElement { unSVGFilterElement :: JSRef SVGFilterElement }
-
-instance Eq (SVGFilterElement) where
-  (SVGFilterElement a) == (SVGFilterElement b) = js_eq a b
-
-instance PToJSRef SVGFilterElement where
-  pToJSRef = unSVGFilterElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGFilterElement where
-  pFromJSRef = SVGFilterElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGFilterElement where
-  toJSRef = return . unSVGFilterElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGFilterElement where
-  fromJSRef = return . fmap SVGFilterElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGElement SVGFilterElement
-instance IsElement SVGFilterElement
-instance IsNode SVGFilterElement
-instance IsEventTarget SVGFilterElement
-instance IsGObject SVGFilterElement where
-  toGObject = GObject . castRef . unSVGFilterElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGFilterElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGFilterElement :: IsGObject obj => obj -> SVGFilterElement
-castToSVGFilterElement = castTo gTypeSVGFilterElement "SVGFilterElement"
-
-foreign import javascript unsafe "window[\"SVGFilterElement\"]" gTypeSVGFilterElement' :: JSRef GType
-gTypeSVGFilterElement = GType gTypeSVGFilterElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGFilterPrimitiveStandardAttributes".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFilterPrimitiveStandardAttributes Mozilla SVGFilterPrimitiveStandardAttributes documentation>
-newtype SVGFilterPrimitiveStandardAttributes = SVGFilterPrimitiveStandardAttributes { unSVGFilterPrimitiveStandardAttributes :: JSRef SVGFilterPrimitiveStandardAttributes }
-
-instance Eq (SVGFilterPrimitiveStandardAttributes) where
-  (SVGFilterPrimitiveStandardAttributes a) == (SVGFilterPrimitiveStandardAttributes b) = js_eq a b
-
-instance PToJSRef SVGFilterPrimitiveStandardAttributes where
-  pToJSRef = unSVGFilterPrimitiveStandardAttributes
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGFilterPrimitiveStandardAttributes where
-  pFromJSRef = SVGFilterPrimitiveStandardAttributes
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGFilterPrimitiveStandardAttributes where
-  toJSRef = return . unSVGFilterPrimitiveStandardAttributes
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGFilterPrimitiveStandardAttributes where
-  fromJSRef = return . fmap SVGFilterPrimitiveStandardAttributes . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject SVGFilterPrimitiveStandardAttributes where
-  toGObject = GObject . castRef . unSVGFilterPrimitiveStandardAttributes
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGFilterPrimitiveStandardAttributes . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGFilterPrimitiveStandardAttributes :: IsGObject obj => obj -> SVGFilterPrimitiveStandardAttributes
-castToSVGFilterPrimitiveStandardAttributes = castTo gTypeSVGFilterPrimitiveStandardAttributes "SVGFilterPrimitiveStandardAttributes"
-
-foreign import javascript unsafe "window[\"SVGFilterPrimitiveStandardAttributes\"]" gTypeSVGFilterPrimitiveStandardAttributes' :: JSRef GType
-gTypeSVGFilterPrimitiveStandardAttributes = GType gTypeSVGFilterPrimitiveStandardAttributes'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGFitToViewBox".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFitToViewBox Mozilla SVGFitToViewBox documentation>
-newtype SVGFitToViewBox = SVGFitToViewBox { unSVGFitToViewBox :: JSRef SVGFitToViewBox }
-
-instance Eq (SVGFitToViewBox) where
-  (SVGFitToViewBox a) == (SVGFitToViewBox b) = js_eq a b
-
-instance PToJSRef SVGFitToViewBox where
-  pToJSRef = unSVGFitToViewBox
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGFitToViewBox where
-  pFromJSRef = SVGFitToViewBox
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGFitToViewBox where
-  toJSRef = return . unSVGFitToViewBox
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGFitToViewBox where
-  fromJSRef = return . fmap SVGFitToViewBox . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject SVGFitToViewBox where
-  toGObject = GObject . castRef . unSVGFitToViewBox
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGFitToViewBox . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGFitToViewBox :: IsGObject obj => obj -> SVGFitToViewBox
-castToSVGFitToViewBox = castTo gTypeSVGFitToViewBox "SVGFitToViewBox"
-
-foreign import javascript unsafe "window[\"SVGFitToViewBox\"]" gTypeSVGFitToViewBox' :: JSRef GType
-gTypeSVGFitToViewBox = GType gTypeSVGFitToViewBox'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGFontElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFontElement Mozilla SVGFontElement documentation>
-newtype SVGFontElement = SVGFontElement { unSVGFontElement :: JSRef SVGFontElement }
-
-instance Eq (SVGFontElement) where
-  (SVGFontElement a) == (SVGFontElement b) = js_eq a b
-
-instance PToJSRef SVGFontElement where
-  pToJSRef = unSVGFontElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGFontElement where
-  pFromJSRef = SVGFontElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGFontElement where
-  toJSRef = return . unSVGFontElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGFontElement where
-  fromJSRef = return . fmap SVGFontElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGElement SVGFontElement
-instance IsElement SVGFontElement
-instance IsNode SVGFontElement
-instance IsEventTarget SVGFontElement
-instance IsGObject SVGFontElement where
-  toGObject = GObject . castRef . unSVGFontElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGFontElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGFontElement :: IsGObject obj => obj -> SVGFontElement
-castToSVGFontElement = castTo gTypeSVGFontElement "SVGFontElement"
-
-foreign import javascript unsafe "window[\"SVGFontElement\"]" gTypeSVGFontElement' :: JSRef GType
-gTypeSVGFontElement = GType gTypeSVGFontElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGFontFaceElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFontFaceElement Mozilla SVGFontFaceElement documentation>
-newtype SVGFontFaceElement = SVGFontFaceElement { unSVGFontFaceElement :: JSRef SVGFontFaceElement }
-
-instance Eq (SVGFontFaceElement) where
-  (SVGFontFaceElement a) == (SVGFontFaceElement b) = js_eq a b
-
-instance PToJSRef SVGFontFaceElement where
-  pToJSRef = unSVGFontFaceElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGFontFaceElement where
-  pFromJSRef = SVGFontFaceElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGFontFaceElement where
-  toJSRef = return . unSVGFontFaceElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGFontFaceElement where
-  fromJSRef = return . fmap SVGFontFaceElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGElement SVGFontFaceElement
-instance IsElement SVGFontFaceElement
-instance IsNode SVGFontFaceElement
-instance IsEventTarget SVGFontFaceElement
-instance IsGObject SVGFontFaceElement where
-  toGObject = GObject . castRef . unSVGFontFaceElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGFontFaceElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGFontFaceElement :: IsGObject obj => obj -> SVGFontFaceElement
-castToSVGFontFaceElement = castTo gTypeSVGFontFaceElement "SVGFontFaceElement"
-
-foreign import javascript unsafe "window[\"SVGFontFaceElement\"]" gTypeSVGFontFaceElement' :: JSRef GType
-gTypeSVGFontFaceElement = GType gTypeSVGFontFaceElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGFontFaceFormatElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFontFaceFormatElement Mozilla SVGFontFaceFormatElement documentation>
-newtype SVGFontFaceFormatElement = SVGFontFaceFormatElement { unSVGFontFaceFormatElement :: JSRef SVGFontFaceFormatElement }
-
-instance Eq (SVGFontFaceFormatElement) where
-  (SVGFontFaceFormatElement a) == (SVGFontFaceFormatElement b) = js_eq a b
-
-instance PToJSRef SVGFontFaceFormatElement where
-  pToJSRef = unSVGFontFaceFormatElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGFontFaceFormatElement where
-  pFromJSRef = SVGFontFaceFormatElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGFontFaceFormatElement where
-  toJSRef = return . unSVGFontFaceFormatElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGFontFaceFormatElement where
-  fromJSRef = return . fmap SVGFontFaceFormatElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGElement SVGFontFaceFormatElement
-instance IsElement SVGFontFaceFormatElement
-instance IsNode SVGFontFaceFormatElement
-instance IsEventTarget SVGFontFaceFormatElement
-instance IsGObject SVGFontFaceFormatElement where
-  toGObject = GObject . castRef . unSVGFontFaceFormatElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGFontFaceFormatElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGFontFaceFormatElement :: IsGObject obj => obj -> SVGFontFaceFormatElement
-castToSVGFontFaceFormatElement = castTo gTypeSVGFontFaceFormatElement "SVGFontFaceFormatElement"
-
-foreign import javascript unsafe "window[\"SVGFontFaceFormatElement\"]" gTypeSVGFontFaceFormatElement' :: JSRef GType
-gTypeSVGFontFaceFormatElement = GType gTypeSVGFontFaceFormatElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGFontFaceNameElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFontFaceNameElement Mozilla SVGFontFaceNameElement documentation>
-newtype SVGFontFaceNameElement = SVGFontFaceNameElement { unSVGFontFaceNameElement :: JSRef SVGFontFaceNameElement }
-
-instance Eq (SVGFontFaceNameElement) where
-  (SVGFontFaceNameElement a) == (SVGFontFaceNameElement b) = js_eq a b
-
-instance PToJSRef SVGFontFaceNameElement where
-  pToJSRef = unSVGFontFaceNameElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGFontFaceNameElement where
-  pFromJSRef = SVGFontFaceNameElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGFontFaceNameElement where
-  toJSRef = return . unSVGFontFaceNameElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGFontFaceNameElement where
-  fromJSRef = return . fmap SVGFontFaceNameElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGElement SVGFontFaceNameElement
-instance IsElement SVGFontFaceNameElement
-instance IsNode SVGFontFaceNameElement
-instance IsEventTarget SVGFontFaceNameElement
-instance IsGObject SVGFontFaceNameElement where
-  toGObject = GObject . castRef . unSVGFontFaceNameElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGFontFaceNameElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGFontFaceNameElement :: IsGObject obj => obj -> SVGFontFaceNameElement
-castToSVGFontFaceNameElement = castTo gTypeSVGFontFaceNameElement "SVGFontFaceNameElement"
-
-foreign import javascript unsafe "window[\"SVGFontFaceNameElement\"]" gTypeSVGFontFaceNameElement' :: JSRef GType
-gTypeSVGFontFaceNameElement = GType gTypeSVGFontFaceNameElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGFontFaceSrcElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFontFaceSrcElement Mozilla SVGFontFaceSrcElement documentation>
-newtype SVGFontFaceSrcElement = SVGFontFaceSrcElement { unSVGFontFaceSrcElement :: JSRef SVGFontFaceSrcElement }
-
-instance Eq (SVGFontFaceSrcElement) where
-  (SVGFontFaceSrcElement a) == (SVGFontFaceSrcElement b) = js_eq a b
-
-instance PToJSRef SVGFontFaceSrcElement where
-  pToJSRef = unSVGFontFaceSrcElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGFontFaceSrcElement where
-  pFromJSRef = SVGFontFaceSrcElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGFontFaceSrcElement where
-  toJSRef = return . unSVGFontFaceSrcElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGFontFaceSrcElement where
-  fromJSRef = return . fmap SVGFontFaceSrcElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGElement SVGFontFaceSrcElement
-instance IsElement SVGFontFaceSrcElement
-instance IsNode SVGFontFaceSrcElement
-instance IsEventTarget SVGFontFaceSrcElement
-instance IsGObject SVGFontFaceSrcElement where
-  toGObject = GObject . castRef . unSVGFontFaceSrcElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGFontFaceSrcElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGFontFaceSrcElement :: IsGObject obj => obj -> SVGFontFaceSrcElement
-castToSVGFontFaceSrcElement = castTo gTypeSVGFontFaceSrcElement "SVGFontFaceSrcElement"
-
-foreign import javascript unsafe "window[\"SVGFontFaceSrcElement\"]" gTypeSVGFontFaceSrcElement' :: JSRef GType
-gTypeSVGFontFaceSrcElement = GType gTypeSVGFontFaceSrcElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGFontFaceUriElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFontFaceUriElement Mozilla SVGFontFaceUriElement documentation>
-newtype SVGFontFaceUriElement = SVGFontFaceUriElement { unSVGFontFaceUriElement :: JSRef SVGFontFaceUriElement }
-
-instance Eq (SVGFontFaceUriElement) where
-  (SVGFontFaceUriElement a) == (SVGFontFaceUriElement b) = js_eq a b
-
-instance PToJSRef SVGFontFaceUriElement where
-  pToJSRef = unSVGFontFaceUriElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGFontFaceUriElement where
-  pFromJSRef = SVGFontFaceUriElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGFontFaceUriElement where
-  toJSRef = return . unSVGFontFaceUriElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGFontFaceUriElement where
-  fromJSRef = return . fmap SVGFontFaceUriElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGElement SVGFontFaceUriElement
-instance IsElement SVGFontFaceUriElement
-instance IsNode SVGFontFaceUriElement
-instance IsEventTarget SVGFontFaceUriElement
-instance IsGObject SVGFontFaceUriElement where
-  toGObject = GObject . castRef . unSVGFontFaceUriElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGFontFaceUriElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGFontFaceUriElement :: IsGObject obj => obj -> SVGFontFaceUriElement
-castToSVGFontFaceUriElement = castTo gTypeSVGFontFaceUriElement "SVGFontFaceUriElement"
-
-foreign import javascript unsafe "window[\"SVGFontFaceUriElement\"]" gTypeSVGFontFaceUriElement' :: JSRef GType
-gTypeSVGFontFaceUriElement = GType gTypeSVGFontFaceUriElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGForeignObjectElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGGraphicsElement"
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGForeignObjectElement Mozilla SVGForeignObjectElement documentation>
-newtype SVGForeignObjectElement = SVGForeignObjectElement { unSVGForeignObjectElement :: JSRef SVGForeignObjectElement }
-
-instance Eq (SVGForeignObjectElement) where
-  (SVGForeignObjectElement a) == (SVGForeignObjectElement b) = js_eq a b
-
-instance PToJSRef SVGForeignObjectElement where
-  pToJSRef = unSVGForeignObjectElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGForeignObjectElement where
-  pFromJSRef = SVGForeignObjectElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGForeignObjectElement where
-  toJSRef = return . unSVGForeignObjectElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGForeignObjectElement where
-  fromJSRef = return . fmap SVGForeignObjectElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGGraphicsElement SVGForeignObjectElement
-instance IsSVGElement SVGForeignObjectElement
-instance IsElement SVGForeignObjectElement
-instance IsNode SVGForeignObjectElement
-instance IsEventTarget SVGForeignObjectElement
-instance IsGObject SVGForeignObjectElement where
-  toGObject = GObject . castRef . unSVGForeignObjectElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGForeignObjectElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGForeignObjectElement :: IsGObject obj => obj -> SVGForeignObjectElement
-castToSVGForeignObjectElement = castTo gTypeSVGForeignObjectElement "SVGForeignObjectElement"
-
-foreign import javascript unsafe "window[\"SVGForeignObjectElement\"]" gTypeSVGForeignObjectElement' :: JSRef GType
-gTypeSVGForeignObjectElement = GType gTypeSVGForeignObjectElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGGElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGGraphicsElement"
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGGElement Mozilla SVGGElement documentation>
-newtype SVGGElement = SVGGElement { unSVGGElement :: JSRef SVGGElement }
-
-instance Eq (SVGGElement) where
-  (SVGGElement a) == (SVGGElement b) = js_eq a b
-
-instance PToJSRef SVGGElement where
-  pToJSRef = unSVGGElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGGElement where
-  pFromJSRef = SVGGElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGGElement where
-  toJSRef = return . unSVGGElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGGElement where
-  fromJSRef = return . fmap SVGGElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGGraphicsElement SVGGElement
-instance IsSVGElement SVGGElement
-instance IsElement SVGGElement
-instance IsNode SVGGElement
-instance IsEventTarget SVGGElement
-instance IsGObject SVGGElement where
-  toGObject = GObject . castRef . unSVGGElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGGElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGGElement :: IsGObject obj => obj -> SVGGElement
-castToSVGGElement = castTo gTypeSVGGElement "SVGGElement"
-
-foreign import javascript unsafe "window[\"SVGGElement\"]" gTypeSVGGElement' :: JSRef GType
-gTypeSVGGElement = GType gTypeSVGGElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGGlyphElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGGlyphElement Mozilla SVGGlyphElement documentation>
-newtype SVGGlyphElement = SVGGlyphElement { unSVGGlyphElement :: JSRef SVGGlyphElement }
-
-instance Eq (SVGGlyphElement) where
-  (SVGGlyphElement a) == (SVGGlyphElement b) = js_eq a b
-
-instance PToJSRef SVGGlyphElement where
-  pToJSRef = unSVGGlyphElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGGlyphElement where
-  pFromJSRef = SVGGlyphElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGGlyphElement where
-  toJSRef = return . unSVGGlyphElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGGlyphElement where
-  fromJSRef = return . fmap SVGGlyphElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGElement SVGGlyphElement
-instance IsElement SVGGlyphElement
-instance IsNode SVGGlyphElement
-instance IsEventTarget SVGGlyphElement
-instance IsGObject SVGGlyphElement where
-  toGObject = GObject . castRef . unSVGGlyphElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGGlyphElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGGlyphElement :: IsGObject obj => obj -> SVGGlyphElement
-castToSVGGlyphElement = castTo gTypeSVGGlyphElement "SVGGlyphElement"
-
-foreign import javascript unsafe "window[\"SVGGlyphElement\"]" gTypeSVGGlyphElement' :: JSRef GType
-gTypeSVGGlyphElement = GType gTypeSVGGlyphElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGGlyphRefElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGGlyphRefElement Mozilla SVGGlyphRefElement documentation>
-newtype SVGGlyphRefElement = SVGGlyphRefElement { unSVGGlyphRefElement :: JSRef SVGGlyphRefElement }
-
-instance Eq (SVGGlyphRefElement) where
-  (SVGGlyphRefElement a) == (SVGGlyphRefElement b) = js_eq a b
-
-instance PToJSRef SVGGlyphRefElement where
-  pToJSRef = unSVGGlyphRefElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGGlyphRefElement where
-  pFromJSRef = SVGGlyphRefElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGGlyphRefElement where
-  toJSRef = return . unSVGGlyphRefElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGGlyphRefElement where
-  fromJSRef = return . fmap SVGGlyphRefElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGElement SVGGlyphRefElement
-instance IsElement SVGGlyphRefElement
-instance IsNode SVGGlyphRefElement
-instance IsEventTarget SVGGlyphRefElement
-instance IsGObject SVGGlyphRefElement where
-  toGObject = GObject . castRef . unSVGGlyphRefElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGGlyphRefElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGGlyphRefElement :: IsGObject obj => obj -> SVGGlyphRefElement
-castToSVGGlyphRefElement = castTo gTypeSVGGlyphRefElement "SVGGlyphRefElement"
-
-foreign import javascript unsafe "window[\"SVGGlyphRefElement\"]" gTypeSVGGlyphRefElement' :: JSRef GType
-gTypeSVGGlyphRefElement = GType gTypeSVGGlyphRefElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGGradientElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGGradientElement Mozilla SVGGradientElement documentation>
-newtype SVGGradientElement = SVGGradientElement { unSVGGradientElement :: JSRef SVGGradientElement }
-
-instance Eq (SVGGradientElement) where
-  (SVGGradientElement a) == (SVGGradientElement b) = js_eq a b
-
-instance PToJSRef SVGGradientElement where
-  pToJSRef = unSVGGradientElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGGradientElement where
-  pFromJSRef = SVGGradientElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGGradientElement where
-  toJSRef = return . unSVGGradientElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGGradientElement where
-  fromJSRef = return . fmap SVGGradientElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsSVGElement o => IsSVGGradientElement o
-toSVGGradientElement :: IsSVGGradientElement o => o -> SVGGradientElement
-toSVGGradientElement = unsafeCastGObject . toGObject
-
-instance IsSVGGradientElement SVGGradientElement
-instance IsSVGElement SVGGradientElement
-instance IsElement SVGGradientElement
-instance IsNode SVGGradientElement
-instance IsEventTarget SVGGradientElement
-instance IsGObject SVGGradientElement where
-  toGObject = GObject . castRef . unSVGGradientElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGGradientElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGGradientElement :: IsGObject obj => obj -> SVGGradientElement
-castToSVGGradientElement = castTo gTypeSVGGradientElement "SVGGradientElement"
-
-foreign import javascript unsafe "window[\"SVGGradientElement\"]" gTypeSVGGradientElement' :: JSRef GType
-gTypeSVGGradientElement = GType gTypeSVGGradientElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGGraphicsElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGGraphicsElement Mozilla SVGGraphicsElement documentation>
-newtype SVGGraphicsElement = SVGGraphicsElement { unSVGGraphicsElement :: JSRef SVGGraphicsElement }
-
-instance Eq (SVGGraphicsElement) where
-  (SVGGraphicsElement a) == (SVGGraphicsElement b) = js_eq a b
-
-instance PToJSRef SVGGraphicsElement where
-  pToJSRef = unSVGGraphicsElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGGraphicsElement where
-  pFromJSRef = SVGGraphicsElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGGraphicsElement where
-  toJSRef = return . unSVGGraphicsElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGGraphicsElement where
-  fromJSRef = return . fmap SVGGraphicsElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsSVGElement o => IsSVGGraphicsElement o
-toSVGGraphicsElement :: IsSVGGraphicsElement o => o -> SVGGraphicsElement
-toSVGGraphicsElement = unsafeCastGObject . toGObject
-
-instance IsSVGGraphicsElement SVGGraphicsElement
-instance IsSVGElement SVGGraphicsElement
-instance IsElement SVGGraphicsElement
-instance IsNode SVGGraphicsElement
-instance IsEventTarget SVGGraphicsElement
-instance IsGObject SVGGraphicsElement where
-  toGObject = GObject . castRef . unSVGGraphicsElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGGraphicsElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGGraphicsElement :: IsGObject obj => obj -> SVGGraphicsElement
-castToSVGGraphicsElement = castTo gTypeSVGGraphicsElement "SVGGraphicsElement"
-
-foreign import javascript unsafe "window[\"SVGGraphicsElement\"]" gTypeSVGGraphicsElement' :: JSRef GType
-gTypeSVGGraphicsElement = GType gTypeSVGGraphicsElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGHKernElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGHKernElement Mozilla SVGHKernElement documentation>
-newtype SVGHKernElement = SVGHKernElement { unSVGHKernElement :: JSRef SVGHKernElement }
-
-instance Eq (SVGHKernElement) where
-  (SVGHKernElement a) == (SVGHKernElement b) = js_eq a b
-
-instance PToJSRef SVGHKernElement where
-  pToJSRef = unSVGHKernElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGHKernElement where
-  pFromJSRef = SVGHKernElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGHKernElement where
-  toJSRef = return . unSVGHKernElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGHKernElement where
-  fromJSRef = return . fmap SVGHKernElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGElement SVGHKernElement
-instance IsElement SVGHKernElement
-instance IsNode SVGHKernElement
-instance IsEventTarget SVGHKernElement
-instance IsGObject SVGHKernElement where
-  toGObject = GObject . castRef . unSVGHKernElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGHKernElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGHKernElement :: IsGObject obj => obj -> SVGHKernElement
-castToSVGHKernElement = castTo gTypeSVGHKernElement "SVGHKernElement"
-
-foreign import javascript unsafe "window[\"SVGHKernElement\"]" gTypeSVGHKernElement' :: JSRef GType
-gTypeSVGHKernElement = GType gTypeSVGHKernElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGImageElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGGraphicsElement"
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGImageElement Mozilla SVGImageElement documentation>
-newtype SVGImageElement = SVGImageElement { unSVGImageElement :: JSRef SVGImageElement }
-
-instance Eq (SVGImageElement) where
-  (SVGImageElement a) == (SVGImageElement b) = js_eq a b
-
-instance PToJSRef SVGImageElement where
-  pToJSRef = unSVGImageElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGImageElement where
-  pFromJSRef = SVGImageElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGImageElement where
-  toJSRef = return . unSVGImageElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGImageElement where
-  fromJSRef = return . fmap SVGImageElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGGraphicsElement SVGImageElement
-instance IsSVGElement SVGImageElement
-instance IsElement SVGImageElement
-instance IsNode SVGImageElement
-instance IsEventTarget SVGImageElement
-instance IsGObject SVGImageElement where
-  toGObject = GObject . castRef . unSVGImageElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGImageElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGImageElement :: IsGObject obj => obj -> SVGImageElement
-castToSVGImageElement = castTo gTypeSVGImageElement "SVGImageElement"
-
-foreign import javascript unsafe "window[\"SVGImageElement\"]" gTypeSVGImageElement' :: JSRef GType
-gTypeSVGImageElement = GType gTypeSVGImageElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGLength".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGLength Mozilla SVGLength documentation>
-newtype SVGLength = SVGLength { unSVGLength :: JSRef SVGLength }
-
-instance Eq (SVGLength) where
-  (SVGLength a) == (SVGLength b) = js_eq a b
-
-instance PToJSRef SVGLength where
-  pToJSRef = unSVGLength
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGLength where
-  pFromJSRef = SVGLength
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGLength where
-  toJSRef = return . unSVGLength
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGLength where
-  fromJSRef = return . fmap SVGLength . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject SVGLength where
-  toGObject = GObject . castRef . unSVGLength
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGLength . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGLength :: IsGObject obj => obj -> SVGLength
-castToSVGLength = castTo gTypeSVGLength "SVGLength"
-
-foreign import javascript unsafe "window[\"SVGLength\"]" gTypeSVGLength' :: JSRef GType
-gTypeSVGLength = GType gTypeSVGLength'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGLengthList".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGLengthList Mozilla SVGLengthList documentation>
-newtype SVGLengthList = SVGLengthList { unSVGLengthList :: JSRef SVGLengthList }
-
-instance Eq (SVGLengthList) where
-  (SVGLengthList a) == (SVGLengthList b) = js_eq a b
-
-instance PToJSRef SVGLengthList where
-  pToJSRef = unSVGLengthList
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGLengthList where
-  pFromJSRef = SVGLengthList
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGLengthList where
-  toJSRef = return . unSVGLengthList
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGLengthList where
-  fromJSRef = return . fmap SVGLengthList . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject SVGLengthList where
-  toGObject = GObject . castRef . unSVGLengthList
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGLengthList . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGLengthList :: IsGObject obj => obj -> SVGLengthList
-castToSVGLengthList = castTo gTypeSVGLengthList "SVGLengthList"
-
-foreign import javascript unsafe "window[\"SVGLengthList\"]" gTypeSVGLengthList' :: JSRef GType
-gTypeSVGLengthList = GType gTypeSVGLengthList'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGLineElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGGraphicsElement"
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGLineElement Mozilla SVGLineElement documentation>
-newtype SVGLineElement = SVGLineElement { unSVGLineElement :: JSRef SVGLineElement }
-
-instance Eq (SVGLineElement) where
-  (SVGLineElement a) == (SVGLineElement b) = js_eq a b
-
-instance PToJSRef SVGLineElement where
-  pToJSRef = unSVGLineElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGLineElement where
-  pFromJSRef = SVGLineElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGLineElement where
-  toJSRef = return . unSVGLineElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGLineElement where
-  fromJSRef = return . fmap SVGLineElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGGraphicsElement SVGLineElement
-instance IsSVGElement SVGLineElement
-instance IsElement SVGLineElement
-instance IsNode SVGLineElement
-instance IsEventTarget SVGLineElement
-instance IsGObject SVGLineElement where
-  toGObject = GObject . castRef . unSVGLineElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGLineElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGLineElement :: IsGObject obj => obj -> SVGLineElement
-castToSVGLineElement = castTo gTypeSVGLineElement "SVGLineElement"
-
-foreign import javascript unsafe "window[\"SVGLineElement\"]" gTypeSVGLineElement' :: JSRef GType
-gTypeSVGLineElement = GType gTypeSVGLineElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGLinearGradientElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGGradientElement"
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGLinearGradientElement Mozilla SVGLinearGradientElement documentation>
-newtype SVGLinearGradientElement = SVGLinearGradientElement { unSVGLinearGradientElement :: JSRef SVGLinearGradientElement }
-
-instance Eq (SVGLinearGradientElement) where
-  (SVGLinearGradientElement a) == (SVGLinearGradientElement b) = js_eq a b
-
-instance PToJSRef SVGLinearGradientElement where
-  pToJSRef = unSVGLinearGradientElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGLinearGradientElement where
-  pFromJSRef = SVGLinearGradientElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGLinearGradientElement where
-  toJSRef = return . unSVGLinearGradientElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGLinearGradientElement where
-  fromJSRef = return . fmap SVGLinearGradientElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGGradientElement SVGLinearGradientElement
-instance IsSVGElement SVGLinearGradientElement
-instance IsElement SVGLinearGradientElement
-instance IsNode SVGLinearGradientElement
-instance IsEventTarget SVGLinearGradientElement
-instance IsGObject SVGLinearGradientElement where
-  toGObject = GObject . castRef . unSVGLinearGradientElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGLinearGradientElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGLinearGradientElement :: IsGObject obj => obj -> SVGLinearGradientElement
-castToSVGLinearGradientElement = castTo gTypeSVGLinearGradientElement "SVGLinearGradientElement"
-
-foreign import javascript unsafe "window[\"SVGLinearGradientElement\"]" gTypeSVGLinearGradientElement' :: JSRef GType
-gTypeSVGLinearGradientElement = GType gTypeSVGLinearGradientElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGMPathElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGMPathElement Mozilla SVGMPathElement documentation>
-newtype SVGMPathElement = SVGMPathElement { unSVGMPathElement :: JSRef SVGMPathElement }
-
-instance Eq (SVGMPathElement) where
-  (SVGMPathElement a) == (SVGMPathElement b) = js_eq a b
-
-instance PToJSRef SVGMPathElement where
-  pToJSRef = unSVGMPathElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGMPathElement where
-  pFromJSRef = SVGMPathElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGMPathElement where
-  toJSRef = return . unSVGMPathElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGMPathElement where
-  fromJSRef = return . fmap SVGMPathElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGElement SVGMPathElement
-instance IsElement SVGMPathElement
-instance IsNode SVGMPathElement
-instance IsEventTarget SVGMPathElement
-instance IsGObject SVGMPathElement where
-  toGObject = GObject . castRef . unSVGMPathElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGMPathElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGMPathElement :: IsGObject obj => obj -> SVGMPathElement
-castToSVGMPathElement = castTo gTypeSVGMPathElement "SVGMPathElement"
-
-foreign import javascript unsafe "window[\"SVGMPathElement\"]" gTypeSVGMPathElement' :: JSRef GType
-gTypeSVGMPathElement = GType gTypeSVGMPathElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGMarkerElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGMarkerElement Mozilla SVGMarkerElement documentation>
-newtype SVGMarkerElement = SVGMarkerElement { unSVGMarkerElement :: JSRef SVGMarkerElement }
-
-instance Eq (SVGMarkerElement) where
-  (SVGMarkerElement a) == (SVGMarkerElement b) = js_eq a b
-
-instance PToJSRef SVGMarkerElement where
-  pToJSRef = unSVGMarkerElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGMarkerElement where
-  pFromJSRef = SVGMarkerElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGMarkerElement where
-  toJSRef = return . unSVGMarkerElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGMarkerElement where
-  fromJSRef = return . fmap SVGMarkerElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGElement SVGMarkerElement
-instance IsElement SVGMarkerElement
-instance IsNode SVGMarkerElement
-instance IsEventTarget SVGMarkerElement
-instance IsGObject SVGMarkerElement where
-  toGObject = GObject . castRef . unSVGMarkerElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGMarkerElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGMarkerElement :: IsGObject obj => obj -> SVGMarkerElement
-castToSVGMarkerElement = castTo gTypeSVGMarkerElement "SVGMarkerElement"
-
-foreign import javascript unsafe "window[\"SVGMarkerElement\"]" gTypeSVGMarkerElement' :: JSRef GType
-gTypeSVGMarkerElement = GType gTypeSVGMarkerElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGMaskElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGMaskElement Mozilla SVGMaskElement documentation>
-newtype SVGMaskElement = SVGMaskElement { unSVGMaskElement :: JSRef SVGMaskElement }
-
-instance Eq (SVGMaskElement) where
-  (SVGMaskElement a) == (SVGMaskElement b) = js_eq a b
-
-instance PToJSRef SVGMaskElement where
-  pToJSRef = unSVGMaskElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGMaskElement where
-  pFromJSRef = SVGMaskElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGMaskElement where
-  toJSRef = return . unSVGMaskElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGMaskElement where
-  fromJSRef = return . fmap SVGMaskElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGElement SVGMaskElement
-instance IsElement SVGMaskElement
-instance IsNode SVGMaskElement
-instance IsEventTarget SVGMaskElement
-instance IsGObject SVGMaskElement where
-  toGObject = GObject . castRef . unSVGMaskElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGMaskElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGMaskElement :: IsGObject obj => obj -> SVGMaskElement
-castToSVGMaskElement = castTo gTypeSVGMaskElement "SVGMaskElement"
-
-foreign import javascript unsafe "window[\"SVGMaskElement\"]" gTypeSVGMaskElement' :: JSRef GType
-gTypeSVGMaskElement = GType gTypeSVGMaskElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGMatrix".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGMatrix Mozilla SVGMatrix documentation>
-newtype SVGMatrix = SVGMatrix { unSVGMatrix :: JSRef SVGMatrix }
-
-instance Eq (SVGMatrix) where
-  (SVGMatrix a) == (SVGMatrix b) = js_eq a b
-
-instance PToJSRef SVGMatrix where
-  pToJSRef = unSVGMatrix
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGMatrix where
-  pFromJSRef = SVGMatrix
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGMatrix where
-  toJSRef = return . unSVGMatrix
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGMatrix where
-  fromJSRef = return . fmap SVGMatrix . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject SVGMatrix where
-  toGObject = GObject . castRef . unSVGMatrix
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGMatrix . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGMatrix :: IsGObject obj => obj -> SVGMatrix
-castToSVGMatrix = castTo gTypeSVGMatrix "SVGMatrix"
-
-foreign import javascript unsafe "window[\"SVGMatrix\"]" gTypeSVGMatrix' :: JSRef GType
-gTypeSVGMatrix = GType gTypeSVGMatrix'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGMetadataElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGMetadataElement Mozilla SVGMetadataElement documentation>
-newtype SVGMetadataElement = SVGMetadataElement { unSVGMetadataElement :: JSRef SVGMetadataElement }
-
-instance Eq (SVGMetadataElement) where
-  (SVGMetadataElement a) == (SVGMetadataElement b) = js_eq a b
-
-instance PToJSRef SVGMetadataElement where
-  pToJSRef = unSVGMetadataElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGMetadataElement where
-  pFromJSRef = SVGMetadataElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGMetadataElement where
-  toJSRef = return . unSVGMetadataElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGMetadataElement where
-  fromJSRef = return . fmap SVGMetadataElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGElement SVGMetadataElement
-instance IsElement SVGMetadataElement
-instance IsNode SVGMetadataElement
-instance IsEventTarget SVGMetadataElement
-instance IsGObject SVGMetadataElement where
-  toGObject = GObject . castRef . unSVGMetadataElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGMetadataElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGMetadataElement :: IsGObject obj => obj -> SVGMetadataElement
-castToSVGMetadataElement = castTo gTypeSVGMetadataElement "SVGMetadataElement"
-
-foreign import javascript unsafe "window[\"SVGMetadataElement\"]" gTypeSVGMetadataElement' :: JSRef GType
-gTypeSVGMetadataElement = GType gTypeSVGMetadataElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGMissingGlyphElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGMissingGlyphElement Mozilla SVGMissingGlyphElement documentation>
-newtype SVGMissingGlyphElement = SVGMissingGlyphElement { unSVGMissingGlyphElement :: JSRef SVGMissingGlyphElement }
-
-instance Eq (SVGMissingGlyphElement) where
-  (SVGMissingGlyphElement a) == (SVGMissingGlyphElement b) = js_eq a b
-
-instance PToJSRef SVGMissingGlyphElement where
-  pToJSRef = unSVGMissingGlyphElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGMissingGlyphElement where
-  pFromJSRef = SVGMissingGlyphElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGMissingGlyphElement where
-  toJSRef = return . unSVGMissingGlyphElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGMissingGlyphElement where
-  fromJSRef = return . fmap SVGMissingGlyphElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGElement SVGMissingGlyphElement
-instance IsElement SVGMissingGlyphElement
-instance IsNode SVGMissingGlyphElement
-instance IsEventTarget SVGMissingGlyphElement
-instance IsGObject SVGMissingGlyphElement where
-  toGObject = GObject . castRef . unSVGMissingGlyphElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGMissingGlyphElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGMissingGlyphElement :: IsGObject obj => obj -> SVGMissingGlyphElement
-castToSVGMissingGlyphElement = castTo gTypeSVGMissingGlyphElement "SVGMissingGlyphElement"
-
-foreign import javascript unsafe "window[\"SVGMissingGlyphElement\"]" gTypeSVGMissingGlyphElement' :: JSRef GType
-gTypeSVGMissingGlyphElement = GType gTypeSVGMissingGlyphElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGNumber".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGNumber Mozilla SVGNumber documentation>
-newtype SVGNumber = SVGNumber { unSVGNumber :: JSRef SVGNumber }
-
-instance Eq (SVGNumber) where
-  (SVGNumber a) == (SVGNumber b) = js_eq a b
-
-instance PToJSRef SVGNumber where
-  pToJSRef = unSVGNumber
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGNumber where
-  pFromJSRef = SVGNumber
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGNumber where
-  toJSRef = return . unSVGNumber
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGNumber where
-  fromJSRef = return . fmap SVGNumber . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject SVGNumber where
-  toGObject = GObject . castRef . unSVGNumber
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGNumber . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGNumber :: IsGObject obj => obj -> SVGNumber
-castToSVGNumber = castTo gTypeSVGNumber "SVGNumber"
-
-foreign import javascript unsafe "window[\"SVGNumber\"]" gTypeSVGNumber' :: JSRef GType
-gTypeSVGNumber = GType gTypeSVGNumber'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGNumberList".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGNumberList Mozilla SVGNumberList documentation>
-newtype SVGNumberList = SVGNumberList { unSVGNumberList :: JSRef SVGNumberList }
-
-instance Eq (SVGNumberList) where
-  (SVGNumberList a) == (SVGNumberList b) = js_eq a b
-
-instance PToJSRef SVGNumberList where
-  pToJSRef = unSVGNumberList
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGNumberList where
-  pFromJSRef = SVGNumberList
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGNumberList where
-  toJSRef = return . unSVGNumberList
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGNumberList where
-  fromJSRef = return . fmap SVGNumberList . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject SVGNumberList where
-  toGObject = GObject . castRef . unSVGNumberList
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGNumberList . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGNumberList :: IsGObject obj => obj -> SVGNumberList
-castToSVGNumberList = castTo gTypeSVGNumberList "SVGNumberList"
-
-foreign import javascript unsafe "window[\"SVGNumberList\"]" gTypeSVGNumberList' :: JSRef GType
-gTypeSVGNumberList = GType gTypeSVGNumberList'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGPaint".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGColor"
---     * "GHCJS.DOM.CSSValue"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGPaint Mozilla SVGPaint documentation>
-newtype SVGPaint = SVGPaint { unSVGPaint :: JSRef SVGPaint }
-
-instance Eq (SVGPaint) where
-  (SVGPaint a) == (SVGPaint b) = js_eq a b
-
-instance PToJSRef SVGPaint where
-  pToJSRef = unSVGPaint
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGPaint where
-  pFromJSRef = SVGPaint
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGPaint where
-  toJSRef = return . unSVGPaint
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGPaint where
-  fromJSRef = return . fmap SVGPaint . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGColor SVGPaint
-instance IsCSSValue SVGPaint
-instance IsGObject SVGPaint where
-  toGObject = GObject . castRef . unSVGPaint
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGPaint . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGPaint :: IsGObject obj => obj -> SVGPaint
-castToSVGPaint = castTo gTypeSVGPaint "SVGPaint"
-
-foreign import javascript unsafe "window[\"SVGPaint\"]" gTypeSVGPaint' :: JSRef GType
-gTypeSVGPaint = GType gTypeSVGPaint'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGPathElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGGraphicsElement"
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathElement Mozilla SVGPathElement documentation>
-newtype SVGPathElement = SVGPathElement { unSVGPathElement :: JSRef SVGPathElement }
-
-instance Eq (SVGPathElement) where
-  (SVGPathElement a) == (SVGPathElement b) = js_eq a b
-
-instance PToJSRef SVGPathElement where
-  pToJSRef = unSVGPathElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGPathElement where
-  pFromJSRef = SVGPathElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGPathElement where
-  toJSRef = return . unSVGPathElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGPathElement where
-  fromJSRef = return . fmap SVGPathElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGGraphicsElement SVGPathElement
-instance IsSVGElement SVGPathElement
-instance IsElement SVGPathElement
-instance IsNode SVGPathElement
-instance IsEventTarget SVGPathElement
-instance IsGObject SVGPathElement where
-  toGObject = GObject . castRef . unSVGPathElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGPathElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGPathElement :: IsGObject obj => obj -> SVGPathElement
-castToSVGPathElement = castTo gTypeSVGPathElement "SVGPathElement"
-
-foreign import javascript unsafe "window[\"SVGPathElement\"]" gTypeSVGPathElement' :: JSRef GType
-gTypeSVGPathElement = GType gTypeSVGPathElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGPathSeg".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSeg Mozilla SVGPathSeg documentation>
-newtype SVGPathSeg = SVGPathSeg { unSVGPathSeg :: JSRef SVGPathSeg }
-
-instance Eq (SVGPathSeg) where
-  (SVGPathSeg a) == (SVGPathSeg b) = js_eq a b
-
-instance PToJSRef SVGPathSeg where
-  pToJSRef = unSVGPathSeg
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGPathSeg where
-  pFromJSRef = SVGPathSeg
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGPathSeg where
-  toJSRef = return . unSVGPathSeg
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGPathSeg where
-  fromJSRef = return . fmap SVGPathSeg . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsGObject o => IsSVGPathSeg o
-toSVGPathSeg :: IsSVGPathSeg o => o -> SVGPathSeg
-toSVGPathSeg = unsafeCastGObject . toGObject
-
-instance IsSVGPathSeg SVGPathSeg
-instance IsGObject SVGPathSeg where
-  toGObject = GObject . castRef . unSVGPathSeg
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGPathSeg . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGPathSeg :: IsGObject obj => obj -> SVGPathSeg
-castToSVGPathSeg = castTo gTypeSVGPathSeg "SVGPathSeg"
-
-foreign import javascript unsafe "window[\"SVGPathSeg\"]" gTypeSVGPathSeg' :: JSRef GType
-gTypeSVGPathSeg = GType gTypeSVGPathSeg'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGPathSegArcAbs".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGPathSeg"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegArcAbs Mozilla SVGPathSegArcAbs documentation>
-newtype SVGPathSegArcAbs = SVGPathSegArcAbs { unSVGPathSegArcAbs :: JSRef SVGPathSegArcAbs }
-
-instance Eq (SVGPathSegArcAbs) where
-  (SVGPathSegArcAbs a) == (SVGPathSegArcAbs b) = js_eq a b
-
-instance PToJSRef SVGPathSegArcAbs where
-  pToJSRef = unSVGPathSegArcAbs
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGPathSegArcAbs where
-  pFromJSRef = SVGPathSegArcAbs
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGPathSegArcAbs where
-  toJSRef = return . unSVGPathSegArcAbs
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGPathSegArcAbs where
-  fromJSRef = return . fmap SVGPathSegArcAbs . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGPathSeg SVGPathSegArcAbs
-instance IsGObject SVGPathSegArcAbs where
-  toGObject = GObject . castRef . unSVGPathSegArcAbs
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGPathSegArcAbs . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGPathSegArcAbs :: IsGObject obj => obj -> SVGPathSegArcAbs
-castToSVGPathSegArcAbs = castTo gTypeSVGPathSegArcAbs "SVGPathSegArcAbs"
-
-foreign import javascript unsafe "window[\"SVGPathSegArcAbs\"]" gTypeSVGPathSegArcAbs' :: JSRef GType
-gTypeSVGPathSegArcAbs = GType gTypeSVGPathSegArcAbs'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGPathSegArcRel".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGPathSeg"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegArcRel Mozilla SVGPathSegArcRel documentation>
-newtype SVGPathSegArcRel = SVGPathSegArcRel { unSVGPathSegArcRel :: JSRef SVGPathSegArcRel }
-
-instance Eq (SVGPathSegArcRel) where
-  (SVGPathSegArcRel a) == (SVGPathSegArcRel b) = js_eq a b
-
-instance PToJSRef SVGPathSegArcRel where
-  pToJSRef = unSVGPathSegArcRel
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGPathSegArcRel where
-  pFromJSRef = SVGPathSegArcRel
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGPathSegArcRel where
-  toJSRef = return . unSVGPathSegArcRel
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGPathSegArcRel where
-  fromJSRef = return . fmap SVGPathSegArcRel . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGPathSeg SVGPathSegArcRel
-instance IsGObject SVGPathSegArcRel where
-  toGObject = GObject . castRef . unSVGPathSegArcRel
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGPathSegArcRel . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGPathSegArcRel :: IsGObject obj => obj -> SVGPathSegArcRel
-castToSVGPathSegArcRel = castTo gTypeSVGPathSegArcRel "SVGPathSegArcRel"
-
-foreign import javascript unsafe "window[\"SVGPathSegArcRel\"]" gTypeSVGPathSegArcRel' :: JSRef GType
-gTypeSVGPathSegArcRel = GType gTypeSVGPathSegArcRel'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGPathSegClosePath".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGPathSeg"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegClosePath Mozilla SVGPathSegClosePath documentation>
-newtype SVGPathSegClosePath = SVGPathSegClosePath { unSVGPathSegClosePath :: JSRef SVGPathSegClosePath }
-
-instance Eq (SVGPathSegClosePath) where
-  (SVGPathSegClosePath a) == (SVGPathSegClosePath b) = js_eq a b
-
-instance PToJSRef SVGPathSegClosePath where
-  pToJSRef = unSVGPathSegClosePath
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGPathSegClosePath where
-  pFromJSRef = SVGPathSegClosePath
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGPathSegClosePath where
-  toJSRef = return . unSVGPathSegClosePath
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGPathSegClosePath where
-  fromJSRef = return . fmap SVGPathSegClosePath . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGPathSeg SVGPathSegClosePath
-instance IsGObject SVGPathSegClosePath where
-  toGObject = GObject . castRef . unSVGPathSegClosePath
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGPathSegClosePath . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGPathSegClosePath :: IsGObject obj => obj -> SVGPathSegClosePath
-castToSVGPathSegClosePath = castTo gTypeSVGPathSegClosePath "SVGPathSegClosePath"
-
-foreign import javascript unsafe "window[\"SVGPathSegClosePath\"]" gTypeSVGPathSegClosePath' :: JSRef GType
-gTypeSVGPathSegClosePath = GType gTypeSVGPathSegClosePath'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGPathSegCurvetoCubicAbs".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGPathSeg"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoCubicAbs Mozilla SVGPathSegCurvetoCubicAbs documentation>
-newtype SVGPathSegCurvetoCubicAbs = SVGPathSegCurvetoCubicAbs { unSVGPathSegCurvetoCubicAbs :: JSRef SVGPathSegCurvetoCubicAbs }
-
-instance Eq (SVGPathSegCurvetoCubicAbs) where
-  (SVGPathSegCurvetoCubicAbs a) == (SVGPathSegCurvetoCubicAbs b) = js_eq a b
-
-instance PToJSRef SVGPathSegCurvetoCubicAbs where
-  pToJSRef = unSVGPathSegCurvetoCubicAbs
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGPathSegCurvetoCubicAbs where
-  pFromJSRef = SVGPathSegCurvetoCubicAbs
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGPathSegCurvetoCubicAbs where
-  toJSRef = return . unSVGPathSegCurvetoCubicAbs
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGPathSegCurvetoCubicAbs where
-  fromJSRef = return . fmap SVGPathSegCurvetoCubicAbs . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGPathSeg SVGPathSegCurvetoCubicAbs
-instance IsGObject SVGPathSegCurvetoCubicAbs where
-  toGObject = GObject . castRef . unSVGPathSegCurvetoCubicAbs
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGPathSegCurvetoCubicAbs . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGPathSegCurvetoCubicAbs :: IsGObject obj => obj -> SVGPathSegCurvetoCubicAbs
-castToSVGPathSegCurvetoCubicAbs = castTo gTypeSVGPathSegCurvetoCubicAbs "SVGPathSegCurvetoCubicAbs"
-
-foreign import javascript unsafe "window[\"SVGPathSegCurvetoCubicAbs\"]" gTypeSVGPathSegCurvetoCubicAbs' :: JSRef GType
-gTypeSVGPathSegCurvetoCubicAbs = GType gTypeSVGPathSegCurvetoCubicAbs'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGPathSegCurvetoCubicRel".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGPathSeg"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoCubicRel Mozilla SVGPathSegCurvetoCubicRel documentation>
-newtype SVGPathSegCurvetoCubicRel = SVGPathSegCurvetoCubicRel { unSVGPathSegCurvetoCubicRel :: JSRef SVGPathSegCurvetoCubicRel }
-
-instance Eq (SVGPathSegCurvetoCubicRel) where
-  (SVGPathSegCurvetoCubicRel a) == (SVGPathSegCurvetoCubicRel b) = js_eq a b
-
-instance PToJSRef SVGPathSegCurvetoCubicRel where
-  pToJSRef = unSVGPathSegCurvetoCubicRel
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGPathSegCurvetoCubicRel where
-  pFromJSRef = SVGPathSegCurvetoCubicRel
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGPathSegCurvetoCubicRel where
-  toJSRef = return . unSVGPathSegCurvetoCubicRel
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGPathSegCurvetoCubicRel where
-  fromJSRef = return . fmap SVGPathSegCurvetoCubicRel . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGPathSeg SVGPathSegCurvetoCubicRel
-instance IsGObject SVGPathSegCurvetoCubicRel where
-  toGObject = GObject . castRef . unSVGPathSegCurvetoCubicRel
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGPathSegCurvetoCubicRel . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGPathSegCurvetoCubicRel :: IsGObject obj => obj -> SVGPathSegCurvetoCubicRel
-castToSVGPathSegCurvetoCubicRel = castTo gTypeSVGPathSegCurvetoCubicRel "SVGPathSegCurvetoCubicRel"
-
-foreign import javascript unsafe "window[\"SVGPathSegCurvetoCubicRel\"]" gTypeSVGPathSegCurvetoCubicRel' :: JSRef GType
-gTypeSVGPathSegCurvetoCubicRel = GType gTypeSVGPathSegCurvetoCubicRel'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGPathSegCurvetoCubicSmoothAbs".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGPathSeg"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoCubicSmoothAbs Mozilla SVGPathSegCurvetoCubicSmoothAbs documentation>
-newtype SVGPathSegCurvetoCubicSmoothAbs = SVGPathSegCurvetoCubicSmoothAbs { unSVGPathSegCurvetoCubicSmoothAbs :: JSRef SVGPathSegCurvetoCubicSmoothAbs }
-
-instance Eq (SVGPathSegCurvetoCubicSmoothAbs) where
-  (SVGPathSegCurvetoCubicSmoothAbs a) == (SVGPathSegCurvetoCubicSmoothAbs b) = js_eq a b
-
-instance PToJSRef SVGPathSegCurvetoCubicSmoothAbs where
-  pToJSRef = unSVGPathSegCurvetoCubicSmoothAbs
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGPathSegCurvetoCubicSmoothAbs where
-  pFromJSRef = SVGPathSegCurvetoCubicSmoothAbs
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGPathSegCurvetoCubicSmoothAbs where
-  toJSRef = return . unSVGPathSegCurvetoCubicSmoothAbs
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGPathSegCurvetoCubicSmoothAbs where
-  fromJSRef = return . fmap SVGPathSegCurvetoCubicSmoothAbs . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGPathSeg SVGPathSegCurvetoCubicSmoothAbs
-instance IsGObject SVGPathSegCurvetoCubicSmoothAbs where
-  toGObject = GObject . castRef . unSVGPathSegCurvetoCubicSmoothAbs
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGPathSegCurvetoCubicSmoothAbs . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGPathSegCurvetoCubicSmoothAbs :: IsGObject obj => obj -> SVGPathSegCurvetoCubicSmoothAbs
-castToSVGPathSegCurvetoCubicSmoothAbs = castTo gTypeSVGPathSegCurvetoCubicSmoothAbs "SVGPathSegCurvetoCubicSmoothAbs"
-
-foreign import javascript unsafe "window[\"SVGPathSegCurvetoCubicSmoothAbs\"]" gTypeSVGPathSegCurvetoCubicSmoothAbs' :: JSRef GType
-gTypeSVGPathSegCurvetoCubicSmoothAbs = GType gTypeSVGPathSegCurvetoCubicSmoothAbs'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGPathSegCurvetoCubicSmoothRel".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGPathSeg"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoCubicSmoothRel Mozilla SVGPathSegCurvetoCubicSmoothRel documentation>
-newtype SVGPathSegCurvetoCubicSmoothRel = SVGPathSegCurvetoCubicSmoothRel { unSVGPathSegCurvetoCubicSmoothRel :: JSRef SVGPathSegCurvetoCubicSmoothRel }
-
-instance Eq (SVGPathSegCurvetoCubicSmoothRel) where
-  (SVGPathSegCurvetoCubicSmoothRel a) == (SVGPathSegCurvetoCubicSmoothRel b) = js_eq a b
-
-instance PToJSRef SVGPathSegCurvetoCubicSmoothRel where
-  pToJSRef = unSVGPathSegCurvetoCubicSmoothRel
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGPathSegCurvetoCubicSmoothRel where
-  pFromJSRef = SVGPathSegCurvetoCubicSmoothRel
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGPathSegCurvetoCubicSmoothRel where
-  toJSRef = return . unSVGPathSegCurvetoCubicSmoothRel
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGPathSegCurvetoCubicSmoothRel where
-  fromJSRef = return . fmap SVGPathSegCurvetoCubicSmoothRel . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGPathSeg SVGPathSegCurvetoCubicSmoothRel
-instance IsGObject SVGPathSegCurvetoCubicSmoothRel where
-  toGObject = GObject . castRef . unSVGPathSegCurvetoCubicSmoothRel
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGPathSegCurvetoCubicSmoothRel . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGPathSegCurvetoCubicSmoothRel :: IsGObject obj => obj -> SVGPathSegCurvetoCubicSmoothRel
-castToSVGPathSegCurvetoCubicSmoothRel = castTo gTypeSVGPathSegCurvetoCubicSmoothRel "SVGPathSegCurvetoCubicSmoothRel"
-
-foreign import javascript unsafe "window[\"SVGPathSegCurvetoCubicSmoothRel\"]" gTypeSVGPathSegCurvetoCubicSmoothRel' :: JSRef GType
-gTypeSVGPathSegCurvetoCubicSmoothRel = GType gTypeSVGPathSegCurvetoCubicSmoothRel'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGPathSegCurvetoQuadraticAbs".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGPathSeg"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoQuadraticAbs Mozilla SVGPathSegCurvetoQuadraticAbs documentation>
-newtype SVGPathSegCurvetoQuadraticAbs = SVGPathSegCurvetoQuadraticAbs { unSVGPathSegCurvetoQuadraticAbs :: JSRef SVGPathSegCurvetoQuadraticAbs }
-
-instance Eq (SVGPathSegCurvetoQuadraticAbs) where
-  (SVGPathSegCurvetoQuadraticAbs a) == (SVGPathSegCurvetoQuadraticAbs b) = js_eq a b
-
-instance PToJSRef SVGPathSegCurvetoQuadraticAbs where
-  pToJSRef = unSVGPathSegCurvetoQuadraticAbs
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGPathSegCurvetoQuadraticAbs where
-  pFromJSRef = SVGPathSegCurvetoQuadraticAbs
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGPathSegCurvetoQuadraticAbs where
-  toJSRef = return . unSVGPathSegCurvetoQuadraticAbs
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGPathSegCurvetoQuadraticAbs where
-  fromJSRef = return . fmap SVGPathSegCurvetoQuadraticAbs . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGPathSeg SVGPathSegCurvetoQuadraticAbs
-instance IsGObject SVGPathSegCurvetoQuadraticAbs where
-  toGObject = GObject . castRef . unSVGPathSegCurvetoQuadraticAbs
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGPathSegCurvetoQuadraticAbs . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGPathSegCurvetoQuadraticAbs :: IsGObject obj => obj -> SVGPathSegCurvetoQuadraticAbs
-castToSVGPathSegCurvetoQuadraticAbs = castTo gTypeSVGPathSegCurvetoQuadraticAbs "SVGPathSegCurvetoQuadraticAbs"
-
-foreign import javascript unsafe "window[\"SVGPathSegCurvetoQuadraticAbs\"]" gTypeSVGPathSegCurvetoQuadraticAbs' :: JSRef GType
-gTypeSVGPathSegCurvetoQuadraticAbs = GType gTypeSVGPathSegCurvetoQuadraticAbs'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGPathSegCurvetoQuadraticRel".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGPathSeg"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoQuadraticRel Mozilla SVGPathSegCurvetoQuadraticRel documentation>
-newtype SVGPathSegCurvetoQuadraticRel = SVGPathSegCurvetoQuadraticRel { unSVGPathSegCurvetoQuadraticRel :: JSRef SVGPathSegCurvetoQuadraticRel }
-
-instance Eq (SVGPathSegCurvetoQuadraticRel) where
-  (SVGPathSegCurvetoQuadraticRel a) == (SVGPathSegCurvetoQuadraticRel b) = js_eq a b
-
-instance PToJSRef SVGPathSegCurvetoQuadraticRel where
-  pToJSRef = unSVGPathSegCurvetoQuadraticRel
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGPathSegCurvetoQuadraticRel where
-  pFromJSRef = SVGPathSegCurvetoQuadraticRel
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGPathSegCurvetoQuadraticRel where
-  toJSRef = return . unSVGPathSegCurvetoQuadraticRel
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGPathSegCurvetoQuadraticRel where
-  fromJSRef = return . fmap SVGPathSegCurvetoQuadraticRel . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGPathSeg SVGPathSegCurvetoQuadraticRel
-instance IsGObject SVGPathSegCurvetoQuadraticRel where
-  toGObject = GObject . castRef . unSVGPathSegCurvetoQuadraticRel
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGPathSegCurvetoQuadraticRel . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGPathSegCurvetoQuadraticRel :: IsGObject obj => obj -> SVGPathSegCurvetoQuadraticRel
-castToSVGPathSegCurvetoQuadraticRel = castTo gTypeSVGPathSegCurvetoQuadraticRel "SVGPathSegCurvetoQuadraticRel"
-
-foreign import javascript unsafe "window[\"SVGPathSegCurvetoQuadraticRel\"]" gTypeSVGPathSegCurvetoQuadraticRel' :: JSRef GType
-gTypeSVGPathSegCurvetoQuadraticRel = GType gTypeSVGPathSegCurvetoQuadraticRel'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGPathSegCurvetoQuadraticSmoothAbs".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGPathSeg"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoQuadraticSmoothAbs Mozilla SVGPathSegCurvetoQuadraticSmoothAbs documentation>
-newtype SVGPathSegCurvetoQuadraticSmoothAbs = SVGPathSegCurvetoQuadraticSmoothAbs { unSVGPathSegCurvetoQuadraticSmoothAbs :: JSRef SVGPathSegCurvetoQuadraticSmoothAbs }
-
-instance Eq (SVGPathSegCurvetoQuadraticSmoothAbs) where
-  (SVGPathSegCurvetoQuadraticSmoothAbs a) == (SVGPathSegCurvetoQuadraticSmoothAbs b) = js_eq a b
-
-instance PToJSRef SVGPathSegCurvetoQuadraticSmoothAbs where
-  pToJSRef = unSVGPathSegCurvetoQuadraticSmoothAbs
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGPathSegCurvetoQuadraticSmoothAbs where
-  pFromJSRef = SVGPathSegCurvetoQuadraticSmoothAbs
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGPathSegCurvetoQuadraticSmoothAbs where
-  toJSRef = return . unSVGPathSegCurvetoQuadraticSmoothAbs
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGPathSegCurvetoQuadraticSmoothAbs where
-  fromJSRef = return . fmap SVGPathSegCurvetoQuadraticSmoothAbs . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGPathSeg SVGPathSegCurvetoQuadraticSmoothAbs
-instance IsGObject SVGPathSegCurvetoQuadraticSmoothAbs where
-  toGObject = GObject . castRef . unSVGPathSegCurvetoQuadraticSmoothAbs
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGPathSegCurvetoQuadraticSmoothAbs . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGPathSegCurvetoQuadraticSmoothAbs :: IsGObject obj => obj -> SVGPathSegCurvetoQuadraticSmoothAbs
-castToSVGPathSegCurvetoQuadraticSmoothAbs = castTo gTypeSVGPathSegCurvetoQuadraticSmoothAbs "SVGPathSegCurvetoQuadraticSmoothAbs"
-
-foreign import javascript unsafe "window[\"SVGPathSegCurvetoQuadraticSmoothAbs\"]" gTypeSVGPathSegCurvetoQuadraticSmoothAbs' :: JSRef GType
-gTypeSVGPathSegCurvetoQuadraticSmoothAbs = GType gTypeSVGPathSegCurvetoQuadraticSmoothAbs'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGPathSegCurvetoQuadraticSmoothRel".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGPathSeg"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoQuadraticSmoothRel Mozilla SVGPathSegCurvetoQuadraticSmoothRel documentation>
-newtype SVGPathSegCurvetoQuadraticSmoothRel = SVGPathSegCurvetoQuadraticSmoothRel { unSVGPathSegCurvetoQuadraticSmoothRel :: JSRef SVGPathSegCurvetoQuadraticSmoothRel }
-
-instance Eq (SVGPathSegCurvetoQuadraticSmoothRel) where
-  (SVGPathSegCurvetoQuadraticSmoothRel a) == (SVGPathSegCurvetoQuadraticSmoothRel b) = js_eq a b
-
-instance PToJSRef SVGPathSegCurvetoQuadraticSmoothRel where
-  pToJSRef = unSVGPathSegCurvetoQuadraticSmoothRel
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGPathSegCurvetoQuadraticSmoothRel where
-  pFromJSRef = SVGPathSegCurvetoQuadraticSmoothRel
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGPathSegCurvetoQuadraticSmoothRel where
-  toJSRef = return . unSVGPathSegCurvetoQuadraticSmoothRel
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGPathSegCurvetoQuadraticSmoothRel where
-  fromJSRef = return . fmap SVGPathSegCurvetoQuadraticSmoothRel . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGPathSeg SVGPathSegCurvetoQuadraticSmoothRel
-instance IsGObject SVGPathSegCurvetoQuadraticSmoothRel where
-  toGObject = GObject . castRef . unSVGPathSegCurvetoQuadraticSmoothRel
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGPathSegCurvetoQuadraticSmoothRel . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGPathSegCurvetoQuadraticSmoothRel :: IsGObject obj => obj -> SVGPathSegCurvetoQuadraticSmoothRel
-castToSVGPathSegCurvetoQuadraticSmoothRel = castTo gTypeSVGPathSegCurvetoQuadraticSmoothRel "SVGPathSegCurvetoQuadraticSmoothRel"
-
-foreign import javascript unsafe "window[\"SVGPathSegCurvetoQuadraticSmoothRel\"]" gTypeSVGPathSegCurvetoQuadraticSmoothRel' :: JSRef GType
-gTypeSVGPathSegCurvetoQuadraticSmoothRel = GType gTypeSVGPathSegCurvetoQuadraticSmoothRel'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGPathSegLinetoAbs".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGPathSeg"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegLinetoAbs Mozilla SVGPathSegLinetoAbs documentation>
-newtype SVGPathSegLinetoAbs = SVGPathSegLinetoAbs { unSVGPathSegLinetoAbs :: JSRef SVGPathSegLinetoAbs }
-
-instance Eq (SVGPathSegLinetoAbs) where
-  (SVGPathSegLinetoAbs a) == (SVGPathSegLinetoAbs b) = js_eq a b
-
-instance PToJSRef SVGPathSegLinetoAbs where
-  pToJSRef = unSVGPathSegLinetoAbs
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGPathSegLinetoAbs where
-  pFromJSRef = SVGPathSegLinetoAbs
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGPathSegLinetoAbs where
-  toJSRef = return . unSVGPathSegLinetoAbs
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGPathSegLinetoAbs where
-  fromJSRef = return . fmap SVGPathSegLinetoAbs . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGPathSeg SVGPathSegLinetoAbs
-instance IsGObject SVGPathSegLinetoAbs where
-  toGObject = GObject . castRef . unSVGPathSegLinetoAbs
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGPathSegLinetoAbs . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGPathSegLinetoAbs :: IsGObject obj => obj -> SVGPathSegLinetoAbs
-castToSVGPathSegLinetoAbs = castTo gTypeSVGPathSegLinetoAbs "SVGPathSegLinetoAbs"
-
-foreign import javascript unsafe "window[\"SVGPathSegLinetoAbs\"]" gTypeSVGPathSegLinetoAbs' :: JSRef GType
-gTypeSVGPathSegLinetoAbs = GType gTypeSVGPathSegLinetoAbs'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGPathSegLinetoHorizontalAbs".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGPathSeg"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegLinetoHorizontalAbs Mozilla SVGPathSegLinetoHorizontalAbs documentation>
-newtype SVGPathSegLinetoHorizontalAbs = SVGPathSegLinetoHorizontalAbs { unSVGPathSegLinetoHorizontalAbs :: JSRef SVGPathSegLinetoHorizontalAbs }
-
-instance Eq (SVGPathSegLinetoHorizontalAbs) where
-  (SVGPathSegLinetoHorizontalAbs a) == (SVGPathSegLinetoHorizontalAbs b) = js_eq a b
-
-instance PToJSRef SVGPathSegLinetoHorizontalAbs where
-  pToJSRef = unSVGPathSegLinetoHorizontalAbs
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGPathSegLinetoHorizontalAbs where
-  pFromJSRef = SVGPathSegLinetoHorizontalAbs
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGPathSegLinetoHorizontalAbs where
-  toJSRef = return . unSVGPathSegLinetoHorizontalAbs
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGPathSegLinetoHorizontalAbs where
-  fromJSRef = return . fmap SVGPathSegLinetoHorizontalAbs . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGPathSeg SVGPathSegLinetoHorizontalAbs
-instance IsGObject SVGPathSegLinetoHorizontalAbs where
-  toGObject = GObject . castRef . unSVGPathSegLinetoHorizontalAbs
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGPathSegLinetoHorizontalAbs . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGPathSegLinetoHorizontalAbs :: IsGObject obj => obj -> SVGPathSegLinetoHorizontalAbs
-castToSVGPathSegLinetoHorizontalAbs = castTo gTypeSVGPathSegLinetoHorizontalAbs "SVGPathSegLinetoHorizontalAbs"
-
-foreign import javascript unsafe "window[\"SVGPathSegLinetoHorizontalAbs\"]" gTypeSVGPathSegLinetoHorizontalAbs' :: JSRef GType
-gTypeSVGPathSegLinetoHorizontalAbs = GType gTypeSVGPathSegLinetoHorizontalAbs'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGPathSegLinetoHorizontalRel".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGPathSeg"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegLinetoHorizontalRel Mozilla SVGPathSegLinetoHorizontalRel documentation>
-newtype SVGPathSegLinetoHorizontalRel = SVGPathSegLinetoHorizontalRel { unSVGPathSegLinetoHorizontalRel :: JSRef SVGPathSegLinetoHorizontalRel }
-
-instance Eq (SVGPathSegLinetoHorizontalRel) where
-  (SVGPathSegLinetoHorizontalRel a) == (SVGPathSegLinetoHorizontalRel b) = js_eq a b
-
-instance PToJSRef SVGPathSegLinetoHorizontalRel where
-  pToJSRef = unSVGPathSegLinetoHorizontalRel
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGPathSegLinetoHorizontalRel where
-  pFromJSRef = SVGPathSegLinetoHorizontalRel
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGPathSegLinetoHorizontalRel where
-  toJSRef = return . unSVGPathSegLinetoHorizontalRel
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGPathSegLinetoHorizontalRel where
-  fromJSRef = return . fmap SVGPathSegLinetoHorizontalRel . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGPathSeg SVGPathSegLinetoHorizontalRel
-instance IsGObject SVGPathSegLinetoHorizontalRel where
-  toGObject = GObject . castRef . unSVGPathSegLinetoHorizontalRel
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGPathSegLinetoHorizontalRel . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGPathSegLinetoHorizontalRel :: IsGObject obj => obj -> SVGPathSegLinetoHorizontalRel
-castToSVGPathSegLinetoHorizontalRel = castTo gTypeSVGPathSegLinetoHorizontalRel "SVGPathSegLinetoHorizontalRel"
-
-foreign import javascript unsafe "window[\"SVGPathSegLinetoHorizontalRel\"]" gTypeSVGPathSegLinetoHorizontalRel' :: JSRef GType
-gTypeSVGPathSegLinetoHorizontalRel = GType gTypeSVGPathSegLinetoHorizontalRel'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGPathSegLinetoRel".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGPathSeg"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegLinetoRel Mozilla SVGPathSegLinetoRel documentation>
-newtype SVGPathSegLinetoRel = SVGPathSegLinetoRel { unSVGPathSegLinetoRel :: JSRef SVGPathSegLinetoRel }
-
-instance Eq (SVGPathSegLinetoRel) where
-  (SVGPathSegLinetoRel a) == (SVGPathSegLinetoRel b) = js_eq a b
-
-instance PToJSRef SVGPathSegLinetoRel where
-  pToJSRef = unSVGPathSegLinetoRel
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGPathSegLinetoRel where
-  pFromJSRef = SVGPathSegLinetoRel
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGPathSegLinetoRel where
-  toJSRef = return . unSVGPathSegLinetoRel
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGPathSegLinetoRel where
-  fromJSRef = return . fmap SVGPathSegLinetoRel . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGPathSeg SVGPathSegLinetoRel
-instance IsGObject SVGPathSegLinetoRel where
-  toGObject = GObject . castRef . unSVGPathSegLinetoRel
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGPathSegLinetoRel . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGPathSegLinetoRel :: IsGObject obj => obj -> SVGPathSegLinetoRel
-castToSVGPathSegLinetoRel = castTo gTypeSVGPathSegLinetoRel "SVGPathSegLinetoRel"
-
-foreign import javascript unsafe "window[\"SVGPathSegLinetoRel\"]" gTypeSVGPathSegLinetoRel' :: JSRef GType
-gTypeSVGPathSegLinetoRel = GType gTypeSVGPathSegLinetoRel'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGPathSegLinetoVerticalAbs".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGPathSeg"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegLinetoVerticalAbs Mozilla SVGPathSegLinetoVerticalAbs documentation>
-newtype SVGPathSegLinetoVerticalAbs = SVGPathSegLinetoVerticalAbs { unSVGPathSegLinetoVerticalAbs :: JSRef SVGPathSegLinetoVerticalAbs }
-
-instance Eq (SVGPathSegLinetoVerticalAbs) where
-  (SVGPathSegLinetoVerticalAbs a) == (SVGPathSegLinetoVerticalAbs b) = js_eq a b
-
-instance PToJSRef SVGPathSegLinetoVerticalAbs where
-  pToJSRef = unSVGPathSegLinetoVerticalAbs
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGPathSegLinetoVerticalAbs where
-  pFromJSRef = SVGPathSegLinetoVerticalAbs
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGPathSegLinetoVerticalAbs where
-  toJSRef = return . unSVGPathSegLinetoVerticalAbs
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGPathSegLinetoVerticalAbs where
-  fromJSRef = return . fmap SVGPathSegLinetoVerticalAbs . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGPathSeg SVGPathSegLinetoVerticalAbs
-instance IsGObject SVGPathSegLinetoVerticalAbs where
-  toGObject = GObject . castRef . unSVGPathSegLinetoVerticalAbs
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGPathSegLinetoVerticalAbs . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGPathSegLinetoVerticalAbs :: IsGObject obj => obj -> SVGPathSegLinetoVerticalAbs
-castToSVGPathSegLinetoVerticalAbs = castTo gTypeSVGPathSegLinetoVerticalAbs "SVGPathSegLinetoVerticalAbs"
-
-foreign import javascript unsafe "window[\"SVGPathSegLinetoVerticalAbs\"]" gTypeSVGPathSegLinetoVerticalAbs' :: JSRef GType
-gTypeSVGPathSegLinetoVerticalAbs = GType gTypeSVGPathSegLinetoVerticalAbs'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGPathSegLinetoVerticalRel".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGPathSeg"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegLinetoVerticalRel Mozilla SVGPathSegLinetoVerticalRel documentation>
-newtype SVGPathSegLinetoVerticalRel = SVGPathSegLinetoVerticalRel { unSVGPathSegLinetoVerticalRel :: JSRef SVGPathSegLinetoVerticalRel }
-
-instance Eq (SVGPathSegLinetoVerticalRel) where
-  (SVGPathSegLinetoVerticalRel a) == (SVGPathSegLinetoVerticalRel b) = js_eq a b
-
-instance PToJSRef SVGPathSegLinetoVerticalRel where
-  pToJSRef = unSVGPathSegLinetoVerticalRel
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGPathSegLinetoVerticalRel where
-  pFromJSRef = SVGPathSegLinetoVerticalRel
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGPathSegLinetoVerticalRel where
-  toJSRef = return . unSVGPathSegLinetoVerticalRel
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGPathSegLinetoVerticalRel where
-  fromJSRef = return . fmap SVGPathSegLinetoVerticalRel . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGPathSeg SVGPathSegLinetoVerticalRel
-instance IsGObject SVGPathSegLinetoVerticalRel where
-  toGObject = GObject . castRef . unSVGPathSegLinetoVerticalRel
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGPathSegLinetoVerticalRel . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGPathSegLinetoVerticalRel :: IsGObject obj => obj -> SVGPathSegLinetoVerticalRel
-castToSVGPathSegLinetoVerticalRel = castTo gTypeSVGPathSegLinetoVerticalRel "SVGPathSegLinetoVerticalRel"
-
-foreign import javascript unsafe "window[\"SVGPathSegLinetoVerticalRel\"]" gTypeSVGPathSegLinetoVerticalRel' :: JSRef GType
-gTypeSVGPathSegLinetoVerticalRel = GType gTypeSVGPathSegLinetoVerticalRel'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGPathSegList".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegList Mozilla SVGPathSegList documentation>
-newtype SVGPathSegList = SVGPathSegList { unSVGPathSegList :: JSRef SVGPathSegList }
-
-instance Eq (SVGPathSegList) where
-  (SVGPathSegList a) == (SVGPathSegList b) = js_eq a b
-
-instance PToJSRef SVGPathSegList where
-  pToJSRef = unSVGPathSegList
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGPathSegList where
-  pFromJSRef = SVGPathSegList
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGPathSegList where
-  toJSRef = return . unSVGPathSegList
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGPathSegList where
-  fromJSRef = return . fmap SVGPathSegList . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject SVGPathSegList where
-  toGObject = GObject . castRef . unSVGPathSegList
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGPathSegList . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGPathSegList :: IsGObject obj => obj -> SVGPathSegList
-castToSVGPathSegList = castTo gTypeSVGPathSegList "SVGPathSegList"
-
-foreign import javascript unsafe "window[\"SVGPathSegList\"]" gTypeSVGPathSegList' :: JSRef GType
-gTypeSVGPathSegList = GType gTypeSVGPathSegList'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGPathSegMovetoAbs".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGPathSeg"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegMovetoAbs Mozilla SVGPathSegMovetoAbs documentation>
-newtype SVGPathSegMovetoAbs = SVGPathSegMovetoAbs { unSVGPathSegMovetoAbs :: JSRef SVGPathSegMovetoAbs }
-
-instance Eq (SVGPathSegMovetoAbs) where
-  (SVGPathSegMovetoAbs a) == (SVGPathSegMovetoAbs b) = js_eq a b
-
-instance PToJSRef SVGPathSegMovetoAbs where
-  pToJSRef = unSVGPathSegMovetoAbs
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGPathSegMovetoAbs where
-  pFromJSRef = SVGPathSegMovetoAbs
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGPathSegMovetoAbs where
-  toJSRef = return . unSVGPathSegMovetoAbs
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGPathSegMovetoAbs where
-  fromJSRef = return . fmap SVGPathSegMovetoAbs . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGPathSeg SVGPathSegMovetoAbs
-instance IsGObject SVGPathSegMovetoAbs where
-  toGObject = GObject . castRef . unSVGPathSegMovetoAbs
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGPathSegMovetoAbs . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGPathSegMovetoAbs :: IsGObject obj => obj -> SVGPathSegMovetoAbs
-castToSVGPathSegMovetoAbs = castTo gTypeSVGPathSegMovetoAbs "SVGPathSegMovetoAbs"
-
-foreign import javascript unsafe "window[\"SVGPathSegMovetoAbs\"]" gTypeSVGPathSegMovetoAbs' :: JSRef GType
-gTypeSVGPathSegMovetoAbs = GType gTypeSVGPathSegMovetoAbs'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGPathSegMovetoRel".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGPathSeg"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegMovetoRel Mozilla SVGPathSegMovetoRel documentation>
-newtype SVGPathSegMovetoRel = SVGPathSegMovetoRel { unSVGPathSegMovetoRel :: JSRef SVGPathSegMovetoRel }
-
-instance Eq (SVGPathSegMovetoRel) where
-  (SVGPathSegMovetoRel a) == (SVGPathSegMovetoRel b) = js_eq a b
-
-instance PToJSRef SVGPathSegMovetoRel where
-  pToJSRef = unSVGPathSegMovetoRel
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGPathSegMovetoRel where
-  pFromJSRef = SVGPathSegMovetoRel
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGPathSegMovetoRel where
-  toJSRef = return . unSVGPathSegMovetoRel
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGPathSegMovetoRel where
-  fromJSRef = return . fmap SVGPathSegMovetoRel . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGPathSeg SVGPathSegMovetoRel
-instance IsGObject SVGPathSegMovetoRel where
-  toGObject = GObject . castRef . unSVGPathSegMovetoRel
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGPathSegMovetoRel . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGPathSegMovetoRel :: IsGObject obj => obj -> SVGPathSegMovetoRel
-castToSVGPathSegMovetoRel = castTo gTypeSVGPathSegMovetoRel "SVGPathSegMovetoRel"
-
-foreign import javascript unsafe "window[\"SVGPathSegMovetoRel\"]" gTypeSVGPathSegMovetoRel' :: JSRef GType
-gTypeSVGPathSegMovetoRel = GType gTypeSVGPathSegMovetoRel'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGPatternElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGPatternElement Mozilla SVGPatternElement documentation>
-newtype SVGPatternElement = SVGPatternElement { unSVGPatternElement :: JSRef SVGPatternElement }
-
-instance Eq (SVGPatternElement) where
-  (SVGPatternElement a) == (SVGPatternElement b) = js_eq a b
-
-instance PToJSRef SVGPatternElement where
-  pToJSRef = unSVGPatternElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGPatternElement where
-  pFromJSRef = SVGPatternElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGPatternElement where
-  toJSRef = return . unSVGPatternElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGPatternElement where
-  fromJSRef = return . fmap SVGPatternElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGElement SVGPatternElement
-instance IsElement SVGPatternElement
-instance IsNode SVGPatternElement
-instance IsEventTarget SVGPatternElement
-instance IsGObject SVGPatternElement where
-  toGObject = GObject . castRef . unSVGPatternElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGPatternElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGPatternElement :: IsGObject obj => obj -> SVGPatternElement
-castToSVGPatternElement = castTo gTypeSVGPatternElement "SVGPatternElement"
-
-foreign import javascript unsafe "window[\"SVGPatternElement\"]" gTypeSVGPatternElement' :: JSRef GType
-gTypeSVGPatternElement = GType gTypeSVGPatternElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGPoint".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGPoint Mozilla SVGPoint documentation>
-newtype SVGPoint = SVGPoint { unSVGPoint :: JSRef SVGPoint }
-
-instance Eq (SVGPoint) where
-  (SVGPoint a) == (SVGPoint b) = js_eq a b
-
-instance PToJSRef SVGPoint where
-  pToJSRef = unSVGPoint
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGPoint where
-  pFromJSRef = SVGPoint
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGPoint where
-  toJSRef = return . unSVGPoint
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGPoint where
-  fromJSRef = return . fmap SVGPoint . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject SVGPoint where
-  toGObject = GObject . castRef . unSVGPoint
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGPoint . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGPoint :: IsGObject obj => obj -> SVGPoint
-castToSVGPoint = castTo gTypeSVGPoint "SVGPoint"
-
-foreign import javascript unsafe "window[\"SVGPoint\"]" gTypeSVGPoint' :: JSRef GType
-gTypeSVGPoint = GType gTypeSVGPoint'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGPointList".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGPointList Mozilla SVGPointList documentation>
-newtype SVGPointList = SVGPointList { unSVGPointList :: JSRef SVGPointList }
-
-instance Eq (SVGPointList) where
-  (SVGPointList a) == (SVGPointList b) = js_eq a b
-
-instance PToJSRef SVGPointList where
-  pToJSRef = unSVGPointList
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGPointList where
-  pFromJSRef = SVGPointList
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGPointList where
-  toJSRef = return . unSVGPointList
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGPointList where
-  fromJSRef = return . fmap SVGPointList . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject SVGPointList where
-  toGObject = GObject . castRef . unSVGPointList
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGPointList . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGPointList :: IsGObject obj => obj -> SVGPointList
-castToSVGPointList = castTo gTypeSVGPointList "SVGPointList"
-
-foreign import javascript unsafe "window[\"SVGPointList\"]" gTypeSVGPointList' :: JSRef GType
-gTypeSVGPointList = GType gTypeSVGPointList'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGPolygonElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGGraphicsElement"
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGPolygonElement Mozilla SVGPolygonElement documentation>
-newtype SVGPolygonElement = SVGPolygonElement { unSVGPolygonElement :: JSRef SVGPolygonElement }
-
-instance Eq (SVGPolygonElement) where
-  (SVGPolygonElement a) == (SVGPolygonElement b) = js_eq a b
-
-instance PToJSRef SVGPolygonElement where
-  pToJSRef = unSVGPolygonElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGPolygonElement where
-  pFromJSRef = SVGPolygonElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGPolygonElement where
-  toJSRef = return . unSVGPolygonElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGPolygonElement where
-  fromJSRef = return . fmap SVGPolygonElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGGraphicsElement SVGPolygonElement
-instance IsSVGElement SVGPolygonElement
-instance IsElement SVGPolygonElement
-instance IsNode SVGPolygonElement
-instance IsEventTarget SVGPolygonElement
-instance IsGObject SVGPolygonElement where
-  toGObject = GObject . castRef . unSVGPolygonElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGPolygonElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGPolygonElement :: IsGObject obj => obj -> SVGPolygonElement
-castToSVGPolygonElement = castTo gTypeSVGPolygonElement "SVGPolygonElement"
-
-foreign import javascript unsafe "window[\"SVGPolygonElement\"]" gTypeSVGPolygonElement' :: JSRef GType
-gTypeSVGPolygonElement = GType gTypeSVGPolygonElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGPolylineElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGGraphicsElement"
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGPolylineElement Mozilla SVGPolylineElement documentation>
-newtype SVGPolylineElement = SVGPolylineElement { unSVGPolylineElement :: JSRef SVGPolylineElement }
-
-instance Eq (SVGPolylineElement) where
-  (SVGPolylineElement a) == (SVGPolylineElement b) = js_eq a b
-
-instance PToJSRef SVGPolylineElement where
-  pToJSRef = unSVGPolylineElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGPolylineElement where
-  pFromJSRef = SVGPolylineElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGPolylineElement where
-  toJSRef = return . unSVGPolylineElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGPolylineElement where
-  fromJSRef = return . fmap SVGPolylineElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGGraphicsElement SVGPolylineElement
-instance IsSVGElement SVGPolylineElement
-instance IsElement SVGPolylineElement
-instance IsNode SVGPolylineElement
-instance IsEventTarget SVGPolylineElement
-instance IsGObject SVGPolylineElement where
-  toGObject = GObject . castRef . unSVGPolylineElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGPolylineElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGPolylineElement :: IsGObject obj => obj -> SVGPolylineElement
-castToSVGPolylineElement = castTo gTypeSVGPolylineElement "SVGPolylineElement"
-
-foreign import javascript unsafe "window[\"SVGPolylineElement\"]" gTypeSVGPolylineElement' :: JSRef GType
-gTypeSVGPolylineElement = GType gTypeSVGPolylineElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGPreserveAspectRatio".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGPreserveAspectRatio Mozilla SVGPreserveAspectRatio documentation>
-newtype SVGPreserveAspectRatio = SVGPreserveAspectRatio { unSVGPreserveAspectRatio :: JSRef SVGPreserveAspectRatio }
-
-instance Eq (SVGPreserveAspectRatio) where
-  (SVGPreserveAspectRatio a) == (SVGPreserveAspectRatio b) = js_eq a b
-
-instance PToJSRef SVGPreserveAspectRatio where
-  pToJSRef = unSVGPreserveAspectRatio
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGPreserveAspectRatio where
-  pFromJSRef = SVGPreserveAspectRatio
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGPreserveAspectRatio where
-  toJSRef = return . unSVGPreserveAspectRatio
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGPreserveAspectRatio where
-  fromJSRef = return . fmap SVGPreserveAspectRatio . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject SVGPreserveAspectRatio where
-  toGObject = GObject . castRef . unSVGPreserveAspectRatio
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGPreserveAspectRatio . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGPreserveAspectRatio :: IsGObject obj => obj -> SVGPreserveAspectRatio
-castToSVGPreserveAspectRatio = castTo gTypeSVGPreserveAspectRatio "SVGPreserveAspectRatio"
-
-foreign import javascript unsafe "window[\"SVGPreserveAspectRatio\"]" gTypeSVGPreserveAspectRatio' :: JSRef GType
-gTypeSVGPreserveAspectRatio = GType gTypeSVGPreserveAspectRatio'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGRadialGradientElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGGradientElement"
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGRadialGradientElement Mozilla SVGRadialGradientElement documentation>
-newtype SVGRadialGradientElement = SVGRadialGradientElement { unSVGRadialGradientElement :: JSRef SVGRadialGradientElement }
-
-instance Eq (SVGRadialGradientElement) where
-  (SVGRadialGradientElement a) == (SVGRadialGradientElement b) = js_eq a b
-
-instance PToJSRef SVGRadialGradientElement where
-  pToJSRef = unSVGRadialGradientElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGRadialGradientElement where
-  pFromJSRef = SVGRadialGradientElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGRadialGradientElement where
-  toJSRef = return . unSVGRadialGradientElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGRadialGradientElement where
-  fromJSRef = return . fmap SVGRadialGradientElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGGradientElement SVGRadialGradientElement
-instance IsSVGElement SVGRadialGradientElement
-instance IsElement SVGRadialGradientElement
-instance IsNode SVGRadialGradientElement
-instance IsEventTarget SVGRadialGradientElement
-instance IsGObject SVGRadialGradientElement where
-  toGObject = GObject . castRef . unSVGRadialGradientElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGRadialGradientElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGRadialGradientElement :: IsGObject obj => obj -> SVGRadialGradientElement
-castToSVGRadialGradientElement = castTo gTypeSVGRadialGradientElement "SVGRadialGradientElement"
-
-foreign import javascript unsafe "window[\"SVGRadialGradientElement\"]" gTypeSVGRadialGradientElement' :: JSRef GType
-gTypeSVGRadialGradientElement = GType gTypeSVGRadialGradientElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGRect".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGRect Mozilla SVGRect documentation>
-newtype SVGRect = SVGRect { unSVGRect :: JSRef SVGRect }
-
-instance Eq (SVGRect) where
-  (SVGRect a) == (SVGRect b) = js_eq a b
-
-instance PToJSRef SVGRect where
-  pToJSRef = unSVGRect
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGRect where
-  pFromJSRef = SVGRect
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGRect where
-  toJSRef = return . unSVGRect
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGRect where
-  fromJSRef = return . fmap SVGRect . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject SVGRect where
-  toGObject = GObject . castRef . unSVGRect
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGRect . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGRect :: IsGObject obj => obj -> SVGRect
-castToSVGRect = castTo gTypeSVGRect "SVGRect"
-
-foreign import javascript unsafe "window[\"SVGRect\"]" gTypeSVGRect' :: JSRef GType
-gTypeSVGRect = GType gTypeSVGRect'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGRectElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGGraphicsElement"
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGRectElement Mozilla SVGRectElement documentation>
-newtype SVGRectElement = SVGRectElement { unSVGRectElement :: JSRef SVGRectElement }
-
-instance Eq (SVGRectElement) where
-  (SVGRectElement a) == (SVGRectElement b) = js_eq a b
-
-instance PToJSRef SVGRectElement where
-  pToJSRef = unSVGRectElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGRectElement where
-  pFromJSRef = SVGRectElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGRectElement where
-  toJSRef = return . unSVGRectElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGRectElement where
-  fromJSRef = return . fmap SVGRectElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGGraphicsElement SVGRectElement
-instance IsSVGElement SVGRectElement
-instance IsElement SVGRectElement
-instance IsNode SVGRectElement
-instance IsEventTarget SVGRectElement
-instance IsGObject SVGRectElement where
-  toGObject = GObject . castRef . unSVGRectElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGRectElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGRectElement :: IsGObject obj => obj -> SVGRectElement
-castToSVGRectElement = castTo gTypeSVGRectElement "SVGRectElement"
-
-foreign import javascript unsafe "window[\"SVGRectElement\"]" gTypeSVGRectElement' :: JSRef GType
-gTypeSVGRectElement = GType gTypeSVGRectElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGRenderingIntent".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGRenderingIntent Mozilla SVGRenderingIntent documentation>
-newtype SVGRenderingIntent = SVGRenderingIntent { unSVGRenderingIntent :: JSRef SVGRenderingIntent }
-
-instance Eq (SVGRenderingIntent) where
-  (SVGRenderingIntent a) == (SVGRenderingIntent b) = js_eq a b
-
-instance PToJSRef SVGRenderingIntent where
-  pToJSRef = unSVGRenderingIntent
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGRenderingIntent where
-  pFromJSRef = SVGRenderingIntent
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGRenderingIntent where
-  toJSRef = return . unSVGRenderingIntent
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGRenderingIntent where
-  fromJSRef = return . fmap SVGRenderingIntent . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject SVGRenderingIntent where
-  toGObject = GObject . castRef . unSVGRenderingIntent
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGRenderingIntent . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGRenderingIntent :: IsGObject obj => obj -> SVGRenderingIntent
-castToSVGRenderingIntent = castTo gTypeSVGRenderingIntent "SVGRenderingIntent"
-
-foreign import javascript unsafe "window[\"SVGRenderingIntent\"]" gTypeSVGRenderingIntent' :: JSRef GType
-gTypeSVGRenderingIntent = GType gTypeSVGRenderingIntent'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGSVGElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGGraphicsElement"
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGSVGElement Mozilla SVGSVGElement documentation>
-newtype SVGSVGElement = SVGSVGElement { unSVGSVGElement :: JSRef SVGSVGElement }
-
-instance Eq (SVGSVGElement) where
-  (SVGSVGElement a) == (SVGSVGElement b) = js_eq a b
-
-instance PToJSRef SVGSVGElement where
-  pToJSRef = unSVGSVGElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGSVGElement where
-  pFromJSRef = SVGSVGElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGSVGElement where
-  toJSRef = return . unSVGSVGElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGSVGElement where
-  fromJSRef = return . fmap SVGSVGElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGGraphicsElement SVGSVGElement
-instance IsSVGElement SVGSVGElement
-instance IsElement SVGSVGElement
-instance IsNode SVGSVGElement
-instance IsEventTarget SVGSVGElement
-instance IsGObject SVGSVGElement where
-  toGObject = GObject . castRef . unSVGSVGElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGSVGElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGSVGElement :: IsGObject obj => obj -> SVGSVGElement
-castToSVGSVGElement = castTo gTypeSVGSVGElement "SVGSVGElement"
-
-foreign import javascript unsafe "window[\"SVGSVGElement\"]" gTypeSVGSVGElement' :: JSRef GType
-gTypeSVGSVGElement = GType gTypeSVGSVGElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGScriptElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGScriptElement Mozilla SVGScriptElement documentation>
-newtype SVGScriptElement = SVGScriptElement { unSVGScriptElement :: JSRef SVGScriptElement }
-
-instance Eq (SVGScriptElement) where
-  (SVGScriptElement a) == (SVGScriptElement b) = js_eq a b
-
-instance PToJSRef SVGScriptElement where
-  pToJSRef = unSVGScriptElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGScriptElement where
-  pFromJSRef = SVGScriptElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGScriptElement where
-  toJSRef = return . unSVGScriptElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGScriptElement where
-  fromJSRef = return . fmap SVGScriptElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGElement SVGScriptElement
-instance IsElement SVGScriptElement
-instance IsNode SVGScriptElement
-instance IsEventTarget SVGScriptElement
-instance IsGObject SVGScriptElement where
-  toGObject = GObject . castRef . unSVGScriptElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGScriptElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGScriptElement :: IsGObject obj => obj -> SVGScriptElement
-castToSVGScriptElement = castTo gTypeSVGScriptElement "SVGScriptElement"
-
-foreign import javascript unsafe "window[\"SVGScriptElement\"]" gTypeSVGScriptElement' :: JSRef GType
-gTypeSVGScriptElement = GType gTypeSVGScriptElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGSetElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGAnimationElement"
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGSetElement Mozilla SVGSetElement documentation>
-newtype SVGSetElement = SVGSetElement { unSVGSetElement :: JSRef SVGSetElement }
-
-instance Eq (SVGSetElement) where
-  (SVGSetElement a) == (SVGSetElement b) = js_eq a b
-
-instance PToJSRef SVGSetElement where
-  pToJSRef = unSVGSetElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGSetElement where
-  pFromJSRef = SVGSetElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGSetElement where
-  toJSRef = return . unSVGSetElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGSetElement where
-  fromJSRef = return . fmap SVGSetElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGAnimationElement SVGSetElement
-instance IsSVGElement SVGSetElement
-instance IsElement SVGSetElement
-instance IsNode SVGSetElement
-instance IsEventTarget SVGSetElement
-instance IsGObject SVGSetElement where
-  toGObject = GObject . castRef . unSVGSetElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGSetElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGSetElement :: IsGObject obj => obj -> SVGSetElement
-castToSVGSetElement = castTo gTypeSVGSetElement "SVGSetElement"
-
-foreign import javascript unsafe "window[\"SVGSetElement\"]" gTypeSVGSetElement' :: JSRef GType
-gTypeSVGSetElement = GType gTypeSVGSetElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGStopElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGStopElement Mozilla SVGStopElement documentation>
-newtype SVGStopElement = SVGStopElement { unSVGStopElement :: JSRef SVGStopElement }
-
-instance Eq (SVGStopElement) where
-  (SVGStopElement a) == (SVGStopElement b) = js_eq a b
-
-instance PToJSRef SVGStopElement where
-  pToJSRef = unSVGStopElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGStopElement where
-  pFromJSRef = SVGStopElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGStopElement where
-  toJSRef = return . unSVGStopElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGStopElement where
-  fromJSRef = return . fmap SVGStopElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGElement SVGStopElement
-instance IsElement SVGStopElement
-instance IsNode SVGStopElement
-instance IsEventTarget SVGStopElement
-instance IsGObject SVGStopElement where
-  toGObject = GObject . castRef . unSVGStopElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGStopElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGStopElement :: IsGObject obj => obj -> SVGStopElement
-castToSVGStopElement = castTo gTypeSVGStopElement "SVGStopElement"
-
-foreign import javascript unsafe "window[\"SVGStopElement\"]" gTypeSVGStopElement' :: JSRef GType
-gTypeSVGStopElement = GType gTypeSVGStopElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGStringList".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGStringList Mozilla SVGStringList documentation>
-newtype SVGStringList = SVGStringList { unSVGStringList :: JSRef SVGStringList }
-
-instance Eq (SVGStringList) where
-  (SVGStringList a) == (SVGStringList b) = js_eq a b
-
-instance PToJSRef SVGStringList where
-  pToJSRef = unSVGStringList
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGStringList where
-  pFromJSRef = SVGStringList
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGStringList where
-  toJSRef = return . unSVGStringList
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGStringList where
-  fromJSRef = return . fmap SVGStringList . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject SVGStringList where
-  toGObject = GObject . castRef . unSVGStringList
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGStringList . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGStringList :: IsGObject obj => obj -> SVGStringList
-castToSVGStringList = castTo gTypeSVGStringList "SVGStringList"
-
-foreign import javascript unsafe "window[\"SVGStringList\"]" gTypeSVGStringList' :: JSRef GType
-gTypeSVGStringList = GType gTypeSVGStringList'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGStyleElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGStyleElement Mozilla SVGStyleElement documentation>
-newtype SVGStyleElement = SVGStyleElement { unSVGStyleElement :: JSRef SVGStyleElement }
-
-instance Eq (SVGStyleElement) where
-  (SVGStyleElement a) == (SVGStyleElement b) = js_eq a b
-
-instance PToJSRef SVGStyleElement where
-  pToJSRef = unSVGStyleElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGStyleElement where
-  pFromJSRef = SVGStyleElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGStyleElement where
-  toJSRef = return . unSVGStyleElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGStyleElement where
-  fromJSRef = return . fmap SVGStyleElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGElement SVGStyleElement
-instance IsElement SVGStyleElement
-instance IsNode SVGStyleElement
-instance IsEventTarget SVGStyleElement
-instance IsGObject SVGStyleElement where
-  toGObject = GObject . castRef . unSVGStyleElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGStyleElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGStyleElement :: IsGObject obj => obj -> SVGStyleElement
-castToSVGStyleElement = castTo gTypeSVGStyleElement "SVGStyleElement"
-
-foreign import javascript unsafe "window[\"SVGStyleElement\"]" gTypeSVGStyleElement' :: JSRef GType
-gTypeSVGStyleElement = GType gTypeSVGStyleElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGSwitchElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGGraphicsElement"
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGSwitchElement Mozilla SVGSwitchElement documentation>
-newtype SVGSwitchElement = SVGSwitchElement { unSVGSwitchElement :: JSRef SVGSwitchElement }
-
-instance Eq (SVGSwitchElement) where
-  (SVGSwitchElement a) == (SVGSwitchElement b) = js_eq a b
-
-instance PToJSRef SVGSwitchElement where
-  pToJSRef = unSVGSwitchElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGSwitchElement where
-  pFromJSRef = SVGSwitchElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGSwitchElement where
-  toJSRef = return . unSVGSwitchElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGSwitchElement where
-  fromJSRef = return . fmap SVGSwitchElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGGraphicsElement SVGSwitchElement
-instance IsSVGElement SVGSwitchElement
-instance IsElement SVGSwitchElement
-instance IsNode SVGSwitchElement
-instance IsEventTarget SVGSwitchElement
-instance IsGObject SVGSwitchElement where
-  toGObject = GObject . castRef . unSVGSwitchElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGSwitchElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGSwitchElement :: IsGObject obj => obj -> SVGSwitchElement
-castToSVGSwitchElement = castTo gTypeSVGSwitchElement "SVGSwitchElement"
-
-foreign import javascript unsafe "window[\"SVGSwitchElement\"]" gTypeSVGSwitchElement' :: JSRef GType
-gTypeSVGSwitchElement = GType gTypeSVGSwitchElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGSymbolElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGSymbolElement Mozilla SVGSymbolElement documentation>
-newtype SVGSymbolElement = SVGSymbolElement { unSVGSymbolElement :: JSRef SVGSymbolElement }
-
-instance Eq (SVGSymbolElement) where
-  (SVGSymbolElement a) == (SVGSymbolElement b) = js_eq a b
-
-instance PToJSRef SVGSymbolElement where
-  pToJSRef = unSVGSymbolElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGSymbolElement where
-  pFromJSRef = SVGSymbolElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGSymbolElement where
-  toJSRef = return . unSVGSymbolElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGSymbolElement where
-  fromJSRef = return . fmap SVGSymbolElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGElement SVGSymbolElement
-instance IsElement SVGSymbolElement
-instance IsNode SVGSymbolElement
-instance IsEventTarget SVGSymbolElement
-instance IsGObject SVGSymbolElement where
-  toGObject = GObject . castRef . unSVGSymbolElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGSymbolElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGSymbolElement :: IsGObject obj => obj -> SVGSymbolElement
-castToSVGSymbolElement = castTo gTypeSVGSymbolElement "SVGSymbolElement"
-
-foreign import javascript unsafe "window[\"SVGSymbolElement\"]" gTypeSVGSymbolElement' :: JSRef GType
-gTypeSVGSymbolElement = GType gTypeSVGSymbolElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGTRefElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGTextPositioningElement"
---     * "GHCJS.DOM.SVGTextContentElement"
---     * "GHCJS.DOM.SVGGraphicsElement"
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGTRefElement Mozilla SVGTRefElement documentation>
-newtype SVGTRefElement = SVGTRefElement { unSVGTRefElement :: JSRef SVGTRefElement }
-
-instance Eq (SVGTRefElement) where
-  (SVGTRefElement a) == (SVGTRefElement b) = js_eq a b
-
-instance PToJSRef SVGTRefElement where
-  pToJSRef = unSVGTRefElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGTRefElement where
-  pFromJSRef = SVGTRefElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGTRefElement where
-  toJSRef = return . unSVGTRefElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGTRefElement where
-  fromJSRef = return . fmap SVGTRefElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGTextPositioningElement SVGTRefElement
-instance IsSVGTextContentElement SVGTRefElement
-instance IsSVGGraphicsElement SVGTRefElement
-instance IsSVGElement SVGTRefElement
-instance IsElement SVGTRefElement
-instance IsNode SVGTRefElement
-instance IsEventTarget SVGTRefElement
-instance IsGObject SVGTRefElement where
-  toGObject = GObject . castRef . unSVGTRefElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGTRefElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGTRefElement :: IsGObject obj => obj -> SVGTRefElement
-castToSVGTRefElement = castTo gTypeSVGTRefElement "SVGTRefElement"
-
-foreign import javascript unsafe "window[\"SVGTRefElement\"]" gTypeSVGTRefElement' :: JSRef GType
-gTypeSVGTRefElement = GType gTypeSVGTRefElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGTSpanElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGTextPositioningElement"
---     * "GHCJS.DOM.SVGTextContentElement"
---     * "GHCJS.DOM.SVGGraphicsElement"
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGTSpanElement Mozilla SVGTSpanElement documentation>
-newtype SVGTSpanElement = SVGTSpanElement { unSVGTSpanElement :: JSRef SVGTSpanElement }
-
-instance Eq (SVGTSpanElement) where
-  (SVGTSpanElement a) == (SVGTSpanElement b) = js_eq a b
-
-instance PToJSRef SVGTSpanElement where
-  pToJSRef = unSVGTSpanElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGTSpanElement where
-  pFromJSRef = SVGTSpanElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGTSpanElement where
-  toJSRef = return . unSVGTSpanElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGTSpanElement where
-  fromJSRef = return . fmap SVGTSpanElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGTextPositioningElement SVGTSpanElement
-instance IsSVGTextContentElement SVGTSpanElement
-instance IsSVGGraphicsElement SVGTSpanElement
-instance IsSVGElement SVGTSpanElement
-instance IsElement SVGTSpanElement
-instance IsNode SVGTSpanElement
-instance IsEventTarget SVGTSpanElement
-instance IsGObject SVGTSpanElement where
-  toGObject = GObject . castRef . unSVGTSpanElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGTSpanElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGTSpanElement :: IsGObject obj => obj -> SVGTSpanElement
-castToSVGTSpanElement = castTo gTypeSVGTSpanElement "SVGTSpanElement"
-
-foreign import javascript unsafe "window[\"SVGTSpanElement\"]" gTypeSVGTSpanElement' :: JSRef GType
-gTypeSVGTSpanElement = GType gTypeSVGTSpanElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGTests".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGTests Mozilla SVGTests documentation>
-newtype SVGTests = SVGTests { unSVGTests :: JSRef SVGTests }
-
-instance Eq (SVGTests) where
-  (SVGTests a) == (SVGTests b) = js_eq a b
-
-instance PToJSRef SVGTests where
-  pToJSRef = unSVGTests
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGTests where
-  pFromJSRef = SVGTests
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGTests where
-  toJSRef = return . unSVGTests
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGTests where
-  fromJSRef = return . fmap SVGTests . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject SVGTests where
-  toGObject = GObject . castRef . unSVGTests
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGTests . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGTests :: IsGObject obj => obj -> SVGTests
-castToSVGTests = castTo gTypeSVGTests "SVGTests"
-
-foreign import javascript unsafe "window[\"SVGTests\"]" gTypeSVGTests' :: JSRef GType
-gTypeSVGTests = GType gTypeSVGTests'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGTextContentElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGGraphicsElement"
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGTextContentElement Mozilla SVGTextContentElement documentation>
-newtype SVGTextContentElement = SVGTextContentElement { unSVGTextContentElement :: JSRef SVGTextContentElement }
-
-instance Eq (SVGTextContentElement) where
-  (SVGTextContentElement a) == (SVGTextContentElement b) = js_eq a b
-
-instance PToJSRef SVGTextContentElement where
-  pToJSRef = unSVGTextContentElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGTextContentElement where
-  pFromJSRef = SVGTextContentElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGTextContentElement where
-  toJSRef = return . unSVGTextContentElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGTextContentElement where
-  fromJSRef = return . fmap SVGTextContentElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsSVGGraphicsElement o => IsSVGTextContentElement o
-toSVGTextContentElement :: IsSVGTextContentElement o => o -> SVGTextContentElement
-toSVGTextContentElement = unsafeCastGObject . toGObject
-
-instance IsSVGTextContentElement SVGTextContentElement
-instance IsSVGGraphicsElement SVGTextContentElement
-instance IsSVGElement SVGTextContentElement
-instance IsElement SVGTextContentElement
-instance IsNode SVGTextContentElement
-instance IsEventTarget SVGTextContentElement
-instance IsGObject SVGTextContentElement where
-  toGObject = GObject . castRef . unSVGTextContentElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGTextContentElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGTextContentElement :: IsGObject obj => obj -> SVGTextContentElement
-castToSVGTextContentElement = castTo gTypeSVGTextContentElement "SVGTextContentElement"
-
-foreign import javascript unsafe "window[\"SVGTextContentElement\"]" gTypeSVGTextContentElement' :: JSRef GType
-gTypeSVGTextContentElement = GType gTypeSVGTextContentElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGTextElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGTextPositioningElement"
---     * "GHCJS.DOM.SVGTextContentElement"
---     * "GHCJS.DOM.SVGGraphicsElement"
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGTextElement Mozilla SVGTextElement documentation>
-newtype SVGTextElement = SVGTextElement { unSVGTextElement :: JSRef SVGTextElement }
-
-instance Eq (SVGTextElement) where
-  (SVGTextElement a) == (SVGTextElement b) = js_eq a b
-
-instance PToJSRef SVGTextElement where
-  pToJSRef = unSVGTextElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGTextElement where
-  pFromJSRef = SVGTextElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGTextElement where
-  toJSRef = return . unSVGTextElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGTextElement where
-  fromJSRef = return . fmap SVGTextElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGTextPositioningElement SVGTextElement
-instance IsSVGTextContentElement SVGTextElement
-instance IsSVGGraphicsElement SVGTextElement
-instance IsSVGElement SVGTextElement
-instance IsElement SVGTextElement
-instance IsNode SVGTextElement
-instance IsEventTarget SVGTextElement
-instance IsGObject SVGTextElement where
-  toGObject = GObject . castRef . unSVGTextElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGTextElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGTextElement :: IsGObject obj => obj -> SVGTextElement
-castToSVGTextElement = castTo gTypeSVGTextElement "SVGTextElement"
-
-foreign import javascript unsafe "window[\"SVGTextElement\"]" gTypeSVGTextElement' :: JSRef GType
-gTypeSVGTextElement = GType gTypeSVGTextElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGTextPathElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGTextContentElement"
---     * "GHCJS.DOM.SVGGraphicsElement"
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGTextPathElement Mozilla SVGTextPathElement documentation>
-newtype SVGTextPathElement = SVGTextPathElement { unSVGTextPathElement :: JSRef SVGTextPathElement }
-
-instance Eq (SVGTextPathElement) where
-  (SVGTextPathElement a) == (SVGTextPathElement b) = js_eq a b
-
-instance PToJSRef SVGTextPathElement where
-  pToJSRef = unSVGTextPathElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGTextPathElement where
-  pFromJSRef = SVGTextPathElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGTextPathElement where
-  toJSRef = return . unSVGTextPathElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGTextPathElement where
-  fromJSRef = return . fmap SVGTextPathElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGTextContentElement SVGTextPathElement
-instance IsSVGGraphicsElement SVGTextPathElement
-instance IsSVGElement SVGTextPathElement
-instance IsElement SVGTextPathElement
-instance IsNode SVGTextPathElement
-instance IsEventTarget SVGTextPathElement
-instance IsGObject SVGTextPathElement where
-  toGObject = GObject . castRef . unSVGTextPathElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGTextPathElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGTextPathElement :: IsGObject obj => obj -> SVGTextPathElement
-castToSVGTextPathElement = castTo gTypeSVGTextPathElement "SVGTextPathElement"
-
-foreign import javascript unsafe "window[\"SVGTextPathElement\"]" gTypeSVGTextPathElement' :: JSRef GType
-gTypeSVGTextPathElement = GType gTypeSVGTextPathElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGTextPositioningElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGTextContentElement"
---     * "GHCJS.DOM.SVGGraphicsElement"
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGTextPositioningElement Mozilla SVGTextPositioningElement documentation>
-newtype SVGTextPositioningElement = SVGTextPositioningElement { unSVGTextPositioningElement :: JSRef SVGTextPositioningElement }
-
-instance Eq (SVGTextPositioningElement) where
-  (SVGTextPositioningElement a) == (SVGTextPositioningElement b) = js_eq a b
-
-instance PToJSRef SVGTextPositioningElement where
-  pToJSRef = unSVGTextPositioningElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGTextPositioningElement where
-  pFromJSRef = SVGTextPositioningElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGTextPositioningElement where
-  toJSRef = return . unSVGTextPositioningElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGTextPositioningElement where
-  fromJSRef = return . fmap SVGTextPositioningElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsSVGTextContentElement o => IsSVGTextPositioningElement o
-toSVGTextPositioningElement :: IsSVGTextPositioningElement o => o -> SVGTextPositioningElement
-toSVGTextPositioningElement = unsafeCastGObject . toGObject
-
-instance IsSVGTextPositioningElement SVGTextPositioningElement
-instance IsSVGTextContentElement SVGTextPositioningElement
-instance IsSVGGraphicsElement SVGTextPositioningElement
-instance IsSVGElement SVGTextPositioningElement
-instance IsElement SVGTextPositioningElement
-instance IsNode SVGTextPositioningElement
-instance IsEventTarget SVGTextPositioningElement
-instance IsGObject SVGTextPositioningElement where
-  toGObject = GObject . castRef . unSVGTextPositioningElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGTextPositioningElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGTextPositioningElement :: IsGObject obj => obj -> SVGTextPositioningElement
-castToSVGTextPositioningElement = castTo gTypeSVGTextPositioningElement "SVGTextPositioningElement"
-
-foreign import javascript unsafe "window[\"SVGTextPositioningElement\"]" gTypeSVGTextPositioningElement' :: JSRef GType
-gTypeSVGTextPositioningElement = GType gTypeSVGTextPositioningElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGTitleElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGTitleElement Mozilla SVGTitleElement documentation>
-newtype SVGTitleElement = SVGTitleElement { unSVGTitleElement :: JSRef SVGTitleElement }
-
-instance Eq (SVGTitleElement) where
-  (SVGTitleElement a) == (SVGTitleElement b) = js_eq a b
-
-instance PToJSRef SVGTitleElement where
-  pToJSRef = unSVGTitleElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGTitleElement where
-  pFromJSRef = SVGTitleElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGTitleElement where
-  toJSRef = return . unSVGTitleElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGTitleElement where
-  fromJSRef = return . fmap SVGTitleElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGElement SVGTitleElement
-instance IsElement SVGTitleElement
-instance IsNode SVGTitleElement
-instance IsEventTarget SVGTitleElement
-instance IsGObject SVGTitleElement where
-  toGObject = GObject . castRef . unSVGTitleElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGTitleElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGTitleElement :: IsGObject obj => obj -> SVGTitleElement
-castToSVGTitleElement = castTo gTypeSVGTitleElement "SVGTitleElement"
-
-foreign import javascript unsafe "window[\"SVGTitleElement\"]" gTypeSVGTitleElement' :: JSRef GType
-gTypeSVGTitleElement = GType gTypeSVGTitleElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGTransform".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGTransform Mozilla SVGTransform documentation>
-newtype SVGTransform = SVGTransform { unSVGTransform :: JSRef SVGTransform }
-
-instance Eq (SVGTransform) where
-  (SVGTransform a) == (SVGTransform b) = js_eq a b
-
-instance PToJSRef SVGTransform where
-  pToJSRef = unSVGTransform
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGTransform where
-  pFromJSRef = SVGTransform
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGTransform where
-  toJSRef = return . unSVGTransform
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGTransform where
-  fromJSRef = return . fmap SVGTransform . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject SVGTransform where
-  toGObject = GObject . castRef . unSVGTransform
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGTransform . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGTransform :: IsGObject obj => obj -> SVGTransform
-castToSVGTransform = castTo gTypeSVGTransform "SVGTransform"
-
-foreign import javascript unsafe "window[\"SVGTransform\"]" gTypeSVGTransform' :: JSRef GType
-gTypeSVGTransform = GType gTypeSVGTransform'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGTransformList".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGTransformList Mozilla SVGTransformList documentation>
-newtype SVGTransformList = SVGTransformList { unSVGTransformList :: JSRef SVGTransformList }
-
-instance Eq (SVGTransformList) where
-  (SVGTransformList a) == (SVGTransformList b) = js_eq a b
-
-instance PToJSRef SVGTransformList where
-  pToJSRef = unSVGTransformList
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGTransformList where
-  pFromJSRef = SVGTransformList
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGTransformList where
-  toJSRef = return . unSVGTransformList
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGTransformList where
-  fromJSRef = return . fmap SVGTransformList . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject SVGTransformList where
-  toGObject = GObject . castRef . unSVGTransformList
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGTransformList . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGTransformList :: IsGObject obj => obj -> SVGTransformList
-castToSVGTransformList = castTo gTypeSVGTransformList "SVGTransformList"
-
-foreign import javascript unsafe "window[\"SVGTransformList\"]" gTypeSVGTransformList' :: JSRef GType
-gTypeSVGTransformList = GType gTypeSVGTransformList'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGURIReference".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGURIReference Mozilla SVGURIReference documentation>
-newtype SVGURIReference = SVGURIReference { unSVGURIReference :: JSRef SVGURIReference }
-
-instance Eq (SVGURIReference) where
-  (SVGURIReference a) == (SVGURIReference b) = js_eq a b
-
-instance PToJSRef SVGURIReference where
-  pToJSRef = unSVGURIReference
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGURIReference where
-  pFromJSRef = SVGURIReference
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGURIReference where
-  toJSRef = return . unSVGURIReference
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGURIReference where
-  fromJSRef = return . fmap SVGURIReference . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject SVGURIReference where
-  toGObject = GObject . castRef . unSVGURIReference
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGURIReference . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGURIReference :: IsGObject obj => obj -> SVGURIReference
-castToSVGURIReference = castTo gTypeSVGURIReference "SVGURIReference"
-
-foreign import javascript unsafe "window[\"SVGURIReference\"]" gTypeSVGURIReference' :: JSRef GType
-gTypeSVGURIReference = GType gTypeSVGURIReference'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGUnitTypes".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGUnitTypes Mozilla SVGUnitTypes documentation>
-newtype SVGUnitTypes = SVGUnitTypes { unSVGUnitTypes :: JSRef SVGUnitTypes }
-
-instance Eq (SVGUnitTypes) where
-  (SVGUnitTypes a) == (SVGUnitTypes b) = js_eq a b
-
-instance PToJSRef SVGUnitTypes where
-  pToJSRef = unSVGUnitTypes
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGUnitTypes where
-  pFromJSRef = SVGUnitTypes
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGUnitTypes where
-  toJSRef = return . unSVGUnitTypes
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGUnitTypes where
-  fromJSRef = return . fmap SVGUnitTypes . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject SVGUnitTypes where
-  toGObject = GObject . castRef . unSVGUnitTypes
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGUnitTypes . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGUnitTypes :: IsGObject obj => obj -> SVGUnitTypes
-castToSVGUnitTypes = castTo gTypeSVGUnitTypes "SVGUnitTypes"
-
-foreign import javascript unsafe "window[\"SVGUnitTypes\"]" gTypeSVGUnitTypes' :: JSRef GType
-gTypeSVGUnitTypes = GType gTypeSVGUnitTypes'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGUseElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGGraphicsElement"
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGUseElement Mozilla SVGUseElement documentation>
-newtype SVGUseElement = SVGUseElement { unSVGUseElement :: JSRef SVGUseElement }
-
-instance Eq (SVGUseElement) where
-  (SVGUseElement a) == (SVGUseElement b) = js_eq a b
-
-instance PToJSRef SVGUseElement where
-  pToJSRef = unSVGUseElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGUseElement where
-  pFromJSRef = SVGUseElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGUseElement where
-  toJSRef = return . unSVGUseElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGUseElement where
-  fromJSRef = return . fmap SVGUseElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGGraphicsElement SVGUseElement
-instance IsSVGElement SVGUseElement
-instance IsElement SVGUseElement
-instance IsNode SVGUseElement
-instance IsEventTarget SVGUseElement
-instance IsGObject SVGUseElement where
-  toGObject = GObject . castRef . unSVGUseElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGUseElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGUseElement :: IsGObject obj => obj -> SVGUseElement
-castToSVGUseElement = castTo gTypeSVGUseElement "SVGUseElement"
-
-foreign import javascript unsafe "window[\"SVGUseElement\"]" gTypeSVGUseElement' :: JSRef GType
-gTypeSVGUseElement = GType gTypeSVGUseElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGVKernElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGVKernElement Mozilla SVGVKernElement documentation>
-newtype SVGVKernElement = SVGVKernElement { unSVGVKernElement :: JSRef SVGVKernElement }
-
-instance Eq (SVGVKernElement) where
-  (SVGVKernElement a) == (SVGVKernElement b) = js_eq a b
-
-instance PToJSRef SVGVKernElement where
-  pToJSRef = unSVGVKernElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGVKernElement where
-  pFromJSRef = SVGVKernElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGVKernElement where
-  toJSRef = return . unSVGVKernElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGVKernElement where
-  fromJSRef = return . fmap SVGVKernElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGElement SVGVKernElement
-instance IsElement SVGVKernElement
-instance IsNode SVGVKernElement
-instance IsEventTarget SVGVKernElement
-instance IsGObject SVGVKernElement where
-  toGObject = GObject . castRef . unSVGVKernElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGVKernElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGVKernElement :: IsGObject obj => obj -> SVGVKernElement
-castToSVGVKernElement = castTo gTypeSVGVKernElement "SVGVKernElement"
-
-foreign import javascript unsafe "window[\"SVGVKernElement\"]" gTypeSVGVKernElement' :: JSRef GType
-gTypeSVGVKernElement = GType gTypeSVGVKernElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGViewElement".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.SVGElement"
---     * "GHCJS.DOM.Element"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGViewElement Mozilla SVGViewElement documentation>
-newtype SVGViewElement = SVGViewElement { unSVGViewElement :: JSRef SVGViewElement }
-
-instance Eq (SVGViewElement) where
-  (SVGViewElement a) == (SVGViewElement b) = js_eq a b
-
-instance PToJSRef SVGViewElement where
-  pToJSRef = unSVGViewElement
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGViewElement where
-  pFromJSRef = SVGViewElement
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGViewElement where
-  toJSRef = return . unSVGViewElement
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGViewElement where
-  fromJSRef = return . fmap SVGViewElement . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsSVGElement SVGViewElement
-instance IsElement SVGViewElement
-instance IsNode SVGViewElement
-instance IsEventTarget SVGViewElement
-instance IsGObject SVGViewElement where
-  toGObject = GObject . castRef . unSVGViewElement
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGViewElement . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGViewElement :: IsGObject obj => obj -> SVGViewElement
-castToSVGViewElement = castTo gTypeSVGViewElement "SVGViewElement"
-
-foreign import javascript unsafe "window[\"SVGViewElement\"]" gTypeSVGViewElement' :: JSRef GType
-gTypeSVGViewElement = GType gTypeSVGViewElement'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGViewSpec".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGViewSpec Mozilla SVGViewSpec documentation>
-newtype SVGViewSpec = SVGViewSpec { unSVGViewSpec :: JSRef SVGViewSpec }
-
-instance Eq (SVGViewSpec) where
-  (SVGViewSpec a) == (SVGViewSpec b) = js_eq a b
-
-instance PToJSRef SVGViewSpec where
-  pToJSRef = unSVGViewSpec
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGViewSpec where
-  pFromJSRef = SVGViewSpec
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGViewSpec where
-  toJSRef = return . unSVGViewSpec
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGViewSpec where
-  fromJSRef = return . fmap SVGViewSpec . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject SVGViewSpec where
-  toGObject = GObject . castRef . unSVGViewSpec
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGViewSpec . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGViewSpec :: IsGObject obj => obj -> SVGViewSpec
-castToSVGViewSpec = castTo gTypeSVGViewSpec "SVGViewSpec"
-
-foreign import javascript unsafe "window[\"SVGViewSpec\"]" gTypeSVGViewSpec' :: JSRef GType
-gTypeSVGViewSpec = GType gTypeSVGViewSpec'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGZoomAndPan".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGZoomAndPan Mozilla SVGZoomAndPan documentation>
-newtype SVGZoomAndPan = SVGZoomAndPan { unSVGZoomAndPan :: JSRef SVGZoomAndPan }
-
-instance Eq (SVGZoomAndPan) where
-  (SVGZoomAndPan a) == (SVGZoomAndPan b) = js_eq a b
-
-instance PToJSRef SVGZoomAndPan where
-  pToJSRef = unSVGZoomAndPan
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGZoomAndPan where
-  pFromJSRef = SVGZoomAndPan
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGZoomAndPan where
-  toJSRef = return . unSVGZoomAndPan
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGZoomAndPan where
-  fromJSRef = return . fmap SVGZoomAndPan . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject SVGZoomAndPan where
-  toGObject = GObject . castRef . unSVGZoomAndPan
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGZoomAndPan . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGZoomAndPan :: IsGObject obj => obj -> SVGZoomAndPan
-castToSVGZoomAndPan = castTo gTypeSVGZoomAndPan "SVGZoomAndPan"
-
-foreign import javascript unsafe "window[\"SVGZoomAndPan\"]" gTypeSVGZoomAndPan' :: JSRef GType
-gTypeSVGZoomAndPan = GType gTypeSVGZoomAndPan'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SVGZoomEvent".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.UIEvent"
---     * "GHCJS.DOM.Event"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SVGZoomEvent Mozilla SVGZoomEvent documentation>
-newtype SVGZoomEvent = SVGZoomEvent { unSVGZoomEvent :: JSRef SVGZoomEvent }
-
-instance Eq (SVGZoomEvent) where
-  (SVGZoomEvent a) == (SVGZoomEvent b) = js_eq a b
-
-instance PToJSRef SVGZoomEvent where
-  pToJSRef = unSVGZoomEvent
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SVGZoomEvent where
-  pFromJSRef = SVGZoomEvent
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SVGZoomEvent where
-  toJSRef = return . unSVGZoomEvent
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SVGZoomEvent where
-  fromJSRef = return . fmap SVGZoomEvent . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsUIEvent SVGZoomEvent
-instance IsEvent SVGZoomEvent
-instance IsGObject SVGZoomEvent where
-  toGObject = GObject . castRef . unSVGZoomEvent
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SVGZoomEvent . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSVGZoomEvent :: IsGObject obj => obj -> SVGZoomEvent
-castToSVGZoomEvent = castTo gTypeSVGZoomEvent "SVGZoomEvent"
-
-foreign import javascript unsafe "window[\"SVGZoomEvent\"]" gTypeSVGZoomEvent' :: JSRef GType
-gTypeSVGZoomEvent = GType gTypeSVGZoomEvent'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.Screen".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/Screen Mozilla Screen documentation>
-newtype Screen = Screen { unScreen :: JSRef Screen }
-
-instance Eq (Screen) where
-  (Screen a) == (Screen b) = js_eq a b
-
-instance PToJSRef Screen where
-  pToJSRef = unScreen
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef Screen where
-  pFromJSRef = Screen
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef Screen where
-  toJSRef = return . unScreen
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef Screen where
-  fromJSRef = return . fmap Screen . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject Screen where
-  toGObject = GObject . castRef . unScreen
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = Screen . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToScreen :: IsGObject obj => obj -> Screen
-castToScreen = castTo gTypeScreen "Screen"
-
-foreign import javascript unsafe "window[\"Screen\"]" gTypeScreen' :: JSRef GType
-gTypeScreen = GType gTypeScreen'
-#else
-type IsScreen o = ScreenClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.ScriptProcessorNode".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.AudioNode"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/ScriptProcessorNode Mozilla ScriptProcessorNode documentation>
-newtype ScriptProcessorNode = ScriptProcessorNode { unScriptProcessorNode :: JSRef ScriptProcessorNode }
-
-instance Eq (ScriptProcessorNode) where
-  (ScriptProcessorNode a) == (ScriptProcessorNode b) = js_eq a b
-
-instance PToJSRef ScriptProcessorNode where
-  pToJSRef = unScriptProcessorNode
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef ScriptProcessorNode where
-  pFromJSRef = ScriptProcessorNode
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef ScriptProcessorNode where
-  toJSRef = return . unScriptProcessorNode
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef ScriptProcessorNode where
-  fromJSRef = return . fmap ScriptProcessorNode . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsAudioNode ScriptProcessorNode
-instance IsEventTarget ScriptProcessorNode
-instance IsGObject ScriptProcessorNode where
-  toGObject = GObject . castRef . unScriptProcessorNode
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = ScriptProcessorNode . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToScriptProcessorNode :: IsGObject obj => obj -> ScriptProcessorNode
-castToScriptProcessorNode = castTo gTypeScriptProcessorNode "ScriptProcessorNode"
-
-foreign import javascript unsafe "window[\"ScriptProcessorNode\"]" gTypeScriptProcessorNode' :: JSRef GType
-gTypeScriptProcessorNode = GType gTypeScriptProcessorNode'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.ScriptProfile".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/ScriptProfile Mozilla ScriptProfile documentation>
-newtype ScriptProfile = ScriptProfile { unScriptProfile :: JSRef ScriptProfile }
-
-instance Eq (ScriptProfile) where
-  (ScriptProfile a) == (ScriptProfile b) = js_eq a b
-
-instance PToJSRef ScriptProfile where
-  pToJSRef = unScriptProfile
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef ScriptProfile where
-  pFromJSRef = ScriptProfile
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef ScriptProfile where
-  toJSRef = return . unScriptProfile
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef ScriptProfile where
-  fromJSRef = return . fmap ScriptProfile . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject ScriptProfile where
-  toGObject = GObject . castRef . unScriptProfile
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = ScriptProfile . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToScriptProfile :: IsGObject obj => obj -> ScriptProfile
-castToScriptProfile = castTo gTypeScriptProfile "ScriptProfile"
-
-foreign import javascript unsafe "window[\"ScriptProfile\"]" gTypeScriptProfile' :: JSRef GType
-gTypeScriptProfile = GType gTypeScriptProfile'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.ScriptProfileNode".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/ScriptProfileNode Mozilla ScriptProfileNode documentation>
-newtype ScriptProfileNode = ScriptProfileNode { unScriptProfileNode :: JSRef ScriptProfileNode }
-
-instance Eq (ScriptProfileNode) where
-  (ScriptProfileNode a) == (ScriptProfileNode b) = js_eq a b
-
-instance PToJSRef ScriptProfileNode where
-  pToJSRef = unScriptProfileNode
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef ScriptProfileNode where
-  pFromJSRef = ScriptProfileNode
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef ScriptProfileNode where
-  toJSRef = return . unScriptProfileNode
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef ScriptProfileNode where
-  fromJSRef = return . fmap ScriptProfileNode . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject ScriptProfileNode where
-  toGObject = GObject . castRef . unScriptProfileNode
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = ScriptProfileNode . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToScriptProfileNode :: IsGObject obj => obj -> ScriptProfileNode
-castToScriptProfileNode = castTo gTypeScriptProfileNode "ScriptProfileNode"
-
-foreign import javascript unsafe "window[\"ScriptProfileNode\"]" gTypeScriptProfileNode' :: JSRef GType
-gTypeScriptProfileNode = GType gTypeScriptProfileNode'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SecurityPolicy".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SecurityPolicy Mozilla SecurityPolicy documentation>
-newtype SecurityPolicy = SecurityPolicy { unSecurityPolicy :: JSRef SecurityPolicy }
-
-instance Eq (SecurityPolicy) where
-  (SecurityPolicy a) == (SecurityPolicy b) = js_eq a b
-
-instance PToJSRef SecurityPolicy where
-  pToJSRef = unSecurityPolicy
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SecurityPolicy where
-  pFromJSRef = SecurityPolicy
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SecurityPolicy where
-  toJSRef = return . unSecurityPolicy
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SecurityPolicy where
-  fromJSRef = return . fmap SecurityPolicy . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject SecurityPolicy where
-  toGObject = GObject . castRef . unSecurityPolicy
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SecurityPolicy . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSecurityPolicy :: IsGObject obj => obj -> SecurityPolicy
-castToSecurityPolicy = castTo gTypeSecurityPolicy "SecurityPolicy"
-
-foreign import javascript unsafe "window[\"SecurityPolicy\"]" gTypeSecurityPolicy' :: JSRef GType
-gTypeSecurityPolicy = GType gTypeSecurityPolicy'
-#else
-#ifndef USE_OLD_WEBKIT
-type IsSecurityPolicy o = SecurityPolicyClass o
-#endif
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SecurityPolicyViolationEvent".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.Event"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SecurityPolicyViolationEvent Mozilla SecurityPolicyViolationEvent documentation>
-newtype SecurityPolicyViolationEvent = SecurityPolicyViolationEvent { unSecurityPolicyViolationEvent :: JSRef SecurityPolicyViolationEvent }
-
-instance Eq (SecurityPolicyViolationEvent) where
-  (SecurityPolicyViolationEvent a) == (SecurityPolicyViolationEvent b) = js_eq a b
-
-instance PToJSRef SecurityPolicyViolationEvent where
-  pToJSRef = unSecurityPolicyViolationEvent
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SecurityPolicyViolationEvent where
-  pFromJSRef = SecurityPolicyViolationEvent
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SecurityPolicyViolationEvent where
-  toJSRef = return . unSecurityPolicyViolationEvent
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SecurityPolicyViolationEvent where
-  fromJSRef = return . fmap SecurityPolicyViolationEvent . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEvent SecurityPolicyViolationEvent
-instance IsGObject SecurityPolicyViolationEvent where
-  toGObject = GObject . castRef . unSecurityPolicyViolationEvent
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SecurityPolicyViolationEvent . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSecurityPolicyViolationEvent :: IsGObject obj => obj -> SecurityPolicyViolationEvent
-castToSecurityPolicyViolationEvent = castTo gTypeSecurityPolicyViolationEvent "SecurityPolicyViolationEvent"
-
-foreign import javascript unsafe "window[\"SecurityPolicyViolationEvent\"]" gTypeSecurityPolicyViolationEvent' :: JSRef GType
-gTypeSecurityPolicyViolationEvent = GType gTypeSecurityPolicyViolationEvent'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.Selection".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/Selection Mozilla Selection documentation>
-newtype Selection = Selection { unSelection :: JSRef Selection }
-
-instance Eq (Selection) where
-  (Selection a) == (Selection b) = js_eq a b
-
-instance PToJSRef Selection where
-  pToJSRef = unSelection
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef Selection where
-  pFromJSRef = Selection
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef Selection where
-  toJSRef = return . unSelection
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef Selection where
-  fromJSRef = return . fmap Selection . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject Selection where
-  toGObject = GObject . castRef . unSelection
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = Selection . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSelection :: IsGObject obj => obj -> Selection
-castToSelection = castTo gTypeSelection "Selection"
-
-foreign import javascript unsafe "window[\"Selection\"]" gTypeSelection' :: JSRef GType
-gTypeSelection = GType gTypeSelection'
-#else
-type IsSelection o = SelectionClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SourceBuffer".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SourceBuffer Mozilla SourceBuffer documentation>
-newtype SourceBuffer = SourceBuffer { unSourceBuffer :: JSRef SourceBuffer }
-
-instance Eq (SourceBuffer) where
-  (SourceBuffer a) == (SourceBuffer b) = js_eq a b
-
-instance PToJSRef SourceBuffer where
-  pToJSRef = unSourceBuffer
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SourceBuffer where
-  pFromJSRef = SourceBuffer
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SourceBuffer where
-  toJSRef = return . unSourceBuffer
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SourceBuffer where
-  fromJSRef = return . fmap SourceBuffer . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEventTarget SourceBuffer
-instance IsGObject SourceBuffer where
-  toGObject = GObject . castRef . unSourceBuffer
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SourceBuffer . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSourceBuffer :: IsGObject obj => obj -> SourceBuffer
-castToSourceBuffer = castTo gTypeSourceBuffer "SourceBuffer"
-
-foreign import javascript unsafe "window[\"SourceBuffer\"]" gTypeSourceBuffer' :: JSRef GType
-gTypeSourceBuffer = GType gTypeSourceBuffer'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SourceBufferList".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SourceBufferList Mozilla SourceBufferList documentation>
-newtype SourceBufferList = SourceBufferList { unSourceBufferList :: JSRef SourceBufferList }
-
-instance Eq (SourceBufferList) where
-  (SourceBufferList a) == (SourceBufferList b) = js_eq a b
-
-instance PToJSRef SourceBufferList where
-  pToJSRef = unSourceBufferList
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SourceBufferList where
-  pFromJSRef = SourceBufferList
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SourceBufferList where
-  toJSRef = return . unSourceBufferList
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SourceBufferList where
-  fromJSRef = return . fmap SourceBufferList . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEventTarget SourceBufferList
-instance IsGObject SourceBufferList where
-  toGObject = GObject . castRef . unSourceBufferList
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SourceBufferList . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSourceBufferList :: IsGObject obj => obj -> SourceBufferList
-castToSourceBufferList = castTo gTypeSourceBufferList "SourceBufferList"
-
-foreign import javascript unsafe "window[\"SourceBufferList\"]" gTypeSourceBufferList' :: JSRef GType
-gTypeSourceBufferList = GType gTypeSourceBufferList'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SourceInfo".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SourceInfo Mozilla SourceInfo documentation>
-newtype SourceInfo = SourceInfo { unSourceInfo :: JSRef SourceInfo }
-
-instance Eq (SourceInfo) where
-  (SourceInfo a) == (SourceInfo b) = js_eq a b
-
-instance PToJSRef SourceInfo where
-  pToJSRef = unSourceInfo
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SourceInfo where
-  pFromJSRef = SourceInfo
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SourceInfo where
-  toJSRef = return . unSourceInfo
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SourceInfo where
-  fromJSRef = return . fmap SourceInfo . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject SourceInfo where
-  toGObject = GObject . castRef . unSourceInfo
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SourceInfo . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSourceInfo :: IsGObject obj => obj -> SourceInfo
-castToSourceInfo = castTo gTypeSourceInfo "SourceInfo"
-
-foreign import javascript unsafe "window[\"SourceInfo\"]" gTypeSourceInfo' :: JSRef GType
-gTypeSourceInfo = GType gTypeSourceInfo'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SpeechSynthesis".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesis Mozilla SpeechSynthesis documentation>
-newtype SpeechSynthesis = SpeechSynthesis { unSpeechSynthesis :: JSRef SpeechSynthesis }
-
-instance Eq (SpeechSynthesis) where
-  (SpeechSynthesis a) == (SpeechSynthesis b) = js_eq a b
-
-instance PToJSRef SpeechSynthesis where
-  pToJSRef = unSpeechSynthesis
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SpeechSynthesis where
-  pFromJSRef = SpeechSynthesis
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SpeechSynthesis where
-  toJSRef = return . unSpeechSynthesis
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SpeechSynthesis where
-  fromJSRef = return . fmap SpeechSynthesis . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject SpeechSynthesis where
-  toGObject = GObject . castRef . unSpeechSynthesis
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SpeechSynthesis . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSpeechSynthesis :: IsGObject obj => obj -> SpeechSynthesis
-castToSpeechSynthesis = castTo gTypeSpeechSynthesis "SpeechSynthesis"
-
-foreign import javascript unsafe "window[\"SpeechSynthesis\"]" gTypeSpeechSynthesis' :: JSRef GType
-gTypeSpeechSynthesis = GType gTypeSpeechSynthesis'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SpeechSynthesisEvent".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.Event"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesisEvent Mozilla SpeechSynthesisEvent documentation>
-newtype SpeechSynthesisEvent = SpeechSynthesisEvent { unSpeechSynthesisEvent :: JSRef SpeechSynthesisEvent }
-
-instance Eq (SpeechSynthesisEvent) where
-  (SpeechSynthesisEvent a) == (SpeechSynthesisEvent b) = js_eq a b
-
-instance PToJSRef SpeechSynthesisEvent where
-  pToJSRef = unSpeechSynthesisEvent
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SpeechSynthesisEvent where
-  pFromJSRef = SpeechSynthesisEvent
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SpeechSynthesisEvent where
-  toJSRef = return . unSpeechSynthesisEvent
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SpeechSynthesisEvent where
-  fromJSRef = return . fmap SpeechSynthesisEvent . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEvent SpeechSynthesisEvent
-instance IsGObject SpeechSynthesisEvent where
-  toGObject = GObject . castRef . unSpeechSynthesisEvent
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SpeechSynthesisEvent . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSpeechSynthesisEvent :: IsGObject obj => obj -> SpeechSynthesisEvent
-castToSpeechSynthesisEvent = castTo gTypeSpeechSynthesisEvent "SpeechSynthesisEvent"
-
-foreign import javascript unsafe "window[\"SpeechSynthesisEvent\"]" gTypeSpeechSynthesisEvent' :: JSRef GType
-gTypeSpeechSynthesisEvent = GType gTypeSpeechSynthesisEvent'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SpeechSynthesisUtterance".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesisUtterance Mozilla SpeechSynthesisUtterance documentation>
-newtype SpeechSynthesisUtterance = SpeechSynthesisUtterance { unSpeechSynthesisUtterance :: JSRef SpeechSynthesisUtterance }
-
-instance Eq (SpeechSynthesisUtterance) where
-  (SpeechSynthesisUtterance a) == (SpeechSynthesisUtterance b) = js_eq a b
-
-instance PToJSRef SpeechSynthesisUtterance where
-  pToJSRef = unSpeechSynthesisUtterance
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SpeechSynthesisUtterance where
-  pFromJSRef = SpeechSynthesisUtterance
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SpeechSynthesisUtterance where
-  toJSRef = return . unSpeechSynthesisUtterance
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SpeechSynthesisUtterance where
-  fromJSRef = return . fmap SpeechSynthesisUtterance . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEventTarget SpeechSynthesisUtterance
-instance IsGObject SpeechSynthesisUtterance where
-  toGObject = GObject . castRef . unSpeechSynthesisUtterance
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SpeechSynthesisUtterance . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSpeechSynthesisUtterance :: IsGObject obj => obj -> SpeechSynthesisUtterance
-castToSpeechSynthesisUtterance = castTo gTypeSpeechSynthesisUtterance "SpeechSynthesisUtterance"
-
-foreign import javascript unsafe "window[\"SpeechSynthesisUtterance\"]" gTypeSpeechSynthesisUtterance' :: JSRef GType
-gTypeSpeechSynthesisUtterance = GType gTypeSpeechSynthesisUtterance'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SpeechSynthesisVoice".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesisVoice Mozilla SpeechSynthesisVoice documentation>
-newtype SpeechSynthesisVoice = SpeechSynthesisVoice { unSpeechSynthesisVoice :: JSRef SpeechSynthesisVoice }
-
-instance Eq (SpeechSynthesisVoice) where
-  (SpeechSynthesisVoice a) == (SpeechSynthesisVoice b) = js_eq a b
-
-instance PToJSRef SpeechSynthesisVoice where
-  pToJSRef = unSpeechSynthesisVoice
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SpeechSynthesisVoice where
-  pFromJSRef = SpeechSynthesisVoice
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SpeechSynthesisVoice where
-  toJSRef = return . unSpeechSynthesisVoice
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SpeechSynthesisVoice where
-  fromJSRef = return . fmap SpeechSynthesisVoice . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject SpeechSynthesisVoice where
-  toGObject = GObject . castRef . unSpeechSynthesisVoice
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SpeechSynthesisVoice . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSpeechSynthesisVoice :: IsGObject obj => obj -> SpeechSynthesisVoice
-castToSpeechSynthesisVoice = castTo gTypeSpeechSynthesisVoice "SpeechSynthesisVoice"
-
-foreign import javascript unsafe "window[\"SpeechSynthesisVoice\"]" gTypeSpeechSynthesisVoice' :: JSRef GType
-gTypeSpeechSynthesisVoice = GType gTypeSpeechSynthesisVoice'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.Storage".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/Storage Mozilla Storage documentation>
-newtype Storage = Storage { unStorage :: JSRef Storage }
-
-instance Eq (Storage) where
-  (Storage a) == (Storage b) = js_eq a b
-
-instance PToJSRef Storage where
-  pToJSRef = unStorage
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef Storage where
-  pFromJSRef = Storage
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef Storage where
-  toJSRef = return . unStorage
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef Storage where
-  fromJSRef = return . fmap Storage . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject Storage where
-  toGObject = GObject . castRef . unStorage
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = Storage . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToStorage :: IsGObject obj => obj -> Storage
-castToStorage = castTo gTypeStorage "Storage"
-
-foreign import javascript unsafe "window[\"Storage\"]" gTypeStorage' :: JSRef GType
-gTypeStorage = GType gTypeStorage'
-#else
-type IsStorage o = StorageClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.StorageEvent".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.Event"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/StorageEvent Mozilla StorageEvent documentation>
-newtype StorageEvent = StorageEvent { unStorageEvent :: JSRef StorageEvent }
-
-instance Eq (StorageEvent) where
-  (StorageEvent a) == (StorageEvent b) = js_eq a b
-
-instance PToJSRef StorageEvent where
-  pToJSRef = unStorageEvent
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef StorageEvent where
-  pFromJSRef = StorageEvent
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef StorageEvent where
-  toJSRef = return . unStorageEvent
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef StorageEvent where
-  fromJSRef = return . fmap StorageEvent . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEvent StorageEvent
-instance IsGObject StorageEvent where
-  toGObject = GObject . castRef . unStorageEvent
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = StorageEvent . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToStorageEvent :: IsGObject obj => obj -> StorageEvent
-castToStorageEvent = castTo gTypeStorageEvent "StorageEvent"
-
-foreign import javascript unsafe "window[\"StorageEvent\"]" gTypeStorageEvent' :: JSRef GType
-gTypeStorageEvent = GType gTypeStorageEvent'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.StorageInfo".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/StorageInfo Mozilla StorageInfo documentation>
-newtype StorageInfo = StorageInfo { unStorageInfo :: JSRef StorageInfo }
-
-instance Eq (StorageInfo) where
-  (StorageInfo a) == (StorageInfo b) = js_eq a b
-
-instance PToJSRef StorageInfo where
-  pToJSRef = unStorageInfo
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef StorageInfo where
-  pFromJSRef = StorageInfo
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef StorageInfo where
-  toJSRef = return . unStorageInfo
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef StorageInfo where
-  fromJSRef = return . fmap StorageInfo . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject StorageInfo where
-  toGObject = GObject . castRef . unStorageInfo
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = StorageInfo . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToStorageInfo :: IsGObject obj => obj -> StorageInfo
-castToStorageInfo = castTo gTypeStorageInfo "StorageInfo"
-
-foreign import javascript unsafe "window[\"StorageInfo\"]" gTypeStorageInfo' :: JSRef GType
-gTypeStorageInfo = GType gTypeStorageInfo'
-#else
-#ifndef USE_OLD_WEBKIT
-type IsStorageInfo o = StorageInfoClass o
-#endif
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.StorageQuota".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/StorageQuota Mozilla StorageQuota documentation>
-newtype StorageQuota = StorageQuota { unStorageQuota :: JSRef StorageQuota }
-
-instance Eq (StorageQuota) where
-  (StorageQuota a) == (StorageQuota b) = js_eq a b
-
-instance PToJSRef StorageQuota where
-  pToJSRef = unStorageQuota
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef StorageQuota where
-  pFromJSRef = StorageQuota
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef StorageQuota where
-  toJSRef = return . unStorageQuota
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef StorageQuota where
-  fromJSRef = return . fmap StorageQuota . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject StorageQuota where
-  toGObject = GObject . castRef . unStorageQuota
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = StorageQuota . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToStorageQuota :: IsGObject obj => obj -> StorageQuota
-castToStorageQuota = castTo gTypeStorageQuota "StorageQuota"
-
-foreign import javascript unsafe "window[\"StorageQuota\"]" gTypeStorageQuota' :: JSRef GType
-gTypeStorageQuota = GType gTypeStorageQuota'
-#else
-#ifndef USE_OLD_WEBKIT
-type IsStorageQuota o = StorageQuotaClass o
-#endif
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.StyleMedia".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/StyleMedia Mozilla StyleMedia documentation>
-newtype StyleMedia = StyleMedia { unStyleMedia :: JSRef StyleMedia }
-
-instance Eq (StyleMedia) where
-  (StyleMedia a) == (StyleMedia b) = js_eq a b
-
-instance PToJSRef StyleMedia where
-  pToJSRef = unStyleMedia
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef StyleMedia where
-  pFromJSRef = StyleMedia
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef StyleMedia where
-  toJSRef = return . unStyleMedia
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef StyleMedia where
-  fromJSRef = return . fmap StyleMedia . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject StyleMedia where
-  toGObject = GObject . castRef . unStyleMedia
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = StyleMedia . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToStyleMedia :: IsGObject obj => obj -> StyleMedia
-castToStyleMedia = castTo gTypeStyleMedia "StyleMedia"
-
-foreign import javascript unsafe "window[\"StyleMedia\"]" gTypeStyleMedia' :: JSRef GType
-gTypeStyleMedia = GType gTypeStyleMedia'
-#else
-type IsStyleMedia o = StyleMediaClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.StyleSheet".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/StyleSheet Mozilla StyleSheet documentation>
-newtype StyleSheet = StyleSheet { unStyleSheet :: JSRef StyleSheet }
-
-instance Eq (StyleSheet) where
-  (StyleSheet a) == (StyleSheet b) = js_eq a b
-
-instance PToJSRef StyleSheet where
-  pToJSRef = unStyleSheet
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef StyleSheet where
-  pFromJSRef = StyleSheet
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef StyleSheet where
-  toJSRef = return . unStyleSheet
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef StyleSheet where
-  fromJSRef = return . fmap StyleSheet . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsGObject o => IsStyleSheet o
-toStyleSheet :: IsStyleSheet o => o -> StyleSheet
-toStyleSheet = unsafeCastGObject . toGObject
-
-instance IsStyleSheet StyleSheet
-instance IsGObject StyleSheet where
-  toGObject = GObject . castRef . unStyleSheet
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = StyleSheet . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToStyleSheet :: IsGObject obj => obj -> StyleSheet
-castToStyleSheet = castTo gTypeStyleSheet "StyleSheet"
-
-foreign import javascript unsafe "window[\"StyleSheet\"]" gTypeStyleSheet' :: JSRef GType
-gTypeStyleSheet = GType gTypeStyleSheet'
-#else
-type IsStyleSheet o = StyleSheetClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.StyleSheetList".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/StyleSheetList Mozilla StyleSheetList documentation>
-newtype StyleSheetList = StyleSheetList { unStyleSheetList :: JSRef StyleSheetList }
-
-instance Eq (StyleSheetList) where
-  (StyleSheetList a) == (StyleSheetList b) = js_eq a b
-
-instance PToJSRef StyleSheetList where
-  pToJSRef = unStyleSheetList
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef StyleSheetList where
-  pFromJSRef = StyleSheetList
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef StyleSheetList where
-  toJSRef = return . unStyleSheetList
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef StyleSheetList where
-  fromJSRef = return . fmap StyleSheetList . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject StyleSheetList where
-  toGObject = GObject . castRef . unStyleSheetList
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = StyleSheetList . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToStyleSheetList :: IsGObject obj => obj -> StyleSheetList
-castToStyleSheetList = castTo gTypeStyleSheetList "StyleSheetList"
-
-foreign import javascript unsafe "window[\"StyleSheetList\"]" gTypeStyleSheetList' :: JSRef GType
-gTypeStyleSheetList = GType gTypeStyleSheetList'
-#else
-type IsStyleSheetList o = StyleSheetListClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.SubtleCrypto".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/WebKitSubtleCrypto Mozilla WebKitSubtleCrypto documentation>
-newtype SubtleCrypto = SubtleCrypto { unSubtleCrypto :: JSRef SubtleCrypto }
-
-instance Eq (SubtleCrypto) where
-  (SubtleCrypto a) == (SubtleCrypto b) = js_eq a b
-
-instance PToJSRef SubtleCrypto where
-  pToJSRef = unSubtleCrypto
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef SubtleCrypto where
-  pFromJSRef = SubtleCrypto
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef SubtleCrypto where
-  toJSRef = return . unSubtleCrypto
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef SubtleCrypto where
-  fromJSRef = return . fmap SubtleCrypto . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject SubtleCrypto where
-  toGObject = GObject . castRef . unSubtleCrypto
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = SubtleCrypto . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToSubtleCrypto :: IsGObject obj => obj -> SubtleCrypto
-castToSubtleCrypto = castTo gTypeSubtleCrypto "SubtleCrypto"
-
-foreign import javascript unsafe "window[\"WebKitSubtleCrypto\"]" gTypeSubtleCrypto' :: JSRef GType
-gTypeSubtleCrypto = GType gTypeSubtleCrypto'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.Text".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.CharacterData"
---     * "GHCJS.DOM.Node"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/Text Mozilla Text documentation>
-newtype Text = Text { unText :: JSRef Text }
-
-instance Eq (Text) where
-  (Text a) == (Text b) = js_eq a b
-
-instance PToJSRef Text where
-  pToJSRef = unText
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef Text where
-  pFromJSRef = Text
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef Text where
-  toJSRef = return . unText
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef Text where
-  fromJSRef = return . fmap Text . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsCharacterData o => IsText o
-toText :: IsText o => o -> Text
-toText = unsafeCastGObject . toGObject
-
-instance IsText Text
-instance IsCharacterData Text
-instance IsNode Text
-instance IsEventTarget Text
-instance IsGObject Text where
-  toGObject = GObject . castRef . unText
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = Text . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToText :: IsGObject obj => obj -> Text
-castToText = castTo gTypeText "Text"
-
-foreign import javascript unsafe "window[\"Text\"]" gTypeText' :: JSRef GType
-gTypeText = GType gTypeText'
-#else
-type IsText o = TextClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.TextEvent".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.UIEvent"
---     * "GHCJS.DOM.Event"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/TextEvent Mozilla TextEvent documentation>
-newtype TextEvent = TextEvent { unTextEvent :: JSRef TextEvent }
-
-instance Eq (TextEvent) where
-  (TextEvent a) == (TextEvent b) = js_eq a b
-
-instance PToJSRef TextEvent where
-  pToJSRef = unTextEvent
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef TextEvent where
-  pFromJSRef = TextEvent
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef TextEvent where
-  toJSRef = return . unTextEvent
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef TextEvent where
-  fromJSRef = return . fmap TextEvent . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsUIEvent TextEvent
-instance IsEvent TextEvent
-instance IsGObject TextEvent where
-  toGObject = GObject . castRef . unTextEvent
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = TextEvent . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToTextEvent :: IsGObject obj => obj -> TextEvent
-castToTextEvent = castTo gTypeTextEvent "TextEvent"
-
-foreign import javascript unsafe "window[\"TextEvent\"]" gTypeTextEvent' :: JSRef GType
-gTypeTextEvent = GType gTypeTextEvent'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.TextMetrics".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/TextMetrics Mozilla TextMetrics documentation>
-newtype TextMetrics = TextMetrics { unTextMetrics :: JSRef TextMetrics }
-
-instance Eq (TextMetrics) where
-  (TextMetrics a) == (TextMetrics b) = js_eq a b
-
-instance PToJSRef TextMetrics where
-  pToJSRef = unTextMetrics
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef TextMetrics where
-  pFromJSRef = TextMetrics
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef TextMetrics where
-  toJSRef = return . unTextMetrics
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef TextMetrics where
-  fromJSRef = return . fmap TextMetrics . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject TextMetrics where
-  toGObject = GObject . castRef . unTextMetrics
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = TextMetrics . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToTextMetrics :: IsGObject obj => obj -> TextMetrics
-castToTextMetrics = castTo gTypeTextMetrics "TextMetrics"
-
-foreign import javascript unsafe "window[\"TextMetrics\"]" gTypeTextMetrics' :: JSRef GType
-gTypeTextMetrics = GType gTypeTextMetrics'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.TextTrack".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/TextTrack Mozilla TextTrack documentation>
-newtype TextTrack = TextTrack { unTextTrack :: JSRef TextTrack }
-
-instance Eq (TextTrack) where
-  (TextTrack a) == (TextTrack b) = js_eq a b
-
-instance PToJSRef TextTrack where
-  pToJSRef = unTextTrack
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef TextTrack where
-  pFromJSRef = TextTrack
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef TextTrack where
-  toJSRef = return . unTextTrack
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef TextTrack where
-  fromJSRef = return . fmap TextTrack . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEventTarget TextTrack
-instance IsGObject TextTrack where
-  toGObject = GObject . castRef . unTextTrack
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = TextTrack . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToTextTrack :: IsGObject obj => obj -> TextTrack
-castToTextTrack = castTo gTypeTextTrack "TextTrack"
-
-foreign import javascript unsafe "window[\"TextTrack\"]" gTypeTextTrack' :: JSRef GType
-gTypeTextTrack = GType gTypeTextTrack'
-#else
-#ifndef USE_OLD_WEBKIT
-type IsTextTrack o = TextTrackClass o
-#endif
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.TextTrackCue".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/TextTrackCue Mozilla TextTrackCue documentation>
-newtype TextTrackCue = TextTrackCue { unTextTrackCue :: JSRef TextTrackCue }
-
-instance Eq (TextTrackCue) where
-  (TextTrackCue a) == (TextTrackCue b) = js_eq a b
-
-instance PToJSRef TextTrackCue where
-  pToJSRef = unTextTrackCue
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef TextTrackCue where
-  pFromJSRef = TextTrackCue
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef TextTrackCue where
-  toJSRef = return . unTextTrackCue
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef TextTrackCue where
-  fromJSRef = return . fmap TextTrackCue . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsEventTarget o => IsTextTrackCue o
-toTextTrackCue :: IsTextTrackCue o => o -> TextTrackCue
-toTextTrackCue = unsafeCastGObject . toGObject
-
-instance IsTextTrackCue TextTrackCue
-instance IsEventTarget TextTrackCue
-instance IsGObject TextTrackCue where
-  toGObject = GObject . castRef . unTextTrackCue
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = TextTrackCue . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToTextTrackCue :: IsGObject obj => obj -> TextTrackCue
-castToTextTrackCue = castTo gTypeTextTrackCue "TextTrackCue"
-
-foreign import javascript unsafe "window[\"TextTrackCue\"]" gTypeTextTrackCue' :: JSRef GType
-gTypeTextTrackCue = GType gTypeTextTrackCue'
-#else
-#ifndef USE_OLD_WEBKIT
-type IsTextTrackCue o = TextTrackCueClass o
-#endif
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.TextTrackCueList".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/TextTrackCueList Mozilla TextTrackCueList documentation>
-newtype TextTrackCueList = TextTrackCueList { unTextTrackCueList :: JSRef TextTrackCueList }
-
-instance Eq (TextTrackCueList) where
-  (TextTrackCueList a) == (TextTrackCueList b) = js_eq a b
-
-instance PToJSRef TextTrackCueList where
-  pToJSRef = unTextTrackCueList
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef TextTrackCueList where
-  pFromJSRef = TextTrackCueList
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef TextTrackCueList where
-  toJSRef = return . unTextTrackCueList
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef TextTrackCueList where
-  fromJSRef = return . fmap TextTrackCueList . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject TextTrackCueList where
-  toGObject = GObject . castRef . unTextTrackCueList
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = TextTrackCueList . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToTextTrackCueList :: IsGObject obj => obj -> TextTrackCueList
-castToTextTrackCueList = castTo gTypeTextTrackCueList "TextTrackCueList"
-
-foreign import javascript unsafe "window[\"TextTrackCueList\"]" gTypeTextTrackCueList' :: JSRef GType
-gTypeTextTrackCueList = GType gTypeTextTrackCueList'
-#else
-#ifndef USE_OLD_WEBKIT
-type IsTextTrackCueList o = TextTrackCueListClass o
-#endif
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.TextTrackList".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/TextTrackList Mozilla TextTrackList documentation>
-newtype TextTrackList = TextTrackList { unTextTrackList :: JSRef TextTrackList }
-
-instance Eq (TextTrackList) where
-  (TextTrackList a) == (TextTrackList b) = js_eq a b
-
-instance PToJSRef TextTrackList where
-  pToJSRef = unTextTrackList
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef TextTrackList where
-  pFromJSRef = TextTrackList
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef TextTrackList where
-  toJSRef = return . unTextTrackList
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef TextTrackList where
-  fromJSRef = return . fmap TextTrackList . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEventTarget TextTrackList
-instance IsGObject TextTrackList where
-  toGObject = GObject . castRef . unTextTrackList
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = TextTrackList . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToTextTrackList :: IsGObject obj => obj -> TextTrackList
-castToTextTrackList = castTo gTypeTextTrackList "TextTrackList"
-
-foreign import javascript unsafe "window[\"TextTrackList\"]" gTypeTextTrackList' :: JSRef GType
-gTypeTextTrackList = GType gTypeTextTrackList'
-#else
-#ifndef USE_OLD_WEBKIT
-type IsTextTrackList o = TextTrackListClass o
-#endif
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.TimeRanges".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/TimeRanges Mozilla TimeRanges documentation>
-newtype TimeRanges = TimeRanges { unTimeRanges :: JSRef TimeRanges }
-
-instance Eq (TimeRanges) where
-  (TimeRanges a) == (TimeRanges b) = js_eq a b
-
-instance PToJSRef TimeRanges where
-  pToJSRef = unTimeRanges
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef TimeRanges where
-  pFromJSRef = TimeRanges
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef TimeRanges where
-  toJSRef = return . unTimeRanges
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef TimeRanges where
-  fromJSRef = return . fmap TimeRanges . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject TimeRanges where
-  toGObject = GObject . castRef . unTimeRanges
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = TimeRanges . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToTimeRanges :: IsGObject obj => obj -> TimeRanges
-castToTimeRanges = castTo gTypeTimeRanges "TimeRanges"
-
-foreign import javascript unsafe "window[\"TimeRanges\"]" gTypeTimeRanges' :: JSRef GType
-gTypeTimeRanges = GType gTypeTimeRanges'
-#else
-type IsTimeRanges o = TimeRangesClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.Touch".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/Touch Mozilla Touch documentation>
-newtype Touch = Touch { unTouch :: JSRef Touch }
-
-instance Eq (Touch) where
-  (Touch a) == (Touch b) = js_eq a b
-
-instance PToJSRef Touch where
-  pToJSRef = unTouch
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef Touch where
-  pFromJSRef = Touch
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef Touch where
-  toJSRef = return . unTouch
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef Touch where
-  fromJSRef = return . fmap Touch . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject Touch where
-  toGObject = GObject . castRef . unTouch
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = Touch . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToTouch :: IsGObject obj => obj -> Touch
-castToTouch = castTo gTypeTouch "Touch"
-
-foreign import javascript unsafe "window[\"Touch\"]" gTypeTouch' :: JSRef GType
-gTypeTouch = GType gTypeTouch'
-#else
-#ifndef USE_OLD_WEBKIT
-type IsTouch o = TouchClass o
-#endif
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.TouchEvent".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.UIEvent"
---     * "GHCJS.DOM.Event"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/TouchEvent Mozilla TouchEvent documentation>
-newtype TouchEvent = TouchEvent { unTouchEvent :: JSRef TouchEvent }
-
-instance Eq (TouchEvent) where
-  (TouchEvent a) == (TouchEvent b) = js_eq a b
-
-instance PToJSRef TouchEvent where
-  pToJSRef = unTouchEvent
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef TouchEvent where
-  pFromJSRef = TouchEvent
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef TouchEvent where
-  toJSRef = return . unTouchEvent
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef TouchEvent where
-  fromJSRef = return . fmap TouchEvent . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsUIEvent TouchEvent
-instance IsEvent TouchEvent
-instance IsGObject TouchEvent where
-  toGObject = GObject . castRef . unTouchEvent
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = TouchEvent . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToTouchEvent :: IsGObject obj => obj -> TouchEvent
-castToTouchEvent = castTo gTypeTouchEvent "TouchEvent"
-
-foreign import javascript unsafe "window[\"TouchEvent\"]" gTypeTouchEvent' :: JSRef GType
-gTypeTouchEvent = GType gTypeTouchEvent'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.TouchList".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/TouchList Mozilla TouchList documentation>
-newtype TouchList = TouchList { unTouchList :: JSRef TouchList }
-
-instance Eq (TouchList) where
-  (TouchList a) == (TouchList b) = js_eq a b
-
-instance PToJSRef TouchList where
-  pToJSRef = unTouchList
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef TouchList where
-  pFromJSRef = TouchList
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef TouchList where
-  toJSRef = return . unTouchList
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef TouchList where
-  fromJSRef = return . fmap TouchList . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject TouchList where
-  toGObject = GObject . castRef . unTouchList
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = TouchList . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToTouchList :: IsGObject obj => obj -> TouchList
-castToTouchList = castTo gTypeTouchList "TouchList"
-
-foreign import javascript unsafe "window[\"TouchList\"]" gTypeTouchList' :: JSRef GType
-gTypeTouchList = GType gTypeTouchList'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.TrackEvent".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.Event"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/TrackEvent Mozilla TrackEvent documentation>
-newtype TrackEvent = TrackEvent { unTrackEvent :: JSRef TrackEvent }
-
-instance Eq (TrackEvent) where
-  (TrackEvent a) == (TrackEvent b) = js_eq a b
-
-instance PToJSRef TrackEvent where
-  pToJSRef = unTrackEvent
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef TrackEvent where
-  pFromJSRef = TrackEvent
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef TrackEvent where
-  toJSRef = return . unTrackEvent
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef TrackEvent where
-  fromJSRef = return . fmap TrackEvent . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEvent TrackEvent
-instance IsGObject TrackEvent where
-  toGObject = GObject . castRef . unTrackEvent
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = TrackEvent . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToTrackEvent :: IsGObject obj => obj -> TrackEvent
-castToTrackEvent = castTo gTypeTrackEvent "TrackEvent"
-
-foreign import javascript unsafe "window[\"TrackEvent\"]" gTypeTrackEvent' :: JSRef GType
-gTypeTrackEvent = GType gTypeTrackEvent'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.TransitionEvent".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.Event"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/TransitionEvent Mozilla TransitionEvent documentation>
-newtype TransitionEvent = TransitionEvent { unTransitionEvent :: JSRef TransitionEvent }
-
-instance Eq (TransitionEvent) where
-  (TransitionEvent a) == (TransitionEvent b) = js_eq a b
-
-instance PToJSRef TransitionEvent where
-  pToJSRef = unTransitionEvent
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef TransitionEvent where
-  pFromJSRef = TransitionEvent
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef TransitionEvent where
-  toJSRef = return . unTransitionEvent
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef TransitionEvent where
-  fromJSRef = return . fmap TransitionEvent . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEvent TransitionEvent
-instance IsGObject TransitionEvent where
-  toGObject = GObject . castRef . unTransitionEvent
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = TransitionEvent . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToTransitionEvent :: IsGObject obj => obj -> TransitionEvent
-castToTransitionEvent = castTo gTypeTransitionEvent "TransitionEvent"
-
-foreign import javascript unsafe "window[\"TransitionEvent\"]" gTypeTransitionEvent' :: JSRef GType
-gTypeTransitionEvent = GType gTypeTransitionEvent'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.TreeWalker".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker Mozilla TreeWalker documentation>
-newtype TreeWalker = TreeWalker { unTreeWalker :: JSRef TreeWalker }
-
-instance Eq (TreeWalker) where
-  (TreeWalker a) == (TreeWalker b) = js_eq a b
-
-instance PToJSRef TreeWalker where
-  pToJSRef = unTreeWalker
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef TreeWalker where
-  pFromJSRef = TreeWalker
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef TreeWalker where
-  toJSRef = return . unTreeWalker
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef TreeWalker where
-  fromJSRef = return . fmap TreeWalker . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject TreeWalker where
-  toGObject = GObject . castRef . unTreeWalker
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = TreeWalker . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToTreeWalker :: IsGObject obj => obj -> TreeWalker
-castToTreeWalker = castTo gTypeTreeWalker "TreeWalker"
-
-foreign import javascript unsafe "window[\"TreeWalker\"]" gTypeTreeWalker' :: JSRef GType
-gTypeTreeWalker = GType gTypeTreeWalker'
-#else
-type IsTreeWalker o = TreeWalkerClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.TypeConversions".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/TypeConversions Mozilla TypeConversions documentation>
-newtype TypeConversions = TypeConversions { unTypeConversions :: JSRef TypeConversions }
-
-instance Eq (TypeConversions) where
-  (TypeConversions a) == (TypeConversions b) = js_eq a b
-
-instance PToJSRef TypeConversions where
-  pToJSRef = unTypeConversions
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef TypeConversions where
-  pFromJSRef = TypeConversions
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef TypeConversions where
-  toJSRef = return . unTypeConversions
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef TypeConversions where
-  fromJSRef = return . fmap TypeConversions . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject TypeConversions where
-  toGObject = GObject . castRef . unTypeConversions
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = TypeConversions . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToTypeConversions :: IsGObject obj => obj -> TypeConversions
-castToTypeConversions = castTo gTypeTypeConversions "TypeConversions"
-
-foreign import javascript unsafe "window[\"TypeConversions\"]" gTypeTypeConversions' :: JSRef GType
-gTypeTypeConversions = GType gTypeTypeConversions'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.UIEvent".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.Event"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/UIEvent Mozilla UIEvent documentation>
-newtype UIEvent = UIEvent { unUIEvent :: JSRef UIEvent }
-
-instance Eq (UIEvent) where
-  (UIEvent a) == (UIEvent b) = js_eq a b
-
-instance PToJSRef UIEvent where
-  pToJSRef = unUIEvent
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef UIEvent where
-  pFromJSRef = UIEvent
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef UIEvent where
-  toJSRef = return . unUIEvent
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef UIEvent where
-  fromJSRef = return . fmap UIEvent . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsEvent o => IsUIEvent o
-toUIEvent :: IsUIEvent o => o -> UIEvent
-toUIEvent = unsafeCastGObject . toGObject
-
-instance IsUIEvent UIEvent
-instance IsEvent UIEvent
-instance IsGObject UIEvent where
-  toGObject = GObject . castRef . unUIEvent
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = UIEvent . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToUIEvent :: IsGObject obj => obj -> UIEvent
-castToUIEvent = castTo gTypeUIEvent "UIEvent"
-
-foreign import javascript unsafe "window[\"UIEvent\"]" gTypeUIEvent' :: JSRef GType
-gTypeUIEvent = GType gTypeUIEvent'
-#else
-type IsUIEvent o = UIEventClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.UIRequestEvent".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.UIEvent"
---     * "GHCJS.DOM.Event"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/UIRequestEvent Mozilla UIRequestEvent documentation>
-newtype UIRequestEvent = UIRequestEvent { unUIRequestEvent :: JSRef UIRequestEvent }
-
-instance Eq (UIRequestEvent) where
-  (UIRequestEvent a) == (UIRequestEvent b) = js_eq a b
-
-instance PToJSRef UIRequestEvent where
-  pToJSRef = unUIRequestEvent
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef UIRequestEvent where
-  pFromJSRef = UIRequestEvent
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef UIRequestEvent where
-  toJSRef = return . unUIRequestEvent
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef UIRequestEvent where
-  fromJSRef = return . fmap UIRequestEvent . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsUIEvent UIRequestEvent
-instance IsEvent UIRequestEvent
-instance IsGObject UIRequestEvent where
-  toGObject = GObject . castRef . unUIRequestEvent
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = UIRequestEvent . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToUIRequestEvent :: IsGObject obj => obj -> UIRequestEvent
-castToUIRequestEvent = castTo gTypeUIRequestEvent "UIRequestEvent"
-
-foreign import javascript unsafe "window[\"UIRequestEvent\"]" gTypeUIRequestEvent' :: JSRef GType
-gTypeUIRequestEvent = GType gTypeUIRequestEvent'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.URL".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/URL Mozilla URL documentation>
-newtype URL = URL { unURL :: JSRef URL }
-
-instance Eq (URL) where
-  (URL a) == (URL b) = js_eq a b
-
-instance PToJSRef URL where
-  pToJSRef = unURL
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef URL where
-  pFromJSRef = URL
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef URL where
-  toJSRef = return . unURL
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef URL where
-  fromJSRef = return . fmap URL . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject URL where
-  toGObject = GObject . castRef . unURL
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = URL . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToURL :: IsGObject obj => obj -> URL
-castToURL = castTo gTypeURL "URL"
-
-foreign import javascript unsafe "window[\"URL\"]" gTypeURL' :: JSRef GType
-gTypeURL = GType gTypeURL'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.URLUtils".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/URLUtils Mozilla URLUtils documentation>
-newtype URLUtils = URLUtils { unURLUtils :: JSRef URLUtils }
-
-instance Eq (URLUtils) where
-  (URLUtils a) == (URLUtils b) = js_eq a b
-
-instance PToJSRef URLUtils where
-  pToJSRef = unURLUtils
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef URLUtils where
-  pFromJSRef = URLUtils
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef URLUtils where
-  toJSRef = return . unURLUtils
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef URLUtils where
-  fromJSRef = return . fmap URLUtils . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject URLUtils where
-  toGObject = GObject . castRef . unURLUtils
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = URLUtils . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToURLUtils :: IsGObject obj => obj -> URLUtils
-castToURLUtils = castTo gTypeURLUtils "URLUtils"
-
-foreign import javascript unsafe "window[\"URLUtils\"]" gTypeURLUtils' :: JSRef GType
-gTypeURLUtils = GType gTypeURLUtils'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.UserMessageHandler".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/UserMessageHandler Mozilla UserMessageHandler documentation>
-newtype UserMessageHandler = UserMessageHandler { unUserMessageHandler :: JSRef UserMessageHandler }
-
-instance Eq (UserMessageHandler) where
-  (UserMessageHandler a) == (UserMessageHandler b) = js_eq a b
-
-instance PToJSRef UserMessageHandler where
-  pToJSRef = unUserMessageHandler
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef UserMessageHandler where
-  pFromJSRef = UserMessageHandler
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef UserMessageHandler where
-  toJSRef = return . unUserMessageHandler
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef UserMessageHandler where
-  fromJSRef = return . fmap UserMessageHandler . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject UserMessageHandler where
-  toGObject = GObject . castRef . unUserMessageHandler
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = UserMessageHandler . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToUserMessageHandler :: IsGObject obj => obj -> UserMessageHandler
-castToUserMessageHandler = castTo gTypeUserMessageHandler "UserMessageHandler"
-
-foreign import javascript unsafe "window[\"UserMessageHandler\"]" gTypeUserMessageHandler' :: JSRef GType
-gTypeUserMessageHandler = GType gTypeUserMessageHandler'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.UserMessageHandlersNamespace".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/UserMessageHandlersNamespace Mozilla UserMessageHandlersNamespace documentation>
-newtype UserMessageHandlersNamespace = UserMessageHandlersNamespace { unUserMessageHandlersNamespace :: JSRef UserMessageHandlersNamespace }
-
-instance Eq (UserMessageHandlersNamespace) where
-  (UserMessageHandlersNamespace a) == (UserMessageHandlersNamespace b) = js_eq a b
-
-instance PToJSRef UserMessageHandlersNamespace where
-  pToJSRef = unUserMessageHandlersNamespace
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef UserMessageHandlersNamespace where
-  pFromJSRef = UserMessageHandlersNamespace
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef UserMessageHandlersNamespace where
-  toJSRef = return . unUserMessageHandlersNamespace
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef UserMessageHandlersNamespace where
-  fromJSRef = return . fmap UserMessageHandlersNamespace . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject UserMessageHandlersNamespace where
-  toGObject = GObject . castRef . unUserMessageHandlersNamespace
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = UserMessageHandlersNamespace . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToUserMessageHandlersNamespace :: IsGObject obj => obj -> UserMessageHandlersNamespace
-castToUserMessageHandlersNamespace = castTo gTypeUserMessageHandlersNamespace "UserMessageHandlersNamespace"
-
-foreign import javascript unsafe "window[\"UserMessageHandlersNamespace\"]" gTypeUserMessageHandlersNamespace' :: JSRef GType
-gTypeUserMessageHandlersNamespace = GType gTypeUserMessageHandlersNamespace'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.VTTCue".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.TextTrackCue"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/VTTCue Mozilla VTTCue documentation>
-newtype VTTCue = VTTCue { unVTTCue :: JSRef VTTCue }
-
-instance Eq (VTTCue) where
-  (VTTCue a) == (VTTCue b) = js_eq a b
-
-instance PToJSRef VTTCue where
-  pToJSRef = unVTTCue
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef VTTCue where
-  pFromJSRef = VTTCue
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef VTTCue where
-  toJSRef = return . unVTTCue
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef VTTCue where
-  fromJSRef = return . fmap VTTCue . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsTextTrackCue VTTCue
-instance IsEventTarget VTTCue
-instance IsGObject VTTCue where
-  toGObject = GObject . castRef . unVTTCue
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = VTTCue . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToVTTCue :: IsGObject obj => obj -> VTTCue
-castToVTTCue = castTo gTypeVTTCue "VTTCue"
-
-foreign import javascript unsafe "window[\"VTTCue\"]" gTypeVTTCue' :: JSRef GType
-gTypeVTTCue = GType gTypeVTTCue'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.VTTRegion".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/VTTRegion Mozilla VTTRegion documentation>
-newtype VTTRegion = VTTRegion { unVTTRegion :: JSRef VTTRegion }
-
-instance Eq (VTTRegion) where
-  (VTTRegion a) == (VTTRegion b) = js_eq a b
-
-instance PToJSRef VTTRegion where
-  pToJSRef = unVTTRegion
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef VTTRegion where
-  pFromJSRef = VTTRegion
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef VTTRegion where
-  toJSRef = return . unVTTRegion
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef VTTRegion where
-  fromJSRef = return . fmap VTTRegion . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject VTTRegion where
-  toGObject = GObject . castRef . unVTTRegion
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = VTTRegion . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToVTTRegion :: IsGObject obj => obj -> VTTRegion
-castToVTTRegion = castTo gTypeVTTRegion "VTTRegion"
-
-foreign import javascript unsafe "window[\"VTTRegion\"]" gTypeVTTRegion' :: JSRef GType
-gTypeVTTRegion = GType gTypeVTTRegion'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.VTTRegionList".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/VTTRegionList Mozilla VTTRegionList documentation>
-newtype VTTRegionList = VTTRegionList { unVTTRegionList :: JSRef VTTRegionList }
-
-instance Eq (VTTRegionList) where
-  (VTTRegionList a) == (VTTRegionList b) = js_eq a b
-
-instance PToJSRef VTTRegionList where
-  pToJSRef = unVTTRegionList
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef VTTRegionList where
-  pFromJSRef = VTTRegionList
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef VTTRegionList where
-  toJSRef = return . unVTTRegionList
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef VTTRegionList where
-  fromJSRef = return . fmap VTTRegionList . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject VTTRegionList where
-  toGObject = GObject . castRef . unVTTRegionList
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = VTTRegionList . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToVTTRegionList :: IsGObject obj => obj -> VTTRegionList
-castToVTTRegionList = castTo gTypeVTTRegionList "VTTRegionList"
-
-foreign import javascript unsafe "window[\"VTTRegionList\"]" gTypeVTTRegionList' :: JSRef GType
-gTypeVTTRegionList = GType gTypeVTTRegionList'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.ValidityState".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/ValidityState Mozilla ValidityState documentation>
-newtype ValidityState = ValidityState { unValidityState :: JSRef ValidityState }
-
-instance Eq (ValidityState) where
-  (ValidityState a) == (ValidityState b) = js_eq a b
-
-instance PToJSRef ValidityState where
-  pToJSRef = unValidityState
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef ValidityState where
-  pFromJSRef = ValidityState
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef ValidityState where
-  toJSRef = return . unValidityState
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef ValidityState where
-  fromJSRef = return . fmap ValidityState . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject ValidityState where
-  toGObject = GObject . castRef . unValidityState
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = ValidityState . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToValidityState :: IsGObject obj => obj -> ValidityState
-castToValidityState = castTo gTypeValidityState "ValidityState"
-
-foreign import javascript unsafe "window[\"ValidityState\"]" gTypeValidityState' :: JSRef GType
-gTypeValidityState = GType gTypeValidityState'
-#else
-type IsValidityState o = ValidityStateClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.VideoPlaybackQuality".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/VideoPlaybackQuality Mozilla VideoPlaybackQuality documentation>
-newtype VideoPlaybackQuality = VideoPlaybackQuality { unVideoPlaybackQuality :: JSRef VideoPlaybackQuality }
-
-instance Eq (VideoPlaybackQuality) where
-  (VideoPlaybackQuality a) == (VideoPlaybackQuality b) = js_eq a b
-
-instance PToJSRef VideoPlaybackQuality where
-  pToJSRef = unVideoPlaybackQuality
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef VideoPlaybackQuality where
-  pFromJSRef = VideoPlaybackQuality
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef VideoPlaybackQuality where
-  toJSRef = return . unVideoPlaybackQuality
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef VideoPlaybackQuality where
-  fromJSRef = return . fmap VideoPlaybackQuality . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject VideoPlaybackQuality where
-  toGObject = GObject . castRef . unVideoPlaybackQuality
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = VideoPlaybackQuality . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToVideoPlaybackQuality :: IsGObject obj => obj -> VideoPlaybackQuality
-castToVideoPlaybackQuality = castTo gTypeVideoPlaybackQuality "VideoPlaybackQuality"
-
-foreign import javascript unsafe "window[\"VideoPlaybackQuality\"]" gTypeVideoPlaybackQuality' :: JSRef GType
-gTypeVideoPlaybackQuality = GType gTypeVideoPlaybackQuality'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.VideoStreamTrack".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.MediaStreamTrack"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/VideoStreamTrack Mozilla VideoStreamTrack documentation>
-newtype VideoStreamTrack = VideoStreamTrack { unVideoStreamTrack :: JSRef VideoStreamTrack }
-
-instance Eq (VideoStreamTrack) where
-  (VideoStreamTrack a) == (VideoStreamTrack b) = js_eq a b
-
-instance PToJSRef VideoStreamTrack where
-  pToJSRef = unVideoStreamTrack
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef VideoStreamTrack where
-  pFromJSRef = VideoStreamTrack
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef VideoStreamTrack where
-  toJSRef = return . unVideoStreamTrack
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef VideoStreamTrack where
-  fromJSRef = return . fmap VideoStreamTrack . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsMediaStreamTrack VideoStreamTrack
-instance IsEventTarget VideoStreamTrack
-instance IsGObject VideoStreamTrack where
-  toGObject = GObject . castRef . unVideoStreamTrack
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = VideoStreamTrack . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToVideoStreamTrack :: IsGObject obj => obj -> VideoStreamTrack
-castToVideoStreamTrack = castTo gTypeVideoStreamTrack "VideoStreamTrack"
-
-foreign import javascript unsafe "window[\"VideoStreamTrack\"]" gTypeVideoStreamTrack' :: JSRef GType
-gTypeVideoStreamTrack = GType gTypeVideoStreamTrack'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.VideoTrack".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/VideoTrack Mozilla VideoTrack documentation>
-newtype VideoTrack = VideoTrack { unVideoTrack :: JSRef VideoTrack }
-
-instance Eq (VideoTrack) where
-  (VideoTrack a) == (VideoTrack b) = js_eq a b
-
-instance PToJSRef VideoTrack where
-  pToJSRef = unVideoTrack
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef VideoTrack where
-  pFromJSRef = VideoTrack
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef VideoTrack where
-  toJSRef = return . unVideoTrack
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef VideoTrack where
-  fromJSRef = return . fmap VideoTrack . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject VideoTrack where
-  toGObject = GObject . castRef . unVideoTrack
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = VideoTrack . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToVideoTrack :: IsGObject obj => obj -> VideoTrack
-castToVideoTrack = castTo gTypeVideoTrack "VideoTrack"
-
-foreign import javascript unsafe "window[\"VideoTrack\"]" gTypeVideoTrack' :: JSRef GType
-gTypeVideoTrack = GType gTypeVideoTrack'
-#else
-#ifndef USE_OLD_WEBKIT
-type IsVideoTrack o = VideoTrackClass o
-#endif
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.VideoTrackList".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/VideoTrackList Mozilla VideoTrackList documentation>
-newtype VideoTrackList = VideoTrackList { unVideoTrackList :: JSRef VideoTrackList }
-
-instance Eq (VideoTrackList) where
-  (VideoTrackList a) == (VideoTrackList b) = js_eq a b
-
-instance PToJSRef VideoTrackList where
-  pToJSRef = unVideoTrackList
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef VideoTrackList where
-  pFromJSRef = VideoTrackList
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef VideoTrackList where
-  toJSRef = return . unVideoTrackList
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef VideoTrackList where
-  fromJSRef = return . fmap VideoTrackList . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEventTarget VideoTrackList
-instance IsGObject VideoTrackList where
-  toGObject = GObject . castRef . unVideoTrackList
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = VideoTrackList . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToVideoTrackList :: IsGObject obj => obj -> VideoTrackList
-castToVideoTrackList = castTo gTypeVideoTrackList "VideoTrackList"
-
-foreign import javascript unsafe "window[\"VideoTrackList\"]" gTypeVideoTrackList' :: JSRef GType
-gTypeVideoTrackList = GType gTypeVideoTrackList'
-#else
-#ifndef USE_OLD_WEBKIT
-type IsVideoTrackList o = VideoTrackListClass o
-#endif
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.WaveShaperNode".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.AudioNode"
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/WaveShaperNode Mozilla WaveShaperNode documentation>
-newtype WaveShaperNode = WaveShaperNode { unWaveShaperNode :: JSRef WaveShaperNode }
-
-instance Eq (WaveShaperNode) where
-  (WaveShaperNode a) == (WaveShaperNode b) = js_eq a b
-
-instance PToJSRef WaveShaperNode where
-  pToJSRef = unWaveShaperNode
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef WaveShaperNode where
-  pFromJSRef = WaveShaperNode
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef WaveShaperNode where
-  toJSRef = return . unWaveShaperNode
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef WaveShaperNode where
-  fromJSRef = return . fmap WaveShaperNode . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsAudioNode WaveShaperNode
-instance IsEventTarget WaveShaperNode
-instance IsGObject WaveShaperNode where
-  toGObject = GObject . castRef . unWaveShaperNode
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = WaveShaperNode . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToWaveShaperNode :: IsGObject obj => obj -> WaveShaperNode
-castToWaveShaperNode = castTo gTypeWaveShaperNode "WaveShaperNode"
-
-foreign import javascript unsafe "window[\"WaveShaperNode\"]" gTypeWaveShaperNode' :: JSRef GType
-gTypeWaveShaperNode = GType gTypeWaveShaperNode'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.WebGL2RenderingContext".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.WebGLRenderingContextBase"
---     * "GHCJS.DOM.CanvasRenderingContext"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext Mozilla WebGL2RenderingContext documentation>
-newtype WebGL2RenderingContext = WebGL2RenderingContext { unWebGL2RenderingContext :: JSRef WebGL2RenderingContext }
-
-instance Eq (WebGL2RenderingContext) where
-  (WebGL2RenderingContext a) == (WebGL2RenderingContext b) = js_eq a b
-
-instance PToJSRef WebGL2RenderingContext where
-  pToJSRef = unWebGL2RenderingContext
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef WebGL2RenderingContext where
-  pFromJSRef = WebGL2RenderingContext
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef WebGL2RenderingContext where
-  toJSRef = return . unWebGL2RenderingContext
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef WebGL2RenderingContext where
-  fromJSRef = return . fmap WebGL2RenderingContext . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsWebGLRenderingContextBase WebGL2RenderingContext
-instance IsCanvasRenderingContext WebGL2RenderingContext
-instance IsGObject WebGL2RenderingContext where
-  toGObject = GObject . castRef . unWebGL2RenderingContext
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = WebGL2RenderingContext . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToWebGL2RenderingContext :: IsGObject obj => obj -> WebGL2RenderingContext
-castToWebGL2RenderingContext = castTo gTypeWebGL2RenderingContext "WebGL2RenderingContext"
-
-foreign import javascript unsafe "window[\"WebGL2RenderingContext\"]" gTypeWebGL2RenderingContext' :: JSRef GType
-gTypeWebGL2RenderingContext = GType gTypeWebGL2RenderingContext'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.WebGLActiveInfo".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/WebGLActiveInfo Mozilla WebGLActiveInfo documentation>
-newtype WebGLActiveInfo = WebGLActiveInfo { unWebGLActiveInfo :: JSRef WebGLActiveInfo }
-
-instance Eq (WebGLActiveInfo) where
-  (WebGLActiveInfo a) == (WebGLActiveInfo b) = js_eq a b
-
-instance PToJSRef WebGLActiveInfo where
-  pToJSRef = unWebGLActiveInfo
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef WebGLActiveInfo where
-  pFromJSRef = WebGLActiveInfo
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef WebGLActiveInfo where
-  toJSRef = return . unWebGLActiveInfo
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef WebGLActiveInfo where
-  fromJSRef = return . fmap WebGLActiveInfo . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject WebGLActiveInfo where
-  toGObject = GObject . castRef . unWebGLActiveInfo
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = WebGLActiveInfo . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToWebGLActiveInfo :: IsGObject obj => obj -> WebGLActiveInfo
-castToWebGLActiveInfo = castTo gTypeWebGLActiveInfo "WebGLActiveInfo"
-
-foreign import javascript unsafe "window[\"WebGLActiveInfo\"]" gTypeWebGLActiveInfo' :: JSRef GType
-gTypeWebGLActiveInfo = GType gTypeWebGLActiveInfo'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.WebGLBuffer".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/WebGLBuffer Mozilla WebGLBuffer documentation>
-newtype WebGLBuffer = WebGLBuffer { unWebGLBuffer :: JSRef WebGLBuffer }
-
-instance Eq (WebGLBuffer) where
-  (WebGLBuffer a) == (WebGLBuffer b) = js_eq a b
-
-instance PToJSRef WebGLBuffer where
-  pToJSRef = unWebGLBuffer
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef WebGLBuffer where
-  pFromJSRef = WebGLBuffer
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef WebGLBuffer where
-  toJSRef = return . unWebGLBuffer
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef WebGLBuffer where
-  fromJSRef = return . fmap WebGLBuffer . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject WebGLBuffer where
-  toGObject = GObject . castRef . unWebGLBuffer
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = WebGLBuffer . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToWebGLBuffer :: IsGObject obj => obj -> WebGLBuffer
-castToWebGLBuffer = castTo gTypeWebGLBuffer "WebGLBuffer"
-
-foreign import javascript unsafe "window[\"WebGLBuffer\"]" gTypeWebGLBuffer' :: JSRef GType
-gTypeWebGLBuffer = GType gTypeWebGLBuffer'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.WebGLCompressedTextureATC".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/WebGLCompressedTextureATC Mozilla WebGLCompressedTextureATC documentation>
-newtype WebGLCompressedTextureATC = WebGLCompressedTextureATC { unWebGLCompressedTextureATC :: JSRef WebGLCompressedTextureATC }
-
-instance Eq (WebGLCompressedTextureATC) where
-  (WebGLCompressedTextureATC a) == (WebGLCompressedTextureATC b) = js_eq a b
-
-instance PToJSRef WebGLCompressedTextureATC where
-  pToJSRef = unWebGLCompressedTextureATC
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef WebGLCompressedTextureATC where
-  pFromJSRef = WebGLCompressedTextureATC
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef WebGLCompressedTextureATC where
-  toJSRef = return . unWebGLCompressedTextureATC
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef WebGLCompressedTextureATC where
-  fromJSRef = return . fmap WebGLCompressedTextureATC . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject WebGLCompressedTextureATC where
-  toGObject = GObject . castRef . unWebGLCompressedTextureATC
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = WebGLCompressedTextureATC . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToWebGLCompressedTextureATC :: IsGObject obj => obj -> WebGLCompressedTextureATC
-castToWebGLCompressedTextureATC = castTo gTypeWebGLCompressedTextureATC "WebGLCompressedTextureATC"
-
-foreign import javascript unsafe "window[\"WebGLCompressedTextureATC\"]" gTypeWebGLCompressedTextureATC' :: JSRef GType
-gTypeWebGLCompressedTextureATC = GType gTypeWebGLCompressedTextureATC'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.WebGLCompressedTexturePVRTC".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/WebGLCompressedTexturePVRTC Mozilla WebGLCompressedTexturePVRTC documentation>
-newtype WebGLCompressedTexturePVRTC = WebGLCompressedTexturePVRTC { unWebGLCompressedTexturePVRTC :: JSRef WebGLCompressedTexturePVRTC }
-
-instance Eq (WebGLCompressedTexturePVRTC) where
-  (WebGLCompressedTexturePVRTC a) == (WebGLCompressedTexturePVRTC b) = js_eq a b
-
-instance PToJSRef WebGLCompressedTexturePVRTC where
-  pToJSRef = unWebGLCompressedTexturePVRTC
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef WebGLCompressedTexturePVRTC where
-  pFromJSRef = WebGLCompressedTexturePVRTC
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef WebGLCompressedTexturePVRTC where
-  toJSRef = return . unWebGLCompressedTexturePVRTC
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef WebGLCompressedTexturePVRTC where
-  fromJSRef = return . fmap WebGLCompressedTexturePVRTC . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject WebGLCompressedTexturePVRTC where
-  toGObject = GObject . castRef . unWebGLCompressedTexturePVRTC
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = WebGLCompressedTexturePVRTC . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToWebGLCompressedTexturePVRTC :: IsGObject obj => obj -> WebGLCompressedTexturePVRTC
-castToWebGLCompressedTexturePVRTC = castTo gTypeWebGLCompressedTexturePVRTC "WebGLCompressedTexturePVRTC"
-
-foreign import javascript unsafe "window[\"WebGLCompressedTexturePVRTC\"]" gTypeWebGLCompressedTexturePVRTC' :: JSRef GType
-gTypeWebGLCompressedTexturePVRTC = GType gTypeWebGLCompressedTexturePVRTC'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.WebGLCompressedTextureS3TC".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/WebGLCompressedTextureS3TC Mozilla WebGLCompressedTextureS3TC documentation>
-newtype WebGLCompressedTextureS3TC = WebGLCompressedTextureS3TC { unWebGLCompressedTextureS3TC :: JSRef WebGLCompressedTextureS3TC }
-
-instance Eq (WebGLCompressedTextureS3TC) where
-  (WebGLCompressedTextureS3TC a) == (WebGLCompressedTextureS3TC b) = js_eq a b
-
-instance PToJSRef WebGLCompressedTextureS3TC where
-  pToJSRef = unWebGLCompressedTextureS3TC
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef WebGLCompressedTextureS3TC where
-  pFromJSRef = WebGLCompressedTextureS3TC
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef WebGLCompressedTextureS3TC where
-  toJSRef = return . unWebGLCompressedTextureS3TC
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef WebGLCompressedTextureS3TC where
-  fromJSRef = return . fmap WebGLCompressedTextureS3TC . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject WebGLCompressedTextureS3TC where
-  toGObject = GObject . castRef . unWebGLCompressedTextureS3TC
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = WebGLCompressedTextureS3TC . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToWebGLCompressedTextureS3TC :: IsGObject obj => obj -> WebGLCompressedTextureS3TC
-castToWebGLCompressedTextureS3TC = castTo gTypeWebGLCompressedTextureS3TC "WebGLCompressedTextureS3TC"
-
-foreign import javascript unsafe "window[\"WebGLCompressedTextureS3TC\"]" gTypeWebGLCompressedTextureS3TC' :: JSRef GType
-gTypeWebGLCompressedTextureS3TC = GType gTypeWebGLCompressedTextureS3TC'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.WebGLContextAttributes".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/WebGLContextAttributes Mozilla WebGLContextAttributes documentation>
-newtype WebGLContextAttributes = WebGLContextAttributes { unWebGLContextAttributes :: JSRef WebGLContextAttributes }
-
-instance Eq (WebGLContextAttributes) where
-  (WebGLContextAttributes a) == (WebGLContextAttributes b) = js_eq a b
-
-instance PToJSRef WebGLContextAttributes where
-  pToJSRef = unWebGLContextAttributes
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef WebGLContextAttributes where
-  pFromJSRef = WebGLContextAttributes
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef WebGLContextAttributes where
-  toJSRef = return . unWebGLContextAttributes
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef WebGLContextAttributes where
-  fromJSRef = return . fmap WebGLContextAttributes . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject WebGLContextAttributes where
-  toGObject = GObject . castRef . unWebGLContextAttributes
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = WebGLContextAttributes . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToWebGLContextAttributes :: IsGObject obj => obj -> WebGLContextAttributes
-castToWebGLContextAttributes = castTo gTypeWebGLContextAttributes "WebGLContextAttributes"
-
-foreign import javascript unsafe "window[\"WebGLContextAttributes\"]" gTypeWebGLContextAttributes' :: JSRef GType
-gTypeWebGLContextAttributes = GType gTypeWebGLContextAttributes'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.WebGLContextEvent".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.Event"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/WebGLContextEvent Mozilla WebGLContextEvent documentation>
-newtype WebGLContextEvent = WebGLContextEvent { unWebGLContextEvent :: JSRef WebGLContextEvent }
-
-instance Eq (WebGLContextEvent) where
-  (WebGLContextEvent a) == (WebGLContextEvent b) = js_eq a b
-
-instance PToJSRef WebGLContextEvent where
-  pToJSRef = unWebGLContextEvent
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef WebGLContextEvent where
-  pFromJSRef = WebGLContextEvent
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef WebGLContextEvent where
-  toJSRef = return . unWebGLContextEvent
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef WebGLContextEvent where
-  fromJSRef = return . fmap WebGLContextEvent . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEvent WebGLContextEvent
-instance IsGObject WebGLContextEvent where
-  toGObject = GObject . castRef . unWebGLContextEvent
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = WebGLContextEvent . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToWebGLContextEvent :: IsGObject obj => obj -> WebGLContextEvent
-castToWebGLContextEvent = castTo gTypeWebGLContextEvent "WebGLContextEvent"
-
-foreign import javascript unsafe "window[\"WebGLContextEvent\"]" gTypeWebGLContextEvent' :: JSRef GType
-gTypeWebGLContextEvent = GType gTypeWebGLContextEvent'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.WebGLDebugRendererInfo".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/WebGLDebugRendererInfo Mozilla WebGLDebugRendererInfo documentation>
-newtype WebGLDebugRendererInfo = WebGLDebugRendererInfo { unWebGLDebugRendererInfo :: JSRef WebGLDebugRendererInfo }
-
-instance Eq (WebGLDebugRendererInfo) where
-  (WebGLDebugRendererInfo a) == (WebGLDebugRendererInfo b) = js_eq a b
-
-instance PToJSRef WebGLDebugRendererInfo where
-  pToJSRef = unWebGLDebugRendererInfo
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef WebGLDebugRendererInfo where
-  pFromJSRef = WebGLDebugRendererInfo
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef WebGLDebugRendererInfo where
-  toJSRef = return . unWebGLDebugRendererInfo
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef WebGLDebugRendererInfo where
-  fromJSRef = return . fmap WebGLDebugRendererInfo . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject WebGLDebugRendererInfo where
-  toGObject = GObject . castRef . unWebGLDebugRendererInfo
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = WebGLDebugRendererInfo . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToWebGLDebugRendererInfo :: IsGObject obj => obj -> WebGLDebugRendererInfo
-castToWebGLDebugRendererInfo = castTo gTypeWebGLDebugRendererInfo "WebGLDebugRendererInfo"
-
-foreign import javascript unsafe "window[\"WebGLDebugRendererInfo\"]" gTypeWebGLDebugRendererInfo' :: JSRef GType
-gTypeWebGLDebugRendererInfo = GType gTypeWebGLDebugRendererInfo'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.WebGLDebugShaders".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/WebGLDebugShaders Mozilla WebGLDebugShaders documentation>
-newtype WebGLDebugShaders = WebGLDebugShaders { unWebGLDebugShaders :: JSRef WebGLDebugShaders }
-
-instance Eq (WebGLDebugShaders) where
-  (WebGLDebugShaders a) == (WebGLDebugShaders b) = js_eq a b
-
-instance PToJSRef WebGLDebugShaders where
-  pToJSRef = unWebGLDebugShaders
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef WebGLDebugShaders where
-  pFromJSRef = WebGLDebugShaders
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef WebGLDebugShaders where
-  toJSRef = return . unWebGLDebugShaders
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef WebGLDebugShaders where
-  fromJSRef = return . fmap WebGLDebugShaders . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject WebGLDebugShaders where
-  toGObject = GObject . castRef . unWebGLDebugShaders
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = WebGLDebugShaders . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToWebGLDebugShaders :: IsGObject obj => obj -> WebGLDebugShaders
-castToWebGLDebugShaders = castTo gTypeWebGLDebugShaders "WebGLDebugShaders"
-
-foreign import javascript unsafe "window[\"WebGLDebugShaders\"]" gTypeWebGLDebugShaders' :: JSRef GType
-gTypeWebGLDebugShaders = GType gTypeWebGLDebugShaders'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.WebGLDepthTexture".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/WebGLDepthTexture Mozilla WebGLDepthTexture documentation>
-newtype WebGLDepthTexture = WebGLDepthTexture { unWebGLDepthTexture :: JSRef WebGLDepthTexture }
-
-instance Eq (WebGLDepthTexture) where
-  (WebGLDepthTexture a) == (WebGLDepthTexture b) = js_eq a b
-
-instance PToJSRef WebGLDepthTexture where
-  pToJSRef = unWebGLDepthTexture
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef WebGLDepthTexture where
-  pFromJSRef = WebGLDepthTexture
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef WebGLDepthTexture where
-  toJSRef = return . unWebGLDepthTexture
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef WebGLDepthTexture where
-  fromJSRef = return . fmap WebGLDepthTexture . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject WebGLDepthTexture where
-  toGObject = GObject . castRef . unWebGLDepthTexture
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = WebGLDepthTexture . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToWebGLDepthTexture :: IsGObject obj => obj -> WebGLDepthTexture
-castToWebGLDepthTexture = castTo gTypeWebGLDepthTexture "WebGLDepthTexture"
-
-foreign import javascript unsafe "window[\"WebGLDepthTexture\"]" gTypeWebGLDepthTexture' :: JSRef GType
-gTypeWebGLDepthTexture = GType gTypeWebGLDepthTexture'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.WebGLDrawBuffers".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/WebGLDrawBuffers Mozilla WebGLDrawBuffers documentation>
-newtype WebGLDrawBuffers = WebGLDrawBuffers { unWebGLDrawBuffers :: JSRef WebGLDrawBuffers }
-
-instance Eq (WebGLDrawBuffers) where
-  (WebGLDrawBuffers a) == (WebGLDrawBuffers b) = js_eq a b
-
-instance PToJSRef WebGLDrawBuffers where
-  pToJSRef = unWebGLDrawBuffers
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef WebGLDrawBuffers where
-  pFromJSRef = WebGLDrawBuffers
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef WebGLDrawBuffers where
-  toJSRef = return . unWebGLDrawBuffers
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef WebGLDrawBuffers where
-  fromJSRef = return . fmap WebGLDrawBuffers . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject WebGLDrawBuffers where
-  toGObject = GObject . castRef . unWebGLDrawBuffers
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = WebGLDrawBuffers . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToWebGLDrawBuffers :: IsGObject obj => obj -> WebGLDrawBuffers
-castToWebGLDrawBuffers = castTo gTypeWebGLDrawBuffers "WebGLDrawBuffers"
-
-foreign import javascript unsafe "window[\"WebGLDrawBuffers\"]" gTypeWebGLDrawBuffers' :: JSRef GType
-gTypeWebGLDrawBuffers = GType gTypeWebGLDrawBuffers'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.WebGLFramebuffer".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/WebGLFramebuffer Mozilla WebGLFramebuffer documentation>
-newtype WebGLFramebuffer = WebGLFramebuffer { unWebGLFramebuffer :: JSRef WebGLFramebuffer }
-
-instance Eq (WebGLFramebuffer) where
-  (WebGLFramebuffer a) == (WebGLFramebuffer b) = js_eq a b
-
-instance PToJSRef WebGLFramebuffer where
-  pToJSRef = unWebGLFramebuffer
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef WebGLFramebuffer where
-  pFromJSRef = WebGLFramebuffer
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef WebGLFramebuffer where
-  toJSRef = return . unWebGLFramebuffer
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef WebGLFramebuffer where
-  fromJSRef = return . fmap WebGLFramebuffer . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject WebGLFramebuffer where
-  toGObject = GObject . castRef . unWebGLFramebuffer
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = WebGLFramebuffer . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToWebGLFramebuffer :: IsGObject obj => obj -> WebGLFramebuffer
-castToWebGLFramebuffer = castTo gTypeWebGLFramebuffer "WebGLFramebuffer"
-
-foreign import javascript unsafe "window[\"WebGLFramebuffer\"]" gTypeWebGLFramebuffer' :: JSRef GType
-gTypeWebGLFramebuffer = GType gTypeWebGLFramebuffer'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.WebGLLoseContext".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/WebGLLoseContext Mozilla WebGLLoseContext documentation>
-newtype WebGLLoseContext = WebGLLoseContext { unWebGLLoseContext :: JSRef WebGLLoseContext }
-
-instance Eq (WebGLLoseContext) where
-  (WebGLLoseContext a) == (WebGLLoseContext b) = js_eq a b
-
-instance PToJSRef WebGLLoseContext where
-  pToJSRef = unWebGLLoseContext
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef WebGLLoseContext where
-  pFromJSRef = WebGLLoseContext
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef WebGLLoseContext where
-  toJSRef = return . unWebGLLoseContext
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef WebGLLoseContext where
-  fromJSRef = return . fmap WebGLLoseContext . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject WebGLLoseContext where
-  toGObject = GObject . castRef . unWebGLLoseContext
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = WebGLLoseContext . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToWebGLLoseContext :: IsGObject obj => obj -> WebGLLoseContext
-castToWebGLLoseContext = castTo gTypeWebGLLoseContext "WebGLLoseContext"
-
-foreign import javascript unsafe "window[\"WebGLLoseContext\"]" gTypeWebGLLoseContext' :: JSRef GType
-gTypeWebGLLoseContext = GType gTypeWebGLLoseContext'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.WebGLProgram".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/WebGLProgram Mozilla WebGLProgram documentation>
-newtype WebGLProgram = WebGLProgram { unWebGLProgram :: JSRef WebGLProgram }
-
-instance Eq (WebGLProgram) where
-  (WebGLProgram a) == (WebGLProgram b) = js_eq a b
-
-instance PToJSRef WebGLProgram where
-  pToJSRef = unWebGLProgram
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef WebGLProgram where
-  pFromJSRef = WebGLProgram
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef WebGLProgram where
-  toJSRef = return . unWebGLProgram
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef WebGLProgram where
-  fromJSRef = return . fmap WebGLProgram . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject WebGLProgram where
-  toGObject = GObject . castRef . unWebGLProgram
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = WebGLProgram . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToWebGLProgram :: IsGObject obj => obj -> WebGLProgram
-castToWebGLProgram = castTo gTypeWebGLProgram "WebGLProgram"
-
-foreign import javascript unsafe "window[\"WebGLProgram\"]" gTypeWebGLProgram' :: JSRef GType
-gTypeWebGLProgram = GType gTypeWebGLProgram'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.WebGLQuery".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/WebGLQuery Mozilla WebGLQuery documentation>
-newtype WebGLQuery = WebGLQuery { unWebGLQuery :: JSRef WebGLQuery }
-
-instance Eq (WebGLQuery) where
-  (WebGLQuery a) == (WebGLQuery b) = js_eq a b
-
-instance PToJSRef WebGLQuery where
-  pToJSRef = unWebGLQuery
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef WebGLQuery where
-  pFromJSRef = WebGLQuery
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef WebGLQuery where
-  toJSRef = return . unWebGLQuery
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef WebGLQuery where
-  fromJSRef = return . fmap WebGLQuery . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject WebGLQuery where
-  toGObject = GObject . castRef . unWebGLQuery
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = WebGLQuery . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToWebGLQuery :: IsGObject obj => obj -> WebGLQuery
-castToWebGLQuery = castTo gTypeWebGLQuery "WebGLQuery"
-
-foreign import javascript unsafe "window[\"WebGLQuery\"]" gTypeWebGLQuery' :: JSRef GType
-gTypeWebGLQuery = GType gTypeWebGLQuery'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.WebGLRenderbuffer".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderbuffer Mozilla WebGLRenderbuffer documentation>
-newtype WebGLRenderbuffer = WebGLRenderbuffer { unWebGLRenderbuffer :: JSRef WebGLRenderbuffer }
-
-instance Eq (WebGLRenderbuffer) where
-  (WebGLRenderbuffer a) == (WebGLRenderbuffer b) = js_eq a b
-
-instance PToJSRef WebGLRenderbuffer where
-  pToJSRef = unWebGLRenderbuffer
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef WebGLRenderbuffer where
-  pFromJSRef = WebGLRenderbuffer
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef WebGLRenderbuffer where
-  toJSRef = return . unWebGLRenderbuffer
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef WebGLRenderbuffer where
-  fromJSRef = return . fmap WebGLRenderbuffer . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject WebGLRenderbuffer where
-  toGObject = GObject . castRef . unWebGLRenderbuffer
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = WebGLRenderbuffer . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToWebGLRenderbuffer :: IsGObject obj => obj -> WebGLRenderbuffer
-castToWebGLRenderbuffer = castTo gTypeWebGLRenderbuffer "WebGLRenderbuffer"
-
-foreign import javascript unsafe "window[\"WebGLRenderbuffer\"]" gTypeWebGLRenderbuffer' :: JSRef GType
-gTypeWebGLRenderbuffer = GType gTypeWebGLRenderbuffer'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.WebGLRenderingContext".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.WebGLRenderingContextBase"
---     * "GHCJS.DOM.CanvasRenderingContext"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext Mozilla WebGLRenderingContext documentation>
-newtype WebGLRenderingContext = WebGLRenderingContext { unWebGLRenderingContext :: JSRef WebGLRenderingContext }
-
-instance Eq (WebGLRenderingContext) where
-  (WebGLRenderingContext a) == (WebGLRenderingContext b) = js_eq a b
-
-instance PToJSRef WebGLRenderingContext where
-  pToJSRef = unWebGLRenderingContext
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef WebGLRenderingContext where
-  pFromJSRef = WebGLRenderingContext
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef WebGLRenderingContext where
-  toJSRef = return . unWebGLRenderingContext
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef WebGLRenderingContext where
-  fromJSRef = return . fmap WebGLRenderingContext . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsWebGLRenderingContextBase WebGLRenderingContext
-instance IsCanvasRenderingContext WebGLRenderingContext
-instance IsGObject WebGLRenderingContext where
-  toGObject = GObject . castRef . unWebGLRenderingContext
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = WebGLRenderingContext . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToWebGLRenderingContext :: IsGObject obj => obj -> WebGLRenderingContext
-castToWebGLRenderingContext = castTo gTypeWebGLRenderingContext "WebGLRenderingContext"
-
-foreign import javascript unsafe "window[\"WebGLRenderingContext\"]" gTypeWebGLRenderingContext' :: JSRef GType
-gTypeWebGLRenderingContext = GType gTypeWebGLRenderingContext'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.WebGLRenderingContextBase".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.CanvasRenderingContext"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase Mozilla WebGLRenderingContextBase documentation>
-newtype WebGLRenderingContextBase = WebGLRenderingContextBase { unWebGLRenderingContextBase :: JSRef WebGLRenderingContextBase }
-
-instance Eq (WebGLRenderingContextBase) where
-  (WebGLRenderingContextBase a) == (WebGLRenderingContextBase b) = js_eq a b
-
-instance PToJSRef WebGLRenderingContextBase where
-  pToJSRef = unWebGLRenderingContextBase
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef WebGLRenderingContextBase where
-  pFromJSRef = WebGLRenderingContextBase
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef WebGLRenderingContextBase where
-  toJSRef = return . unWebGLRenderingContextBase
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef WebGLRenderingContextBase where
-  fromJSRef = return . fmap WebGLRenderingContextBase . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsCanvasRenderingContext o => IsWebGLRenderingContextBase o
-toWebGLRenderingContextBase :: IsWebGLRenderingContextBase o => o -> WebGLRenderingContextBase
-toWebGLRenderingContextBase = unsafeCastGObject . toGObject
-
-instance IsWebGLRenderingContextBase WebGLRenderingContextBase
-instance IsCanvasRenderingContext WebGLRenderingContextBase
-instance IsGObject WebGLRenderingContextBase where
-  toGObject = GObject . castRef . unWebGLRenderingContextBase
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = WebGLRenderingContextBase . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToWebGLRenderingContextBase :: IsGObject obj => obj -> WebGLRenderingContextBase
-castToWebGLRenderingContextBase = castTo gTypeWebGLRenderingContextBase "WebGLRenderingContextBase"
-
-foreign import javascript unsafe "window[\"WebGLRenderingContextBase\"]" gTypeWebGLRenderingContextBase' :: JSRef GType
-gTypeWebGLRenderingContextBase = GType gTypeWebGLRenderingContextBase'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.WebGLSampler".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/WebGLSampler Mozilla WebGLSampler documentation>
-newtype WebGLSampler = WebGLSampler { unWebGLSampler :: JSRef WebGLSampler }
-
-instance Eq (WebGLSampler) where
-  (WebGLSampler a) == (WebGLSampler b) = js_eq a b
-
-instance PToJSRef WebGLSampler where
-  pToJSRef = unWebGLSampler
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef WebGLSampler where
-  pFromJSRef = WebGLSampler
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef WebGLSampler where
-  toJSRef = return . unWebGLSampler
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef WebGLSampler where
-  fromJSRef = return . fmap WebGLSampler . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject WebGLSampler where
-  toGObject = GObject . castRef . unWebGLSampler
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = WebGLSampler . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToWebGLSampler :: IsGObject obj => obj -> WebGLSampler
-castToWebGLSampler = castTo gTypeWebGLSampler "WebGLSampler"
-
-foreign import javascript unsafe "window[\"WebGLSampler\"]" gTypeWebGLSampler' :: JSRef GType
-gTypeWebGLSampler = GType gTypeWebGLSampler'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.WebGLShader".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/WebGLShader Mozilla WebGLShader documentation>
-newtype WebGLShader = WebGLShader { unWebGLShader :: JSRef WebGLShader }
-
-instance Eq (WebGLShader) where
-  (WebGLShader a) == (WebGLShader b) = js_eq a b
-
-instance PToJSRef WebGLShader where
-  pToJSRef = unWebGLShader
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef WebGLShader where
-  pFromJSRef = WebGLShader
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef WebGLShader where
-  toJSRef = return . unWebGLShader
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef WebGLShader where
-  fromJSRef = return . fmap WebGLShader . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject WebGLShader where
-  toGObject = GObject . castRef . unWebGLShader
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = WebGLShader . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToWebGLShader :: IsGObject obj => obj -> WebGLShader
-castToWebGLShader = castTo gTypeWebGLShader "WebGLShader"
-
-foreign import javascript unsafe "window[\"WebGLShader\"]" gTypeWebGLShader' :: JSRef GType
-gTypeWebGLShader = GType gTypeWebGLShader'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.WebGLShaderPrecisionFormat".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/WebGLShaderPrecisionFormat Mozilla WebGLShaderPrecisionFormat documentation>
-newtype WebGLShaderPrecisionFormat = WebGLShaderPrecisionFormat { unWebGLShaderPrecisionFormat :: JSRef WebGLShaderPrecisionFormat }
-
-instance Eq (WebGLShaderPrecisionFormat) where
-  (WebGLShaderPrecisionFormat a) == (WebGLShaderPrecisionFormat b) = js_eq a b
-
-instance PToJSRef WebGLShaderPrecisionFormat where
-  pToJSRef = unWebGLShaderPrecisionFormat
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef WebGLShaderPrecisionFormat where
-  pFromJSRef = WebGLShaderPrecisionFormat
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef WebGLShaderPrecisionFormat where
-  toJSRef = return . unWebGLShaderPrecisionFormat
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef WebGLShaderPrecisionFormat where
-  fromJSRef = return . fmap WebGLShaderPrecisionFormat . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject WebGLShaderPrecisionFormat where
-  toGObject = GObject . castRef . unWebGLShaderPrecisionFormat
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = WebGLShaderPrecisionFormat . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToWebGLShaderPrecisionFormat :: IsGObject obj => obj -> WebGLShaderPrecisionFormat
-castToWebGLShaderPrecisionFormat = castTo gTypeWebGLShaderPrecisionFormat "WebGLShaderPrecisionFormat"
-
-foreign import javascript unsafe "window[\"WebGLShaderPrecisionFormat\"]" gTypeWebGLShaderPrecisionFormat' :: JSRef GType
-gTypeWebGLShaderPrecisionFormat = GType gTypeWebGLShaderPrecisionFormat'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.WebGLSync".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/WebGLSync Mozilla WebGLSync documentation>
-newtype WebGLSync = WebGLSync { unWebGLSync :: JSRef WebGLSync }
-
-instance Eq (WebGLSync) where
-  (WebGLSync a) == (WebGLSync b) = js_eq a b
-
-instance PToJSRef WebGLSync where
-  pToJSRef = unWebGLSync
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef WebGLSync where
-  pFromJSRef = WebGLSync
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef WebGLSync where
-  toJSRef = return . unWebGLSync
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef WebGLSync where
-  fromJSRef = return . fmap WebGLSync . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject WebGLSync where
-  toGObject = GObject . castRef . unWebGLSync
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = WebGLSync . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToWebGLSync :: IsGObject obj => obj -> WebGLSync
-castToWebGLSync = castTo gTypeWebGLSync "WebGLSync"
-
-foreign import javascript unsafe "window[\"WebGLSync\"]" gTypeWebGLSync' :: JSRef GType
-gTypeWebGLSync = GType gTypeWebGLSync'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.WebGLTexture".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/WebGLTexture Mozilla WebGLTexture documentation>
-newtype WebGLTexture = WebGLTexture { unWebGLTexture :: JSRef WebGLTexture }
-
-instance Eq (WebGLTexture) where
-  (WebGLTexture a) == (WebGLTexture b) = js_eq a b
-
-instance PToJSRef WebGLTexture where
-  pToJSRef = unWebGLTexture
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef WebGLTexture where
-  pFromJSRef = WebGLTexture
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef WebGLTexture where
-  toJSRef = return . unWebGLTexture
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef WebGLTexture where
-  fromJSRef = return . fmap WebGLTexture . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject WebGLTexture where
-  toGObject = GObject . castRef . unWebGLTexture
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = WebGLTexture . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToWebGLTexture :: IsGObject obj => obj -> WebGLTexture
-castToWebGLTexture = castTo gTypeWebGLTexture "WebGLTexture"
-
-foreign import javascript unsafe "window[\"WebGLTexture\"]" gTypeWebGLTexture' :: JSRef GType
-gTypeWebGLTexture = GType gTypeWebGLTexture'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.WebGLTransformFeedback".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/WebGLTransformFeedback Mozilla WebGLTransformFeedback documentation>
-newtype WebGLTransformFeedback = WebGLTransformFeedback { unWebGLTransformFeedback :: JSRef WebGLTransformFeedback }
-
-instance Eq (WebGLTransformFeedback) where
-  (WebGLTransformFeedback a) == (WebGLTransformFeedback b) = js_eq a b
-
-instance PToJSRef WebGLTransformFeedback where
-  pToJSRef = unWebGLTransformFeedback
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef WebGLTransformFeedback where
-  pFromJSRef = WebGLTransformFeedback
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef WebGLTransformFeedback where
-  toJSRef = return . unWebGLTransformFeedback
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef WebGLTransformFeedback where
-  fromJSRef = return . fmap WebGLTransformFeedback . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject WebGLTransformFeedback where
-  toGObject = GObject . castRef . unWebGLTransformFeedback
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = WebGLTransformFeedback . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToWebGLTransformFeedback :: IsGObject obj => obj -> WebGLTransformFeedback
-castToWebGLTransformFeedback = castTo gTypeWebGLTransformFeedback "WebGLTransformFeedback"
-
-foreign import javascript unsafe "window[\"WebGLTransformFeedback\"]" gTypeWebGLTransformFeedback' :: JSRef GType
-gTypeWebGLTransformFeedback = GType gTypeWebGLTransformFeedback'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.WebGLUniformLocation".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/WebGLUniformLocation Mozilla WebGLUniformLocation documentation>
-newtype WebGLUniformLocation = WebGLUniformLocation { unWebGLUniformLocation :: JSRef WebGLUniformLocation }
-
-instance Eq (WebGLUniformLocation) where
-  (WebGLUniformLocation a) == (WebGLUniformLocation b) = js_eq a b
-
-instance PToJSRef WebGLUniformLocation where
-  pToJSRef = unWebGLUniformLocation
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef WebGLUniformLocation where
-  pFromJSRef = WebGLUniformLocation
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef WebGLUniformLocation where
-  toJSRef = return . unWebGLUniformLocation
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef WebGLUniformLocation where
-  fromJSRef = return . fmap WebGLUniformLocation . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject WebGLUniformLocation where
-  toGObject = GObject . castRef . unWebGLUniformLocation
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = WebGLUniformLocation . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToWebGLUniformLocation :: IsGObject obj => obj -> WebGLUniformLocation
-castToWebGLUniformLocation = castTo gTypeWebGLUniformLocation "WebGLUniformLocation"
-
-foreign import javascript unsafe "window[\"WebGLUniformLocation\"]" gTypeWebGLUniformLocation' :: JSRef GType
-gTypeWebGLUniformLocation = GType gTypeWebGLUniformLocation'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.WebGLVertexArrayObject".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/WebGLVertexArrayObject Mozilla WebGLVertexArrayObject documentation>
-newtype WebGLVertexArrayObject = WebGLVertexArrayObject { unWebGLVertexArrayObject :: JSRef WebGLVertexArrayObject }
-
-instance Eq (WebGLVertexArrayObject) where
-  (WebGLVertexArrayObject a) == (WebGLVertexArrayObject b) = js_eq a b
-
-instance PToJSRef WebGLVertexArrayObject where
-  pToJSRef = unWebGLVertexArrayObject
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef WebGLVertexArrayObject where
-  pFromJSRef = WebGLVertexArrayObject
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef WebGLVertexArrayObject where
-  toJSRef = return . unWebGLVertexArrayObject
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef WebGLVertexArrayObject where
-  fromJSRef = return . fmap WebGLVertexArrayObject . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject WebGLVertexArrayObject where
-  toGObject = GObject . castRef . unWebGLVertexArrayObject
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = WebGLVertexArrayObject . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToWebGLVertexArrayObject :: IsGObject obj => obj -> WebGLVertexArrayObject
-castToWebGLVertexArrayObject = castTo gTypeWebGLVertexArrayObject "WebGLVertexArrayObject"
-
-foreign import javascript unsafe "window[\"WebGLVertexArrayObject\"]" gTypeWebGLVertexArrayObject' :: JSRef GType
-gTypeWebGLVertexArrayObject = GType gTypeWebGLVertexArrayObject'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.WebGLVertexArrayObjectOES".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/WebGLVertexArrayObjectOES Mozilla WebGLVertexArrayObjectOES documentation>
-newtype WebGLVertexArrayObjectOES = WebGLVertexArrayObjectOES { unWebGLVertexArrayObjectOES :: JSRef WebGLVertexArrayObjectOES }
-
-instance Eq (WebGLVertexArrayObjectOES) where
-  (WebGLVertexArrayObjectOES a) == (WebGLVertexArrayObjectOES b) = js_eq a b
-
-instance PToJSRef WebGLVertexArrayObjectOES where
-  pToJSRef = unWebGLVertexArrayObjectOES
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef WebGLVertexArrayObjectOES where
-  pFromJSRef = WebGLVertexArrayObjectOES
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef WebGLVertexArrayObjectOES where
-  toJSRef = return . unWebGLVertexArrayObjectOES
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef WebGLVertexArrayObjectOES where
-  fromJSRef = return . fmap WebGLVertexArrayObjectOES . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject WebGLVertexArrayObjectOES where
-  toGObject = GObject . castRef . unWebGLVertexArrayObjectOES
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = WebGLVertexArrayObjectOES . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToWebGLVertexArrayObjectOES :: IsGObject obj => obj -> WebGLVertexArrayObjectOES
-castToWebGLVertexArrayObjectOES = castTo gTypeWebGLVertexArrayObjectOES "WebGLVertexArrayObjectOES"
-
-foreign import javascript unsafe "window[\"WebGLVertexArrayObjectOES\"]" gTypeWebGLVertexArrayObjectOES' :: JSRef GType
-gTypeWebGLVertexArrayObjectOES = GType gTypeWebGLVertexArrayObjectOES'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.WebKitAnimationEvent".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.Event"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/WebKitAnimationEvent Mozilla WebKitAnimationEvent documentation>
-newtype WebKitAnimationEvent = WebKitAnimationEvent { unWebKitAnimationEvent :: JSRef WebKitAnimationEvent }
-
-instance Eq (WebKitAnimationEvent) where
-  (WebKitAnimationEvent a) == (WebKitAnimationEvent b) = js_eq a b
-
-instance PToJSRef WebKitAnimationEvent where
-  pToJSRef = unWebKitAnimationEvent
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef WebKitAnimationEvent where
-  pFromJSRef = WebKitAnimationEvent
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef WebKitAnimationEvent where
-  toJSRef = return . unWebKitAnimationEvent
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef WebKitAnimationEvent where
-  fromJSRef = return . fmap WebKitAnimationEvent . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEvent WebKitAnimationEvent
-instance IsGObject WebKitAnimationEvent where
-  toGObject = GObject . castRef . unWebKitAnimationEvent
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = WebKitAnimationEvent . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToWebKitAnimationEvent :: IsGObject obj => obj -> WebKitAnimationEvent
-castToWebKitAnimationEvent = castTo gTypeWebKitAnimationEvent "WebKitAnimationEvent"
-
-foreign import javascript unsafe "window[\"WebKitAnimationEvent\"]" gTypeWebKitAnimationEvent' :: JSRef GType
-gTypeWebKitAnimationEvent = GType gTypeWebKitAnimationEvent'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.WebKitCSSFilterValue".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.CSSValueList"
---     * "GHCJS.DOM.CSSValue"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSFilterValue Mozilla WebKitCSSFilterValue documentation>
-newtype WebKitCSSFilterValue = WebKitCSSFilterValue { unWebKitCSSFilterValue :: JSRef WebKitCSSFilterValue }
-
-instance Eq (WebKitCSSFilterValue) where
-  (WebKitCSSFilterValue a) == (WebKitCSSFilterValue b) = js_eq a b
-
-instance PToJSRef WebKitCSSFilterValue where
-  pToJSRef = unWebKitCSSFilterValue
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef WebKitCSSFilterValue where
-  pFromJSRef = WebKitCSSFilterValue
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef WebKitCSSFilterValue where
-  toJSRef = return . unWebKitCSSFilterValue
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef WebKitCSSFilterValue where
-  fromJSRef = return . fmap WebKitCSSFilterValue . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsCSSValueList WebKitCSSFilterValue
-instance IsCSSValue WebKitCSSFilterValue
-instance IsGObject WebKitCSSFilterValue where
-  toGObject = GObject . castRef . unWebKitCSSFilterValue
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = WebKitCSSFilterValue . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToWebKitCSSFilterValue :: IsGObject obj => obj -> WebKitCSSFilterValue
-castToWebKitCSSFilterValue = castTo gTypeWebKitCSSFilterValue "WebKitCSSFilterValue"
-
-foreign import javascript unsafe "window[\"WebKitCSSFilterValue\"]" gTypeWebKitCSSFilterValue' :: JSRef GType
-gTypeWebKitCSSFilterValue = GType gTypeWebKitCSSFilterValue'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.WebKitCSSMatrix".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSMatrix Mozilla WebKitCSSMatrix documentation>
-newtype WebKitCSSMatrix = WebKitCSSMatrix { unWebKitCSSMatrix :: JSRef WebKitCSSMatrix }
-
-instance Eq (WebKitCSSMatrix) where
-  (WebKitCSSMatrix a) == (WebKitCSSMatrix b) = js_eq a b
-
-instance PToJSRef WebKitCSSMatrix where
-  pToJSRef = unWebKitCSSMatrix
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef WebKitCSSMatrix where
-  pFromJSRef = WebKitCSSMatrix
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef WebKitCSSMatrix where
-  toJSRef = return . unWebKitCSSMatrix
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef WebKitCSSMatrix where
-  fromJSRef = return . fmap WebKitCSSMatrix . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject WebKitCSSMatrix where
-  toGObject = GObject . castRef . unWebKitCSSMatrix
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = WebKitCSSMatrix . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToWebKitCSSMatrix :: IsGObject obj => obj -> WebKitCSSMatrix
-castToWebKitCSSMatrix = castTo gTypeWebKitCSSMatrix "WebKitCSSMatrix"
-
-foreign import javascript unsafe "window[\"WebKitCSSMatrix\"]" gTypeWebKitCSSMatrix' :: JSRef GType
-gTypeWebKitCSSMatrix = GType gTypeWebKitCSSMatrix'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.WebKitCSSRegionRule".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.CSSRule"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSRegionRule Mozilla WebKitCSSRegionRule documentation>
-newtype WebKitCSSRegionRule = WebKitCSSRegionRule { unWebKitCSSRegionRule :: JSRef WebKitCSSRegionRule }
-
-instance Eq (WebKitCSSRegionRule) where
-  (WebKitCSSRegionRule a) == (WebKitCSSRegionRule b) = js_eq a b
-
-instance PToJSRef WebKitCSSRegionRule where
-  pToJSRef = unWebKitCSSRegionRule
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef WebKitCSSRegionRule where
-  pFromJSRef = WebKitCSSRegionRule
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef WebKitCSSRegionRule where
-  toJSRef = return . unWebKitCSSRegionRule
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef WebKitCSSRegionRule where
-  fromJSRef = return . fmap WebKitCSSRegionRule . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsCSSRule WebKitCSSRegionRule
-instance IsGObject WebKitCSSRegionRule where
-  toGObject = GObject . castRef . unWebKitCSSRegionRule
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = WebKitCSSRegionRule . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToWebKitCSSRegionRule :: IsGObject obj => obj -> WebKitCSSRegionRule
-castToWebKitCSSRegionRule = castTo gTypeWebKitCSSRegionRule "WebKitCSSRegionRule"
-
-foreign import javascript unsafe "window[\"WebKitCSSRegionRule\"]" gTypeWebKitCSSRegionRule' :: JSRef GType
-gTypeWebKitCSSRegionRule = GType gTypeWebKitCSSRegionRule'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.WebKitCSSTransformValue".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.CSSValueList"
---     * "GHCJS.DOM.CSSValue"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSTransformValue Mozilla WebKitCSSTransformValue documentation>
-newtype WebKitCSSTransformValue = WebKitCSSTransformValue { unWebKitCSSTransformValue :: JSRef WebKitCSSTransformValue }
-
-instance Eq (WebKitCSSTransformValue) where
-  (WebKitCSSTransformValue a) == (WebKitCSSTransformValue b) = js_eq a b
-
-instance PToJSRef WebKitCSSTransformValue where
-  pToJSRef = unWebKitCSSTransformValue
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef WebKitCSSTransformValue where
-  pFromJSRef = WebKitCSSTransformValue
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef WebKitCSSTransformValue where
-  toJSRef = return . unWebKitCSSTransformValue
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef WebKitCSSTransformValue where
-  fromJSRef = return . fmap WebKitCSSTransformValue . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsCSSValueList WebKitCSSTransformValue
-instance IsCSSValue WebKitCSSTransformValue
-instance IsGObject WebKitCSSTransformValue where
-  toGObject = GObject . castRef . unWebKitCSSTransformValue
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = WebKitCSSTransformValue . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToWebKitCSSTransformValue :: IsGObject obj => obj -> WebKitCSSTransformValue
-castToWebKitCSSTransformValue = castTo gTypeWebKitCSSTransformValue "WebKitCSSTransformValue"
-
-foreign import javascript unsafe "window[\"WebKitCSSTransformValue\"]" gTypeWebKitCSSTransformValue' :: JSRef GType
-gTypeWebKitCSSTransformValue = GType gTypeWebKitCSSTransformValue'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.WebKitCSSViewportRule".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.CSSRule"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSViewportRule Mozilla WebKitCSSViewportRule documentation>
-newtype WebKitCSSViewportRule = WebKitCSSViewportRule { unWebKitCSSViewportRule :: JSRef WebKitCSSViewportRule }
-
-instance Eq (WebKitCSSViewportRule) where
-  (WebKitCSSViewportRule a) == (WebKitCSSViewportRule b) = js_eq a b
-
-instance PToJSRef WebKitCSSViewportRule where
-  pToJSRef = unWebKitCSSViewportRule
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef WebKitCSSViewportRule where
-  pFromJSRef = WebKitCSSViewportRule
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef WebKitCSSViewportRule where
-  toJSRef = return . unWebKitCSSViewportRule
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef WebKitCSSViewportRule where
-  fromJSRef = return . fmap WebKitCSSViewportRule . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsCSSRule WebKitCSSViewportRule
-instance IsGObject WebKitCSSViewportRule where
-  toGObject = GObject . castRef . unWebKitCSSViewportRule
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = WebKitCSSViewportRule . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToWebKitCSSViewportRule :: IsGObject obj => obj -> WebKitCSSViewportRule
-castToWebKitCSSViewportRule = castTo gTypeWebKitCSSViewportRule "WebKitCSSViewportRule"
-
-foreign import javascript unsafe "window[\"WebKitCSSViewportRule\"]" gTypeWebKitCSSViewportRule' :: JSRef GType
-gTypeWebKitCSSViewportRule = GType gTypeWebKitCSSViewportRule'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.WebKitNamedFlow".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/WebKitNamedFlow Mozilla WebKitNamedFlow documentation>
-newtype WebKitNamedFlow = WebKitNamedFlow { unWebKitNamedFlow :: JSRef WebKitNamedFlow }
-
-instance Eq (WebKitNamedFlow) where
-  (WebKitNamedFlow a) == (WebKitNamedFlow b) = js_eq a b
-
-instance PToJSRef WebKitNamedFlow where
-  pToJSRef = unWebKitNamedFlow
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef WebKitNamedFlow where
-  pFromJSRef = WebKitNamedFlow
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef WebKitNamedFlow where
-  toJSRef = return . unWebKitNamedFlow
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef WebKitNamedFlow where
-  fromJSRef = return . fmap WebKitNamedFlow . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEventTarget WebKitNamedFlow
-instance IsGObject WebKitNamedFlow where
-  toGObject = GObject . castRef . unWebKitNamedFlow
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = WebKitNamedFlow . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToWebKitNamedFlow :: IsGObject obj => obj -> WebKitNamedFlow
-castToWebKitNamedFlow = castTo gTypeWebKitNamedFlow "WebKitNamedFlow"
-
-foreign import javascript unsafe "window[\"WebKitNamedFlow\"]" gTypeWebKitNamedFlow' :: JSRef GType
-gTypeWebKitNamedFlow = GType gTypeWebKitNamedFlow'
-#else
-type IsWebKitNamedFlow o = WebKitNamedFlowClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.WebKitNamespace".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/WebKitNamespace Mozilla WebKitNamespace documentation>
-newtype WebKitNamespace = WebKitNamespace { unWebKitNamespace :: JSRef WebKitNamespace }
-
-instance Eq (WebKitNamespace) where
-  (WebKitNamespace a) == (WebKitNamespace b) = js_eq a b
-
-instance PToJSRef WebKitNamespace where
-  pToJSRef = unWebKitNamespace
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef WebKitNamespace where
-  pFromJSRef = WebKitNamespace
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef WebKitNamespace where
-  toJSRef = return . unWebKitNamespace
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef WebKitNamespace where
-  fromJSRef = return . fmap WebKitNamespace . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject WebKitNamespace where
-  toGObject = GObject . castRef . unWebKitNamespace
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = WebKitNamespace . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToWebKitNamespace :: IsGObject obj => obj -> WebKitNamespace
-castToWebKitNamespace = castTo gTypeWebKitNamespace "WebKitNamespace"
-
-foreign import javascript unsafe "window[\"WebKitNamespace\"]" gTypeWebKitNamespace' :: JSRef GType
-gTypeWebKitNamespace = GType gTypeWebKitNamespace'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.WebKitPlaybackTargetAvailabilityEvent".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.Event"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/WebKitPlaybackTargetAvailabilityEvent Mozilla WebKitPlaybackTargetAvailabilityEvent documentation>
-newtype WebKitPlaybackTargetAvailabilityEvent = WebKitPlaybackTargetAvailabilityEvent { unWebKitPlaybackTargetAvailabilityEvent :: JSRef WebKitPlaybackTargetAvailabilityEvent }
-
-instance Eq (WebKitPlaybackTargetAvailabilityEvent) where
-  (WebKitPlaybackTargetAvailabilityEvent a) == (WebKitPlaybackTargetAvailabilityEvent b) = js_eq a b
-
-instance PToJSRef WebKitPlaybackTargetAvailabilityEvent where
-  pToJSRef = unWebKitPlaybackTargetAvailabilityEvent
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef WebKitPlaybackTargetAvailabilityEvent where
-  pFromJSRef = WebKitPlaybackTargetAvailabilityEvent
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef WebKitPlaybackTargetAvailabilityEvent where
-  toJSRef = return . unWebKitPlaybackTargetAvailabilityEvent
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef WebKitPlaybackTargetAvailabilityEvent where
-  fromJSRef = return . fmap WebKitPlaybackTargetAvailabilityEvent . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEvent WebKitPlaybackTargetAvailabilityEvent
-instance IsGObject WebKitPlaybackTargetAvailabilityEvent where
-  toGObject = GObject . castRef . unWebKitPlaybackTargetAvailabilityEvent
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = WebKitPlaybackTargetAvailabilityEvent . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToWebKitPlaybackTargetAvailabilityEvent :: IsGObject obj => obj -> WebKitPlaybackTargetAvailabilityEvent
-castToWebKitPlaybackTargetAvailabilityEvent = castTo gTypeWebKitPlaybackTargetAvailabilityEvent "WebKitPlaybackTargetAvailabilityEvent"
-
-foreign import javascript unsafe "window[\"WebKitPlaybackTargetAvailabilityEvent\"]" gTypeWebKitPlaybackTargetAvailabilityEvent' :: JSRef GType
-gTypeWebKitPlaybackTargetAvailabilityEvent = GType gTypeWebKitPlaybackTargetAvailabilityEvent'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.WebKitPoint".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/WebKitPoint Mozilla WebKitPoint documentation>
-newtype WebKitPoint = WebKitPoint { unWebKitPoint :: JSRef WebKitPoint }
-
-instance Eq (WebKitPoint) where
-  (WebKitPoint a) == (WebKitPoint b) = js_eq a b
-
-instance PToJSRef WebKitPoint where
-  pToJSRef = unWebKitPoint
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef WebKitPoint where
-  pFromJSRef = WebKitPoint
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef WebKitPoint where
-  toJSRef = return . unWebKitPoint
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef WebKitPoint where
-  fromJSRef = return . fmap WebKitPoint . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject WebKitPoint where
-  toGObject = GObject . castRef . unWebKitPoint
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = WebKitPoint . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToWebKitPoint :: IsGObject obj => obj -> WebKitPoint
-castToWebKitPoint = castTo gTypeWebKitPoint "WebKitPoint"
-
-foreign import javascript unsafe "window[\"WebKitPoint\"]" gTypeWebKitPoint' :: JSRef GType
-gTypeWebKitPoint = GType gTypeWebKitPoint'
-#else
-type IsWebKitPoint o = WebKitPointClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.WebKitTransitionEvent".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.Event"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/WebKitTransitionEvent Mozilla WebKitTransitionEvent documentation>
-newtype WebKitTransitionEvent = WebKitTransitionEvent { unWebKitTransitionEvent :: JSRef WebKitTransitionEvent }
-
-instance Eq (WebKitTransitionEvent) where
-  (WebKitTransitionEvent a) == (WebKitTransitionEvent b) = js_eq a b
-
-instance PToJSRef WebKitTransitionEvent where
-  pToJSRef = unWebKitTransitionEvent
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef WebKitTransitionEvent where
-  pFromJSRef = WebKitTransitionEvent
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef WebKitTransitionEvent where
-  toJSRef = return . unWebKitTransitionEvent
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef WebKitTransitionEvent where
-  fromJSRef = return . fmap WebKitTransitionEvent . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEvent WebKitTransitionEvent
-instance IsGObject WebKitTransitionEvent where
-  toGObject = GObject . castRef . unWebKitTransitionEvent
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = WebKitTransitionEvent . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToWebKitTransitionEvent :: IsGObject obj => obj -> WebKitTransitionEvent
-castToWebKitTransitionEvent = castTo gTypeWebKitTransitionEvent "WebKitTransitionEvent"
-
-foreign import javascript unsafe "window[\"WebKitTransitionEvent\"]" gTypeWebKitTransitionEvent' :: JSRef GType
-gTypeWebKitTransitionEvent = GType gTypeWebKitTransitionEvent'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.WebSocket".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/WebSocket Mozilla WebSocket documentation>
-newtype WebSocket = WebSocket { unWebSocket :: JSRef WebSocket }
-
-instance Eq (WebSocket) where
-  (WebSocket a) == (WebSocket b) = js_eq a b
-
-instance PToJSRef WebSocket where
-  pToJSRef = unWebSocket
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef WebSocket where
-  pFromJSRef = WebSocket
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef WebSocket where
-  toJSRef = return . unWebSocket
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef WebSocket where
-  fromJSRef = return . fmap WebSocket . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEventTarget WebSocket
-instance IsGObject WebSocket where
-  toGObject = GObject . castRef . unWebSocket
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = WebSocket . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToWebSocket :: IsGObject obj => obj -> WebSocket
-castToWebSocket = castTo gTypeWebSocket "WebSocket"
-
-foreign import javascript unsafe "window[\"WebSocket\"]" gTypeWebSocket' :: JSRef GType
-gTypeWebSocket = GType gTypeWebSocket'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.WheelEvent".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.MouseEvent"
---     * "GHCJS.DOM.UIEvent"
---     * "GHCJS.DOM.Event"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/WheelEvent Mozilla WheelEvent documentation>
-newtype WheelEvent = WheelEvent { unWheelEvent :: JSRef WheelEvent }
-
-instance Eq (WheelEvent) where
-  (WheelEvent a) == (WheelEvent b) = js_eq a b
-
-instance PToJSRef WheelEvent where
-  pToJSRef = unWheelEvent
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef WheelEvent where
-  pFromJSRef = WheelEvent
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef WheelEvent where
-  toJSRef = return . unWheelEvent
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef WheelEvent where
-  fromJSRef = return . fmap WheelEvent . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsMouseEvent WheelEvent
-instance IsUIEvent WheelEvent
-instance IsEvent WheelEvent
-instance IsGObject WheelEvent where
-  toGObject = GObject . castRef . unWheelEvent
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = WheelEvent . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToWheelEvent :: IsGObject obj => obj -> WheelEvent
-castToWheelEvent = castTo gTypeWheelEvent "WheelEvent"
-
-foreign import javascript unsafe "window[\"WheelEvent\"]" gTypeWheelEvent' :: JSRef GType
-gTypeWheelEvent = GType gTypeWheelEvent'
-#else
-#ifndef USE_OLD_WEBKIT
-type IsWheelEvent o = WheelEventClass o
-#endif
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.Window".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/Window Mozilla Window documentation>
-newtype Window = Window { unWindow :: JSRef Window }
-
-instance Eq (Window) where
-  (Window a) == (Window b) = js_eq a b
-
-instance PToJSRef Window where
-  pToJSRef = unWindow
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef Window where
-  pFromJSRef = Window
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef Window where
-  toJSRef = return . unWindow
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef Window where
-  fromJSRef = return . fmap Window . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEventTarget Window
-instance IsGObject Window where
-  toGObject = GObject . castRef . unWindow
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = Window . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToWindow :: IsGObject obj => obj -> Window
-castToWindow = castTo gTypeWindow "Window"
-
-foreign import javascript unsafe "window[\"Window\"]" gTypeWindow' :: JSRef GType
-gTypeWindow = GType gTypeWindow'
-#else
-type IsWindow o = WindowClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.WindowBase64".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64 Mozilla WindowBase64 documentation>
-newtype WindowBase64 = WindowBase64 { unWindowBase64 :: JSRef WindowBase64 }
-
-instance Eq (WindowBase64) where
-  (WindowBase64 a) == (WindowBase64 b) = js_eq a b
-
-instance PToJSRef WindowBase64 where
-  pToJSRef = unWindowBase64
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef WindowBase64 where
-  pFromJSRef = WindowBase64
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef WindowBase64 where
-  toJSRef = return . unWindowBase64
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef WindowBase64 where
-  fromJSRef = return . fmap WindowBase64 . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject WindowBase64 where
-  toGObject = GObject . castRef . unWindowBase64
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = WindowBase64 . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToWindowBase64 :: IsGObject obj => obj -> WindowBase64
-castToWindowBase64 = castTo gTypeWindowBase64 "WindowBase64"
-
-foreign import javascript unsafe "window[\"WindowBase64\"]" gTypeWindowBase64' :: JSRef GType
-gTypeWindowBase64 = GType gTypeWindowBase64'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.WindowTimers".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers Mozilla WindowTimers documentation>
-newtype WindowTimers = WindowTimers { unWindowTimers :: JSRef WindowTimers }
-
-instance Eq (WindowTimers) where
-  (WindowTimers a) == (WindowTimers b) = js_eq a b
-
-instance PToJSRef WindowTimers where
-  pToJSRef = unWindowTimers
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef WindowTimers where
-  pFromJSRef = WindowTimers
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef WindowTimers where
-  toJSRef = return . unWindowTimers
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef WindowTimers where
-  fromJSRef = return . fmap WindowTimers . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject WindowTimers where
-  toGObject = GObject . castRef . unWindowTimers
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = WindowTimers . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToWindowTimers :: IsGObject obj => obj -> WindowTimers
-castToWindowTimers = castTo gTypeWindowTimers "WindowTimers"
-
-foreign import javascript unsafe "window[\"WindowTimers\"]" gTypeWindowTimers' :: JSRef GType
-gTypeWindowTimers = GType gTypeWindowTimers'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.Worker".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/Worker Mozilla Worker documentation>
-newtype Worker = Worker { unWorker :: JSRef Worker }
-
-instance Eq (Worker) where
-  (Worker a) == (Worker b) = js_eq a b
-
-instance PToJSRef Worker where
-  pToJSRef = unWorker
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef Worker where
-  pFromJSRef = Worker
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef Worker where
-  toJSRef = return . unWorker
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef Worker where
-  fromJSRef = return . fmap Worker . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEventTarget Worker
-instance IsGObject Worker where
-  toGObject = GObject . castRef . unWorker
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = Worker . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToWorker :: IsGObject obj => obj -> Worker
-castToWorker = castTo gTypeWorker "Worker"
-
-foreign import javascript unsafe "window[\"Worker\"]" gTypeWorker' :: JSRef GType
-gTypeWorker = GType gTypeWorker'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.WorkerGlobalScope".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/WorkerGlobalScope Mozilla WorkerGlobalScope documentation>
-newtype WorkerGlobalScope = WorkerGlobalScope { unWorkerGlobalScope :: JSRef WorkerGlobalScope }
-
-instance Eq (WorkerGlobalScope) where
-  (WorkerGlobalScope a) == (WorkerGlobalScope b) = js_eq a b
-
-instance PToJSRef WorkerGlobalScope where
-  pToJSRef = unWorkerGlobalScope
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef WorkerGlobalScope where
-  pFromJSRef = WorkerGlobalScope
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef WorkerGlobalScope where
-  toJSRef = return . unWorkerGlobalScope
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef WorkerGlobalScope where
-  fromJSRef = return . fmap WorkerGlobalScope . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-class IsEventTarget o => IsWorkerGlobalScope o
-toWorkerGlobalScope :: IsWorkerGlobalScope o => o -> WorkerGlobalScope
-toWorkerGlobalScope = unsafeCastGObject . toGObject
-
-instance IsWorkerGlobalScope WorkerGlobalScope
-instance IsEventTarget WorkerGlobalScope
-instance IsGObject WorkerGlobalScope where
-  toGObject = GObject . castRef . unWorkerGlobalScope
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = WorkerGlobalScope . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToWorkerGlobalScope :: IsGObject obj => obj -> WorkerGlobalScope
-castToWorkerGlobalScope = castTo gTypeWorkerGlobalScope "WorkerGlobalScope"
-
-foreign import javascript unsafe "window[\"WorkerGlobalScope\"]" gTypeWorkerGlobalScope' :: JSRef GType
-gTypeWorkerGlobalScope = GType gTypeWorkerGlobalScope'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.WorkerLocation".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/WorkerLocation Mozilla WorkerLocation documentation>
-newtype WorkerLocation = WorkerLocation { unWorkerLocation :: JSRef WorkerLocation }
-
-instance Eq (WorkerLocation) where
-  (WorkerLocation a) == (WorkerLocation b) = js_eq a b
-
-instance PToJSRef WorkerLocation where
-  pToJSRef = unWorkerLocation
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef WorkerLocation where
-  pFromJSRef = WorkerLocation
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef WorkerLocation where
-  toJSRef = return . unWorkerLocation
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef WorkerLocation where
-  fromJSRef = return . fmap WorkerLocation . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject WorkerLocation where
-  toGObject = GObject . castRef . unWorkerLocation
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = WorkerLocation . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToWorkerLocation :: IsGObject obj => obj -> WorkerLocation
-castToWorkerLocation = castTo gTypeWorkerLocation "WorkerLocation"
-
-foreign import javascript unsafe "window[\"WorkerLocation\"]" gTypeWorkerLocation' :: JSRef GType
-gTypeWorkerLocation = GType gTypeWorkerLocation'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.WorkerNavigator".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/WorkerNavigator Mozilla WorkerNavigator documentation>
-newtype WorkerNavigator = WorkerNavigator { unWorkerNavigator :: JSRef WorkerNavigator }
-
-instance Eq (WorkerNavigator) where
-  (WorkerNavigator a) == (WorkerNavigator b) = js_eq a b
-
-instance PToJSRef WorkerNavigator where
-  pToJSRef = unWorkerNavigator
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef WorkerNavigator where
-  pFromJSRef = WorkerNavigator
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef WorkerNavigator where
-  toJSRef = return . unWorkerNavigator
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef WorkerNavigator where
-  fromJSRef = return . fmap WorkerNavigator . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject WorkerNavigator where
-  toGObject = GObject . castRef . unWorkerNavigator
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = WorkerNavigator . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToWorkerNavigator :: IsGObject obj => obj -> WorkerNavigator
-castToWorkerNavigator = castTo gTypeWorkerNavigator "WorkerNavigator"
-
-foreign import javascript unsafe "window[\"WorkerNavigator\"]" gTypeWorkerNavigator' :: JSRef GType
-gTypeWorkerNavigator = GType gTypeWorkerNavigator'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.XMLHttpRequest".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest Mozilla XMLHttpRequest documentation>
-newtype XMLHttpRequest = XMLHttpRequest { unXMLHttpRequest :: JSRef XMLHttpRequest }
-
-instance Eq (XMLHttpRequest) where
-  (XMLHttpRequest a) == (XMLHttpRequest b) = js_eq a b
-
-instance PToJSRef XMLHttpRequest where
-  pToJSRef = unXMLHttpRequest
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef XMLHttpRequest where
-  pFromJSRef = XMLHttpRequest
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef XMLHttpRequest where
-  toJSRef = return . unXMLHttpRequest
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef XMLHttpRequest where
-  fromJSRef = return . fmap XMLHttpRequest . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEventTarget XMLHttpRequest
-instance IsGObject XMLHttpRequest where
-  toGObject = GObject . castRef . unXMLHttpRequest
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = XMLHttpRequest . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToXMLHttpRequest :: IsGObject obj => obj -> XMLHttpRequest
-castToXMLHttpRequest = castTo gTypeXMLHttpRequest "XMLHttpRequest"
-
-foreign import javascript unsafe "window[\"XMLHttpRequest\"]" gTypeXMLHttpRequest' :: JSRef GType
-gTypeXMLHttpRequest = GType gTypeXMLHttpRequest'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.XMLHttpRequestProgressEvent".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.ProgressEvent"
---     * "GHCJS.DOM.Event"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequestProgressEvent Mozilla XMLHttpRequestProgressEvent documentation>
-newtype XMLHttpRequestProgressEvent = XMLHttpRequestProgressEvent { unXMLHttpRequestProgressEvent :: JSRef XMLHttpRequestProgressEvent }
-
-instance Eq (XMLHttpRequestProgressEvent) where
-  (XMLHttpRequestProgressEvent a) == (XMLHttpRequestProgressEvent b) = js_eq a b
-
-instance PToJSRef XMLHttpRequestProgressEvent where
-  pToJSRef = unXMLHttpRequestProgressEvent
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef XMLHttpRequestProgressEvent where
-  pFromJSRef = XMLHttpRequestProgressEvent
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef XMLHttpRequestProgressEvent where
-  toJSRef = return . unXMLHttpRequestProgressEvent
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef XMLHttpRequestProgressEvent where
-  fromJSRef = return . fmap XMLHttpRequestProgressEvent . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsProgressEvent XMLHttpRequestProgressEvent
-instance IsEvent XMLHttpRequestProgressEvent
-instance IsGObject XMLHttpRequestProgressEvent where
-  toGObject = GObject . castRef . unXMLHttpRequestProgressEvent
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = XMLHttpRequestProgressEvent . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToXMLHttpRequestProgressEvent :: IsGObject obj => obj -> XMLHttpRequestProgressEvent
-castToXMLHttpRequestProgressEvent = castTo gTypeXMLHttpRequestProgressEvent "XMLHttpRequestProgressEvent"
-
-foreign import javascript unsafe "window[\"XMLHttpRequestProgressEvent\"]" gTypeXMLHttpRequestProgressEvent' :: JSRef GType
-gTypeXMLHttpRequestProgressEvent = GType gTypeXMLHttpRequestProgressEvent'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.XMLHttpRequestUpload".
--- Base interface functions are in:
---
---     * "GHCJS.DOM.EventTarget"
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequestUpload Mozilla XMLHttpRequestUpload documentation>
-newtype XMLHttpRequestUpload = XMLHttpRequestUpload { unXMLHttpRequestUpload :: JSRef XMLHttpRequestUpload }
-
-instance Eq (XMLHttpRequestUpload) where
-  (XMLHttpRequestUpload a) == (XMLHttpRequestUpload b) = js_eq a b
-
-instance PToJSRef XMLHttpRequestUpload where
-  pToJSRef = unXMLHttpRequestUpload
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef XMLHttpRequestUpload where
-  pFromJSRef = XMLHttpRequestUpload
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef XMLHttpRequestUpload where
-  toJSRef = return . unXMLHttpRequestUpload
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef XMLHttpRequestUpload where
-  fromJSRef = return . fmap XMLHttpRequestUpload . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsEventTarget XMLHttpRequestUpload
-instance IsGObject XMLHttpRequestUpload where
-  toGObject = GObject . castRef . unXMLHttpRequestUpload
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = XMLHttpRequestUpload . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToXMLHttpRequestUpload :: IsGObject obj => obj -> XMLHttpRequestUpload
-castToXMLHttpRequestUpload = castTo gTypeXMLHttpRequestUpload "XMLHttpRequestUpload"
-
-foreign import javascript unsafe "window[\"XMLHttpRequestUpload\"]" gTypeXMLHttpRequestUpload' :: JSRef GType
-gTypeXMLHttpRequestUpload = GType gTypeXMLHttpRequestUpload'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.XMLSerializer".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/XMLSerializer Mozilla XMLSerializer documentation>
-newtype XMLSerializer = XMLSerializer { unXMLSerializer :: JSRef XMLSerializer }
-
-instance Eq (XMLSerializer) where
-  (XMLSerializer a) == (XMLSerializer b) = js_eq a b
-
-instance PToJSRef XMLSerializer where
-  pToJSRef = unXMLSerializer
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef XMLSerializer where
-  pFromJSRef = XMLSerializer
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef XMLSerializer where
-  toJSRef = return . unXMLSerializer
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef XMLSerializer where
-  fromJSRef = return . fmap XMLSerializer . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject XMLSerializer where
-  toGObject = GObject . castRef . unXMLSerializer
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = XMLSerializer . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToXMLSerializer :: IsGObject obj => obj -> XMLSerializer
-castToXMLSerializer = castTo gTypeXMLSerializer "XMLSerializer"
-
-foreign import javascript unsafe "window[\"XMLSerializer\"]" gTypeXMLSerializer' :: JSRef GType
-gTypeXMLSerializer = GType gTypeXMLSerializer'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.XPathEvaluator".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/XPathEvaluator Mozilla XPathEvaluator documentation>
-newtype XPathEvaluator = XPathEvaluator { unXPathEvaluator :: JSRef XPathEvaluator }
-
-instance Eq (XPathEvaluator) where
-  (XPathEvaluator a) == (XPathEvaluator b) = js_eq a b
-
-instance PToJSRef XPathEvaluator where
-  pToJSRef = unXPathEvaluator
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef XPathEvaluator where
-  pFromJSRef = XPathEvaluator
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef XPathEvaluator where
-  toJSRef = return . unXPathEvaluator
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef XPathEvaluator where
-  fromJSRef = return . fmap XPathEvaluator . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject XPathEvaluator where
-  toGObject = GObject . castRef . unXPathEvaluator
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = XPathEvaluator . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToXPathEvaluator :: IsGObject obj => obj -> XPathEvaluator
-castToXPathEvaluator = castTo gTypeXPathEvaluator "XPathEvaluator"
-
-foreign import javascript unsafe "window[\"XPathEvaluator\"]" gTypeXPathEvaluator' :: JSRef GType
-gTypeXPathEvaluator = GType gTypeXPathEvaluator'
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.XPathExpression".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/XPathExpression Mozilla XPathExpression documentation>
-newtype XPathExpression = XPathExpression { unXPathExpression :: JSRef XPathExpression }
-
-instance Eq (XPathExpression) where
-  (XPathExpression a) == (XPathExpression b) = js_eq a b
-
-instance PToJSRef XPathExpression where
-  pToJSRef = unXPathExpression
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef XPathExpression where
-  pFromJSRef = XPathExpression
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef XPathExpression where
-  toJSRef = return . unXPathExpression
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef XPathExpression where
-  fromJSRef = return . fmap XPathExpression . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject XPathExpression where
-  toGObject = GObject . castRef . unXPathExpression
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = XPathExpression . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToXPathExpression :: IsGObject obj => obj -> XPathExpression
-castToXPathExpression = castTo gTypeXPathExpression "XPathExpression"
-
-foreign import javascript unsafe "window[\"XPathExpression\"]" gTypeXPathExpression' :: JSRef GType
-gTypeXPathExpression = GType gTypeXPathExpression'
-#else
-type IsXPathExpression o = XPathExpressionClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.XPathNSResolver".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/XPathNSResolver Mozilla XPathNSResolver documentation>
-newtype XPathNSResolver = XPathNSResolver { unXPathNSResolver :: JSRef XPathNSResolver }
-
-instance Eq (XPathNSResolver) where
-  (XPathNSResolver a) == (XPathNSResolver b) = js_eq a b
-
-instance PToJSRef XPathNSResolver where
-  pToJSRef = unXPathNSResolver
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef XPathNSResolver where
-  pFromJSRef = XPathNSResolver
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef XPathNSResolver where
-  toJSRef = return . unXPathNSResolver
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef XPathNSResolver where
-  fromJSRef = return . fmap XPathNSResolver . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject XPathNSResolver where
-  toGObject = GObject . castRef . unXPathNSResolver
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = XPathNSResolver . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToXPathNSResolver :: IsGObject obj => obj -> XPathNSResolver
-castToXPathNSResolver = castTo gTypeXPathNSResolver "XPathNSResolver"
-
-foreign import javascript unsafe "window[\"XPathNSResolver\"]" gTypeXPathNSResolver' :: JSRef GType
-gTypeXPathNSResolver = GType gTypeXPathNSResolver'
-#else
-type IsXPathNSResolver o = XPathNSResolverClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.XPathResult".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/XPathResult Mozilla XPathResult documentation>
-newtype XPathResult = XPathResult { unXPathResult :: JSRef XPathResult }
-
-instance Eq (XPathResult) where
-  (XPathResult a) == (XPathResult b) = js_eq a b
-
-instance PToJSRef XPathResult where
-  pToJSRef = unXPathResult
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef XPathResult where
-  pFromJSRef = XPathResult
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef XPathResult where
-  toJSRef = return . unXPathResult
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef XPathResult where
-  fromJSRef = return . fmap XPathResult . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject XPathResult where
-  toGObject = GObject . castRef . unXPathResult
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = XPathResult . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToXPathResult :: IsGObject obj => obj -> XPathResult
-castToXPathResult = castTo gTypeXPathResult "XPathResult"
-
-foreign import javascript unsafe "window[\"XPathResult\"]" gTypeXPathResult' :: JSRef GType
-gTypeXPathResult = GType gTypeXPathResult'
-#else
-type IsXPathResult o = XPathResultClass o
-#endif
-
-
-#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
--- | Functions for this inteface are in "GHCJS.DOM.XSLTProcessor".
---
--- <https://developer.mozilla.org/en-US/docs/Web/API/XSLTProcessor Mozilla XSLTProcessor documentation>
-newtype XSLTProcessor = XSLTProcessor { unXSLTProcessor :: JSRef XSLTProcessor }
-
-instance Eq (XSLTProcessor) where
-  (XSLTProcessor a) == (XSLTProcessor b) = js_eq a b
-
-instance PToJSRef XSLTProcessor where
-  pToJSRef = unXSLTProcessor
-  {-# INLINE pToJSRef #-}
-
-instance PFromJSRef XSLTProcessor where
-  pFromJSRef = XSLTProcessor
-  {-# INLINE pFromJSRef #-}
-
-instance ToJSRef XSLTProcessor where
-  toJSRef = return . unXSLTProcessor
-  {-# INLINE toJSRef #-}
-
-instance FromJSRef XSLTProcessor where
-  fromJSRef = return . fmap XSLTProcessor . maybeJSNullOrUndefined
-  {-# INLINE fromJSRef #-}
-
-instance IsGObject XSLTProcessor where
-  toGObject = GObject . castRef . unXSLTProcessor
-  {-# INLINE toGObject #-}
-  unsafeCastGObject = XSLTProcessor . castRef . unGObject
-  {-# INLINE unsafeCastGObject #-}
-
-castToXSLTProcessor :: IsGObject obj => obj -> XSLTProcessor
-castToXSLTProcessor = castTo gTypeXSLTProcessor "XSLTProcessor"
-
-foreign import javascript unsafe "window[\"XSLTProcessor\"]" gTypeXSLTProcessor' :: JSRef GType
-gTypeXSLTProcessor = GType gTypeXSLTProcessor'
+    maybeJSNullOrUndefined, Nullable(..), nullableToMaybe, maybeToNullable, propagateGError, GType(..)
+  , GObject(..), IsGObject, toGObject, castToGObject, gTypeGObject, unsafeCastGObject, isA, objectToString
+  , js_eq
+
+  -- * DOMString
+  , DOMString(..), ToDOMString(..), FromDOMString(..), IsDOMString, ToJSString(..), FromJSString(..)
+  , toJSString, fromJSString, toMaybeJSString, fromMaybeJSString
+
+  -- * Callbacks
+  , AudioBufferCallback(..)
+  , DatabaseCallback(..)
+  , MediaQueryListListener(..)
+  , MediaStreamTrackSourcesCallback(..)
+  , NavigatorUserMediaErrorCallback(..)
+  , NavigatorUserMediaSuccessCallback(..)
+  , NotificationPermissionCallback(..)
+  , PositionCallback(..)
+  , PositionErrorCallback(..)
+  , RequestAnimationFrameCallback(..)
+  , RTCPeerConnectionErrorCallback(..)
+  , RTCSessionDescriptionCallback(..)
+  , RTCStatsCallback(..)
+  , SQLStatementCallback(..)
+  , SQLStatementErrorCallback(..)
+  , SQLTransactionCallback(..)
+  , SQLTransactionErrorCallback(..)
+  , StorageErrorCallback(..)
+  , StorageQuotaCallback(..)
+  , StorageUsageCallback(..)
+  , StringCallback(..)
+  , VoidCallback(..)
+
+  -- * Dictionaries
+  , Dictionary(Dictionary), unDictionary, IsDictionary, toDictionary
+  , BlobPropertyBag(BlobPropertyBag), unBlobPropertyBag, IsBlobPropertyBag, toBlobPropertyBag
+
+  -- * Mutation Callback
+  , MutationCallback(MutationCallback), unMutationCallback, IsMutationCallback, toMutationCallback
+
+  -- * Promise
+  , Promise(Promise), unPromise, IsPromise, toPromise, castToPromise, gTypePromise
+
+  -- * Date
+  , Date(Date), unDate, IsDate, toDate, castToDate, gTypeDate
+
+  -- * Arrays
+  , Array(Array), unArray, IsArray, toArray, castToArray, gTypeArray
+  , ObjectArray(ObjectArray), unObjectArray, IsObjectArray, toObjectArray
+  , ArrayBuffer(ArrayBuffer), unArrayBuffer, IsArrayBuffer, toArrayBuffer, castToArrayBuffer, gTypeArrayBuffer
+  , ArrayBufferView(ArrayBufferView), unArrayBufferView, IsArrayBufferView, toArrayBufferView
+  , Float32Array(Float32Array), unFloat32Array, IsFloat32Array, toFloat32Array, castToFloat32Array, gTypeFloat32Array
+  , Float64Array(Float64Array), unFloat64Array, IsFloat64Array, toFloat64Array, castToFloat64Array, gTypeFloat64Array
+  , Uint8Array(Uint8Array), unUint8Array, IsUint8Array, toUint8Array, castToUint8Array, gTypeUint8Array
+  , Uint8ClampedArray(Uint8ClampedArray), unUint8ClampedArray, IsUint8ClampedArray, toUint8ClampedArray, castToUint8ClampedArray, gTypeUint8ClampedArray
+  , Uint16Array(Uint16Array), unUint16Array, IsUint16Array, toUint16Array, castToUint16Array, gTypeUint16Array
+  , Uint32Array(Uint32Array), unUint32Array, IsUint32Array, toUint32Array, castToUint32Array, gTypeUint32Array
+  , Int8Array(Int8Array), unInt8Array, IsInt8Array, toInt8Array, castToInt8Array, gTypeInt8Array
+  , Int16Array(Int16Array), unInt16Array, IsInt16Array, toInt16Array, castToInt16Array, gTypeInt16Array
+  , Int32Array(Int32Array), unInt32Array, IsInt32Array, toInt32Array, castToInt32Array, gTypeInt32Array
+
+  -- * Geolocation
+  , SerializedScriptValue(SerializedScriptValue), unSerializedScriptValue, IsSerializedScriptValue, toSerializedScriptValue
+  , PositionOptions(PositionOptions), unPositionOptions, IsPositionOptions, toPositionOptions
+  , Acceleration(Acceleration), unAcceleration, IsAcceleration, toAcceleration
+  , RotationRate(RotationRate), unRotationRate, IsRotationRate, toRotationRate
+
+  -- * Crypto
+  , Algorithm(Algorithm), unAlgorithm, IsAlgorithm, toAlgorithm
+  , CryptoOperationData(CryptoOperationData), unCryptoOperationData, IsCryptoOperationData, toCryptoOperationData
+
+  -- * CanvasStyle (fill & stroke style)
+  , CanvasStyle(CanvasStyle), unCanvasStyle, IsCanvasStyle, toCanvasStyle
+
+  , DOMException(DOMException), unDOMException, IsDOMException, toDOMException
+
+  -- * WebGL typedefs
+  , GLenum(..), GLboolean(..), GLbitfield(..), GLbyte(..), GLshort(..), GLint(..), GLsizei(..)
+  , GLintptr(..), GLsizeiptr(..), GLubyte(..), GLushort(..), GLuint(..), GLfloat(..), GLclampf(..)
+  , GLint64, GLuint64
+
+  -- * Interface types from IDL files
+
+-- AUTO GENERATION STARTS HERE
+  , ANGLEInstancedArrays(ANGLEInstancedArrays), unANGLEInstancedArrays, castToANGLEInstancedArrays, gTypeANGLEInstancedArrays
+  , AbstractView(AbstractView), unAbstractView, castToAbstractView, gTypeAbstractView
+  , AbstractWorker(AbstractWorker), unAbstractWorker, castToAbstractWorker, gTypeAbstractWorker
+  , AllAudioCapabilities(AllAudioCapabilities), unAllAudioCapabilities, castToAllAudioCapabilities, gTypeAllAudioCapabilities
+  , AllVideoCapabilities(AllVideoCapabilities), unAllVideoCapabilities, castToAllVideoCapabilities, gTypeAllVideoCapabilities
+  , AnalyserNode(AnalyserNode), unAnalyserNode, castToAnalyserNode, gTypeAnalyserNode
+  , AnimationEvent(AnimationEvent), unAnimationEvent, castToAnimationEvent, gTypeAnimationEvent
+  , ApplicationCache(ApplicationCache), unApplicationCache, castToApplicationCache, gTypeApplicationCache
+  , Attr(Attr), unAttr, castToAttr, gTypeAttr
+  , AudioBuffer(AudioBuffer), unAudioBuffer, castToAudioBuffer, gTypeAudioBuffer
+  , AudioBufferSourceNode(AudioBufferSourceNode), unAudioBufferSourceNode, castToAudioBufferSourceNode, gTypeAudioBufferSourceNode
+  , AudioContext(AudioContext), unAudioContext, IsAudioContext, toAudioContext, castToAudioContext, gTypeAudioContext
+  , AudioDestinationNode(AudioDestinationNode), unAudioDestinationNode, castToAudioDestinationNode, gTypeAudioDestinationNode
+  , AudioListener(AudioListener), unAudioListener, castToAudioListener, gTypeAudioListener
+  , AudioNode(AudioNode), unAudioNode, IsAudioNode, toAudioNode, castToAudioNode, gTypeAudioNode
+  , AudioParam(AudioParam), unAudioParam, castToAudioParam, gTypeAudioParam
+  , AudioProcessingEvent(AudioProcessingEvent), unAudioProcessingEvent, castToAudioProcessingEvent, gTypeAudioProcessingEvent
+  , AudioStreamTrack(AudioStreamTrack), unAudioStreamTrack, castToAudioStreamTrack, gTypeAudioStreamTrack
+  , AudioTrack(AudioTrack), unAudioTrack, castToAudioTrack, gTypeAudioTrack
+  , AudioTrackList(AudioTrackList), unAudioTrackList, castToAudioTrackList, gTypeAudioTrackList
+  , AutocompleteErrorEvent(AutocompleteErrorEvent), unAutocompleteErrorEvent, castToAutocompleteErrorEvent, gTypeAutocompleteErrorEvent
+  , BarProp(BarProp), unBarProp, castToBarProp, gTypeBarProp
+  , BatteryManager(BatteryManager), unBatteryManager, castToBatteryManager, gTypeBatteryManager
+  , BeforeLoadEvent(BeforeLoadEvent), unBeforeLoadEvent, castToBeforeLoadEvent, gTypeBeforeLoadEvent
+  , BeforeUnloadEvent(BeforeUnloadEvent), unBeforeUnloadEvent, castToBeforeUnloadEvent, gTypeBeforeUnloadEvent
+  , BiquadFilterNode(BiquadFilterNode), unBiquadFilterNode, castToBiquadFilterNode, gTypeBiquadFilterNode
+  , Blob(Blob), unBlob, IsBlob, toBlob, castToBlob, gTypeBlob
+  , CDATASection(CDATASection), unCDATASection, castToCDATASection, gTypeCDATASection
+  , CSS(CSS), unCSS, castToCSS, gTypeCSS
+  , CSSCharsetRule(CSSCharsetRule), unCSSCharsetRule, castToCSSCharsetRule, gTypeCSSCharsetRule
+  , CSSFontFaceLoadEvent(CSSFontFaceLoadEvent), unCSSFontFaceLoadEvent, castToCSSFontFaceLoadEvent, gTypeCSSFontFaceLoadEvent
+  , CSSFontFaceRule(CSSFontFaceRule), unCSSFontFaceRule, castToCSSFontFaceRule, gTypeCSSFontFaceRule
+  , CSSImportRule(CSSImportRule), unCSSImportRule, castToCSSImportRule, gTypeCSSImportRule
+  , CSSKeyframeRule(CSSKeyframeRule), unCSSKeyframeRule, castToCSSKeyframeRule, gTypeCSSKeyframeRule
+  , CSSKeyframesRule(CSSKeyframesRule), unCSSKeyframesRule, castToCSSKeyframesRule, gTypeCSSKeyframesRule
+  , CSSMediaRule(CSSMediaRule), unCSSMediaRule, castToCSSMediaRule, gTypeCSSMediaRule
+  , CSSPageRule(CSSPageRule), unCSSPageRule, castToCSSPageRule, gTypeCSSPageRule
+  , CSSPrimitiveValue(CSSPrimitiveValue), unCSSPrimitiveValue, castToCSSPrimitiveValue, gTypeCSSPrimitiveValue
+  , CSSRule(CSSRule), unCSSRule, IsCSSRule, toCSSRule, castToCSSRule, gTypeCSSRule
+  , CSSRuleList(CSSRuleList), unCSSRuleList, castToCSSRuleList, gTypeCSSRuleList
+  , CSSStyleDeclaration(CSSStyleDeclaration), unCSSStyleDeclaration, castToCSSStyleDeclaration, gTypeCSSStyleDeclaration
+  , CSSStyleRule(CSSStyleRule), unCSSStyleRule, castToCSSStyleRule, gTypeCSSStyleRule
+  , CSSStyleSheet(CSSStyleSheet), unCSSStyleSheet, castToCSSStyleSheet, gTypeCSSStyleSheet
+  , CSSSupportsRule(CSSSupportsRule), unCSSSupportsRule, castToCSSSupportsRule, gTypeCSSSupportsRule
+  , CSSUnknownRule(CSSUnknownRule), unCSSUnknownRule, castToCSSUnknownRule, gTypeCSSUnknownRule
+  , CSSValue(CSSValue), unCSSValue, IsCSSValue, toCSSValue, castToCSSValue, gTypeCSSValue
+  , CSSValueList(CSSValueList), unCSSValueList, IsCSSValueList, toCSSValueList, castToCSSValueList, gTypeCSSValueList
+  , CanvasGradient(CanvasGradient), unCanvasGradient, castToCanvasGradient, gTypeCanvasGradient
+  , CanvasPattern(CanvasPattern), unCanvasPattern, castToCanvasPattern, gTypeCanvasPattern
+  , CanvasProxy(CanvasProxy), unCanvasProxy, castToCanvasProxy, gTypeCanvasProxy
+  , CanvasRenderingContext(CanvasRenderingContext), unCanvasRenderingContext, IsCanvasRenderingContext, toCanvasRenderingContext, castToCanvasRenderingContext, gTypeCanvasRenderingContext
+  , CanvasRenderingContext2D(CanvasRenderingContext2D), unCanvasRenderingContext2D, castToCanvasRenderingContext2D, gTypeCanvasRenderingContext2D
+  , CapabilityRange(CapabilityRange), unCapabilityRange, castToCapabilityRange, gTypeCapabilityRange
+  , ChannelMergerNode(ChannelMergerNode), unChannelMergerNode, castToChannelMergerNode, gTypeChannelMergerNode
+  , ChannelSplitterNode(ChannelSplitterNode), unChannelSplitterNode, castToChannelSplitterNode, gTypeChannelSplitterNode
+  , CharacterData(CharacterData), unCharacterData, IsCharacterData, toCharacterData, castToCharacterData, gTypeCharacterData
+  , ChildNode(ChildNode), unChildNode, castToChildNode, gTypeChildNode
+  , ClientRect(ClientRect), unClientRect, castToClientRect, gTypeClientRect
+  , ClientRectList(ClientRectList), unClientRectList, castToClientRectList, gTypeClientRectList
+  , CloseEvent(CloseEvent), unCloseEvent, castToCloseEvent, gTypeCloseEvent
+  , CommandLineAPIHost(CommandLineAPIHost), unCommandLineAPIHost, castToCommandLineAPIHost, gTypeCommandLineAPIHost
+  , Comment(Comment), unComment, castToComment, gTypeComment
+  , CompositionEvent(CompositionEvent), unCompositionEvent, castToCompositionEvent, gTypeCompositionEvent
+  , ConvolverNode(ConvolverNode), unConvolverNode, castToConvolverNode, gTypeConvolverNode
+  , Coordinates(Coordinates), unCoordinates, castToCoordinates, gTypeCoordinates
+  , Counter(Counter), unCounter, castToCounter, gTypeCounter
+  , Crypto(Crypto), unCrypto, castToCrypto, gTypeCrypto
+  , CryptoKey(CryptoKey), unCryptoKey, castToCryptoKey, gTypeCryptoKey
+  , CryptoKeyPair(CryptoKeyPair), unCryptoKeyPair, castToCryptoKeyPair, gTypeCryptoKeyPair
+  , CustomEvent(CustomEvent), unCustomEvent, castToCustomEvent, gTypeCustomEvent
+  , DOMError(DOMError), unDOMError, IsDOMError, toDOMError, castToDOMError, gTypeDOMError
+  , DOMImplementation(DOMImplementation), unDOMImplementation, castToDOMImplementation, gTypeDOMImplementation
+  , DOMNamedFlowCollection(DOMNamedFlowCollection), unDOMNamedFlowCollection, castToDOMNamedFlowCollection, gTypeDOMNamedFlowCollection
+  , DOMParser(DOMParser), unDOMParser, castToDOMParser, gTypeDOMParser
+  , DOMSettableTokenList(DOMSettableTokenList), unDOMSettableTokenList, castToDOMSettableTokenList, gTypeDOMSettableTokenList
+  , DOMStringList(DOMStringList), unDOMStringList, castToDOMStringList, gTypeDOMStringList
+  , DOMStringMap(DOMStringMap), unDOMStringMap, castToDOMStringMap, gTypeDOMStringMap
+  , DOMTokenList(DOMTokenList), unDOMTokenList, IsDOMTokenList, toDOMTokenList, castToDOMTokenList, gTypeDOMTokenList
+  , DataCue(DataCue), unDataCue, castToDataCue, gTypeDataCue
+  , DataTransfer(DataTransfer), unDataTransfer, castToDataTransfer, gTypeDataTransfer
+  , DataTransferItem(DataTransferItem), unDataTransferItem, castToDataTransferItem, gTypeDataTransferItem
+  , DataTransferItemList(DataTransferItemList), unDataTransferItemList, castToDataTransferItemList, gTypeDataTransferItemList
+  , Database(Database), unDatabase, castToDatabase, gTypeDatabase
+  , DedicatedWorkerGlobalScope(DedicatedWorkerGlobalScope), unDedicatedWorkerGlobalScope, castToDedicatedWorkerGlobalScope, gTypeDedicatedWorkerGlobalScope
+  , DelayNode(DelayNode), unDelayNode, castToDelayNode, gTypeDelayNode
+  , DeviceMotionEvent(DeviceMotionEvent), unDeviceMotionEvent, castToDeviceMotionEvent, gTypeDeviceMotionEvent
+  , DeviceOrientationEvent(DeviceOrientationEvent), unDeviceOrientationEvent, castToDeviceOrientationEvent, gTypeDeviceOrientationEvent
+  , DeviceProximityEvent(DeviceProximityEvent), unDeviceProximityEvent, castToDeviceProximityEvent, gTypeDeviceProximityEvent
+  , Document(Document), unDocument, IsDocument, toDocument, castToDocument, gTypeDocument
+  , DocumentFragment(DocumentFragment), unDocumentFragment, castToDocumentFragment, gTypeDocumentFragment
+  , DocumentType(DocumentType), unDocumentType, castToDocumentType, gTypeDocumentType
+  , DynamicsCompressorNode(DynamicsCompressorNode), unDynamicsCompressorNode, castToDynamicsCompressorNode, gTypeDynamicsCompressorNode
+  , EXTBlendMinMax(EXTBlendMinMax), unEXTBlendMinMax, castToEXTBlendMinMax, gTypeEXTBlendMinMax
+  , EXTFragDepth(EXTFragDepth), unEXTFragDepth, castToEXTFragDepth, gTypeEXTFragDepth
+  , EXTShaderTextureLOD(EXTShaderTextureLOD), unEXTShaderTextureLOD, castToEXTShaderTextureLOD, gTypeEXTShaderTextureLOD
+  , EXTTextureFilterAnisotropic(EXTTextureFilterAnisotropic), unEXTTextureFilterAnisotropic, castToEXTTextureFilterAnisotropic, gTypeEXTTextureFilterAnisotropic
+  , EXTsRGB(EXTsRGB), unEXTsRGB, castToEXTsRGB, gTypeEXTsRGB
+  , Element(Element), unElement, IsElement, toElement, castToElement, gTypeElement
+  , Entity(Entity), unEntity, castToEntity, gTypeEntity
+  , EntityReference(EntityReference), unEntityReference, castToEntityReference, gTypeEntityReference
+  , ErrorEvent(ErrorEvent), unErrorEvent, castToErrorEvent, gTypeErrorEvent
+  , Event(Event), unEvent, IsEvent, toEvent, castToEvent, gTypeEvent
+  , EventListener(EventListener), unEventListener, castToEventListener, gTypeEventListener
+  , EventSource(EventSource), unEventSource, castToEventSource, gTypeEventSource
+  , EventTarget(EventTarget), unEventTarget, IsEventTarget, toEventTarget, castToEventTarget, gTypeEventTarget
+  , File(File), unFile, castToFile, gTypeFile
+  , FileError(FileError), unFileError, castToFileError, gTypeFileError
+  , FileList(FileList), unFileList, castToFileList, gTypeFileList
+  , FileReader(FileReader), unFileReader, castToFileReader, gTypeFileReader
+  , FileReaderSync(FileReaderSync), unFileReaderSync, castToFileReaderSync, gTypeFileReaderSync
+  , FocusEvent(FocusEvent), unFocusEvent, castToFocusEvent, gTypeFocusEvent
+  , FontLoader(FontLoader), unFontLoader, castToFontLoader, gTypeFontLoader
+  , FormData(FormData), unFormData, castToFormData, gTypeFormData
+  , GainNode(GainNode), unGainNode, castToGainNode, gTypeGainNode
+  , Gamepad(Gamepad), unGamepad, castToGamepad, gTypeGamepad
+  , GamepadButton(GamepadButton), unGamepadButton, castToGamepadButton, gTypeGamepadButton
+  , GamepadEvent(GamepadEvent), unGamepadEvent, castToGamepadEvent, gTypeGamepadEvent
+  , Geolocation(Geolocation), unGeolocation, castToGeolocation, gTypeGeolocation
+  , Geoposition(Geoposition), unGeoposition, castToGeoposition, gTypeGeoposition
+  , HTMLAllCollection(HTMLAllCollection), unHTMLAllCollection, castToHTMLAllCollection, gTypeHTMLAllCollection
+  , HTMLAnchorElement(HTMLAnchorElement), unHTMLAnchorElement, castToHTMLAnchorElement, gTypeHTMLAnchorElement
+  , HTMLAppletElement(HTMLAppletElement), unHTMLAppletElement, castToHTMLAppletElement, gTypeHTMLAppletElement
+  , HTMLAreaElement(HTMLAreaElement), unHTMLAreaElement, castToHTMLAreaElement, gTypeHTMLAreaElement
+  , HTMLAudioElement(HTMLAudioElement), unHTMLAudioElement, castToHTMLAudioElement, gTypeHTMLAudioElement
+  , HTMLBRElement(HTMLBRElement), unHTMLBRElement, castToHTMLBRElement, gTypeHTMLBRElement
+  , HTMLBaseElement(HTMLBaseElement), unHTMLBaseElement, castToHTMLBaseElement, gTypeHTMLBaseElement
+  , HTMLBaseFontElement(HTMLBaseFontElement), unHTMLBaseFontElement, castToHTMLBaseFontElement, gTypeHTMLBaseFontElement
+  , HTMLBodyElement(HTMLBodyElement), unHTMLBodyElement, castToHTMLBodyElement, gTypeHTMLBodyElement
+  , HTMLButtonElement(HTMLButtonElement), unHTMLButtonElement, castToHTMLButtonElement, gTypeHTMLButtonElement
+  , HTMLCanvasElement(HTMLCanvasElement), unHTMLCanvasElement, castToHTMLCanvasElement, gTypeHTMLCanvasElement
+  , HTMLCollection(HTMLCollection), unHTMLCollection, IsHTMLCollection, toHTMLCollection, castToHTMLCollection, gTypeHTMLCollection
+  , HTMLDListElement(HTMLDListElement), unHTMLDListElement, castToHTMLDListElement, gTypeHTMLDListElement
+  , HTMLDataListElement(HTMLDataListElement), unHTMLDataListElement, castToHTMLDataListElement, gTypeHTMLDataListElement
+  , HTMLDetailsElement(HTMLDetailsElement), unHTMLDetailsElement, castToHTMLDetailsElement, gTypeHTMLDetailsElement
+  , HTMLDirectoryElement(HTMLDirectoryElement), unHTMLDirectoryElement, castToHTMLDirectoryElement, gTypeHTMLDirectoryElement
+  , HTMLDivElement(HTMLDivElement), unHTMLDivElement, castToHTMLDivElement, gTypeHTMLDivElement
+  , HTMLDocument(HTMLDocument), unHTMLDocument, castToHTMLDocument, gTypeHTMLDocument
+  , HTMLElement(HTMLElement), unHTMLElement, IsHTMLElement, toHTMLElement, castToHTMLElement, gTypeHTMLElement
+  , HTMLEmbedElement(HTMLEmbedElement), unHTMLEmbedElement, castToHTMLEmbedElement, gTypeHTMLEmbedElement
+  , HTMLFieldSetElement(HTMLFieldSetElement), unHTMLFieldSetElement, castToHTMLFieldSetElement, gTypeHTMLFieldSetElement
+  , HTMLFontElement(HTMLFontElement), unHTMLFontElement, castToHTMLFontElement, gTypeHTMLFontElement
+  , HTMLFormControlsCollection(HTMLFormControlsCollection), unHTMLFormControlsCollection, castToHTMLFormControlsCollection, gTypeHTMLFormControlsCollection
+  , HTMLFormElement(HTMLFormElement), unHTMLFormElement, castToHTMLFormElement, gTypeHTMLFormElement
+  , HTMLFrameElement(HTMLFrameElement), unHTMLFrameElement, castToHTMLFrameElement, gTypeHTMLFrameElement
+  , HTMLFrameSetElement(HTMLFrameSetElement), unHTMLFrameSetElement, castToHTMLFrameSetElement, gTypeHTMLFrameSetElement
+  , HTMLHRElement(HTMLHRElement), unHTMLHRElement, castToHTMLHRElement, gTypeHTMLHRElement
+  , HTMLHeadElement(HTMLHeadElement), unHTMLHeadElement, castToHTMLHeadElement, gTypeHTMLHeadElement
+  , HTMLHeadingElement(HTMLHeadingElement), unHTMLHeadingElement, castToHTMLHeadingElement, gTypeHTMLHeadingElement
+  , HTMLHtmlElement(HTMLHtmlElement), unHTMLHtmlElement, castToHTMLHtmlElement, gTypeHTMLHtmlElement
+  , HTMLIFrameElement(HTMLIFrameElement), unHTMLIFrameElement, castToHTMLIFrameElement, gTypeHTMLIFrameElement
+  , HTMLImageElement(HTMLImageElement), unHTMLImageElement, castToHTMLImageElement, gTypeHTMLImageElement
+  , HTMLInputElement(HTMLInputElement), unHTMLInputElement, castToHTMLInputElement, gTypeHTMLInputElement
+  , HTMLKeygenElement(HTMLKeygenElement), unHTMLKeygenElement, castToHTMLKeygenElement, gTypeHTMLKeygenElement
+  , HTMLLIElement(HTMLLIElement), unHTMLLIElement, castToHTMLLIElement, gTypeHTMLLIElement
+  , HTMLLabelElement(HTMLLabelElement), unHTMLLabelElement, castToHTMLLabelElement, gTypeHTMLLabelElement
+  , HTMLLegendElement(HTMLLegendElement), unHTMLLegendElement, castToHTMLLegendElement, gTypeHTMLLegendElement
+  , HTMLLinkElement(HTMLLinkElement), unHTMLLinkElement, castToHTMLLinkElement, gTypeHTMLLinkElement
+  , HTMLMapElement(HTMLMapElement), unHTMLMapElement, castToHTMLMapElement, gTypeHTMLMapElement
+  , HTMLMarqueeElement(HTMLMarqueeElement), unHTMLMarqueeElement, castToHTMLMarqueeElement, gTypeHTMLMarqueeElement
+  , HTMLMediaElement(HTMLMediaElement), unHTMLMediaElement, IsHTMLMediaElement, toHTMLMediaElement, castToHTMLMediaElement, gTypeHTMLMediaElement
+  , HTMLMenuElement(HTMLMenuElement), unHTMLMenuElement, castToHTMLMenuElement, gTypeHTMLMenuElement
+  , HTMLMetaElement(HTMLMetaElement), unHTMLMetaElement, castToHTMLMetaElement, gTypeHTMLMetaElement
+  , HTMLMeterElement(HTMLMeterElement), unHTMLMeterElement, castToHTMLMeterElement, gTypeHTMLMeterElement
+  , HTMLModElement(HTMLModElement), unHTMLModElement, castToHTMLModElement, gTypeHTMLModElement
+  , HTMLOListElement(HTMLOListElement), unHTMLOListElement, castToHTMLOListElement, gTypeHTMLOListElement
+  , HTMLObjectElement(HTMLObjectElement), unHTMLObjectElement, castToHTMLObjectElement, gTypeHTMLObjectElement
+  , HTMLOptGroupElement(HTMLOptGroupElement), unHTMLOptGroupElement, castToHTMLOptGroupElement, gTypeHTMLOptGroupElement
+  , HTMLOptionElement(HTMLOptionElement), unHTMLOptionElement, castToHTMLOptionElement, gTypeHTMLOptionElement
+  , HTMLOptionsCollection(HTMLOptionsCollection), unHTMLOptionsCollection, castToHTMLOptionsCollection, gTypeHTMLOptionsCollection
+  , HTMLOutputElement(HTMLOutputElement), unHTMLOutputElement, castToHTMLOutputElement, gTypeHTMLOutputElement
+  , HTMLParagraphElement(HTMLParagraphElement), unHTMLParagraphElement, castToHTMLParagraphElement, gTypeHTMLParagraphElement
+  , HTMLParamElement(HTMLParamElement), unHTMLParamElement, castToHTMLParamElement, gTypeHTMLParamElement
+  , HTMLPreElement(HTMLPreElement), unHTMLPreElement, castToHTMLPreElement, gTypeHTMLPreElement
+  , HTMLProgressElement(HTMLProgressElement), unHTMLProgressElement, castToHTMLProgressElement, gTypeHTMLProgressElement
+  , HTMLQuoteElement(HTMLQuoteElement), unHTMLQuoteElement, castToHTMLQuoteElement, gTypeHTMLQuoteElement
+  , HTMLScriptElement(HTMLScriptElement), unHTMLScriptElement, castToHTMLScriptElement, gTypeHTMLScriptElement
+  , HTMLSelectElement(HTMLSelectElement), unHTMLSelectElement, castToHTMLSelectElement, gTypeHTMLSelectElement
+  , HTMLSourceElement(HTMLSourceElement), unHTMLSourceElement, castToHTMLSourceElement, gTypeHTMLSourceElement
+  , HTMLSpanElement(HTMLSpanElement), unHTMLSpanElement, castToHTMLSpanElement, gTypeHTMLSpanElement
+  , HTMLStyleElement(HTMLStyleElement), unHTMLStyleElement, castToHTMLStyleElement, gTypeHTMLStyleElement
+  , HTMLTableCaptionElement(HTMLTableCaptionElement), unHTMLTableCaptionElement, castToHTMLTableCaptionElement, gTypeHTMLTableCaptionElement
+  , HTMLTableCellElement(HTMLTableCellElement), unHTMLTableCellElement, castToHTMLTableCellElement, gTypeHTMLTableCellElement
+  , HTMLTableColElement(HTMLTableColElement), unHTMLTableColElement, castToHTMLTableColElement, gTypeHTMLTableColElement
+  , HTMLTableElement(HTMLTableElement), unHTMLTableElement, castToHTMLTableElement, gTypeHTMLTableElement
+  , HTMLTableRowElement(HTMLTableRowElement), unHTMLTableRowElement, castToHTMLTableRowElement, gTypeHTMLTableRowElement
+  , HTMLTableSectionElement(HTMLTableSectionElement), unHTMLTableSectionElement, castToHTMLTableSectionElement, gTypeHTMLTableSectionElement
+  , HTMLTemplateElement(HTMLTemplateElement), unHTMLTemplateElement, castToHTMLTemplateElement, gTypeHTMLTemplateElement
+  , HTMLTextAreaElement(HTMLTextAreaElement), unHTMLTextAreaElement, castToHTMLTextAreaElement, gTypeHTMLTextAreaElement
+  , HTMLTitleElement(HTMLTitleElement), unHTMLTitleElement, castToHTMLTitleElement, gTypeHTMLTitleElement
+  , HTMLTrackElement(HTMLTrackElement), unHTMLTrackElement, castToHTMLTrackElement, gTypeHTMLTrackElement
+  , HTMLUListElement(HTMLUListElement), unHTMLUListElement, castToHTMLUListElement, gTypeHTMLUListElement
+  , HTMLUnknownElement(HTMLUnknownElement), unHTMLUnknownElement, castToHTMLUnknownElement, gTypeHTMLUnknownElement
+  , HTMLVideoElement(HTMLVideoElement), unHTMLVideoElement, castToHTMLVideoElement, gTypeHTMLVideoElement
+  , HashChangeEvent(HashChangeEvent), unHashChangeEvent, castToHashChangeEvent, gTypeHashChangeEvent
+  , History(History), unHistory, castToHistory, gTypeHistory
+  , IDBAny(IDBAny), unIDBAny, castToIDBAny, gTypeIDBAny
+  , IDBCursor(IDBCursor), unIDBCursor, IsIDBCursor, toIDBCursor, castToIDBCursor, gTypeIDBCursor
+  , IDBCursorWithValue(IDBCursorWithValue), unIDBCursorWithValue, castToIDBCursorWithValue, gTypeIDBCursorWithValue
+  , IDBDatabase(IDBDatabase), unIDBDatabase, castToIDBDatabase, gTypeIDBDatabase
+  , IDBFactory(IDBFactory), unIDBFactory, castToIDBFactory, gTypeIDBFactory
+  , IDBIndex(IDBIndex), unIDBIndex, castToIDBIndex, gTypeIDBIndex
+  , IDBKeyRange(IDBKeyRange), unIDBKeyRange, castToIDBKeyRange, gTypeIDBKeyRange
+  , IDBObjectStore(IDBObjectStore), unIDBObjectStore, castToIDBObjectStore, gTypeIDBObjectStore
+  , IDBOpenDBRequest(IDBOpenDBRequest), unIDBOpenDBRequest, castToIDBOpenDBRequest, gTypeIDBOpenDBRequest
+  , IDBRequest(IDBRequest), unIDBRequest, IsIDBRequest, toIDBRequest, castToIDBRequest, gTypeIDBRequest
+  , IDBTransaction(IDBTransaction), unIDBTransaction, castToIDBTransaction, gTypeIDBTransaction
+  , IDBVersionChangeEvent(IDBVersionChangeEvent), unIDBVersionChangeEvent, castToIDBVersionChangeEvent, gTypeIDBVersionChangeEvent
+  , ImageData(ImageData), unImageData, castToImageData, gTypeImageData
+  , InspectorFrontendHost(InspectorFrontendHost), unInspectorFrontendHost, castToInspectorFrontendHost, gTypeInspectorFrontendHost
+  , InternalSettings(InternalSettings), unInternalSettings, castToInternalSettings, gTypeInternalSettings
+  , Internals(Internals), unInternals, castToInternals, gTypeInternals
+  , KeyboardEvent(KeyboardEvent), unKeyboardEvent, castToKeyboardEvent, gTypeKeyboardEvent
+  , Location(Location), unLocation, castToLocation, gTypeLocation
+  , MallocStatistics(MallocStatistics), unMallocStatistics, castToMallocStatistics, gTypeMallocStatistics
+  , MediaController(MediaController), unMediaController, castToMediaController, gTypeMediaController
+  , MediaControlsHost(MediaControlsHost), unMediaControlsHost, castToMediaControlsHost, gTypeMediaControlsHost
+  , MediaElementAudioSourceNode(MediaElementAudioSourceNode), unMediaElementAudioSourceNode, castToMediaElementAudioSourceNode, gTypeMediaElementAudioSourceNode
+  , MediaError(MediaError), unMediaError, castToMediaError, gTypeMediaError
+  , MediaKeyError(MediaKeyError), unMediaKeyError, castToMediaKeyError, gTypeMediaKeyError
+  , MediaKeyEvent(MediaKeyEvent), unMediaKeyEvent, castToMediaKeyEvent, gTypeMediaKeyEvent
+  , MediaKeyMessageEvent(MediaKeyMessageEvent), unMediaKeyMessageEvent, castToMediaKeyMessageEvent, gTypeMediaKeyMessageEvent
+  , MediaKeyNeededEvent(MediaKeyNeededEvent), unMediaKeyNeededEvent, castToMediaKeyNeededEvent, gTypeMediaKeyNeededEvent
+  , MediaKeySession(MediaKeySession), unMediaKeySession, castToMediaKeySession, gTypeMediaKeySession
+  , MediaKeys(MediaKeys), unMediaKeys, castToMediaKeys, gTypeMediaKeys
+  , MediaList(MediaList), unMediaList, castToMediaList, gTypeMediaList
+  , MediaQueryList(MediaQueryList), unMediaQueryList, castToMediaQueryList, gTypeMediaQueryList
+  , MediaSource(MediaSource), unMediaSource, castToMediaSource, gTypeMediaSource
+  , MediaSourceStates(MediaSourceStates), unMediaSourceStates, castToMediaSourceStates, gTypeMediaSourceStates
+  , MediaStream(MediaStream), unMediaStream, castToMediaStream, gTypeMediaStream
+  , MediaStreamAudioDestinationNode(MediaStreamAudioDestinationNode), unMediaStreamAudioDestinationNode, castToMediaStreamAudioDestinationNode, gTypeMediaStreamAudioDestinationNode
+  , MediaStreamAudioSourceNode(MediaStreamAudioSourceNode), unMediaStreamAudioSourceNode, castToMediaStreamAudioSourceNode, gTypeMediaStreamAudioSourceNode
+  , MediaStreamCapabilities(MediaStreamCapabilities), unMediaStreamCapabilities, IsMediaStreamCapabilities, toMediaStreamCapabilities, castToMediaStreamCapabilities, gTypeMediaStreamCapabilities
+  , MediaStreamEvent(MediaStreamEvent), unMediaStreamEvent, castToMediaStreamEvent, gTypeMediaStreamEvent
+  , MediaStreamTrack(MediaStreamTrack), unMediaStreamTrack, IsMediaStreamTrack, toMediaStreamTrack, castToMediaStreamTrack, gTypeMediaStreamTrack
+  , MediaStreamTrackEvent(MediaStreamTrackEvent), unMediaStreamTrackEvent, castToMediaStreamTrackEvent, gTypeMediaStreamTrackEvent
+  , MediaTrackConstraint(MediaTrackConstraint), unMediaTrackConstraint, castToMediaTrackConstraint, gTypeMediaTrackConstraint
+  , MediaTrackConstraintSet(MediaTrackConstraintSet), unMediaTrackConstraintSet, castToMediaTrackConstraintSet, gTypeMediaTrackConstraintSet
+  , MediaTrackConstraints(MediaTrackConstraints), unMediaTrackConstraints, castToMediaTrackConstraints, gTypeMediaTrackConstraints
+  , MemoryInfo(MemoryInfo), unMemoryInfo, castToMemoryInfo, gTypeMemoryInfo
+  , MessageChannel(MessageChannel), unMessageChannel, castToMessageChannel, gTypeMessageChannel
+  , MessageEvent(MessageEvent), unMessageEvent, castToMessageEvent, gTypeMessageEvent
+  , MessagePort(MessagePort), unMessagePort, castToMessagePort, gTypeMessagePort
+  , MimeType(MimeType), unMimeType, castToMimeType, gTypeMimeType
+  , MimeTypeArray(MimeTypeArray), unMimeTypeArray, castToMimeTypeArray, gTypeMimeTypeArray
+  , MouseEvent(MouseEvent), unMouseEvent, IsMouseEvent, toMouseEvent, castToMouseEvent, gTypeMouseEvent
+  , MutationEvent(MutationEvent), unMutationEvent, castToMutationEvent, gTypeMutationEvent
+  , MutationObserver(MutationObserver), unMutationObserver, castToMutationObserver, gTypeMutationObserver
+  , MutationRecord(MutationRecord), unMutationRecord, castToMutationRecord, gTypeMutationRecord
+  , NamedNodeMap(NamedNodeMap), unNamedNodeMap, castToNamedNodeMap, gTypeNamedNodeMap
+  , Navigator(Navigator), unNavigator, castToNavigator, gTypeNavigator
+  , NavigatorUserMediaError(NavigatorUserMediaError), unNavigatorUserMediaError, castToNavigatorUserMediaError, gTypeNavigatorUserMediaError
+  , Node(Node), unNode, IsNode, toNode, castToNode, gTypeNode
+  , NodeFilter(NodeFilter), unNodeFilter, castToNodeFilter, gTypeNodeFilter
+  , NodeIterator(NodeIterator), unNodeIterator, castToNodeIterator, gTypeNodeIterator
+  , NodeList(NodeList), unNodeList, IsNodeList, toNodeList, castToNodeList, gTypeNodeList
+  , Notification(Notification), unNotification, castToNotification, gTypeNotification
+  , NotificationCenter(NotificationCenter), unNotificationCenter, castToNotificationCenter, gTypeNotificationCenter
+  , OESElementIndexUint(OESElementIndexUint), unOESElementIndexUint, castToOESElementIndexUint, gTypeOESElementIndexUint
+  , OESStandardDerivatives(OESStandardDerivatives), unOESStandardDerivatives, castToOESStandardDerivatives, gTypeOESStandardDerivatives
+  , OESTextureFloat(OESTextureFloat), unOESTextureFloat, castToOESTextureFloat, gTypeOESTextureFloat
+  , OESTextureFloatLinear(OESTextureFloatLinear), unOESTextureFloatLinear, castToOESTextureFloatLinear, gTypeOESTextureFloatLinear
+  , OESTextureHalfFloat(OESTextureHalfFloat), unOESTextureHalfFloat, castToOESTextureHalfFloat, gTypeOESTextureHalfFloat
+  , OESTextureHalfFloatLinear(OESTextureHalfFloatLinear), unOESTextureHalfFloatLinear, castToOESTextureHalfFloatLinear, gTypeOESTextureHalfFloatLinear
+  , OESVertexArrayObject(OESVertexArrayObject), unOESVertexArrayObject, castToOESVertexArrayObject, gTypeOESVertexArrayObject
+  , OfflineAudioCompletionEvent(OfflineAudioCompletionEvent), unOfflineAudioCompletionEvent, castToOfflineAudioCompletionEvent, gTypeOfflineAudioCompletionEvent
+  , OfflineAudioContext(OfflineAudioContext), unOfflineAudioContext, castToOfflineAudioContext, gTypeOfflineAudioContext
+  , OscillatorNode(OscillatorNode), unOscillatorNode, castToOscillatorNode, gTypeOscillatorNode
+  , OverflowEvent(OverflowEvent), unOverflowEvent, castToOverflowEvent, gTypeOverflowEvent
+  , PageTransitionEvent(PageTransitionEvent), unPageTransitionEvent, castToPageTransitionEvent, gTypePageTransitionEvent
+  , PannerNode(PannerNode), unPannerNode, castToPannerNode, gTypePannerNode
+  , Path2D(Path2D), unPath2D, castToPath2D, gTypePath2D
+  , Performance(Performance), unPerformance, castToPerformance, gTypePerformance
+  , PerformanceEntry(PerformanceEntry), unPerformanceEntry, IsPerformanceEntry, toPerformanceEntry, castToPerformanceEntry, gTypePerformanceEntry
+  , PerformanceEntryList(PerformanceEntryList), unPerformanceEntryList, castToPerformanceEntryList, gTypePerformanceEntryList
+  , PerformanceMark(PerformanceMark), unPerformanceMark, castToPerformanceMark, gTypePerformanceMark
+  , PerformanceMeasure(PerformanceMeasure), unPerformanceMeasure, castToPerformanceMeasure, gTypePerformanceMeasure
+  , PerformanceNavigation(PerformanceNavigation), unPerformanceNavigation, castToPerformanceNavigation, gTypePerformanceNavigation
+  , PerformanceResourceTiming(PerformanceResourceTiming), unPerformanceResourceTiming, castToPerformanceResourceTiming, gTypePerformanceResourceTiming
+  , PerformanceTiming(PerformanceTiming), unPerformanceTiming, castToPerformanceTiming, gTypePerformanceTiming
+  , PeriodicWave(PeriodicWave), unPeriodicWave, castToPeriodicWave, gTypePeriodicWave
+  , Plugin(Plugin), unPlugin, castToPlugin, gTypePlugin
+  , PluginArray(PluginArray), unPluginArray, castToPluginArray, gTypePluginArray
+  , PopStateEvent(PopStateEvent), unPopStateEvent, castToPopStateEvent, gTypePopStateEvent
+  , PositionError(PositionError), unPositionError, castToPositionError, gTypePositionError
+  , ProcessingInstruction(ProcessingInstruction), unProcessingInstruction, castToProcessingInstruction, gTypeProcessingInstruction
+  , ProgressEvent(ProgressEvent), unProgressEvent, IsProgressEvent, toProgressEvent, castToProgressEvent, gTypeProgressEvent
+  , QuickTimePluginReplacement(QuickTimePluginReplacement), unQuickTimePluginReplacement, castToQuickTimePluginReplacement, gTypeQuickTimePluginReplacement
+  , RGBColor(RGBColor), unRGBColor, castToRGBColor, gTypeRGBColor
+  , RTCConfiguration(RTCConfiguration), unRTCConfiguration, castToRTCConfiguration, gTypeRTCConfiguration
+  , RTCDTMFSender(RTCDTMFSender), unRTCDTMFSender, castToRTCDTMFSender, gTypeRTCDTMFSender
+  , RTCDTMFToneChangeEvent(RTCDTMFToneChangeEvent), unRTCDTMFToneChangeEvent, castToRTCDTMFToneChangeEvent, gTypeRTCDTMFToneChangeEvent
+  , RTCDataChannel(RTCDataChannel), unRTCDataChannel, castToRTCDataChannel, gTypeRTCDataChannel
+  , RTCDataChannelEvent(RTCDataChannelEvent), unRTCDataChannelEvent, castToRTCDataChannelEvent, gTypeRTCDataChannelEvent
+  , RTCIceCandidate(RTCIceCandidate), unRTCIceCandidate, castToRTCIceCandidate, gTypeRTCIceCandidate
+  , RTCIceCandidateEvent(RTCIceCandidateEvent), unRTCIceCandidateEvent, castToRTCIceCandidateEvent, gTypeRTCIceCandidateEvent
+  , RTCIceServer(RTCIceServer), unRTCIceServer, castToRTCIceServer, gTypeRTCIceServer
+  , RTCPeerConnection(RTCPeerConnection), unRTCPeerConnection, castToRTCPeerConnection, gTypeRTCPeerConnection
+  , RTCSessionDescription(RTCSessionDescription), unRTCSessionDescription, castToRTCSessionDescription, gTypeRTCSessionDescription
+  , RTCStatsReport(RTCStatsReport), unRTCStatsReport, castToRTCStatsReport, gTypeRTCStatsReport
+  , RTCStatsResponse(RTCStatsResponse), unRTCStatsResponse, castToRTCStatsResponse, gTypeRTCStatsResponse
+  , RadioNodeList(RadioNodeList), unRadioNodeList, castToRadioNodeList, gTypeRadioNodeList
+  , Range(Range), unRange, castToRange, gTypeRange
+  , ReadableStream(ReadableStream), unReadableStream, castToReadableStream, gTypeReadableStream
+  , Rect(Rect), unRect, castToRect, gTypeRect
+  , SQLError(SQLError), unSQLError, castToSQLError, gTypeSQLError
+  , SQLResultSet(SQLResultSet), unSQLResultSet, castToSQLResultSet, gTypeSQLResultSet
+  , SQLResultSetRowList(SQLResultSetRowList), unSQLResultSetRowList, castToSQLResultSetRowList, gTypeSQLResultSetRowList
+  , SQLTransaction(SQLTransaction), unSQLTransaction, castToSQLTransaction, gTypeSQLTransaction
+  , SVGAElement(SVGAElement), unSVGAElement, castToSVGAElement, gTypeSVGAElement
+  , SVGAltGlyphDefElement(SVGAltGlyphDefElement), unSVGAltGlyphDefElement, castToSVGAltGlyphDefElement, gTypeSVGAltGlyphDefElement
+  , SVGAltGlyphElement(SVGAltGlyphElement), unSVGAltGlyphElement, castToSVGAltGlyphElement, gTypeSVGAltGlyphElement
+  , SVGAltGlyphItemElement(SVGAltGlyphItemElement), unSVGAltGlyphItemElement, castToSVGAltGlyphItemElement, gTypeSVGAltGlyphItemElement
+  , SVGAngle(SVGAngle), unSVGAngle, castToSVGAngle, gTypeSVGAngle
+  , SVGAnimateColorElement(SVGAnimateColorElement), unSVGAnimateColorElement, castToSVGAnimateColorElement, gTypeSVGAnimateColorElement
+  , SVGAnimateElement(SVGAnimateElement), unSVGAnimateElement, castToSVGAnimateElement, gTypeSVGAnimateElement
+  , SVGAnimateMotionElement(SVGAnimateMotionElement), unSVGAnimateMotionElement, castToSVGAnimateMotionElement, gTypeSVGAnimateMotionElement
+  , SVGAnimateTransformElement(SVGAnimateTransformElement), unSVGAnimateTransformElement, castToSVGAnimateTransformElement, gTypeSVGAnimateTransformElement
+  , SVGAnimatedAngle(SVGAnimatedAngle), unSVGAnimatedAngle, castToSVGAnimatedAngle, gTypeSVGAnimatedAngle
+  , SVGAnimatedBoolean(SVGAnimatedBoolean), unSVGAnimatedBoolean, castToSVGAnimatedBoolean, gTypeSVGAnimatedBoolean
+  , SVGAnimatedEnumeration(SVGAnimatedEnumeration), unSVGAnimatedEnumeration, castToSVGAnimatedEnumeration, gTypeSVGAnimatedEnumeration
+  , SVGAnimatedInteger(SVGAnimatedInteger), unSVGAnimatedInteger, castToSVGAnimatedInteger, gTypeSVGAnimatedInteger
+  , SVGAnimatedLength(SVGAnimatedLength), unSVGAnimatedLength, castToSVGAnimatedLength, gTypeSVGAnimatedLength
+  , SVGAnimatedLengthList(SVGAnimatedLengthList), unSVGAnimatedLengthList, castToSVGAnimatedLengthList, gTypeSVGAnimatedLengthList
+  , SVGAnimatedNumber(SVGAnimatedNumber), unSVGAnimatedNumber, castToSVGAnimatedNumber, gTypeSVGAnimatedNumber
+  , SVGAnimatedNumberList(SVGAnimatedNumberList), unSVGAnimatedNumberList, castToSVGAnimatedNumberList, gTypeSVGAnimatedNumberList
+  , SVGAnimatedPreserveAspectRatio(SVGAnimatedPreserveAspectRatio), unSVGAnimatedPreserveAspectRatio, castToSVGAnimatedPreserveAspectRatio, gTypeSVGAnimatedPreserveAspectRatio
+  , SVGAnimatedRect(SVGAnimatedRect), unSVGAnimatedRect, castToSVGAnimatedRect, gTypeSVGAnimatedRect
+  , SVGAnimatedString(SVGAnimatedString), unSVGAnimatedString, castToSVGAnimatedString, gTypeSVGAnimatedString
+  , SVGAnimatedTransformList(SVGAnimatedTransformList), unSVGAnimatedTransformList, castToSVGAnimatedTransformList, gTypeSVGAnimatedTransformList
+  , SVGAnimationElement(SVGAnimationElement), unSVGAnimationElement, IsSVGAnimationElement, toSVGAnimationElement, castToSVGAnimationElement, gTypeSVGAnimationElement
+  , SVGCircleElement(SVGCircleElement), unSVGCircleElement, castToSVGCircleElement, gTypeSVGCircleElement
+  , SVGClipPathElement(SVGClipPathElement), unSVGClipPathElement, castToSVGClipPathElement, gTypeSVGClipPathElement
+  , SVGColor(SVGColor), unSVGColor, IsSVGColor, toSVGColor, castToSVGColor, gTypeSVGColor
+  , SVGComponentTransferFunctionElement(SVGComponentTransferFunctionElement), unSVGComponentTransferFunctionElement, IsSVGComponentTransferFunctionElement, toSVGComponentTransferFunctionElement, castToSVGComponentTransferFunctionElement, gTypeSVGComponentTransferFunctionElement
+  , SVGCursorElement(SVGCursorElement), unSVGCursorElement, castToSVGCursorElement, gTypeSVGCursorElement
+  , SVGDefsElement(SVGDefsElement), unSVGDefsElement, castToSVGDefsElement, gTypeSVGDefsElement
+  , SVGDescElement(SVGDescElement), unSVGDescElement, castToSVGDescElement, gTypeSVGDescElement
+  , SVGDocument(SVGDocument), unSVGDocument, castToSVGDocument, gTypeSVGDocument
+  , SVGElement(SVGElement), unSVGElement, IsSVGElement, toSVGElement, castToSVGElement, gTypeSVGElement
+  , SVGEllipseElement(SVGEllipseElement), unSVGEllipseElement, castToSVGEllipseElement, gTypeSVGEllipseElement
+  , SVGExternalResourcesRequired(SVGExternalResourcesRequired), unSVGExternalResourcesRequired, castToSVGExternalResourcesRequired, gTypeSVGExternalResourcesRequired
+  , SVGFEBlendElement(SVGFEBlendElement), unSVGFEBlendElement, castToSVGFEBlendElement, gTypeSVGFEBlendElement
+  , SVGFEColorMatrixElement(SVGFEColorMatrixElement), unSVGFEColorMatrixElement, castToSVGFEColorMatrixElement, gTypeSVGFEColorMatrixElement
+  , SVGFEComponentTransferElement(SVGFEComponentTransferElement), unSVGFEComponentTransferElement, castToSVGFEComponentTransferElement, gTypeSVGFEComponentTransferElement
+  , SVGFECompositeElement(SVGFECompositeElement), unSVGFECompositeElement, castToSVGFECompositeElement, gTypeSVGFECompositeElement
+  , SVGFEConvolveMatrixElement(SVGFEConvolveMatrixElement), unSVGFEConvolveMatrixElement, castToSVGFEConvolveMatrixElement, gTypeSVGFEConvolveMatrixElement
+  , SVGFEDiffuseLightingElement(SVGFEDiffuseLightingElement), unSVGFEDiffuseLightingElement, castToSVGFEDiffuseLightingElement, gTypeSVGFEDiffuseLightingElement
+  , SVGFEDisplacementMapElement(SVGFEDisplacementMapElement), unSVGFEDisplacementMapElement, castToSVGFEDisplacementMapElement, gTypeSVGFEDisplacementMapElement
+  , SVGFEDistantLightElement(SVGFEDistantLightElement), unSVGFEDistantLightElement, castToSVGFEDistantLightElement, gTypeSVGFEDistantLightElement
+  , SVGFEDropShadowElement(SVGFEDropShadowElement), unSVGFEDropShadowElement, castToSVGFEDropShadowElement, gTypeSVGFEDropShadowElement
+  , SVGFEFloodElement(SVGFEFloodElement), unSVGFEFloodElement, castToSVGFEFloodElement, gTypeSVGFEFloodElement
+  , SVGFEFuncAElement(SVGFEFuncAElement), unSVGFEFuncAElement, castToSVGFEFuncAElement, gTypeSVGFEFuncAElement
+  , SVGFEFuncBElement(SVGFEFuncBElement), unSVGFEFuncBElement, castToSVGFEFuncBElement, gTypeSVGFEFuncBElement
+  , SVGFEFuncGElement(SVGFEFuncGElement), unSVGFEFuncGElement, castToSVGFEFuncGElement, gTypeSVGFEFuncGElement
+  , SVGFEFuncRElement(SVGFEFuncRElement), unSVGFEFuncRElement, castToSVGFEFuncRElement, gTypeSVGFEFuncRElement
+  , SVGFEGaussianBlurElement(SVGFEGaussianBlurElement), unSVGFEGaussianBlurElement, castToSVGFEGaussianBlurElement, gTypeSVGFEGaussianBlurElement
+  , SVGFEImageElement(SVGFEImageElement), unSVGFEImageElement, castToSVGFEImageElement, gTypeSVGFEImageElement
+  , SVGFEMergeElement(SVGFEMergeElement), unSVGFEMergeElement, castToSVGFEMergeElement, gTypeSVGFEMergeElement
+  , SVGFEMergeNodeElement(SVGFEMergeNodeElement), unSVGFEMergeNodeElement, castToSVGFEMergeNodeElement, gTypeSVGFEMergeNodeElement
+  , SVGFEMorphologyElement(SVGFEMorphologyElement), unSVGFEMorphologyElement, castToSVGFEMorphologyElement, gTypeSVGFEMorphologyElement
+  , SVGFEOffsetElement(SVGFEOffsetElement), unSVGFEOffsetElement, castToSVGFEOffsetElement, gTypeSVGFEOffsetElement
+  , SVGFEPointLightElement(SVGFEPointLightElement), unSVGFEPointLightElement, castToSVGFEPointLightElement, gTypeSVGFEPointLightElement
+  , SVGFESpecularLightingElement(SVGFESpecularLightingElement), unSVGFESpecularLightingElement, castToSVGFESpecularLightingElement, gTypeSVGFESpecularLightingElement
+  , SVGFESpotLightElement(SVGFESpotLightElement), unSVGFESpotLightElement, castToSVGFESpotLightElement, gTypeSVGFESpotLightElement
+  , SVGFETileElement(SVGFETileElement), unSVGFETileElement, castToSVGFETileElement, gTypeSVGFETileElement
+  , SVGFETurbulenceElement(SVGFETurbulenceElement), unSVGFETurbulenceElement, castToSVGFETurbulenceElement, gTypeSVGFETurbulenceElement
+  , SVGFilterElement(SVGFilterElement), unSVGFilterElement, castToSVGFilterElement, gTypeSVGFilterElement
+  , SVGFilterPrimitiveStandardAttributes(SVGFilterPrimitiveStandardAttributes), unSVGFilterPrimitiveStandardAttributes, castToSVGFilterPrimitiveStandardAttributes, gTypeSVGFilterPrimitiveStandardAttributes
+  , SVGFitToViewBox(SVGFitToViewBox), unSVGFitToViewBox, castToSVGFitToViewBox, gTypeSVGFitToViewBox
+  , SVGFontElement(SVGFontElement), unSVGFontElement, castToSVGFontElement, gTypeSVGFontElement
+  , SVGFontFaceElement(SVGFontFaceElement), unSVGFontFaceElement, castToSVGFontFaceElement, gTypeSVGFontFaceElement
+  , SVGFontFaceFormatElement(SVGFontFaceFormatElement), unSVGFontFaceFormatElement, castToSVGFontFaceFormatElement, gTypeSVGFontFaceFormatElement
+  , SVGFontFaceNameElement(SVGFontFaceNameElement), unSVGFontFaceNameElement, castToSVGFontFaceNameElement, gTypeSVGFontFaceNameElement
+  , SVGFontFaceSrcElement(SVGFontFaceSrcElement), unSVGFontFaceSrcElement, castToSVGFontFaceSrcElement, gTypeSVGFontFaceSrcElement
+  , SVGFontFaceUriElement(SVGFontFaceUriElement), unSVGFontFaceUriElement, castToSVGFontFaceUriElement, gTypeSVGFontFaceUriElement
+  , SVGForeignObjectElement(SVGForeignObjectElement), unSVGForeignObjectElement, castToSVGForeignObjectElement, gTypeSVGForeignObjectElement
+  , SVGGElement(SVGGElement), unSVGGElement, castToSVGGElement, gTypeSVGGElement
+  , SVGGlyphElement(SVGGlyphElement), unSVGGlyphElement, castToSVGGlyphElement, gTypeSVGGlyphElement
+  , SVGGlyphRefElement(SVGGlyphRefElement), unSVGGlyphRefElement, castToSVGGlyphRefElement, gTypeSVGGlyphRefElement
+  , SVGGradientElement(SVGGradientElement), unSVGGradientElement, IsSVGGradientElement, toSVGGradientElement, castToSVGGradientElement, gTypeSVGGradientElement
+  , SVGGraphicsElement(SVGGraphicsElement), unSVGGraphicsElement, IsSVGGraphicsElement, toSVGGraphicsElement, castToSVGGraphicsElement, gTypeSVGGraphicsElement
+  , SVGHKernElement(SVGHKernElement), unSVGHKernElement, castToSVGHKernElement, gTypeSVGHKernElement
+  , SVGImageElement(SVGImageElement), unSVGImageElement, castToSVGImageElement, gTypeSVGImageElement
+  , SVGLength(SVGLength), unSVGLength, castToSVGLength, gTypeSVGLength
+  , SVGLengthList(SVGLengthList), unSVGLengthList, castToSVGLengthList, gTypeSVGLengthList
+  , SVGLineElement(SVGLineElement), unSVGLineElement, castToSVGLineElement, gTypeSVGLineElement
+  , SVGLinearGradientElement(SVGLinearGradientElement), unSVGLinearGradientElement, castToSVGLinearGradientElement, gTypeSVGLinearGradientElement
+  , SVGMPathElement(SVGMPathElement), unSVGMPathElement, castToSVGMPathElement, gTypeSVGMPathElement
+  , SVGMarkerElement(SVGMarkerElement), unSVGMarkerElement, castToSVGMarkerElement, gTypeSVGMarkerElement
+  , SVGMaskElement(SVGMaskElement), unSVGMaskElement, castToSVGMaskElement, gTypeSVGMaskElement
+  , SVGMatrix(SVGMatrix), unSVGMatrix, castToSVGMatrix, gTypeSVGMatrix
+  , SVGMetadataElement(SVGMetadataElement), unSVGMetadataElement, castToSVGMetadataElement, gTypeSVGMetadataElement
+  , SVGMissingGlyphElement(SVGMissingGlyphElement), unSVGMissingGlyphElement, castToSVGMissingGlyphElement, gTypeSVGMissingGlyphElement
+  , SVGNumber(SVGNumber), unSVGNumber, castToSVGNumber, gTypeSVGNumber
+  , SVGNumberList(SVGNumberList), unSVGNumberList, castToSVGNumberList, gTypeSVGNumberList
+  , SVGPaint(SVGPaint), unSVGPaint, castToSVGPaint, gTypeSVGPaint
+  , SVGPathElement(SVGPathElement), unSVGPathElement, castToSVGPathElement, gTypeSVGPathElement
+  , SVGPathSeg(SVGPathSeg), unSVGPathSeg, IsSVGPathSeg, toSVGPathSeg, castToSVGPathSeg, gTypeSVGPathSeg
+  , SVGPathSegArcAbs(SVGPathSegArcAbs), unSVGPathSegArcAbs, castToSVGPathSegArcAbs, gTypeSVGPathSegArcAbs
+  , SVGPathSegArcRel(SVGPathSegArcRel), unSVGPathSegArcRel, castToSVGPathSegArcRel, gTypeSVGPathSegArcRel
+  , SVGPathSegClosePath(SVGPathSegClosePath), unSVGPathSegClosePath, castToSVGPathSegClosePath, gTypeSVGPathSegClosePath
+  , SVGPathSegCurvetoCubicAbs(SVGPathSegCurvetoCubicAbs), unSVGPathSegCurvetoCubicAbs, castToSVGPathSegCurvetoCubicAbs, gTypeSVGPathSegCurvetoCubicAbs
+  , SVGPathSegCurvetoCubicRel(SVGPathSegCurvetoCubicRel), unSVGPathSegCurvetoCubicRel, castToSVGPathSegCurvetoCubicRel, gTypeSVGPathSegCurvetoCubicRel
+  , SVGPathSegCurvetoCubicSmoothAbs(SVGPathSegCurvetoCubicSmoothAbs), unSVGPathSegCurvetoCubicSmoothAbs, castToSVGPathSegCurvetoCubicSmoothAbs, gTypeSVGPathSegCurvetoCubicSmoothAbs
+  , SVGPathSegCurvetoCubicSmoothRel(SVGPathSegCurvetoCubicSmoothRel), unSVGPathSegCurvetoCubicSmoothRel, castToSVGPathSegCurvetoCubicSmoothRel, gTypeSVGPathSegCurvetoCubicSmoothRel
+  , SVGPathSegCurvetoQuadraticAbs(SVGPathSegCurvetoQuadraticAbs), unSVGPathSegCurvetoQuadraticAbs, castToSVGPathSegCurvetoQuadraticAbs, gTypeSVGPathSegCurvetoQuadraticAbs
+  , SVGPathSegCurvetoQuadraticRel(SVGPathSegCurvetoQuadraticRel), unSVGPathSegCurvetoQuadraticRel, castToSVGPathSegCurvetoQuadraticRel, gTypeSVGPathSegCurvetoQuadraticRel
+  , SVGPathSegCurvetoQuadraticSmoothAbs(SVGPathSegCurvetoQuadraticSmoothAbs), unSVGPathSegCurvetoQuadraticSmoothAbs, castToSVGPathSegCurvetoQuadraticSmoothAbs, gTypeSVGPathSegCurvetoQuadraticSmoothAbs
+  , SVGPathSegCurvetoQuadraticSmoothRel(SVGPathSegCurvetoQuadraticSmoothRel), unSVGPathSegCurvetoQuadraticSmoothRel, castToSVGPathSegCurvetoQuadraticSmoothRel, gTypeSVGPathSegCurvetoQuadraticSmoothRel
+  , SVGPathSegLinetoAbs(SVGPathSegLinetoAbs), unSVGPathSegLinetoAbs, castToSVGPathSegLinetoAbs, gTypeSVGPathSegLinetoAbs
+  , SVGPathSegLinetoHorizontalAbs(SVGPathSegLinetoHorizontalAbs), unSVGPathSegLinetoHorizontalAbs, castToSVGPathSegLinetoHorizontalAbs, gTypeSVGPathSegLinetoHorizontalAbs
+  , SVGPathSegLinetoHorizontalRel(SVGPathSegLinetoHorizontalRel), unSVGPathSegLinetoHorizontalRel, castToSVGPathSegLinetoHorizontalRel, gTypeSVGPathSegLinetoHorizontalRel
+  , SVGPathSegLinetoRel(SVGPathSegLinetoRel), unSVGPathSegLinetoRel, castToSVGPathSegLinetoRel, gTypeSVGPathSegLinetoRel
+  , SVGPathSegLinetoVerticalAbs(SVGPathSegLinetoVerticalAbs), unSVGPathSegLinetoVerticalAbs, castToSVGPathSegLinetoVerticalAbs, gTypeSVGPathSegLinetoVerticalAbs
+  , SVGPathSegLinetoVerticalRel(SVGPathSegLinetoVerticalRel), unSVGPathSegLinetoVerticalRel, castToSVGPathSegLinetoVerticalRel, gTypeSVGPathSegLinetoVerticalRel
+  , SVGPathSegList(SVGPathSegList), unSVGPathSegList, castToSVGPathSegList, gTypeSVGPathSegList
+  , SVGPathSegMovetoAbs(SVGPathSegMovetoAbs), unSVGPathSegMovetoAbs, castToSVGPathSegMovetoAbs, gTypeSVGPathSegMovetoAbs
+  , SVGPathSegMovetoRel(SVGPathSegMovetoRel), unSVGPathSegMovetoRel, castToSVGPathSegMovetoRel, gTypeSVGPathSegMovetoRel
+  , SVGPatternElement(SVGPatternElement), unSVGPatternElement, castToSVGPatternElement, gTypeSVGPatternElement
+  , SVGPoint(SVGPoint), unSVGPoint, castToSVGPoint, gTypeSVGPoint
+  , SVGPointList(SVGPointList), unSVGPointList, castToSVGPointList, gTypeSVGPointList
+  , SVGPolygonElement(SVGPolygonElement), unSVGPolygonElement, castToSVGPolygonElement, gTypeSVGPolygonElement
+  , SVGPolylineElement(SVGPolylineElement), unSVGPolylineElement, castToSVGPolylineElement, gTypeSVGPolylineElement
+  , SVGPreserveAspectRatio(SVGPreserveAspectRatio), unSVGPreserveAspectRatio, castToSVGPreserveAspectRatio, gTypeSVGPreserveAspectRatio
+  , SVGRadialGradientElement(SVGRadialGradientElement), unSVGRadialGradientElement, castToSVGRadialGradientElement, gTypeSVGRadialGradientElement
+  , SVGRect(SVGRect), unSVGRect, castToSVGRect, gTypeSVGRect
+  , SVGRectElement(SVGRectElement), unSVGRectElement, castToSVGRectElement, gTypeSVGRectElement
+  , SVGRenderingIntent(SVGRenderingIntent), unSVGRenderingIntent, castToSVGRenderingIntent, gTypeSVGRenderingIntent
+  , SVGSVGElement(SVGSVGElement), unSVGSVGElement, castToSVGSVGElement, gTypeSVGSVGElement
+  , SVGScriptElement(SVGScriptElement), unSVGScriptElement, castToSVGScriptElement, gTypeSVGScriptElement
+  , SVGSetElement(SVGSetElement), unSVGSetElement, castToSVGSetElement, gTypeSVGSetElement
+  , SVGStopElement(SVGStopElement), unSVGStopElement, castToSVGStopElement, gTypeSVGStopElement
+  , SVGStringList(SVGStringList), unSVGStringList, castToSVGStringList, gTypeSVGStringList
+  , SVGStyleElement(SVGStyleElement), unSVGStyleElement, castToSVGStyleElement, gTypeSVGStyleElement
+  , SVGSwitchElement(SVGSwitchElement), unSVGSwitchElement, castToSVGSwitchElement, gTypeSVGSwitchElement
+  , SVGSymbolElement(SVGSymbolElement), unSVGSymbolElement, castToSVGSymbolElement, gTypeSVGSymbolElement
+  , SVGTRefElement(SVGTRefElement), unSVGTRefElement, castToSVGTRefElement, gTypeSVGTRefElement
+  , SVGTSpanElement(SVGTSpanElement), unSVGTSpanElement, castToSVGTSpanElement, gTypeSVGTSpanElement
+  , SVGTests(SVGTests), unSVGTests, castToSVGTests, gTypeSVGTests
+  , SVGTextContentElement(SVGTextContentElement), unSVGTextContentElement, IsSVGTextContentElement, toSVGTextContentElement, castToSVGTextContentElement, gTypeSVGTextContentElement
+  , SVGTextElement(SVGTextElement), unSVGTextElement, castToSVGTextElement, gTypeSVGTextElement
+  , SVGTextPathElement(SVGTextPathElement), unSVGTextPathElement, castToSVGTextPathElement, gTypeSVGTextPathElement
+  , SVGTextPositioningElement(SVGTextPositioningElement), unSVGTextPositioningElement, IsSVGTextPositioningElement, toSVGTextPositioningElement, castToSVGTextPositioningElement, gTypeSVGTextPositioningElement
+  , SVGTitleElement(SVGTitleElement), unSVGTitleElement, castToSVGTitleElement, gTypeSVGTitleElement
+  , SVGTransform(SVGTransform), unSVGTransform, castToSVGTransform, gTypeSVGTransform
+  , SVGTransformList(SVGTransformList), unSVGTransformList, castToSVGTransformList, gTypeSVGTransformList
+  , SVGURIReference(SVGURIReference), unSVGURIReference, castToSVGURIReference, gTypeSVGURIReference
+  , SVGUnitTypes(SVGUnitTypes), unSVGUnitTypes, castToSVGUnitTypes, gTypeSVGUnitTypes
+  , SVGUseElement(SVGUseElement), unSVGUseElement, castToSVGUseElement, gTypeSVGUseElement
+  , SVGVKernElement(SVGVKernElement), unSVGVKernElement, castToSVGVKernElement, gTypeSVGVKernElement
+  , SVGViewElement(SVGViewElement), unSVGViewElement, castToSVGViewElement, gTypeSVGViewElement
+  , SVGViewSpec(SVGViewSpec), unSVGViewSpec, castToSVGViewSpec, gTypeSVGViewSpec
+  , SVGZoomAndPan(SVGZoomAndPan), unSVGZoomAndPan, castToSVGZoomAndPan, gTypeSVGZoomAndPan
+  , SVGZoomEvent(SVGZoomEvent), unSVGZoomEvent, castToSVGZoomEvent, gTypeSVGZoomEvent
+  , Screen(Screen), unScreen, castToScreen, gTypeScreen
+  , ScriptProcessorNode(ScriptProcessorNode), unScriptProcessorNode, castToScriptProcessorNode, gTypeScriptProcessorNode
+  , ScriptProfile(ScriptProfile), unScriptProfile, castToScriptProfile, gTypeScriptProfile
+  , ScriptProfileNode(ScriptProfileNode), unScriptProfileNode, castToScriptProfileNode, gTypeScriptProfileNode
+  , SecurityPolicy(SecurityPolicy), unSecurityPolicy, castToSecurityPolicy, gTypeSecurityPolicy
+  , SecurityPolicyViolationEvent(SecurityPolicyViolationEvent), unSecurityPolicyViolationEvent, castToSecurityPolicyViolationEvent, gTypeSecurityPolicyViolationEvent
+  , Selection(Selection), unSelection, castToSelection, gTypeSelection
+  , SourceBuffer(SourceBuffer), unSourceBuffer, castToSourceBuffer, gTypeSourceBuffer
+  , SourceBufferList(SourceBufferList), unSourceBufferList, castToSourceBufferList, gTypeSourceBufferList
+  , SourceInfo(SourceInfo), unSourceInfo, castToSourceInfo, gTypeSourceInfo
+  , SpeechSynthesis(SpeechSynthesis), unSpeechSynthesis, castToSpeechSynthesis, gTypeSpeechSynthesis
+  , SpeechSynthesisEvent(SpeechSynthesisEvent), unSpeechSynthesisEvent, castToSpeechSynthesisEvent, gTypeSpeechSynthesisEvent
+  , SpeechSynthesisUtterance(SpeechSynthesisUtterance), unSpeechSynthesisUtterance, castToSpeechSynthesisUtterance, gTypeSpeechSynthesisUtterance
+  , SpeechSynthesisVoice(SpeechSynthesisVoice), unSpeechSynthesisVoice, castToSpeechSynthesisVoice, gTypeSpeechSynthesisVoice
+  , Storage(Storage), unStorage, castToStorage, gTypeStorage
+  , StorageEvent(StorageEvent), unStorageEvent, castToStorageEvent, gTypeStorageEvent
+  , StorageInfo(StorageInfo), unStorageInfo, castToStorageInfo, gTypeStorageInfo
+  , StorageQuota(StorageQuota), unStorageQuota, castToStorageQuota, gTypeStorageQuota
+  , StyleMedia(StyleMedia), unStyleMedia, castToStyleMedia, gTypeStyleMedia
+  , StyleSheet(StyleSheet), unStyleSheet, IsStyleSheet, toStyleSheet, castToStyleSheet, gTypeStyleSheet
+  , StyleSheetList(StyleSheetList), unStyleSheetList, castToStyleSheetList, gTypeStyleSheetList
+  , SubtleCrypto(SubtleCrypto), unSubtleCrypto, castToSubtleCrypto, gTypeSubtleCrypto
+  , Text(Text), unText, IsText, toText, castToText, gTypeText
+  , TextEvent(TextEvent), unTextEvent, castToTextEvent, gTypeTextEvent
+  , TextMetrics(TextMetrics), unTextMetrics, castToTextMetrics, gTypeTextMetrics
+  , TextTrack(TextTrack), unTextTrack, castToTextTrack, gTypeTextTrack
+  , TextTrackCue(TextTrackCue), unTextTrackCue, IsTextTrackCue, toTextTrackCue, castToTextTrackCue, gTypeTextTrackCue
+  , TextTrackCueList(TextTrackCueList), unTextTrackCueList, castToTextTrackCueList, gTypeTextTrackCueList
+  , TextTrackList(TextTrackList), unTextTrackList, castToTextTrackList, gTypeTextTrackList
+  , TimeRanges(TimeRanges), unTimeRanges, castToTimeRanges, gTypeTimeRanges
+  , Touch(Touch), unTouch, castToTouch, gTypeTouch
+  , TouchEvent(TouchEvent), unTouchEvent, castToTouchEvent, gTypeTouchEvent
+  , TouchList(TouchList), unTouchList, castToTouchList, gTypeTouchList
+  , TrackEvent(TrackEvent), unTrackEvent, castToTrackEvent, gTypeTrackEvent
+  , TransitionEvent(TransitionEvent), unTransitionEvent, castToTransitionEvent, gTypeTransitionEvent
+  , TreeWalker(TreeWalker), unTreeWalker, castToTreeWalker, gTypeTreeWalker
+  , TypeConversions(TypeConversions), unTypeConversions, castToTypeConversions, gTypeTypeConversions
+  , UIEvent(UIEvent), unUIEvent, IsUIEvent, toUIEvent, castToUIEvent, gTypeUIEvent
+  , UIRequestEvent(UIRequestEvent), unUIRequestEvent, castToUIRequestEvent, gTypeUIRequestEvent
+  , URL(URL), unURL, castToURL, gTypeURL
+  , URLUtils(URLUtils), unURLUtils, castToURLUtils, gTypeURLUtils
+  , UserMessageHandler(UserMessageHandler), unUserMessageHandler, castToUserMessageHandler, gTypeUserMessageHandler
+  , UserMessageHandlersNamespace(UserMessageHandlersNamespace), unUserMessageHandlersNamespace, castToUserMessageHandlersNamespace, gTypeUserMessageHandlersNamespace
+  , VTTCue(VTTCue), unVTTCue, castToVTTCue, gTypeVTTCue
+  , VTTRegion(VTTRegion), unVTTRegion, castToVTTRegion, gTypeVTTRegion
+  , VTTRegionList(VTTRegionList), unVTTRegionList, castToVTTRegionList, gTypeVTTRegionList
+  , ValidityState(ValidityState), unValidityState, castToValidityState, gTypeValidityState
+  , VideoPlaybackQuality(VideoPlaybackQuality), unVideoPlaybackQuality, castToVideoPlaybackQuality, gTypeVideoPlaybackQuality
+  , VideoStreamTrack(VideoStreamTrack), unVideoStreamTrack, castToVideoStreamTrack, gTypeVideoStreamTrack
+  , VideoTrack(VideoTrack), unVideoTrack, castToVideoTrack, gTypeVideoTrack
+  , VideoTrackList(VideoTrackList), unVideoTrackList, castToVideoTrackList, gTypeVideoTrackList
+  , WaveShaperNode(WaveShaperNode), unWaveShaperNode, castToWaveShaperNode, gTypeWaveShaperNode
+  , WebGL2RenderingContext(WebGL2RenderingContext), unWebGL2RenderingContext, castToWebGL2RenderingContext, gTypeWebGL2RenderingContext
+  , WebGLActiveInfo(WebGLActiveInfo), unWebGLActiveInfo, castToWebGLActiveInfo, gTypeWebGLActiveInfo
+  , WebGLBuffer(WebGLBuffer), unWebGLBuffer, castToWebGLBuffer, gTypeWebGLBuffer
+  , WebGLCompressedTextureATC(WebGLCompressedTextureATC), unWebGLCompressedTextureATC, castToWebGLCompressedTextureATC, gTypeWebGLCompressedTextureATC
+  , WebGLCompressedTexturePVRTC(WebGLCompressedTexturePVRTC), unWebGLCompressedTexturePVRTC, castToWebGLCompressedTexturePVRTC, gTypeWebGLCompressedTexturePVRTC
+  , WebGLCompressedTextureS3TC(WebGLCompressedTextureS3TC), unWebGLCompressedTextureS3TC, castToWebGLCompressedTextureS3TC, gTypeWebGLCompressedTextureS3TC
+  , WebGLContextAttributes(WebGLContextAttributes), unWebGLContextAttributes, castToWebGLContextAttributes, gTypeWebGLContextAttributes
+  , WebGLContextEvent(WebGLContextEvent), unWebGLContextEvent, castToWebGLContextEvent, gTypeWebGLContextEvent
+  , WebGLDebugRendererInfo(WebGLDebugRendererInfo), unWebGLDebugRendererInfo, castToWebGLDebugRendererInfo, gTypeWebGLDebugRendererInfo
+  , WebGLDebugShaders(WebGLDebugShaders), unWebGLDebugShaders, castToWebGLDebugShaders, gTypeWebGLDebugShaders
+  , WebGLDepthTexture(WebGLDepthTexture), unWebGLDepthTexture, castToWebGLDepthTexture, gTypeWebGLDepthTexture
+  , WebGLDrawBuffers(WebGLDrawBuffers), unWebGLDrawBuffers, castToWebGLDrawBuffers, gTypeWebGLDrawBuffers
+  , WebGLFramebuffer(WebGLFramebuffer), unWebGLFramebuffer, castToWebGLFramebuffer, gTypeWebGLFramebuffer
+  , WebGLLoseContext(WebGLLoseContext), unWebGLLoseContext, castToWebGLLoseContext, gTypeWebGLLoseContext
+  , WebGLProgram(WebGLProgram), unWebGLProgram, castToWebGLProgram, gTypeWebGLProgram
+  , WebGLQuery(WebGLQuery), unWebGLQuery, castToWebGLQuery, gTypeWebGLQuery
+  , WebGLRenderbuffer(WebGLRenderbuffer), unWebGLRenderbuffer, castToWebGLRenderbuffer, gTypeWebGLRenderbuffer
+  , WebGLRenderingContext(WebGLRenderingContext), unWebGLRenderingContext, castToWebGLRenderingContext, gTypeWebGLRenderingContext
+  , WebGLRenderingContextBase(WebGLRenderingContextBase), unWebGLRenderingContextBase, IsWebGLRenderingContextBase, toWebGLRenderingContextBase, castToWebGLRenderingContextBase, gTypeWebGLRenderingContextBase
+  , WebGLSampler(WebGLSampler), unWebGLSampler, castToWebGLSampler, gTypeWebGLSampler
+  , WebGLShader(WebGLShader), unWebGLShader, castToWebGLShader, gTypeWebGLShader
+  , WebGLShaderPrecisionFormat(WebGLShaderPrecisionFormat), unWebGLShaderPrecisionFormat, castToWebGLShaderPrecisionFormat, gTypeWebGLShaderPrecisionFormat
+  , WebGLSync(WebGLSync), unWebGLSync, castToWebGLSync, gTypeWebGLSync
+  , WebGLTexture(WebGLTexture), unWebGLTexture, castToWebGLTexture, gTypeWebGLTexture
+  , WebGLTransformFeedback(WebGLTransformFeedback), unWebGLTransformFeedback, castToWebGLTransformFeedback, gTypeWebGLTransformFeedback
+  , WebGLUniformLocation(WebGLUniformLocation), unWebGLUniformLocation, castToWebGLUniformLocation, gTypeWebGLUniformLocation
+  , WebGLVertexArrayObject(WebGLVertexArrayObject), unWebGLVertexArrayObject, castToWebGLVertexArrayObject, gTypeWebGLVertexArrayObject
+  , WebGLVertexArrayObjectOES(WebGLVertexArrayObjectOES), unWebGLVertexArrayObjectOES, castToWebGLVertexArrayObjectOES, gTypeWebGLVertexArrayObjectOES
+  , WebKitAnimationEvent(WebKitAnimationEvent), unWebKitAnimationEvent, castToWebKitAnimationEvent, gTypeWebKitAnimationEvent
+  , WebKitCSSFilterValue(WebKitCSSFilterValue), unWebKitCSSFilterValue, castToWebKitCSSFilterValue, gTypeWebKitCSSFilterValue
+  , WebKitCSSMatrix(WebKitCSSMatrix), unWebKitCSSMatrix, castToWebKitCSSMatrix, gTypeWebKitCSSMatrix
+  , WebKitCSSRegionRule(WebKitCSSRegionRule), unWebKitCSSRegionRule, castToWebKitCSSRegionRule, gTypeWebKitCSSRegionRule
+  , WebKitCSSTransformValue(WebKitCSSTransformValue), unWebKitCSSTransformValue, castToWebKitCSSTransformValue, gTypeWebKitCSSTransformValue
+  , WebKitCSSViewportRule(WebKitCSSViewportRule), unWebKitCSSViewportRule, castToWebKitCSSViewportRule, gTypeWebKitCSSViewportRule
+  , WebKitNamedFlow(WebKitNamedFlow), unWebKitNamedFlow, castToWebKitNamedFlow, gTypeWebKitNamedFlow
+  , WebKitNamespace(WebKitNamespace), unWebKitNamespace, castToWebKitNamespace, gTypeWebKitNamespace
+  , WebKitPlaybackTargetAvailabilityEvent(WebKitPlaybackTargetAvailabilityEvent), unWebKitPlaybackTargetAvailabilityEvent, castToWebKitPlaybackTargetAvailabilityEvent, gTypeWebKitPlaybackTargetAvailabilityEvent
+  , WebKitPoint(WebKitPoint), unWebKitPoint, castToWebKitPoint, gTypeWebKitPoint
+  , WebKitTransitionEvent(WebKitTransitionEvent), unWebKitTransitionEvent, castToWebKitTransitionEvent, gTypeWebKitTransitionEvent
+  , WebSocket(WebSocket), unWebSocket, castToWebSocket, gTypeWebSocket
+  , WheelEvent(WheelEvent), unWheelEvent, castToWheelEvent, gTypeWheelEvent
+  , Window(Window), unWindow, castToWindow, gTypeWindow
+  , WindowBase64(WindowBase64), unWindowBase64, castToWindowBase64, gTypeWindowBase64
+  , WindowTimers(WindowTimers), unWindowTimers, castToWindowTimers, gTypeWindowTimers
+  , Worker(Worker), unWorker, castToWorker, gTypeWorker
+  , WorkerGlobalScope(WorkerGlobalScope), unWorkerGlobalScope, IsWorkerGlobalScope, toWorkerGlobalScope, castToWorkerGlobalScope, gTypeWorkerGlobalScope
+  , WorkerLocation(WorkerLocation), unWorkerLocation, castToWorkerLocation, gTypeWorkerLocation
+  , WorkerNavigator(WorkerNavigator), unWorkerNavigator, castToWorkerNavigator, gTypeWorkerNavigator
+  , XMLHttpRequest(XMLHttpRequest), unXMLHttpRequest, castToXMLHttpRequest, gTypeXMLHttpRequest
+  , XMLHttpRequestProgressEvent(XMLHttpRequestProgressEvent), unXMLHttpRequestProgressEvent, castToXMLHttpRequestProgressEvent, gTypeXMLHttpRequestProgressEvent
+  , XMLHttpRequestUpload(XMLHttpRequestUpload), unXMLHttpRequestUpload, castToXMLHttpRequestUpload, gTypeXMLHttpRequestUpload
+  , XMLSerializer(XMLSerializer), unXMLSerializer, castToXMLSerializer, gTypeXMLSerializer
+  , XPathEvaluator(XPathEvaluator), unXPathEvaluator, castToXPathEvaluator, gTypeXPathEvaluator
+  , XPathExpression(XPathExpression), unXPathExpression, castToXPathExpression, gTypeXPathExpression
+  , XPathNSResolver(XPathNSResolver), unXPathNSResolver, castToXPathNSResolver, gTypeXPathNSResolver
+  , XPathResult(XPathResult), unXPathResult, castToXPathResult, gTypeXPathResult
+  , XSLTProcessor(XSLTProcessor), unXSLTProcessor, castToXSLTProcessor, gTypeXSLTProcessor
+#else
+    propagateGError, GType(..), DOMString(..), ToDOMString(..), FromDOMString(..)
+  , FocusEvent
+  , TouchEvent
+  , module Graphics.UI.Gtk.WebKit.Types
+  , IsGObject
+
+  , IsApplicationCache
+  , IsAttr
+#ifndef USE_OLD_WEBKIT
+  , IsAudioTrack
+#endif
+#ifndef USE_OLD_WEBKIT
+  , IsAudioTrackList
+#endif
+#ifndef USE_OLD_WEBKIT
+  , IsBarProp
+#endif
+#ifndef USE_OLD_WEBKIT
+  , IsBatteryManager
+#endif
+  , IsBlob
+  , IsCDATASection
+#ifndef USE_OLD_WEBKIT
+  , IsCSS
+#endif
+  , IsCSSRule
+  , IsCSSRuleList
+  , IsCSSStyleDeclaration
+  , IsCSSStyleSheet
+  , IsCSSValue
+  , IsCharacterData
+  , IsComment
+  , IsDOMImplementation
+#ifndef USE_OLD_WEBKIT
+  , IsDOMNamedFlowCollection
+#endif
+  , IsDOMSettableTokenList
+  , IsDOMStringList
+  , IsDOMTokenList
+  , IsDocument
+  , IsDocumentFragment
+  , IsDocumentType
+  , IsElement
+  , IsEntityReference
+  , IsEvent
+  , IsEventTarget
+  , IsFile
+  , IsFileList
+  , IsGeolocation
+  , IsHTMLAnchorElement
+  , IsHTMLAppletElement
+  , IsHTMLAreaElement
+  , IsHTMLAudioElement
+  , IsHTMLBRElement
+  , IsHTMLBaseElement
+  , IsHTMLBaseFontElement
+  , IsHTMLBodyElement
+  , IsHTMLButtonElement
+  , IsHTMLCanvasElement
+  , IsHTMLCollection
+  , IsHTMLDListElement
+  , IsHTMLDetailsElement
+  , IsHTMLDirectoryElement
+  , IsHTMLDivElement
+  , IsHTMLDocument
+  , IsHTMLElement
+  , IsHTMLEmbedElement
+  , IsHTMLFieldSetElement
+  , IsHTMLFontElement
+  , IsHTMLFormElement
+  , IsHTMLFrameElement
+  , IsHTMLFrameSetElement
+  , IsHTMLHRElement
+  , IsHTMLHeadElement
+  , IsHTMLHeadingElement
+  , IsHTMLHtmlElement
+  , IsHTMLIFrameElement
+  , IsHTMLImageElement
+  , IsHTMLInputElement
+  , IsHTMLKeygenElement
+  , IsHTMLLIElement
+  , IsHTMLLabelElement
+  , IsHTMLLegendElement
+  , IsHTMLLinkElement
+  , IsHTMLMapElement
+  , IsHTMLMarqueeElement
+  , IsHTMLMediaElement
+  , IsHTMLMenuElement
+  , IsHTMLMetaElement
+  , IsHTMLModElement
+  , IsHTMLOListElement
+  , IsHTMLObjectElement
+  , IsHTMLOptGroupElement
+  , IsHTMLOptionElement
+  , IsHTMLOptionsCollection
+  , IsHTMLParagraphElement
+  , IsHTMLParamElement
+  , IsHTMLPreElement
+  , IsHTMLQuoteElement
+  , IsHTMLScriptElement
+  , IsHTMLSelectElement
+  , IsHTMLStyleElement
+  , IsHTMLTableCaptionElement
+  , IsHTMLTableCellElement
+  , IsHTMLTableColElement
+  , IsHTMLTableElement
+  , IsHTMLTableRowElement
+  , IsHTMLTableSectionElement
+  , IsHTMLTextAreaElement
+  , IsHTMLTitleElement
+  , IsHTMLUListElement
+  , IsHTMLVideoElement
+  , IsHistory
+#ifndef USE_OLD_WEBKIT
+  , IsKeyboardEvent
+#endif
+  , IsLocation
+  , IsMediaError
+  , IsMediaList
+  , IsMediaQueryList
+  , IsMessagePort
+  , IsMimeType
+  , IsMimeTypeArray
+  , IsMouseEvent
+  , IsNamedNodeMap
+  , IsNavigator
+  , IsNode
+  , IsNodeFilter
+  , IsNodeIterator
+  , IsNodeList
+#ifndef USE_OLD_WEBKIT
+  , IsPerformance
+#endif
+#ifndef USE_OLD_WEBKIT
+  , IsPerformanceNavigation
+#endif
+#ifndef USE_OLD_WEBKIT
+  , IsPerformanceTiming
+#endif
+  , IsPlugin
+  , IsPluginArray
+  , IsProcessingInstruction
+  , IsRange
+  , IsScreen
+#ifndef USE_OLD_WEBKIT
+  , IsSecurityPolicy
+#endif
+  , IsSelection
+  , IsStorage
+#ifndef USE_OLD_WEBKIT
+  , IsStorageInfo
+#endif
+#ifndef USE_OLD_WEBKIT
+  , IsStorageQuota
+#endif
+  , IsStyleMedia
+  , IsStyleSheet
+  , IsStyleSheetList
+  , IsText
+#ifndef USE_OLD_WEBKIT
+  , IsTextTrack
+#endif
+#ifndef USE_OLD_WEBKIT
+  , IsTextTrackCue
+#endif
+#ifndef USE_OLD_WEBKIT
+  , IsTextTrackCueList
+#endif
+#ifndef USE_OLD_WEBKIT
+  , IsTextTrackList
+#endif
+  , IsTimeRanges
+#ifndef USE_OLD_WEBKIT
+  , IsTouch
+#endif
+  , IsTreeWalker
+  , IsUIEvent
+  , IsValidityState
+#ifndef USE_OLD_WEBKIT
+  , IsVideoTrack
+#endif
+#ifndef USE_OLD_WEBKIT
+  , IsVideoTrackList
+#endif
+  , IsWebKitNamedFlow
+  , IsWebKitPoint
+#ifndef USE_OLD_WEBKIT
+  , IsWheelEvent
+#endif
+  , IsWindow
+  , IsXPathExpression
+  , IsXPathNSResolver
+  , IsXPathResult
+-- AUTO GENERATION ENDS HERE
+#endif
+  ) where
+
+import Control.Applicative ((<$>))
+import qualified Data.Text as T (Text)
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+import qualified Data.Text.Lazy as LT (Text)
+import Data.JSString (pack, unpack)
+import Data.JSString.Text (textToJSString, textFromJSString, lazyTextToJSString, lazyTextFromJSString)
+import GHCJS.Types (JSRef(..), nullRef, isNull, isUndefined, JSString(..))
+import GHCJS.Marshal (ToJSRef(..), FromJSRef(..))
+import GHCJS.Marshal.Pure (PToJSRef(..), PFromJSRef(..))
+import GHCJS.Nullable (Nullable(..), nullableToMaybe, maybeToNullable)
+import GHCJS.Foreign.Callback.Internal (Callback(..))
+import Control.Monad.IO.Class (MonadIO(..))
+#else
+import Data.Maybe (isNothing)
+import Foreign.C (CString)
+import Graphics.UI.Gtk.WebKit.Types
+import System.Glib (propagateGError, GType(..))
+import System.Glib.UTFString
+       (readUTFString, GlibString(..))
+#endif
+import Data.Int (Int8, Int16, Int32, Int64)
+import Data.Word (Word8, Word16, Word32, Word64)
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+maybeJSNullOrUndefined :: JSRef -> Maybe JSRef
+maybeJSNullOrUndefined r | isNull r || isUndefined r = Nothing
+maybeJSNullOrUndefined r = Just r
+
+propagateGError = id
+
+newtype GType = GType JSRef
+
+foreign import javascript unsafe
+  "$1===$2" js_eq :: JSRef -> JSRef -> Bool
+
+#ifdef ghcjs_HOST_OS
+foreign import javascript unsafe "h$isInstanceOf $1 $2"
+    typeInstanceIsA' :: JSRef -> JSRef -> Bool
+#else
+typeInstanceIsA' :: JSRef -> JSRef -> Bool
+typeInstanceIsA' = error "typeInstanceIsA': only available in JavaScript"
+#endif
+
+typeInstanceIsA o (GType t) = typeInstanceIsA' o t
+
+-- The usage of foreignPtrToPtr should be safe as the evaluation will only be
+-- forced if the object is used afterwards
+--
+castTo :: (IsGObject obj, IsGObject obj') => GType -> String
+                                                -> (obj -> obj')
+castTo gtype objTypeName obj =
+  case toGObject obj of
+    gobj@(GObject objRef)
+      | typeInstanceIsA objRef gtype
+                  -> unsafeCastGObject gobj
+      | otherwise -> error $ "Cannot cast object to " ++ objTypeName
+
+-- | Determine if this is an instance of a particular type
+--
+isA :: IsGObject o => o -> GType -> Bool
+isA obj = typeInstanceIsA (unGObject $ toGObject obj)
+
+newtype GObject = GObject { unGObject :: JSRef }
+
+class (ToJSRef o, FromJSRef o) => IsGObject o where
+  -- | Safe upcast.
+  toGObject         :: o -> GObject
+  -- | Unchecked downcast.
+  unsafeCastGObject :: GObject -> o
+
+instance PToJSRef GObject where
+  pToJSRef = unGObject
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef GObject where
+  pFromJSRef = GObject
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef GObject where
+  toJSRef = return . unGObject
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef GObject where
+  fromJSRef = return . fmap GObject . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+--instance IsGObject o => PToJSRef o where
+--  pToJSRef = unGObject . toGObject
+--  {-# INLINE pToJSRef #-}
+--
+--instance IsGObject o => PFromJSRef o where
+--  pFromJSRef = unsafeCastGObject . GObject . castRef
+--  {-# INLINE pFromJSRef #-}
+--
+--instance IsGObject o => ToJSRef o where
+--  toJSRef = return . unGObject . toGObject
+--  {-# INLINE toJSRef #-}
+--
+--instance IsGObject o => FromJSRef o where
+--  fromJSRef = return . fmap (unsafeCastGObject . GObject . castRef) . maybeJSNullOrUndefined
+--  {-# INLINE fromJSRef #-}
+
+instance IsGObject GObject where
+  toGObject = id
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = id
+  {-# INLINE unsafeCastGObject #-}
+
+castToGObject :: IsGObject obj => obj -> obj
+castToGObject = id
+
+#ifdef ghcjs_HOST_OS
+foreign import javascript unsafe "object" gTypeGObject :: GType
+#else
+gTypeGObject = error "gTypeGObject: only available in JavaScript"
+#endif
+
+foreign import javascript unsafe "$1[\"toString\"]()" js_objectToString :: GObject -> IO JSString
+
+objectToString :: (MonadIO m, IsGObject self, FromJSString result) => self -> m result
+objectToString self = liftIO (fromJSString <$> (js_objectToString (toGObject self)))
+
+#ifdef ghcjs_HOST_OS
+-- | Fastest string type to use when you just
+--   want to take a string from the DOM then
+--   give it back as is.
+type DOMString = JSString
+
+class (PToJSRef a, ToJSRef a) => ToJSString a
+class (PFromJSRef a, FromJSRef a) => FromJSString a
+
+toJSString :: ToJSString a => a -> JSString
+toJSString = pFromJSRef . pToJSRef
+{-# INLINE toJSString #-}
+
+fromJSString :: FromJSString a => JSString -> a
+fromJSString = pFromJSRef . pToJSRef
+{-# INLINE fromJSString #-}
+
+toMaybeJSString :: ToJSString a => Maybe a -> Nullable JSString
+toMaybeJSString = Nullable . pToJSRef
+{-# INLINE toMaybeJSString #-}
+
+fromMaybeJSString :: FromJSString a => Nullable JSString -> Maybe a
+fromMaybeJSString (Nullable r) = pFromJSRef r
+{-# INLINE fromMaybeJSString #-}
+
+instance ToJSString   [Char]
+instance FromJSString [Char]
+instance ToJSString   T.Text
+instance FromJSString T.Text
+instance ToJSString   JSString
+instance FromJSString JSString
+
+type ToDOMString s = ToJSString s
+type FromDOMString s = FromJSString s
+#endif
+
+#else
+type IsGObject o = GObjectClass o
+
+-- | Fastest string type to use when you just
+--   want to take a string from the DOM then
+--   give it back as is.
+type DOMString = T.Text
+
+type ToDOMString s = GlibString s
+type FromDOMString s = GlibString s
+
+type FocusEvent = UIEvent
+type TouchEvent = UIEvent
+#endif
+
+type IsDOMString s = (ToDOMString s, FromDOMString s)
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- Callbacks
+newtype AudioBufferCallback = AudioBufferCallback (Callback (JSRef -> IO ()))
+instance PToJSRef AudioBufferCallback where pToJSRef (AudioBufferCallback (Callback r)) = r
+newtype DatabaseCallback = DatabaseCallback (Callback (JSRef -> IO ()))
+instance PToJSRef DatabaseCallback where pToJSRef (DatabaseCallback (Callback r)) = r
+newtype MediaQueryListListener = MediaQueryListListener (Callback (JSRef -> IO ()))
+instance PToJSRef MediaQueryListListener where pToJSRef (MediaQueryListListener (Callback r)) = r
+newtype MediaStreamTrackSourcesCallback = MediaStreamTrackSourcesCallback (Callback (JSRef -> IO ()))
+instance PToJSRef MediaStreamTrackSourcesCallback where pToJSRef (MediaStreamTrackSourcesCallback (Callback r)) = r
+newtype NavigatorUserMediaErrorCallback = NavigatorUserMediaErrorCallback (Callback (JSRef -> IO ()))
+instance PToJSRef NavigatorUserMediaErrorCallback where pToJSRef (NavigatorUserMediaErrorCallback (Callback r)) = r
+newtype NavigatorUserMediaSuccessCallback = NavigatorUserMediaSuccessCallback (Callback (JSRef -> IO ()))
+instance PToJSRef NavigatorUserMediaSuccessCallback where pToJSRef (NavigatorUserMediaSuccessCallback (Callback r)) = r
+newtype NotificationPermissionCallback permissions = NotificationPermissionCallback (Callback (JSRef -> IO ()))
+instance PToJSRef (NotificationPermissionCallback permissions) where pToJSRef (NotificationPermissionCallback (Callback r)) = r
+newtype PositionCallback = PositionCallback (Callback (JSRef -> IO ()))
+instance PToJSRef PositionCallback where pToJSRef (PositionCallback (Callback r)) = r
+newtype PositionErrorCallback = PositionErrorCallback (Callback (JSRef -> IO ()))
+instance PToJSRef PositionErrorCallback where pToJSRef (PositionErrorCallback (Callback r)) = r
+newtype RequestAnimationFrameCallback = RequestAnimationFrameCallback (Callback (JSRef -> IO ()))
+instance PToJSRef RequestAnimationFrameCallback where pToJSRef (RequestAnimationFrameCallback (Callback r)) = r
+newtype RTCPeerConnectionErrorCallback = RTCPeerConnectionErrorCallback (Callback (JSRef -> IO ()))
+instance PToJSRef RTCPeerConnectionErrorCallback where pToJSRef (RTCPeerConnectionErrorCallback (Callback r)) = r
+newtype RTCSessionDescriptionCallback = RTCSessionDescriptionCallback (Callback (JSRef -> IO ()))
+instance PToJSRef RTCSessionDescriptionCallback where pToJSRef (RTCSessionDescriptionCallback (Callback r)) = r
+newtype RTCStatsCallback = RTCStatsCallback (Callback (JSRef -> IO ()))
+instance PToJSRef RTCStatsCallback where pToJSRef (RTCStatsCallback (Callback r)) = r
+newtype SQLStatementCallback = SQLStatementCallback (Callback (JSRef -> JSRef -> IO ()))
+instance PToJSRef SQLStatementCallback where pToJSRef (SQLStatementCallback (Callback r)) = r
+newtype SQLStatementErrorCallback = SQLStatementErrorCallback (Callback (JSRef -> JSRef -> IO ()))
+instance PToJSRef SQLStatementErrorCallback where pToJSRef (SQLStatementErrorCallback (Callback r)) = r
+newtype SQLTransactionCallback = SQLTransactionCallback (Callback (JSRef -> IO ()))
+instance PToJSRef SQLTransactionCallback where pToJSRef (SQLTransactionCallback (Callback r)) = r
+newtype SQLTransactionErrorCallback = SQLTransactionErrorCallback (Callback (JSRef -> IO ()))
+instance PToJSRef SQLTransactionErrorCallback where pToJSRef (SQLTransactionErrorCallback (Callback r)) = r
+newtype StorageErrorCallback = StorageErrorCallback (Callback (JSRef -> IO ()))
+instance PToJSRef StorageErrorCallback where pToJSRef (StorageErrorCallback (Callback r)) = r
+newtype StorageQuotaCallback = StorageQuotaCallback (Callback (JSRef -> IO ()))
+instance PToJSRef StorageQuotaCallback where pToJSRef (StorageQuotaCallback (Callback r)) = r
+newtype StorageUsageCallback = StorageUsageCallback (Callback (JSRef -> JSRef -> IO ()))
+instance PToJSRef StorageUsageCallback where pToJSRef (StorageUsageCallback (Callback r)) = r
+newtype StringCallback s = StringCallback (Callback (JSRef -> IO ()))
+instance PToJSRef (StringCallback s) where pToJSRef (StringCallback (Callback r)) = r
+newtype VoidCallback = VoidCallback (Callback (IO ()))
+instance PToJSRef VoidCallback where pToJSRef (VoidCallback (Callback r)) = r
+#endif
+
+-- Custom types
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+newtype SerializedScriptValue = SerializedScriptValue { unSerializedScriptValue :: JSRef }
+
+instance Eq SerializedScriptValue where
+  (SerializedScriptValue a) == (SerializedScriptValue b) = js_eq a b
+
+instance PToJSRef SerializedScriptValue where
+  pToJSRef = unSerializedScriptValue
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SerializedScriptValue where
+  pFromJSRef = SerializedScriptValue
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SerializedScriptValue where
+  toJSRef = return . unSerializedScriptValue
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SerializedScriptValue where
+  fromJSRef = return . fmap SerializedScriptValue . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsGObject o => IsSerializedScriptValue o
+toSerializedScriptValue :: IsSerializedScriptValue o => o -> SerializedScriptValue
+toSerializedScriptValue = unsafeCastGObject . toGObject
+
+instance IsSerializedScriptValue SerializedScriptValue
+instance IsGObject SerializedScriptValue where
+  toGObject = GObject . unSerializedScriptValue
+  unsafeCastGObject = SerializedScriptValue . unGObject
+-- TODO add more IsSerializedScriptValue instances
+#else
+-- TODO work out how we can support SerializedScriptValue in native code
+#endif
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+newtype PositionOptions = PositionOptions { unPositionOptions :: JSRef }
+
+instance Eq PositionOptions where
+  (PositionOptions a) == (PositionOptions b) = js_eq a b
+
+instance PToJSRef PositionOptions where
+  pToJSRef = unPositionOptions
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef PositionOptions where
+  pFromJSRef = PositionOptions
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef PositionOptions where
+  toJSRef = return . unPositionOptions
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef PositionOptions where
+  fromJSRef = return . fmap PositionOptions . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsGObject o => IsPositionOptions o
+toPositionOptions :: IsPositionOptions o => o -> PositionOptions
+toPositionOptions = unsafeCastGObject . toGObject
+
+instance IsPositionOptions PositionOptions
+instance IsGObject PositionOptions where
+  toGObject = GObject . unPositionOptions
+  unsafeCastGObject = PositionOptions . unGObject
+-- TODO add more IsPositionOptions instances
+#else
+-- TODO work out how we can support PositionOptions in native code
+#endif
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+newtype Dictionary = Dictionary { unDictionary :: JSRef }
+
+instance Eq Dictionary where
+  (Dictionary a) == (Dictionary b) = js_eq a b
+
+instance PToJSRef Dictionary where
+  pToJSRef = unDictionary
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef Dictionary where
+  pFromJSRef = Dictionary
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef Dictionary where
+  toJSRef = return . unDictionary
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef Dictionary where
+  fromJSRef = return . fmap Dictionary . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsGObject o => IsDictionary o
+toDictionary :: IsDictionary o => o -> Dictionary
+toDictionary = unsafeCastGObject . toGObject
+
+instance IsDictionary Dictionary
+instance IsGObject Dictionary where
+  toGObject = GObject . unDictionary
+  unsafeCastGObject = Dictionary . unGObject
+-- TODO add more IsDictionary instances
+#else
+-- TODO work out how we can support Dictionary in native code
+#endif
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+newtype BlobPropertyBag = BlobPropertyBag { unBlobPropertyBag :: JSRef }
+
+instance Eq BlobPropertyBag where
+  (BlobPropertyBag a) == (BlobPropertyBag b) = js_eq a b
+
+instance PToJSRef BlobPropertyBag where
+  pToJSRef = unBlobPropertyBag
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef BlobPropertyBag where
+  pFromJSRef = BlobPropertyBag
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef BlobPropertyBag where
+  toJSRef = return . unBlobPropertyBag
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef BlobPropertyBag where
+  fromJSRef = return . fmap BlobPropertyBag . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsGObject o => IsBlobPropertyBag o
+toBlobPropertyBag :: IsBlobPropertyBag o => o -> BlobPropertyBag
+toBlobPropertyBag = unsafeCastGObject . toGObject
+
+instance IsBlobPropertyBag BlobPropertyBag
+instance IsGObject BlobPropertyBag where
+  toGObject = GObject . unBlobPropertyBag
+  unsafeCastGObject = BlobPropertyBag . unGObject
+-- TODO add more IsBlobPropertyBag instances
+#else
+-- TODO work out how we can support BlobPropertyBag in native code
+#endif
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+newtype MutationCallback = MutationCallback { unMutationCallback :: JSRef }
+
+instance Eq MutationCallback where
+  (MutationCallback a) == (MutationCallback b) = js_eq a b
+
+instance PToJSRef MutationCallback where
+  pToJSRef = unMutationCallback
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef MutationCallback where
+  pFromJSRef = MutationCallback
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef MutationCallback where
+  toJSRef = return . unMutationCallback
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef MutationCallback where
+  fromJSRef = return . fmap MutationCallback . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsGObject o => IsMutationCallback o
+toMutationCallback :: IsMutationCallback o => o -> MutationCallback
+toMutationCallback = unsafeCastGObject . toGObject
+
+instance IsMutationCallback MutationCallback
+instance IsGObject MutationCallback where
+  toGObject = GObject . unMutationCallback
+  unsafeCastGObject = MutationCallback . unGObject
+-- TODO add more IsMutationCallback instances
+#else
+-- TODO work out how we can support MutationCallback in native code
+#endif
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+newtype Promise = Promise { unPromise :: JSRef }
+
+instance Eq Promise where
+  (Promise a) == (Promise b) = js_eq a b
+
+instance PToJSRef Promise where
+  pToJSRef = unPromise
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef Promise where
+  pFromJSRef = Promise
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef Promise where
+  toJSRef = return . unPromise
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef Promise where
+  fromJSRef = return . fmap Promise . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsGObject o => IsPromise o
+toPromise :: IsPromise o => o -> Promise
+toPromise = unsafeCastGObject . toGObject
+
+instance IsPromise Promise
+instance IsGObject Promise where
+  toGObject = GObject . unPromise
+  unsafeCastGObject = Promise . unGObject
+-- TODO add more IsPromise instances
+
+castToPromise :: IsGObject obj => obj -> Promise
+castToPromise = castTo gTypePromise "Promise"
+
+foreign import javascript unsafe "window[\"Promise\"]" gTypePromise :: GType
+#else
+-- TODO work out how we can support Promise in native code
+#endif
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+newtype ArrayBuffer = ArrayBuffer { unArrayBuffer :: JSRef }
+
+instance Eq ArrayBuffer where
+  (ArrayBuffer a) == (ArrayBuffer b) = js_eq a b
+
+instance PToJSRef ArrayBuffer where
+  pToJSRef = unArrayBuffer
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef ArrayBuffer where
+  pFromJSRef = ArrayBuffer
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef ArrayBuffer where
+  toJSRef = return . unArrayBuffer
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef ArrayBuffer where
+  fromJSRef = return . fmap ArrayBuffer . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsGObject o => IsArrayBuffer o
+toArrayBuffer :: IsArrayBuffer o => o -> ArrayBuffer
+toArrayBuffer = unsafeCastGObject . toGObject
+
+instance IsArrayBuffer ArrayBuffer
+instance IsGObject ArrayBuffer where
+  toGObject = GObject . unArrayBuffer
+  unsafeCastGObject = ArrayBuffer . unGObject
+
+castToArrayBuffer :: IsGObject obj => obj -> ArrayBuffer
+castToArrayBuffer = castTo gTypeArrayBuffer "ArrayBuffer"
+
+foreign import javascript unsafe "window[\"ArrayBuffer\"]" gTypeArrayBuffer :: GType
+#else
+-- TODO work out how we can support ArrayBuffer in native code
+#endif
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+newtype Float32Array = Float32Array { unFloat32Array :: JSRef }
+
+instance Eq Float32Array where
+  (Float32Array a) == (Float32Array b) = js_eq a b
+
+instance PToJSRef Float32Array where
+  pToJSRef = unFloat32Array
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef Float32Array where
+  pFromJSRef = Float32Array
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef Float32Array where
+  toJSRef = return . unFloat32Array
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef Float32Array where
+  fromJSRef = return . fmap Float32Array . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsGObject o => IsFloat32Array o
+toFloat32Array :: IsFloat32Array o => o -> Float32Array
+toFloat32Array = unsafeCastGObject . toGObject
+
+instance IsFloat32Array Float32Array
+instance IsGObject Float32Array where
+  toGObject = GObject . unFloat32Array
+  unsafeCastGObject = Float32Array . unGObject
+-- TODO add more IsFloat32Array instances
+
+castToFloat32Array :: IsGObject obj => obj -> Float32Array
+castToFloat32Array = castTo gTypeFloat32Array "Float32Array"
+
+foreign import javascript unsafe "window[\"Float32Array\"]" gTypeFloat32Array :: GType
+#else
+-- TODO work out how we can support Float32Array in native code
+#endif
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+newtype Float64Array = Float64Array { unFloat64Array :: JSRef }
+
+instance Eq Float64Array where
+  (Float64Array a) == (Float64Array b) = js_eq a b
+
+instance PToJSRef Float64Array where
+  pToJSRef = unFloat64Array
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef Float64Array where
+  pFromJSRef = Float64Array
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef Float64Array where
+  toJSRef = return . unFloat64Array
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef Float64Array where
+  fromJSRef = return . fmap Float64Array . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsGObject o => IsFloat64Array o
+toFloat64Array :: IsFloat64Array o => o -> Float64Array
+toFloat64Array = unsafeCastGObject . toGObject
+
+instance IsFloat64Array Float64Array
+instance IsGObject Float64Array where
+  toGObject = GObject . unFloat64Array
+  unsafeCastGObject = Float64Array . unGObject
+-- TODO add more IsFloat64Array instances
+
+castToFloat64Array :: IsGObject obj => obj -> Float64Array
+castToFloat64Array = castTo gTypeFloat64Array "Float64Array"
+
+foreign import javascript unsafe "window[\"Float64Array\"]" gTypeFloat64Array :: GType
+#else
+-- TODO work out how we can support Float64Array in native code
+#endif
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+newtype Uint8Array = Uint8Array { unUint8Array :: JSRef }
+
+instance Eq Uint8Array where
+  (Uint8Array a) == (Uint8Array b) = js_eq a b
+
+instance PToJSRef Uint8Array where
+  pToJSRef = unUint8Array
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef Uint8Array where
+  pFromJSRef = Uint8Array
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef Uint8Array where
+  toJSRef = return . unUint8Array
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef Uint8Array where
+  fromJSRef = return . fmap Uint8Array . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsGObject o => IsUint8Array o
+toUint8Array :: IsUint8Array o => o -> Uint8Array
+toUint8Array = unsafeCastGObject . toGObject
+
+instance IsUint8Array Uint8Array
+instance IsGObject Uint8Array where
+  toGObject = GObject . unUint8Array
+  unsafeCastGObject = Uint8Array . unGObject
+-- TODO add more IsUint8Array instances
+
+castToUint8Array :: IsGObject obj => obj -> Uint8Array
+castToUint8Array = castTo gTypeUint8Array "Uint8Array"
+
+foreign import javascript unsafe "window[\"Uint8Array\"]" gTypeUint8Array :: GType
+#else
+-- TODO work out how we can support Uint8Array in native code
+#endif
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+newtype Uint8ClampedArray = Uint8ClampedArray { unUint8ClampedArray :: JSRef }
+
+instance Eq Uint8ClampedArray where
+  (Uint8ClampedArray a) == (Uint8ClampedArray b) = js_eq a b
+
+instance PToJSRef Uint8ClampedArray where
+  pToJSRef = unUint8ClampedArray
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef Uint8ClampedArray where
+  pFromJSRef = Uint8ClampedArray
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef Uint8ClampedArray where
+  toJSRef = return . unUint8ClampedArray
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef Uint8ClampedArray where
+  fromJSRef = return . fmap Uint8ClampedArray . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsGObject o => IsUint8ClampedArray o
+toUint8ClampedArray :: IsUint8ClampedArray o => o -> Uint8ClampedArray
+toUint8ClampedArray = unsafeCastGObject . toGObject
+
+instance IsUint8ClampedArray Uint8ClampedArray
+instance IsGObject Uint8ClampedArray where
+  toGObject = GObject . unUint8ClampedArray
+  unsafeCastGObject = Uint8ClampedArray . unGObject
+-- TODO add more IsUint8ClampedArray instances
+
+castToUint8ClampedArray :: IsGObject obj => obj -> Uint8ClampedArray
+castToUint8ClampedArray = castTo gTypeUint8ClampedArray "Uint8ClampedArray"
+
+foreign import javascript unsafe "window[\"Uint8ClampedArray\"]" gTypeUint8ClampedArray :: GType
+#else
+-- TODO work out how we can support Uint8ClampedArray in native code
+#endif
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+newtype Uint16Array = Uint16Array { unUint16Array :: JSRef }
+
+instance Eq Uint16Array where
+  (Uint16Array a) == (Uint16Array b) = js_eq a b
+
+instance PToJSRef Uint16Array where
+  pToJSRef = unUint16Array
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef Uint16Array where
+  pFromJSRef = Uint16Array
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef Uint16Array where
+  toJSRef = return . unUint16Array
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef Uint16Array where
+  fromJSRef = return . fmap Uint16Array . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsGObject o => IsUint16Array o
+toUint16Array :: IsUint16Array o => o -> Uint16Array
+toUint16Array = unsafeCastGObject . toGObject
+
+instance IsUint16Array Uint16Array
+instance IsGObject Uint16Array where
+  toGObject = GObject . unUint16Array
+  unsafeCastGObject = Uint16Array . unGObject
+-- TODO add more IsUint16Array instances
+
+castToUint16Array :: IsGObject obj => obj -> Uint16Array
+castToUint16Array = castTo gTypeUint16Array "Uint16Array"
+
+foreign import javascript unsafe "window[\"Uint16Array\"]" gTypeUint16Array :: GType
+#else
+-- TODO work out how we can support Uint16Array in native code
+#endif
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+newtype Uint32Array = Uint32Array { unUint32Array :: JSRef }
+
+instance Eq Uint32Array where
+  (Uint32Array a) == (Uint32Array b) = js_eq a b
+
+instance PToJSRef Uint32Array where
+  pToJSRef = unUint32Array
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef Uint32Array where
+  pFromJSRef = Uint32Array
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef Uint32Array where
+  toJSRef = return . unUint32Array
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef Uint32Array where
+  fromJSRef = return . fmap Uint32Array . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsGObject o => IsUint32Array o
+toUint32Array :: IsUint32Array o => o -> Uint32Array
+toUint32Array = unsafeCastGObject . toGObject
+
+instance IsUint32Array Uint32Array
+instance IsGObject Uint32Array where
+  toGObject = GObject . unUint32Array
+  unsafeCastGObject = Uint32Array . unGObject
+-- TODO add more IsUint32Array instances
+
+castToUint32Array :: IsGObject obj => obj -> Uint32Array
+castToUint32Array = castTo gTypeUint32Array "Uint32Array"
+
+foreign import javascript unsafe "window[\"Uint32Array\"]" gTypeUint32Array :: GType
+#else
+-- TODO work out how we can support Uint32Array in native code
+#endif
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+newtype Int8Array = Int8Array { unInt8Array :: JSRef }
+
+instance Eq Int8Array where
+  (Int8Array a) == (Int8Array b) = js_eq a b
+
+instance PToJSRef Int8Array where
+  pToJSRef = unInt8Array
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef Int8Array where
+  pFromJSRef = Int8Array
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef Int8Array where
+  toJSRef = return . unInt8Array
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef Int8Array where
+  fromJSRef = return . fmap Int8Array . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsGObject o => IsInt8Array o
+toInt8Array :: IsInt8Array o => o -> Int8Array
+toInt8Array = unsafeCastGObject . toGObject
+
+instance IsInt8Array Int8Array
+instance IsGObject Int8Array where
+  toGObject = GObject . unInt8Array
+  unsafeCastGObject = Int8Array . unGObject
+-- TODO add more IsInt8Array instances
+
+castToInt8Array :: IsGObject obj => obj -> Int8Array
+castToInt8Array = castTo gTypeInt8Array "Int8Array"
+
+foreign import javascript unsafe "window[\"Int8Array\"]" gTypeInt8Array :: GType
+#else
+-- TODO work out how we can support Int8Array in native code
+#endif
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+newtype Int16Array = Int16Array { unInt16Array :: JSRef }
+
+instance Eq Int16Array where
+  (Int16Array a) == (Int16Array b) = js_eq a b
+
+instance PToJSRef Int16Array where
+  pToJSRef = unInt16Array
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef Int16Array where
+  pFromJSRef = Int16Array
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef Int16Array where
+  toJSRef = return . unInt16Array
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef Int16Array where
+  fromJSRef = return . fmap Int16Array . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsGObject o => IsInt16Array o
+toInt16Array :: IsInt16Array o => o -> Int16Array
+toInt16Array = unsafeCastGObject . toGObject
+
+instance IsInt16Array Int16Array
+instance IsGObject Int16Array where
+  toGObject = GObject . unInt16Array
+  unsafeCastGObject = Int16Array . unGObject
+-- TODO add more IsInt16Array instances
+
+castToInt16Array :: IsGObject obj => obj -> Int16Array
+castToInt16Array = castTo gTypeInt16Array "Int16Array"
+
+foreign import javascript unsafe "window[\"Int16Array\"]" gTypeInt16Array :: GType
+#else
+-- TODO work out how we can support Int16Array in native code
+#endif
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+newtype Int32Array = Int32Array { unInt32Array :: JSRef }
+
+instance Eq Int32Array where
+  (Int32Array a) == (Int32Array b) = js_eq a b
+
+instance PToJSRef Int32Array where
+  pToJSRef = unInt32Array
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef Int32Array where
+  pFromJSRef = Int32Array
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef Int32Array where
+  toJSRef = return . unInt32Array
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef Int32Array where
+  fromJSRef = return . fmap Int32Array . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsGObject o => IsInt32Array o
+toInt32Array :: IsInt32Array o => o -> Int32Array
+toInt32Array = unsafeCastGObject . toGObject
+
+instance IsInt32Array Int32Array
+instance IsGObject Int32Array where
+  toGObject = GObject . unInt32Array
+  unsafeCastGObject = Int32Array . unGObject
+-- TODO add more IsInt32Array instances
+
+castToInt32Array :: IsGObject obj => obj -> Int32Array
+castToInt32Array = castTo gTypeInt32Array "Int32Array"
+
+foreign import javascript unsafe "window[\"Int32Array\"]" gTypeInt32Array :: GType
+#else
+-- TODO work out how we can support Int32Array in native code
+#endif
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+newtype ObjectArray = ObjectArray { unObjectArray :: JSRef }
+
+instance Eq ObjectArray where
+  (ObjectArray a) == (ObjectArray b) = js_eq a b
+
+instance PToJSRef ObjectArray where
+  pToJSRef = unObjectArray
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef ObjectArray where
+  pFromJSRef = ObjectArray
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef ObjectArray where
+  toJSRef = return . unObjectArray
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef ObjectArray where
+  fromJSRef = return . fmap ObjectArray . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsGObject o => IsObjectArray o
+toObjectArray :: IsObjectArray o => o -> ObjectArray
+toObjectArray = unsafeCastGObject . toGObject
+
+instance IsObjectArray ObjectArray
+instance IsGObject ObjectArray where
+  toGObject = GObject . unObjectArray
+  unsafeCastGObject = ObjectArray . unGObject
+-- TODO add more IsObjectArray instances
+#else
+-- TODO work out how we can support ObjectArray in native code
+#endif
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+newtype ArrayBufferView = ArrayBufferView { unArrayBufferView :: JSRef }
+
+instance Eq ArrayBufferView where
+  (ArrayBufferView a) == (ArrayBufferView b) = js_eq a b
+
+instance PToJSRef ArrayBufferView where
+  pToJSRef = unArrayBufferView
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef ArrayBufferView where
+  pFromJSRef = ArrayBufferView
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef ArrayBufferView where
+  toJSRef = return . unArrayBufferView
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef ArrayBufferView where
+  fromJSRef = return . fmap ArrayBufferView . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsGObject o => IsArrayBufferView o
+toArrayBufferView :: IsArrayBufferView o => o -> ArrayBufferView
+toArrayBufferView = unsafeCastGObject . toGObject
+
+instance IsArrayBufferView ArrayBufferView
+instance IsGObject ArrayBufferView where
+  toGObject = GObject . unArrayBufferView
+  unsafeCastGObject = ArrayBufferView . unGObject
+-- TODO add more IsArrayBufferView instances
+#else
+-- TODO work out how we can support ArrayBufferView in native code
+#endif
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+newtype Array = Array { unArray :: JSRef }
+
+instance Eq Array where
+  (Array a) == (Array b) = js_eq a b
+
+instance PToJSRef Array where
+  pToJSRef = unArray
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef Array where
+  pFromJSRef = Array
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef Array where
+  toJSRef = return . unArray
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef Array where
+  fromJSRef = return . fmap Array . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsGObject o => IsArray o
+toArray :: IsArray o => o -> Array
+toArray = unsafeCastGObject . toGObject
+
+instance IsArray Array
+instance IsGObject Array where
+  toGObject = GObject . unArray
+  unsafeCastGObject = Array . unGObject
+-- TODO add more IsArray instances
+
+castToArray :: IsGObject obj => obj -> Array
+castToArray = castTo gTypeArray "Array"
+
+foreign import javascript unsafe "window[\"Array\"]" gTypeArray :: GType
+#else
+-- TODO work out how we can support Array in native code
+#endif
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+newtype Date = Date { unDate :: JSRef }
+
+instance Eq Date where
+  (Date a) == (Date b) = js_eq a b
+
+instance PToJSRef Date where
+  pToJSRef = unDate
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef Date where
+  pFromJSRef = Date
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef Date where
+  toJSRef = return . unDate
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef Date where
+  fromJSRef = return . fmap Date . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsGObject o => IsDate o
+toDate :: IsDate o => o -> Date
+toDate = unsafeCastGObject . toGObject
+
+instance IsDate Date
+instance IsGObject Date where
+  toGObject = GObject . unDate
+  unsafeCastGObject = Date . unGObject
+-- TODO add more IsDate instances
+
+castToDate :: IsGObject obj => obj -> Date
+castToDate = castTo gTypeDate "Date"
+
+foreign import javascript unsafe "window[\"Date\"]" gTypeDate :: GType
+#else
+-- TODO work out how we can support Date in native code
+#endif
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+newtype Acceleration = Acceleration { unAcceleration :: JSRef }
+
+instance Eq Acceleration where
+  (Acceleration a) == (Acceleration b) = js_eq a b
+
+instance PToJSRef Acceleration where
+  pToJSRef = unAcceleration
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef Acceleration where
+  pFromJSRef = Acceleration
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef Acceleration where
+  toJSRef = return . unAcceleration
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef Acceleration where
+  fromJSRef = return . fmap Acceleration . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsGObject o => IsAcceleration o
+toAcceleration :: IsAcceleration o => o -> Acceleration
+toAcceleration = unsafeCastGObject . toGObject
+
+instance IsAcceleration Acceleration
+instance IsGObject Acceleration where
+  toGObject = GObject . unAcceleration
+  unsafeCastGObject = Acceleration . unGObject
+-- TODO add more IsAcceleration instances
+#else
+-- TODO work out how we can support Acceleration in native code
+#endif
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+newtype RotationRate = RotationRate { unRotationRate :: JSRef }
+
+instance Eq RotationRate where
+  (RotationRate a) == (RotationRate b) = js_eq a b
+
+instance PToJSRef RotationRate where
+  pToJSRef = unRotationRate
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef RotationRate where
+  pFromJSRef = RotationRate
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef RotationRate where
+  toJSRef = return . unRotationRate
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef RotationRate where
+  fromJSRef = return . fmap RotationRate . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsGObject o => IsRotationRate o
+toRotationRate :: IsRotationRate o => o -> RotationRate
+toRotationRate = unsafeCastGObject . toGObject
+
+instance IsRotationRate RotationRate
+instance IsGObject RotationRate where
+  toGObject = GObject . unRotationRate
+  unsafeCastGObject = RotationRate . unGObject
+-- TODO add more IsRotationRate instances
+#else
+-- TODO work out how we can support RotationRate in native code
+#endif
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+newtype Algorithm = Algorithm { unAlgorithm :: JSRef }
+
+instance Eq Algorithm where
+  (Algorithm a) == (Algorithm b) = js_eq a b
+
+instance PToJSRef Algorithm where
+  pToJSRef = unAlgorithm
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef Algorithm where
+  pFromJSRef = Algorithm
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef Algorithm where
+  toJSRef = return . unAlgorithm
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef Algorithm where
+  fromJSRef = return . fmap Algorithm . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsGObject o => IsAlgorithm o
+toAlgorithm :: IsAlgorithm o => o -> Algorithm
+toAlgorithm = unsafeCastGObject . toGObject
+
+instance IsAlgorithm Algorithm
+instance IsGObject Algorithm where
+  toGObject = GObject . unAlgorithm
+  unsafeCastGObject = Algorithm . unGObject
+-- TODO add more IsAlgorithm instances
+#else
+-- TODO work out how we can support Algorithm in native code
+#endif
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+newtype CryptoOperationData = CryptoOperationData { unCryptoOperationData :: JSRef }
+
+instance Eq CryptoOperationData where
+  (CryptoOperationData a) == (CryptoOperationData b) = js_eq a b
+
+instance PToJSRef CryptoOperationData where
+  pToJSRef = unCryptoOperationData
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef CryptoOperationData where
+  pFromJSRef = CryptoOperationData
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef CryptoOperationData where
+  toJSRef = return . unCryptoOperationData
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef CryptoOperationData where
+  fromJSRef = return . fmap CryptoOperationData . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsGObject o => IsCryptoOperationData o
+toCryptoOperationData :: IsCryptoOperationData o => o -> CryptoOperationData
+toCryptoOperationData = unsafeCastGObject . toGObject
+
+instance IsCryptoOperationData CryptoOperationData
+instance IsGObject CryptoOperationData where
+  toGObject = GObject . unCryptoOperationData
+  unsafeCastGObject = CryptoOperationData . unGObject
+instance IsCryptoOperationData ArrayBuffer
+instance IsCryptoOperationData ArrayBufferView
+#else
+-- TODO work out how we can support CryptoOperationData in native code
+#endif
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+newtype CanvasStyle = CanvasStyle { unCanvasStyle :: JSRef }
+
+instance Eq CanvasStyle where
+  (CanvasStyle a) == (CanvasStyle b) = js_eq a b
+
+instance PToJSRef CanvasStyle where
+  pToJSRef = unCanvasStyle
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef CanvasStyle where
+  pFromJSRef = CanvasStyle
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef CanvasStyle where
+  toJSRef = return . unCanvasStyle
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef CanvasStyle where
+  fromJSRef = return . fmap CanvasStyle . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsGObject o => IsCanvasStyle o
+toCanvasStyle :: IsCanvasStyle o => o -> CanvasStyle
+toCanvasStyle = unsafeCastGObject . toGObject
+
+instance IsCanvasStyle CanvasStyle
+instance IsGObject CanvasStyle where
+  toGObject = GObject . unCanvasStyle
+  unsafeCastGObject = CanvasStyle . unGObject
+instance IsCanvasStyle CanvasGradient
+instance IsCanvasStyle CanvasPattern
+#else
+-- TODO work out how we can support CanvasStyle in native code
+#endif
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+newtype DOMException = DOMException { unDOMException :: JSRef }
+
+instance Eq DOMException where
+  (DOMException a) == (DOMException b) = js_eq a b
+
+instance PToJSRef DOMException where
+  pToJSRef = unDOMException
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef DOMException where
+  pFromJSRef = DOMException
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef DOMException where
+  toJSRef = return . unDOMException
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef DOMException where
+  fromJSRef = return . fmap DOMException . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsGObject o => IsDOMException o
+toDOMException :: IsDOMException o => o -> DOMException
+toDOMException = unsafeCastGObject . toGObject
+
+instance IsDOMException DOMException
+instance IsGObject DOMException where
+  toGObject = GObject . unDOMException
+  unsafeCastGObject = DOMException . unGObject
+#else
+-- TODO work out how we can support DOMException in native code
+#endif
+
+type GLenum = Word32
+type GLboolean = Bool
+type GLbitfield = Word32
+type GLbyte = Int8
+type GLshort = Int16
+type GLint = Int32
+type GLint64 = Int64
+type GLsizei = Int32
+type GLintptr = Int64
+type GLsizeiptr = Int64
+type GLubyte = Word8
+type GLushort = Word16
+type GLuint = Word32
+type GLuint64 = Word64
+type GLfloat = Double
+type GLclampf = Double
+
+-- AUTO GENERATION STARTS HERE
+-- The remainder of this file is generated from IDL files using domconv-webkit-jsffi
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.ANGLEInstancedArrays".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/ANGLEInstancedArrays Mozilla ANGLEInstancedArrays documentation>
+newtype ANGLEInstancedArrays = ANGLEInstancedArrays { unANGLEInstancedArrays :: JSRef }
+
+instance Eq (ANGLEInstancedArrays) where
+  (ANGLEInstancedArrays a) == (ANGLEInstancedArrays b) = js_eq a b
+
+instance PToJSRef ANGLEInstancedArrays where
+  pToJSRef = unANGLEInstancedArrays
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef ANGLEInstancedArrays where
+  pFromJSRef = ANGLEInstancedArrays
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef ANGLEInstancedArrays where
+  toJSRef = return . unANGLEInstancedArrays
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef ANGLEInstancedArrays where
+  fromJSRef = return . fmap ANGLEInstancedArrays . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject ANGLEInstancedArrays where
+  toGObject = GObject . unANGLEInstancedArrays
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = ANGLEInstancedArrays . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToANGLEInstancedArrays :: IsGObject obj => obj -> ANGLEInstancedArrays
+castToANGLEInstancedArrays = castTo gTypeANGLEInstancedArrays "ANGLEInstancedArrays"
+
+foreign import javascript unsafe "window[\"ANGLEInstancedArrays\"]" gTypeANGLEInstancedArrays :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.AbstractView".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/AbstractView Mozilla AbstractView documentation>
+newtype AbstractView = AbstractView { unAbstractView :: JSRef }
+
+instance Eq (AbstractView) where
+  (AbstractView a) == (AbstractView b) = js_eq a b
+
+instance PToJSRef AbstractView where
+  pToJSRef = unAbstractView
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef AbstractView where
+  pFromJSRef = AbstractView
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef AbstractView where
+  toJSRef = return . unAbstractView
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef AbstractView where
+  fromJSRef = return . fmap AbstractView . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject AbstractView where
+  toGObject = GObject . unAbstractView
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = AbstractView . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToAbstractView :: IsGObject obj => obj -> AbstractView
+castToAbstractView = castTo gTypeAbstractView "AbstractView"
+
+foreign import javascript unsafe "window[\"AbstractView\"]" gTypeAbstractView :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.AbstractWorker".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/AbstractWorker Mozilla AbstractWorker documentation>
+newtype AbstractWorker = AbstractWorker { unAbstractWorker :: JSRef }
+
+instance Eq (AbstractWorker) where
+  (AbstractWorker a) == (AbstractWorker b) = js_eq a b
+
+instance PToJSRef AbstractWorker where
+  pToJSRef = unAbstractWorker
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef AbstractWorker where
+  pFromJSRef = AbstractWorker
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef AbstractWorker where
+  toJSRef = return . unAbstractWorker
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef AbstractWorker where
+  fromJSRef = return . fmap AbstractWorker . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject AbstractWorker where
+  toGObject = GObject . unAbstractWorker
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = AbstractWorker . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToAbstractWorker :: IsGObject obj => obj -> AbstractWorker
+castToAbstractWorker = castTo gTypeAbstractWorker "AbstractWorker"
+
+foreign import javascript unsafe "window[\"AbstractWorker\"]" gTypeAbstractWorker :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.AllAudioCapabilities".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.MediaStreamCapabilities"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/AllAudioCapabilities Mozilla AllAudioCapabilities documentation>
+newtype AllAudioCapabilities = AllAudioCapabilities { unAllAudioCapabilities :: JSRef }
+
+instance Eq (AllAudioCapabilities) where
+  (AllAudioCapabilities a) == (AllAudioCapabilities b) = js_eq a b
+
+instance PToJSRef AllAudioCapabilities where
+  pToJSRef = unAllAudioCapabilities
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef AllAudioCapabilities where
+  pFromJSRef = AllAudioCapabilities
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef AllAudioCapabilities where
+  toJSRef = return . unAllAudioCapabilities
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef AllAudioCapabilities where
+  fromJSRef = return . fmap AllAudioCapabilities . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsMediaStreamCapabilities AllAudioCapabilities
+instance IsGObject AllAudioCapabilities where
+  toGObject = GObject . unAllAudioCapabilities
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = AllAudioCapabilities . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToAllAudioCapabilities :: IsGObject obj => obj -> AllAudioCapabilities
+castToAllAudioCapabilities = castTo gTypeAllAudioCapabilities "AllAudioCapabilities"
+
+foreign import javascript unsafe "window[\"AllAudioCapabilities\"]" gTypeAllAudioCapabilities :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.AllVideoCapabilities".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.MediaStreamCapabilities"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/AllVideoCapabilities Mozilla AllVideoCapabilities documentation>
+newtype AllVideoCapabilities = AllVideoCapabilities { unAllVideoCapabilities :: JSRef }
+
+instance Eq (AllVideoCapabilities) where
+  (AllVideoCapabilities a) == (AllVideoCapabilities b) = js_eq a b
+
+instance PToJSRef AllVideoCapabilities where
+  pToJSRef = unAllVideoCapabilities
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef AllVideoCapabilities where
+  pFromJSRef = AllVideoCapabilities
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef AllVideoCapabilities where
+  toJSRef = return . unAllVideoCapabilities
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef AllVideoCapabilities where
+  fromJSRef = return . fmap AllVideoCapabilities . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsMediaStreamCapabilities AllVideoCapabilities
+instance IsGObject AllVideoCapabilities where
+  toGObject = GObject . unAllVideoCapabilities
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = AllVideoCapabilities . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToAllVideoCapabilities :: IsGObject obj => obj -> AllVideoCapabilities
+castToAllVideoCapabilities = castTo gTypeAllVideoCapabilities "AllVideoCapabilities"
+
+foreign import javascript unsafe "window[\"AllVideoCapabilities\"]" gTypeAllVideoCapabilities :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.AnalyserNode".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.AudioNode"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/AnalyserNode Mozilla AnalyserNode documentation>
+newtype AnalyserNode = AnalyserNode { unAnalyserNode :: JSRef }
+
+instance Eq (AnalyserNode) where
+  (AnalyserNode a) == (AnalyserNode b) = js_eq a b
+
+instance PToJSRef AnalyserNode where
+  pToJSRef = unAnalyserNode
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef AnalyserNode where
+  pFromJSRef = AnalyserNode
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef AnalyserNode where
+  toJSRef = return . unAnalyserNode
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef AnalyserNode where
+  fromJSRef = return . fmap AnalyserNode . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsAudioNode AnalyserNode
+instance IsEventTarget AnalyserNode
+instance IsGObject AnalyserNode where
+  toGObject = GObject . unAnalyserNode
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = AnalyserNode . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToAnalyserNode :: IsGObject obj => obj -> AnalyserNode
+castToAnalyserNode = castTo gTypeAnalyserNode "AnalyserNode"
+
+foreign import javascript unsafe "window[\"AnalyserNode\"]" gTypeAnalyserNode :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.AnimationEvent".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.Event"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/AnimationEvent Mozilla AnimationEvent documentation>
+newtype AnimationEvent = AnimationEvent { unAnimationEvent :: JSRef }
+
+instance Eq (AnimationEvent) where
+  (AnimationEvent a) == (AnimationEvent b) = js_eq a b
+
+instance PToJSRef AnimationEvent where
+  pToJSRef = unAnimationEvent
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef AnimationEvent where
+  pFromJSRef = AnimationEvent
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef AnimationEvent where
+  toJSRef = return . unAnimationEvent
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef AnimationEvent where
+  fromJSRef = return . fmap AnimationEvent . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEvent AnimationEvent
+instance IsGObject AnimationEvent where
+  toGObject = GObject . unAnimationEvent
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = AnimationEvent . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToAnimationEvent :: IsGObject obj => obj -> AnimationEvent
+castToAnimationEvent = castTo gTypeAnimationEvent "AnimationEvent"
+
+foreign import javascript unsafe "window[\"AnimationEvent\"]" gTypeAnimationEvent :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.ApplicationCache".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/ApplicationCache Mozilla ApplicationCache documentation>
+newtype ApplicationCache = ApplicationCache { unApplicationCache :: JSRef }
+
+instance Eq (ApplicationCache) where
+  (ApplicationCache a) == (ApplicationCache b) = js_eq a b
+
+instance PToJSRef ApplicationCache where
+  pToJSRef = unApplicationCache
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef ApplicationCache where
+  pFromJSRef = ApplicationCache
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef ApplicationCache where
+  toJSRef = return . unApplicationCache
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef ApplicationCache where
+  fromJSRef = return . fmap ApplicationCache . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEventTarget ApplicationCache
+instance IsGObject ApplicationCache where
+  toGObject = GObject . unApplicationCache
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = ApplicationCache . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToApplicationCache :: IsGObject obj => obj -> ApplicationCache
+castToApplicationCache = castTo gTypeApplicationCache "ApplicationCache"
+
+foreign import javascript unsafe "window[\"ApplicationCache\"]" gTypeApplicationCache :: GType
+#else
+type IsApplicationCache o = ApplicationCacheClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.Attr".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/Attr Mozilla Attr documentation>
+newtype Attr = Attr { unAttr :: JSRef }
+
+instance Eq (Attr) where
+  (Attr a) == (Attr b) = js_eq a b
+
+instance PToJSRef Attr where
+  pToJSRef = unAttr
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef Attr where
+  pFromJSRef = Attr
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef Attr where
+  toJSRef = return . unAttr
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef Attr where
+  fromJSRef = return . fmap Attr . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsNode Attr
+instance IsEventTarget Attr
+instance IsGObject Attr where
+  toGObject = GObject . unAttr
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = Attr . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToAttr :: IsGObject obj => obj -> Attr
+castToAttr = castTo gTypeAttr "Attr"
+
+foreign import javascript unsafe "window[\"Attr\"]" gTypeAttr :: GType
+#else
+type IsAttr o = AttrClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.AudioBuffer".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/AudioBuffer Mozilla AudioBuffer documentation>
+newtype AudioBuffer = AudioBuffer { unAudioBuffer :: JSRef }
+
+instance Eq (AudioBuffer) where
+  (AudioBuffer a) == (AudioBuffer b) = js_eq a b
+
+instance PToJSRef AudioBuffer where
+  pToJSRef = unAudioBuffer
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef AudioBuffer where
+  pFromJSRef = AudioBuffer
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef AudioBuffer where
+  toJSRef = return . unAudioBuffer
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef AudioBuffer where
+  fromJSRef = return . fmap AudioBuffer . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject AudioBuffer where
+  toGObject = GObject . unAudioBuffer
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = AudioBuffer . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToAudioBuffer :: IsGObject obj => obj -> AudioBuffer
+castToAudioBuffer = castTo gTypeAudioBuffer "AudioBuffer"
+
+foreign import javascript unsafe "window[\"AudioBuffer\"]" gTypeAudioBuffer :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.AudioBufferSourceNode".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.AudioNode"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/AudioBufferSourceNode Mozilla AudioBufferSourceNode documentation>
+newtype AudioBufferSourceNode = AudioBufferSourceNode { unAudioBufferSourceNode :: JSRef }
+
+instance Eq (AudioBufferSourceNode) where
+  (AudioBufferSourceNode a) == (AudioBufferSourceNode b) = js_eq a b
+
+instance PToJSRef AudioBufferSourceNode where
+  pToJSRef = unAudioBufferSourceNode
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef AudioBufferSourceNode where
+  pFromJSRef = AudioBufferSourceNode
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef AudioBufferSourceNode where
+  toJSRef = return . unAudioBufferSourceNode
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef AudioBufferSourceNode where
+  fromJSRef = return . fmap AudioBufferSourceNode . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsAudioNode AudioBufferSourceNode
+instance IsEventTarget AudioBufferSourceNode
+instance IsGObject AudioBufferSourceNode where
+  toGObject = GObject . unAudioBufferSourceNode
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = AudioBufferSourceNode . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToAudioBufferSourceNode :: IsGObject obj => obj -> AudioBufferSourceNode
+castToAudioBufferSourceNode = castTo gTypeAudioBufferSourceNode "AudioBufferSourceNode"
+
+foreign import javascript unsafe "window[\"AudioBufferSourceNode\"]" gTypeAudioBufferSourceNode :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.AudioContext".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/AudioContext Mozilla AudioContext documentation>
+newtype AudioContext = AudioContext { unAudioContext :: JSRef }
+
+instance Eq (AudioContext) where
+  (AudioContext a) == (AudioContext b) = js_eq a b
+
+instance PToJSRef AudioContext where
+  pToJSRef = unAudioContext
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef AudioContext where
+  pFromJSRef = AudioContext
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef AudioContext where
+  toJSRef = return . unAudioContext
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef AudioContext where
+  fromJSRef = return . fmap AudioContext . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsEventTarget o => IsAudioContext o
+toAudioContext :: IsAudioContext o => o -> AudioContext
+toAudioContext = unsafeCastGObject . toGObject
+
+instance IsAudioContext AudioContext
+instance IsEventTarget AudioContext
+instance IsGObject AudioContext where
+  toGObject = GObject . unAudioContext
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = AudioContext . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToAudioContext :: IsGObject obj => obj -> AudioContext
+castToAudioContext = castTo gTypeAudioContext "AudioContext"
+
+foreign import javascript unsafe "window[\"AudioContext\"]" gTypeAudioContext :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.AudioDestinationNode".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.AudioNode"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/AudioDestinationNode Mozilla AudioDestinationNode documentation>
+newtype AudioDestinationNode = AudioDestinationNode { unAudioDestinationNode :: JSRef }
+
+instance Eq (AudioDestinationNode) where
+  (AudioDestinationNode a) == (AudioDestinationNode b) = js_eq a b
+
+instance PToJSRef AudioDestinationNode where
+  pToJSRef = unAudioDestinationNode
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef AudioDestinationNode where
+  pFromJSRef = AudioDestinationNode
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef AudioDestinationNode where
+  toJSRef = return . unAudioDestinationNode
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef AudioDestinationNode where
+  fromJSRef = return . fmap AudioDestinationNode . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsAudioNode AudioDestinationNode
+instance IsEventTarget AudioDestinationNode
+instance IsGObject AudioDestinationNode where
+  toGObject = GObject . unAudioDestinationNode
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = AudioDestinationNode . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToAudioDestinationNode :: IsGObject obj => obj -> AudioDestinationNode
+castToAudioDestinationNode = castTo gTypeAudioDestinationNode "AudioDestinationNode"
+
+foreign import javascript unsafe "window[\"AudioDestinationNode\"]" gTypeAudioDestinationNode :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.AudioListener".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/AudioListener Mozilla AudioListener documentation>
+newtype AudioListener = AudioListener { unAudioListener :: JSRef }
+
+instance Eq (AudioListener) where
+  (AudioListener a) == (AudioListener b) = js_eq a b
+
+instance PToJSRef AudioListener where
+  pToJSRef = unAudioListener
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef AudioListener where
+  pFromJSRef = AudioListener
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef AudioListener where
+  toJSRef = return . unAudioListener
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef AudioListener where
+  fromJSRef = return . fmap AudioListener . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject AudioListener where
+  toGObject = GObject . unAudioListener
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = AudioListener . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToAudioListener :: IsGObject obj => obj -> AudioListener
+castToAudioListener = castTo gTypeAudioListener "AudioListener"
+
+foreign import javascript unsafe "window[\"AudioListener\"]" gTypeAudioListener :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.AudioNode".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/AudioNode Mozilla AudioNode documentation>
+newtype AudioNode = AudioNode { unAudioNode :: JSRef }
+
+instance Eq (AudioNode) where
+  (AudioNode a) == (AudioNode b) = js_eq a b
+
+instance PToJSRef AudioNode where
+  pToJSRef = unAudioNode
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef AudioNode where
+  pFromJSRef = AudioNode
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef AudioNode where
+  toJSRef = return . unAudioNode
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef AudioNode where
+  fromJSRef = return . fmap AudioNode . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsEventTarget o => IsAudioNode o
+toAudioNode :: IsAudioNode o => o -> AudioNode
+toAudioNode = unsafeCastGObject . toGObject
+
+instance IsAudioNode AudioNode
+instance IsEventTarget AudioNode
+instance IsGObject AudioNode where
+  toGObject = GObject . unAudioNode
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = AudioNode . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToAudioNode :: IsGObject obj => obj -> AudioNode
+castToAudioNode = castTo gTypeAudioNode "AudioNode"
+
+foreign import javascript unsafe "window[\"AudioNode\"]" gTypeAudioNode :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.AudioParam".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/AudioParam Mozilla AudioParam documentation>
+newtype AudioParam = AudioParam { unAudioParam :: JSRef }
+
+instance Eq (AudioParam) where
+  (AudioParam a) == (AudioParam b) = js_eq a b
+
+instance PToJSRef AudioParam where
+  pToJSRef = unAudioParam
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef AudioParam where
+  pFromJSRef = AudioParam
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef AudioParam where
+  toJSRef = return . unAudioParam
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef AudioParam where
+  fromJSRef = return . fmap AudioParam . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject AudioParam where
+  toGObject = GObject . unAudioParam
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = AudioParam . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToAudioParam :: IsGObject obj => obj -> AudioParam
+castToAudioParam = castTo gTypeAudioParam "AudioParam"
+
+foreign import javascript unsafe "window[\"AudioParam\"]" gTypeAudioParam :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.AudioProcessingEvent".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.Event"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/AudioProcessingEvent Mozilla AudioProcessingEvent documentation>
+newtype AudioProcessingEvent = AudioProcessingEvent { unAudioProcessingEvent :: JSRef }
+
+instance Eq (AudioProcessingEvent) where
+  (AudioProcessingEvent a) == (AudioProcessingEvent b) = js_eq a b
+
+instance PToJSRef AudioProcessingEvent where
+  pToJSRef = unAudioProcessingEvent
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef AudioProcessingEvent where
+  pFromJSRef = AudioProcessingEvent
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef AudioProcessingEvent where
+  toJSRef = return . unAudioProcessingEvent
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef AudioProcessingEvent where
+  fromJSRef = return . fmap AudioProcessingEvent . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEvent AudioProcessingEvent
+instance IsGObject AudioProcessingEvent where
+  toGObject = GObject . unAudioProcessingEvent
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = AudioProcessingEvent . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToAudioProcessingEvent :: IsGObject obj => obj -> AudioProcessingEvent
+castToAudioProcessingEvent = castTo gTypeAudioProcessingEvent "AudioProcessingEvent"
+
+foreign import javascript unsafe "window[\"AudioProcessingEvent\"]" gTypeAudioProcessingEvent :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.AudioStreamTrack".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.MediaStreamTrack"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/AudioStreamTrack Mozilla AudioStreamTrack documentation>
+newtype AudioStreamTrack = AudioStreamTrack { unAudioStreamTrack :: JSRef }
+
+instance Eq (AudioStreamTrack) where
+  (AudioStreamTrack a) == (AudioStreamTrack b) = js_eq a b
+
+instance PToJSRef AudioStreamTrack where
+  pToJSRef = unAudioStreamTrack
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef AudioStreamTrack where
+  pFromJSRef = AudioStreamTrack
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef AudioStreamTrack where
+  toJSRef = return . unAudioStreamTrack
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef AudioStreamTrack where
+  fromJSRef = return . fmap AudioStreamTrack . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsMediaStreamTrack AudioStreamTrack
+instance IsEventTarget AudioStreamTrack
+instance IsGObject AudioStreamTrack where
+  toGObject = GObject . unAudioStreamTrack
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = AudioStreamTrack . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToAudioStreamTrack :: IsGObject obj => obj -> AudioStreamTrack
+castToAudioStreamTrack = castTo gTypeAudioStreamTrack "AudioStreamTrack"
+
+foreign import javascript unsafe "window[\"AudioStreamTrack\"]" gTypeAudioStreamTrack :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.AudioTrack".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/AudioTrack Mozilla AudioTrack documentation>
+newtype AudioTrack = AudioTrack { unAudioTrack :: JSRef }
+
+instance Eq (AudioTrack) where
+  (AudioTrack a) == (AudioTrack b) = js_eq a b
+
+instance PToJSRef AudioTrack where
+  pToJSRef = unAudioTrack
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef AudioTrack where
+  pFromJSRef = AudioTrack
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef AudioTrack where
+  toJSRef = return . unAudioTrack
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef AudioTrack where
+  fromJSRef = return . fmap AudioTrack . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject AudioTrack where
+  toGObject = GObject . unAudioTrack
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = AudioTrack . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToAudioTrack :: IsGObject obj => obj -> AudioTrack
+castToAudioTrack = castTo gTypeAudioTrack "AudioTrack"
+
+foreign import javascript unsafe "window[\"AudioTrack\"]" gTypeAudioTrack :: GType
+#else
+#ifndef USE_OLD_WEBKIT
+type IsAudioTrack o = AudioTrackClass o
+#endif
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.AudioTrackList".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/AudioTrackList Mozilla AudioTrackList documentation>
+newtype AudioTrackList = AudioTrackList { unAudioTrackList :: JSRef }
+
+instance Eq (AudioTrackList) where
+  (AudioTrackList a) == (AudioTrackList b) = js_eq a b
+
+instance PToJSRef AudioTrackList where
+  pToJSRef = unAudioTrackList
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef AudioTrackList where
+  pFromJSRef = AudioTrackList
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef AudioTrackList where
+  toJSRef = return . unAudioTrackList
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef AudioTrackList where
+  fromJSRef = return . fmap AudioTrackList . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEventTarget AudioTrackList
+instance IsGObject AudioTrackList where
+  toGObject = GObject . unAudioTrackList
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = AudioTrackList . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToAudioTrackList :: IsGObject obj => obj -> AudioTrackList
+castToAudioTrackList = castTo gTypeAudioTrackList "AudioTrackList"
+
+foreign import javascript unsafe "window[\"AudioTrackList\"]" gTypeAudioTrackList :: GType
+#else
+#ifndef USE_OLD_WEBKIT
+type IsAudioTrackList o = AudioTrackListClass o
+#endif
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.AutocompleteErrorEvent".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.Event"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/AutocompleteErrorEvent Mozilla AutocompleteErrorEvent documentation>
+newtype AutocompleteErrorEvent = AutocompleteErrorEvent { unAutocompleteErrorEvent :: JSRef }
+
+instance Eq (AutocompleteErrorEvent) where
+  (AutocompleteErrorEvent a) == (AutocompleteErrorEvent b) = js_eq a b
+
+instance PToJSRef AutocompleteErrorEvent where
+  pToJSRef = unAutocompleteErrorEvent
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef AutocompleteErrorEvent where
+  pFromJSRef = AutocompleteErrorEvent
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef AutocompleteErrorEvent where
+  toJSRef = return . unAutocompleteErrorEvent
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef AutocompleteErrorEvent where
+  fromJSRef = return . fmap AutocompleteErrorEvent . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEvent AutocompleteErrorEvent
+instance IsGObject AutocompleteErrorEvent where
+  toGObject = GObject . unAutocompleteErrorEvent
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = AutocompleteErrorEvent . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToAutocompleteErrorEvent :: IsGObject obj => obj -> AutocompleteErrorEvent
+castToAutocompleteErrorEvent = castTo gTypeAutocompleteErrorEvent "AutocompleteErrorEvent"
+
+foreign import javascript unsafe "window[\"AutocompleteErrorEvent\"]" gTypeAutocompleteErrorEvent :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.BarProp".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/BarProp Mozilla BarProp documentation>
+newtype BarProp = BarProp { unBarProp :: JSRef }
+
+instance Eq (BarProp) where
+  (BarProp a) == (BarProp b) = js_eq a b
+
+instance PToJSRef BarProp where
+  pToJSRef = unBarProp
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef BarProp where
+  pFromJSRef = BarProp
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef BarProp where
+  toJSRef = return . unBarProp
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef BarProp where
+  fromJSRef = return . fmap BarProp . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject BarProp where
+  toGObject = GObject . unBarProp
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = BarProp . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToBarProp :: IsGObject obj => obj -> BarProp
+castToBarProp = castTo gTypeBarProp "BarProp"
+
+foreign import javascript unsafe "window[\"BarProp\"]" gTypeBarProp :: GType
+#else
+#ifndef USE_OLD_WEBKIT
+type IsBarProp o = BarPropClass o
+#endif
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.BatteryManager".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/BatteryManager Mozilla BatteryManager documentation>
+newtype BatteryManager = BatteryManager { unBatteryManager :: JSRef }
+
+instance Eq (BatteryManager) where
+  (BatteryManager a) == (BatteryManager b) = js_eq a b
+
+instance PToJSRef BatteryManager where
+  pToJSRef = unBatteryManager
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef BatteryManager where
+  pFromJSRef = BatteryManager
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef BatteryManager where
+  toJSRef = return . unBatteryManager
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef BatteryManager where
+  fromJSRef = return . fmap BatteryManager . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEventTarget BatteryManager
+instance IsGObject BatteryManager where
+  toGObject = GObject . unBatteryManager
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = BatteryManager . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToBatteryManager :: IsGObject obj => obj -> BatteryManager
+castToBatteryManager = castTo gTypeBatteryManager "BatteryManager"
+
+foreign import javascript unsafe "window[\"BatteryManager\"]" gTypeBatteryManager :: GType
+#else
+#ifndef USE_OLD_WEBKIT
+type IsBatteryManager o = BatteryManagerClass o
+#endif
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.BeforeLoadEvent".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.Event"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/BeforeLoadEvent Mozilla BeforeLoadEvent documentation>
+newtype BeforeLoadEvent = BeforeLoadEvent { unBeforeLoadEvent :: JSRef }
+
+instance Eq (BeforeLoadEvent) where
+  (BeforeLoadEvent a) == (BeforeLoadEvent b) = js_eq a b
+
+instance PToJSRef BeforeLoadEvent where
+  pToJSRef = unBeforeLoadEvent
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef BeforeLoadEvent where
+  pFromJSRef = BeforeLoadEvent
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef BeforeLoadEvent where
+  toJSRef = return . unBeforeLoadEvent
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef BeforeLoadEvent where
+  fromJSRef = return . fmap BeforeLoadEvent . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEvent BeforeLoadEvent
+instance IsGObject BeforeLoadEvent where
+  toGObject = GObject . unBeforeLoadEvent
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = BeforeLoadEvent . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToBeforeLoadEvent :: IsGObject obj => obj -> BeforeLoadEvent
+castToBeforeLoadEvent = castTo gTypeBeforeLoadEvent "BeforeLoadEvent"
+
+foreign import javascript unsafe "window[\"BeforeLoadEvent\"]" gTypeBeforeLoadEvent :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.BeforeUnloadEvent".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.Event"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/BeforeUnloadEvent Mozilla BeforeUnloadEvent documentation>
+newtype BeforeUnloadEvent = BeforeUnloadEvent { unBeforeUnloadEvent :: JSRef }
+
+instance Eq (BeforeUnloadEvent) where
+  (BeforeUnloadEvent a) == (BeforeUnloadEvent b) = js_eq a b
+
+instance PToJSRef BeforeUnloadEvent where
+  pToJSRef = unBeforeUnloadEvent
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef BeforeUnloadEvent where
+  pFromJSRef = BeforeUnloadEvent
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef BeforeUnloadEvent where
+  toJSRef = return . unBeforeUnloadEvent
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef BeforeUnloadEvent where
+  fromJSRef = return . fmap BeforeUnloadEvent . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEvent BeforeUnloadEvent
+instance IsGObject BeforeUnloadEvent where
+  toGObject = GObject . unBeforeUnloadEvent
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = BeforeUnloadEvent . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToBeforeUnloadEvent :: IsGObject obj => obj -> BeforeUnloadEvent
+castToBeforeUnloadEvent = castTo gTypeBeforeUnloadEvent "BeforeUnloadEvent"
+
+foreign import javascript unsafe "window[\"BeforeUnloadEvent\"]" gTypeBeforeUnloadEvent :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.BiquadFilterNode".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.AudioNode"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/BiquadFilterNode Mozilla BiquadFilterNode documentation>
+newtype BiquadFilterNode = BiquadFilterNode { unBiquadFilterNode :: JSRef }
+
+instance Eq (BiquadFilterNode) where
+  (BiquadFilterNode a) == (BiquadFilterNode b) = js_eq a b
+
+instance PToJSRef BiquadFilterNode where
+  pToJSRef = unBiquadFilterNode
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef BiquadFilterNode where
+  pFromJSRef = BiquadFilterNode
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef BiquadFilterNode where
+  toJSRef = return . unBiquadFilterNode
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef BiquadFilterNode where
+  fromJSRef = return . fmap BiquadFilterNode . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsAudioNode BiquadFilterNode
+instance IsEventTarget BiquadFilterNode
+instance IsGObject BiquadFilterNode where
+  toGObject = GObject . unBiquadFilterNode
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = BiquadFilterNode . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToBiquadFilterNode :: IsGObject obj => obj -> BiquadFilterNode
+castToBiquadFilterNode = castTo gTypeBiquadFilterNode "BiquadFilterNode"
+
+foreign import javascript unsafe "window[\"BiquadFilterNode\"]" gTypeBiquadFilterNode :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.Blob".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/Blob Mozilla Blob documentation>
+newtype Blob = Blob { unBlob :: JSRef }
+
+instance Eq (Blob) where
+  (Blob a) == (Blob b) = js_eq a b
+
+instance PToJSRef Blob where
+  pToJSRef = unBlob
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef Blob where
+  pFromJSRef = Blob
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef Blob where
+  toJSRef = return . unBlob
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef Blob where
+  fromJSRef = return . fmap Blob . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsGObject o => IsBlob o
+toBlob :: IsBlob o => o -> Blob
+toBlob = unsafeCastGObject . toGObject
+
+instance IsBlob Blob
+instance IsGObject Blob where
+  toGObject = GObject . unBlob
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = Blob . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToBlob :: IsGObject obj => obj -> Blob
+castToBlob = castTo gTypeBlob "Blob"
+
+foreign import javascript unsafe "window[\"Blob\"]" gTypeBlob :: GType
+#else
+type IsBlob o = BlobClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.CDATASection".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.Text"
+--     * "GHCJS.DOM.CharacterData"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/CDATASection Mozilla CDATASection documentation>
+newtype CDATASection = CDATASection { unCDATASection :: JSRef }
+
+instance Eq (CDATASection) where
+  (CDATASection a) == (CDATASection b) = js_eq a b
+
+instance PToJSRef CDATASection where
+  pToJSRef = unCDATASection
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef CDATASection where
+  pFromJSRef = CDATASection
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef CDATASection where
+  toJSRef = return . unCDATASection
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef CDATASection where
+  fromJSRef = return . fmap CDATASection . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsText CDATASection
+instance IsCharacterData CDATASection
+instance IsNode CDATASection
+instance IsEventTarget CDATASection
+instance IsGObject CDATASection where
+  toGObject = GObject . unCDATASection
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = CDATASection . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToCDATASection :: IsGObject obj => obj -> CDATASection
+castToCDATASection = castTo gTypeCDATASection "CDATASection"
+
+foreign import javascript unsafe "window[\"CDATASection\"]" gTypeCDATASection :: GType
+#else
+type IsCDATASection o = CDATASectionClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.CSS".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/CSS Mozilla CSS documentation>
+newtype CSS = CSS { unCSS :: JSRef }
+
+instance Eq (CSS) where
+  (CSS a) == (CSS b) = js_eq a b
+
+instance PToJSRef CSS where
+  pToJSRef = unCSS
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef CSS where
+  pFromJSRef = CSS
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef CSS where
+  toJSRef = return . unCSS
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef CSS where
+  fromJSRef = return . fmap CSS . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject CSS where
+  toGObject = GObject . unCSS
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = CSS . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToCSS :: IsGObject obj => obj -> CSS
+castToCSS = castTo gTypeCSS "CSS"
+
+foreign import javascript unsafe "window[\"CSS\"]" gTypeCSS :: GType
+#else
+#ifndef USE_OLD_WEBKIT
+type IsCSS o = CSSClass o
+#endif
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.CSSCharsetRule".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.CSSRule"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/CSSCharsetRule Mozilla CSSCharsetRule documentation>
+newtype CSSCharsetRule = CSSCharsetRule { unCSSCharsetRule :: JSRef }
+
+instance Eq (CSSCharsetRule) where
+  (CSSCharsetRule a) == (CSSCharsetRule b) = js_eq a b
+
+instance PToJSRef CSSCharsetRule where
+  pToJSRef = unCSSCharsetRule
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef CSSCharsetRule where
+  pFromJSRef = CSSCharsetRule
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef CSSCharsetRule where
+  toJSRef = return . unCSSCharsetRule
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef CSSCharsetRule where
+  fromJSRef = return . fmap CSSCharsetRule . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsCSSRule CSSCharsetRule
+instance IsGObject CSSCharsetRule where
+  toGObject = GObject . unCSSCharsetRule
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = CSSCharsetRule . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToCSSCharsetRule :: IsGObject obj => obj -> CSSCharsetRule
+castToCSSCharsetRule = castTo gTypeCSSCharsetRule "CSSCharsetRule"
+
+foreign import javascript unsafe "window[\"CSSCharsetRule\"]" gTypeCSSCharsetRule :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.CSSFontFaceLoadEvent".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.Event"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/CSSFontFaceLoadEvent Mozilla CSSFontFaceLoadEvent documentation>
+newtype CSSFontFaceLoadEvent = CSSFontFaceLoadEvent { unCSSFontFaceLoadEvent :: JSRef }
+
+instance Eq (CSSFontFaceLoadEvent) where
+  (CSSFontFaceLoadEvent a) == (CSSFontFaceLoadEvent b) = js_eq a b
+
+instance PToJSRef CSSFontFaceLoadEvent where
+  pToJSRef = unCSSFontFaceLoadEvent
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef CSSFontFaceLoadEvent where
+  pFromJSRef = CSSFontFaceLoadEvent
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef CSSFontFaceLoadEvent where
+  toJSRef = return . unCSSFontFaceLoadEvent
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef CSSFontFaceLoadEvent where
+  fromJSRef = return . fmap CSSFontFaceLoadEvent . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEvent CSSFontFaceLoadEvent
+instance IsGObject CSSFontFaceLoadEvent where
+  toGObject = GObject . unCSSFontFaceLoadEvent
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = CSSFontFaceLoadEvent . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToCSSFontFaceLoadEvent :: IsGObject obj => obj -> CSSFontFaceLoadEvent
+castToCSSFontFaceLoadEvent = castTo gTypeCSSFontFaceLoadEvent "CSSFontFaceLoadEvent"
+
+foreign import javascript unsafe "window[\"CSSFontFaceLoadEvent\"]" gTypeCSSFontFaceLoadEvent :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.CSSFontFaceRule".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.CSSRule"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/CSSFontFaceRule Mozilla CSSFontFaceRule documentation>
+newtype CSSFontFaceRule = CSSFontFaceRule { unCSSFontFaceRule :: JSRef }
+
+instance Eq (CSSFontFaceRule) where
+  (CSSFontFaceRule a) == (CSSFontFaceRule b) = js_eq a b
+
+instance PToJSRef CSSFontFaceRule where
+  pToJSRef = unCSSFontFaceRule
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef CSSFontFaceRule where
+  pFromJSRef = CSSFontFaceRule
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef CSSFontFaceRule where
+  toJSRef = return . unCSSFontFaceRule
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef CSSFontFaceRule where
+  fromJSRef = return . fmap CSSFontFaceRule . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsCSSRule CSSFontFaceRule
+instance IsGObject CSSFontFaceRule where
+  toGObject = GObject . unCSSFontFaceRule
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = CSSFontFaceRule . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToCSSFontFaceRule :: IsGObject obj => obj -> CSSFontFaceRule
+castToCSSFontFaceRule = castTo gTypeCSSFontFaceRule "CSSFontFaceRule"
+
+foreign import javascript unsafe "window[\"CSSFontFaceRule\"]" gTypeCSSFontFaceRule :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.CSSImportRule".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.CSSRule"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/CSSImportRule Mozilla CSSImportRule documentation>
+newtype CSSImportRule = CSSImportRule { unCSSImportRule :: JSRef }
+
+instance Eq (CSSImportRule) where
+  (CSSImportRule a) == (CSSImportRule b) = js_eq a b
+
+instance PToJSRef CSSImportRule where
+  pToJSRef = unCSSImportRule
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef CSSImportRule where
+  pFromJSRef = CSSImportRule
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef CSSImportRule where
+  toJSRef = return . unCSSImportRule
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef CSSImportRule where
+  fromJSRef = return . fmap CSSImportRule . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsCSSRule CSSImportRule
+instance IsGObject CSSImportRule where
+  toGObject = GObject . unCSSImportRule
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = CSSImportRule . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToCSSImportRule :: IsGObject obj => obj -> CSSImportRule
+castToCSSImportRule = castTo gTypeCSSImportRule "CSSImportRule"
+
+foreign import javascript unsafe "window[\"CSSImportRule\"]" gTypeCSSImportRule :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.CSSKeyframeRule".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.CSSRule"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/CSSKeyframeRule Mozilla CSSKeyframeRule documentation>
+newtype CSSKeyframeRule = CSSKeyframeRule { unCSSKeyframeRule :: JSRef }
+
+instance Eq (CSSKeyframeRule) where
+  (CSSKeyframeRule a) == (CSSKeyframeRule b) = js_eq a b
+
+instance PToJSRef CSSKeyframeRule where
+  pToJSRef = unCSSKeyframeRule
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef CSSKeyframeRule where
+  pFromJSRef = CSSKeyframeRule
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef CSSKeyframeRule where
+  toJSRef = return . unCSSKeyframeRule
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef CSSKeyframeRule where
+  fromJSRef = return . fmap CSSKeyframeRule . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsCSSRule CSSKeyframeRule
+instance IsGObject CSSKeyframeRule where
+  toGObject = GObject . unCSSKeyframeRule
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = CSSKeyframeRule . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToCSSKeyframeRule :: IsGObject obj => obj -> CSSKeyframeRule
+castToCSSKeyframeRule = castTo gTypeCSSKeyframeRule "CSSKeyframeRule"
+
+foreign import javascript unsafe "window[\"CSSKeyframeRule\"]" gTypeCSSKeyframeRule :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.CSSKeyframesRule".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.CSSRule"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/CSSKeyframesRule Mozilla CSSKeyframesRule documentation>
+newtype CSSKeyframesRule = CSSKeyframesRule { unCSSKeyframesRule :: JSRef }
+
+instance Eq (CSSKeyframesRule) where
+  (CSSKeyframesRule a) == (CSSKeyframesRule b) = js_eq a b
+
+instance PToJSRef CSSKeyframesRule where
+  pToJSRef = unCSSKeyframesRule
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef CSSKeyframesRule where
+  pFromJSRef = CSSKeyframesRule
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef CSSKeyframesRule where
+  toJSRef = return . unCSSKeyframesRule
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef CSSKeyframesRule where
+  fromJSRef = return . fmap CSSKeyframesRule . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsCSSRule CSSKeyframesRule
+instance IsGObject CSSKeyframesRule where
+  toGObject = GObject . unCSSKeyframesRule
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = CSSKeyframesRule . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToCSSKeyframesRule :: IsGObject obj => obj -> CSSKeyframesRule
+castToCSSKeyframesRule = castTo gTypeCSSKeyframesRule "CSSKeyframesRule"
+
+foreign import javascript unsafe "window[\"CSSKeyframesRule\"]" gTypeCSSKeyframesRule :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.CSSMediaRule".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.CSSRule"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/CSSMediaRule Mozilla CSSMediaRule documentation>
+newtype CSSMediaRule = CSSMediaRule { unCSSMediaRule :: JSRef }
+
+instance Eq (CSSMediaRule) where
+  (CSSMediaRule a) == (CSSMediaRule b) = js_eq a b
+
+instance PToJSRef CSSMediaRule where
+  pToJSRef = unCSSMediaRule
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef CSSMediaRule where
+  pFromJSRef = CSSMediaRule
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef CSSMediaRule where
+  toJSRef = return . unCSSMediaRule
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef CSSMediaRule where
+  fromJSRef = return . fmap CSSMediaRule . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsCSSRule CSSMediaRule
+instance IsGObject CSSMediaRule where
+  toGObject = GObject . unCSSMediaRule
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = CSSMediaRule . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToCSSMediaRule :: IsGObject obj => obj -> CSSMediaRule
+castToCSSMediaRule = castTo gTypeCSSMediaRule "CSSMediaRule"
+
+foreign import javascript unsafe "window[\"CSSMediaRule\"]" gTypeCSSMediaRule :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.CSSPageRule".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.CSSRule"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/CSSPageRule Mozilla CSSPageRule documentation>
+newtype CSSPageRule = CSSPageRule { unCSSPageRule :: JSRef }
+
+instance Eq (CSSPageRule) where
+  (CSSPageRule a) == (CSSPageRule b) = js_eq a b
+
+instance PToJSRef CSSPageRule where
+  pToJSRef = unCSSPageRule
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef CSSPageRule where
+  pFromJSRef = CSSPageRule
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef CSSPageRule where
+  toJSRef = return . unCSSPageRule
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef CSSPageRule where
+  fromJSRef = return . fmap CSSPageRule . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsCSSRule CSSPageRule
+instance IsGObject CSSPageRule where
+  toGObject = GObject . unCSSPageRule
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = CSSPageRule . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToCSSPageRule :: IsGObject obj => obj -> CSSPageRule
+castToCSSPageRule = castTo gTypeCSSPageRule "CSSPageRule"
+
+foreign import javascript unsafe "window[\"CSSPageRule\"]" gTypeCSSPageRule :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.CSSPrimitiveValue".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.CSSValue"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/CSSPrimitiveValue Mozilla CSSPrimitiveValue documentation>
+newtype CSSPrimitiveValue = CSSPrimitiveValue { unCSSPrimitiveValue :: JSRef }
+
+instance Eq (CSSPrimitiveValue) where
+  (CSSPrimitiveValue a) == (CSSPrimitiveValue b) = js_eq a b
+
+instance PToJSRef CSSPrimitiveValue where
+  pToJSRef = unCSSPrimitiveValue
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef CSSPrimitiveValue where
+  pFromJSRef = CSSPrimitiveValue
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef CSSPrimitiveValue where
+  toJSRef = return . unCSSPrimitiveValue
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef CSSPrimitiveValue where
+  fromJSRef = return . fmap CSSPrimitiveValue . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsCSSValue CSSPrimitiveValue
+instance IsGObject CSSPrimitiveValue where
+  toGObject = GObject . unCSSPrimitiveValue
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = CSSPrimitiveValue . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToCSSPrimitiveValue :: IsGObject obj => obj -> CSSPrimitiveValue
+castToCSSPrimitiveValue = castTo gTypeCSSPrimitiveValue "CSSPrimitiveValue"
+
+foreign import javascript unsafe "window[\"CSSPrimitiveValue\"]" gTypeCSSPrimitiveValue :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.CSSRule".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/CSSRule Mozilla CSSRule documentation>
+newtype CSSRule = CSSRule { unCSSRule :: JSRef }
+
+instance Eq (CSSRule) where
+  (CSSRule a) == (CSSRule b) = js_eq a b
+
+instance PToJSRef CSSRule where
+  pToJSRef = unCSSRule
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef CSSRule where
+  pFromJSRef = CSSRule
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef CSSRule where
+  toJSRef = return . unCSSRule
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef CSSRule where
+  fromJSRef = return . fmap CSSRule . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsGObject o => IsCSSRule o
+toCSSRule :: IsCSSRule o => o -> CSSRule
+toCSSRule = unsafeCastGObject . toGObject
+
+instance IsCSSRule CSSRule
+instance IsGObject CSSRule where
+  toGObject = GObject . unCSSRule
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = CSSRule . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToCSSRule :: IsGObject obj => obj -> CSSRule
+castToCSSRule = castTo gTypeCSSRule "CSSRule"
+
+foreign import javascript unsafe "window[\"CSSRule\"]" gTypeCSSRule :: GType
+#else
+type IsCSSRule o = CSSRuleClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.CSSRuleList".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/CSSRuleList Mozilla CSSRuleList documentation>
+newtype CSSRuleList = CSSRuleList { unCSSRuleList :: JSRef }
+
+instance Eq (CSSRuleList) where
+  (CSSRuleList a) == (CSSRuleList b) = js_eq a b
+
+instance PToJSRef CSSRuleList where
+  pToJSRef = unCSSRuleList
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef CSSRuleList where
+  pFromJSRef = CSSRuleList
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef CSSRuleList where
+  toJSRef = return . unCSSRuleList
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef CSSRuleList where
+  fromJSRef = return . fmap CSSRuleList . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject CSSRuleList where
+  toGObject = GObject . unCSSRuleList
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = CSSRuleList . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToCSSRuleList :: IsGObject obj => obj -> CSSRuleList
+castToCSSRuleList = castTo gTypeCSSRuleList "CSSRuleList"
+
+foreign import javascript unsafe "window[\"CSSRuleList\"]" gTypeCSSRuleList :: GType
+#else
+type IsCSSRuleList o = CSSRuleListClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.CSSStyleDeclaration".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleDeclaration Mozilla CSSStyleDeclaration documentation>
+newtype CSSStyleDeclaration = CSSStyleDeclaration { unCSSStyleDeclaration :: JSRef }
+
+instance Eq (CSSStyleDeclaration) where
+  (CSSStyleDeclaration a) == (CSSStyleDeclaration b) = js_eq a b
+
+instance PToJSRef CSSStyleDeclaration where
+  pToJSRef = unCSSStyleDeclaration
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef CSSStyleDeclaration where
+  pFromJSRef = CSSStyleDeclaration
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef CSSStyleDeclaration where
+  toJSRef = return . unCSSStyleDeclaration
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef CSSStyleDeclaration where
+  fromJSRef = return . fmap CSSStyleDeclaration . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject CSSStyleDeclaration where
+  toGObject = GObject . unCSSStyleDeclaration
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = CSSStyleDeclaration . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToCSSStyleDeclaration :: IsGObject obj => obj -> CSSStyleDeclaration
+castToCSSStyleDeclaration = castTo gTypeCSSStyleDeclaration "CSSStyleDeclaration"
+
+foreign import javascript unsafe "window[\"CSSStyleDeclaration\"]" gTypeCSSStyleDeclaration :: GType
+#else
+type IsCSSStyleDeclaration o = CSSStyleDeclarationClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.CSSStyleRule".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.CSSRule"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleRule Mozilla CSSStyleRule documentation>
+newtype CSSStyleRule = CSSStyleRule { unCSSStyleRule :: JSRef }
+
+instance Eq (CSSStyleRule) where
+  (CSSStyleRule a) == (CSSStyleRule b) = js_eq a b
+
+instance PToJSRef CSSStyleRule where
+  pToJSRef = unCSSStyleRule
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef CSSStyleRule where
+  pFromJSRef = CSSStyleRule
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef CSSStyleRule where
+  toJSRef = return . unCSSStyleRule
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef CSSStyleRule where
+  fromJSRef = return . fmap CSSStyleRule . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsCSSRule CSSStyleRule
+instance IsGObject CSSStyleRule where
+  toGObject = GObject . unCSSStyleRule
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = CSSStyleRule . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToCSSStyleRule :: IsGObject obj => obj -> CSSStyleRule
+castToCSSStyleRule = castTo gTypeCSSStyleRule "CSSStyleRule"
+
+foreign import javascript unsafe "window[\"CSSStyleRule\"]" gTypeCSSStyleRule :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.CSSStyleSheet".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.StyleSheet"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleSheet Mozilla CSSStyleSheet documentation>
+newtype CSSStyleSheet = CSSStyleSheet { unCSSStyleSheet :: JSRef }
+
+instance Eq (CSSStyleSheet) where
+  (CSSStyleSheet a) == (CSSStyleSheet b) = js_eq a b
+
+instance PToJSRef CSSStyleSheet where
+  pToJSRef = unCSSStyleSheet
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef CSSStyleSheet where
+  pFromJSRef = CSSStyleSheet
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef CSSStyleSheet where
+  toJSRef = return . unCSSStyleSheet
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef CSSStyleSheet where
+  fromJSRef = return . fmap CSSStyleSheet . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsStyleSheet CSSStyleSheet
+instance IsGObject CSSStyleSheet where
+  toGObject = GObject . unCSSStyleSheet
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = CSSStyleSheet . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToCSSStyleSheet :: IsGObject obj => obj -> CSSStyleSheet
+castToCSSStyleSheet = castTo gTypeCSSStyleSheet "CSSStyleSheet"
+
+foreign import javascript unsafe "window[\"CSSStyleSheet\"]" gTypeCSSStyleSheet :: GType
+#else
+type IsCSSStyleSheet o = CSSStyleSheetClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.CSSSupportsRule".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.CSSRule"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/CSSSupportsRule Mozilla CSSSupportsRule documentation>
+newtype CSSSupportsRule = CSSSupportsRule { unCSSSupportsRule :: JSRef }
+
+instance Eq (CSSSupportsRule) where
+  (CSSSupportsRule a) == (CSSSupportsRule b) = js_eq a b
+
+instance PToJSRef CSSSupportsRule where
+  pToJSRef = unCSSSupportsRule
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef CSSSupportsRule where
+  pFromJSRef = CSSSupportsRule
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef CSSSupportsRule where
+  toJSRef = return . unCSSSupportsRule
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef CSSSupportsRule where
+  fromJSRef = return . fmap CSSSupportsRule . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsCSSRule CSSSupportsRule
+instance IsGObject CSSSupportsRule where
+  toGObject = GObject . unCSSSupportsRule
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = CSSSupportsRule . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToCSSSupportsRule :: IsGObject obj => obj -> CSSSupportsRule
+castToCSSSupportsRule = castTo gTypeCSSSupportsRule "CSSSupportsRule"
+
+foreign import javascript unsafe "window[\"CSSSupportsRule\"]" gTypeCSSSupportsRule :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.CSSUnknownRule".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.CSSRule"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/CSSUnknownRule Mozilla CSSUnknownRule documentation>
+newtype CSSUnknownRule = CSSUnknownRule { unCSSUnknownRule :: JSRef }
+
+instance Eq (CSSUnknownRule) where
+  (CSSUnknownRule a) == (CSSUnknownRule b) = js_eq a b
+
+instance PToJSRef CSSUnknownRule where
+  pToJSRef = unCSSUnknownRule
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef CSSUnknownRule where
+  pFromJSRef = CSSUnknownRule
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef CSSUnknownRule where
+  toJSRef = return . unCSSUnknownRule
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef CSSUnknownRule where
+  fromJSRef = return . fmap CSSUnknownRule . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsCSSRule CSSUnknownRule
+instance IsGObject CSSUnknownRule where
+  toGObject = GObject . unCSSUnknownRule
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = CSSUnknownRule . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToCSSUnknownRule :: IsGObject obj => obj -> CSSUnknownRule
+castToCSSUnknownRule = castTo gTypeCSSUnknownRule "CSSUnknownRule"
+
+foreign import javascript unsafe "window[\"CSSUnknownRule\"]" gTypeCSSUnknownRule :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.CSSValue".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/CSSValue Mozilla CSSValue documentation>
+newtype CSSValue = CSSValue { unCSSValue :: JSRef }
+
+instance Eq (CSSValue) where
+  (CSSValue a) == (CSSValue b) = js_eq a b
+
+instance PToJSRef CSSValue where
+  pToJSRef = unCSSValue
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef CSSValue where
+  pFromJSRef = CSSValue
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef CSSValue where
+  toJSRef = return . unCSSValue
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef CSSValue where
+  fromJSRef = return . fmap CSSValue . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsGObject o => IsCSSValue o
+toCSSValue :: IsCSSValue o => o -> CSSValue
+toCSSValue = unsafeCastGObject . toGObject
+
+instance IsCSSValue CSSValue
+instance IsGObject CSSValue where
+  toGObject = GObject . unCSSValue
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = CSSValue . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToCSSValue :: IsGObject obj => obj -> CSSValue
+castToCSSValue = castTo gTypeCSSValue "CSSValue"
+
+foreign import javascript unsafe "window[\"CSSValue\"]" gTypeCSSValue :: GType
+#else
+type IsCSSValue o = CSSValueClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.CSSValueList".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.CSSValue"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/CSSValueList Mozilla CSSValueList documentation>
+newtype CSSValueList = CSSValueList { unCSSValueList :: JSRef }
+
+instance Eq (CSSValueList) where
+  (CSSValueList a) == (CSSValueList b) = js_eq a b
+
+instance PToJSRef CSSValueList where
+  pToJSRef = unCSSValueList
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef CSSValueList where
+  pFromJSRef = CSSValueList
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef CSSValueList where
+  toJSRef = return . unCSSValueList
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef CSSValueList where
+  fromJSRef = return . fmap CSSValueList . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsCSSValue o => IsCSSValueList o
+toCSSValueList :: IsCSSValueList o => o -> CSSValueList
+toCSSValueList = unsafeCastGObject . toGObject
+
+instance IsCSSValueList CSSValueList
+instance IsCSSValue CSSValueList
+instance IsGObject CSSValueList where
+  toGObject = GObject . unCSSValueList
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = CSSValueList . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToCSSValueList :: IsGObject obj => obj -> CSSValueList
+castToCSSValueList = castTo gTypeCSSValueList "CSSValueList"
+
+foreign import javascript unsafe "window[\"CSSValueList\"]" gTypeCSSValueList :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.CanvasGradient".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/CanvasGradient Mozilla CanvasGradient documentation>
+newtype CanvasGradient = CanvasGradient { unCanvasGradient :: JSRef }
+
+instance Eq (CanvasGradient) where
+  (CanvasGradient a) == (CanvasGradient b) = js_eq a b
+
+instance PToJSRef CanvasGradient where
+  pToJSRef = unCanvasGradient
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef CanvasGradient where
+  pFromJSRef = CanvasGradient
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef CanvasGradient where
+  toJSRef = return . unCanvasGradient
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef CanvasGradient where
+  fromJSRef = return . fmap CanvasGradient . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject CanvasGradient where
+  toGObject = GObject . unCanvasGradient
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = CanvasGradient . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToCanvasGradient :: IsGObject obj => obj -> CanvasGradient
+castToCanvasGradient = castTo gTypeCanvasGradient "CanvasGradient"
+
+foreign import javascript unsafe "window[\"CanvasGradient\"]" gTypeCanvasGradient :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.CanvasPattern".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/CanvasPattern Mozilla CanvasPattern documentation>
+newtype CanvasPattern = CanvasPattern { unCanvasPattern :: JSRef }
+
+instance Eq (CanvasPattern) where
+  (CanvasPattern a) == (CanvasPattern b) = js_eq a b
+
+instance PToJSRef CanvasPattern where
+  pToJSRef = unCanvasPattern
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef CanvasPattern where
+  pFromJSRef = CanvasPattern
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef CanvasPattern where
+  toJSRef = return . unCanvasPattern
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef CanvasPattern where
+  fromJSRef = return . fmap CanvasPattern . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject CanvasPattern where
+  toGObject = GObject . unCanvasPattern
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = CanvasPattern . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToCanvasPattern :: IsGObject obj => obj -> CanvasPattern
+castToCanvasPattern = castTo gTypeCanvasPattern "CanvasPattern"
+
+foreign import javascript unsafe "window[\"CanvasPattern\"]" gTypeCanvasPattern :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.CanvasProxy".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/CanvasProxy Mozilla CanvasProxy documentation>
+newtype CanvasProxy = CanvasProxy { unCanvasProxy :: JSRef }
+
+instance Eq (CanvasProxy) where
+  (CanvasProxy a) == (CanvasProxy b) = js_eq a b
+
+instance PToJSRef CanvasProxy where
+  pToJSRef = unCanvasProxy
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef CanvasProxy where
+  pFromJSRef = CanvasProxy
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef CanvasProxy where
+  toJSRef = return . unCanvasProxy
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef CanvasProxy where
+  fromJSRef = return . fmap CanvasProxy . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject CanvasProxy where
+  toGObject = GObject . unCanvasProxy
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = CanvasProxy . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToCanvasProxy :: IsGObject obj => obj -> CanvasProxy
+castToCanvasProxy = castTo gTypeCanvasProxy "CanvasProxy"
+
+foreign import javascript unsafe "window[\"CanvasProxy\"]" gTypeCanvasProxy :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.CanvasRenderingContext".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext Mozilla CanvasRenderingContext documentation>
+newtype CanvasRenderingContext = CanvasRenderingContext { unCanvasRenderingContext :: JSRef }
+
+instance Eq (CanvasRenderingContext) where
+  (CanvasRenderingContext a) == (CanvasRenderingContext b) = js_eq a b
+
+instance PToJSRef CanvasRenderingContext where
+  pToJSRef = unCanvasRenderingContext
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef CanvasRenderingContext where
+  pFromJSRef = CanvasRenderingContext
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef CanvasRenderingContext where
+  toJSRef = return . unCanvasRenderingContext
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef CanvasRenderingContext where
+  fromJSRef = return . fmap CanvasRenderingContext . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsGObject o => IsCanvasRenderingContext o
+toCanvasRenderingContext :: IsCanvasRenderingContext o => o -> CanvasRenderingContext
+toCanvasRenderingContext = unsafeCastGObject . toGObject
+
+instance IsCanvasRenderingContext CanvasRenderingContext
+instance IsGObject CanvasRenderingContext where
+  toGObject = GObject . unCanvasRenderingContext
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = CanvasRenderingContext . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToCanvasRenderingContext :: IsGObject obj => obj -> CanvasRenderingContext
+castToCanvasRenderingContext = castTo gTypeCanvasRenderingContext "CanvasRenderingContext"
+
+foreign import javascript unsafe "window[\"CanvasRenderingContext\"]" gTypeCanvasRenderingContext :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.CanvasRenderingContext2D".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.CanvasRenderingContext"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D Mozilla CanvasRenderingContext2D documentation>
+newtype CanvasRenderingContext2D = CanvasRenderingContext2D { unCanvasRenderingContext2D :: JSRef }
+
+instance Eq (CanvasRenderingContext2D) where
+  (CanvasRenderingContext2D a) == (CanvasRenderingContext2D b) = js_eq a b
+
+instance PToJSRef CanvasRenderingContext2D where
+  pToJSRef = unCanvasRenderingContext2D
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef CanvasRenderingContext2D where
+  pFromJSRef = CanvasRenderingContext2D
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef CanvasRenderingContext2D where
+  toJSRef = return . unCanvasRenderingContext2D
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef CanvasRenderingContext2D where
+  fromJSRef = return . fmap CanvasRenderingContext2D . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsCanvasRenderingContext CanvasRenderingContext2D
+instance IsGObject CanvasRenderingContext2D where
+  toGObject = GObject . unCanvasRenderingContext2D
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = CanvasRenderingContext2D . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToCanvasRenderingContext2D :: IsGObject obj => obj -> CanvasRenderingContext2D
+castToCanvasRenderingContext2D = castTo gTypeCanvasRenderingContext2D "CanvasRenderingContext2D"
+
+foreign import javascript unsafe "window[\"CanvasRenderingContext2D\"]" gTypeCanvasRenderingContext2D :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.CapabilityRange".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/CapabilityRange Mozilla CapabilityRange documentation>
+newtype CapabilityRange = CapabilityRange { unCapabilityRange :: JSRef }
+
+instance Eq (CapabilityRange) where
+  (CapabilityRange a) == (CapabilityRange b) = js_eq a b
+
+instance PToJSRef CapabilityRange where
+  pToJSRef = unCapabilityRange
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef CapabilityRange where
+  pFromJSRef = CapabilityRange
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef CapabilityRange where
+  toJSRef = return . unCapabilityRange
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef CapabilityRange where
+  fromJSRef = return . fmap CapabilityRange . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject CapabilityRange where
+  toGObject = GObject . unCapabilityRange
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = CapabilityRange . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToCapabilityRange :: IsGObject obj => obj -> CapabilityRange
+castToCapabilityRange = castTo gTypeCapabilityRange "CapabilityRange"
+
+foreign import javascript unsafe "window[\"CapabilityRange\"]" gTypeCapabilityRange :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.ChannelMergerNode".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.AudioNode"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/ChannelMergerNode Mozilla ChannelMergerNode documentation>
+newtype ChannelMergerNode = ChannelMergerNode { unChannelMergerNode :: JSRef }
+
+instance Eq (ChannelMergerNode) where
+  (ChannelMergerNode a) == (ChannelMergerNode b) = js_eq a b
+
+instance PToJSRef ChannelMergerNode where
+  pToJSRef = unChannelMergerNode
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef ChannelMergerNode where
+  pFromJSRef = ChannelMergerNode
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef ChannelMergerNode where
+  toJSRef = return . unChannelMergerNode
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef ChannelMergerNode where
+  fromJSRef = return . fmap ChannelMergerNode . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsAudioNode ChannelMergerNode
+instance IsEventTarget ChannelMergerNode
+instance IsGObject ChannelMergerNode where
+  toGObject = GObject . unChannelMergerNode
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = ChannelMergerNode . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToChannelMergerNode :: IsGObject obj => obj -> ChannelMergerNode
+castToChannelMergerNode = castTo gTypeChannelMergerNode "ChannelMergerNode"
+
+foreign import javascript unsafe "window[\"ChannelMergerNode\"]" gTypeChannelMergerNode :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.ChannelSplitterNode".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.AudioNode"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/ChannelSplitterNode Mozilla ChannelSplitterNode documentation>
+newtype ChannelSplitterNode = ChannelSplitterNode { unChannelSplitterNode :: JSRef }
+
+instance Eq (ChannelSplitterNode) where
+  (ChannelSplitterNode a) == (ChannelSplitterNode b) = js_eq a b
+
+instance PToJSRef ChannelSplitterNode where
+  pToJSRef = unChannelSplitterNode
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef ChannelSplitterNode where
+  pFromJSRef = ChannelSplitterNode
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef ChannelSplitterNode where
+  toJSRef = return . unChannelSplitterNode
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef ChannelSplitterNode where
+  fromJSRef = return . fmap ChannelSplitterNode . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsAudioNode ChannelSplitterNode
+instance IsEventTarget ChannelSplitterNode
+instance IsGObject ChannelSplitterNode where
+  toGObject = GObject . unChannelSplitterNode
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = ChannelSplitterNode . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToChannelSplitterNode :: IsGObject obj => obj -> ChannelSplitterNode
+castToChannelSplitterNode = castTo gTypeChannelSplitterNode "ChannelSplitterNode"
+
+foreign import javascript unsafe "window[\"ChannelSplitterNode\"]" gTypeChannelSplitterNode :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.CharacterData".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/CharacterData Mozilla CharacterData documentation>
+newtype CharacterData = CharacterData { unCharacterData :: JSRef }
+
+instance Eq (CharacterData) where
+  (CharacterData a) == (CharacterData b) = js_eq a b
+
+instance PToJSRef CharacterData where
+  pToJSRef = unCharacterData
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef CharacterData where
+  pFromJSRef = CharacterData
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef CharacterData where
+  toJSRef = return . unCharacterData
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef CharacterData where
+  fromJSRef = return . fmap CharacterData . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsNode o => IsCharacterData o
+toCharacterData :: IsCharacterData o => o -> CharacterData
+toCharacterData = unsafeCastGObject . toGObject
+
+instance IsCharacterData CharacterData
+instance IsNode CharacterData
+instance IsEventTarget CharacterData
+instance IsGObject CharacterData where
+  toGObject = GObject . unCharacterData
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = CharacterData . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToCharacterData :: IsGObject obj => obj -> CharacterData
+castToCharacterData = castTo gTypeCharacterData "CharacterData"
+
+foreign import javascript unsafe "window[\"CharacterData\"]" gTypeCharacterData :: GType
+#else
+type IsCharacterData o = CharacterDataClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.ChildNode".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/ChildNode Mozilla ChildNode documentation>
+newtype ChildNode = ChildNode { unChildNode :: JSRef }
+
+instance Eq (ChildNode) where
+  (ChildNode a) == (ChildNode b) = js_eq a b
+
+instance PToJSRef ChildNode where
+  pToJSRef = unChildNode
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef ChildNode where
+  pFromJSRef = ChildNode
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef ChildNode where
+  toJSRef = return . unChildNode
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef ChildNode where
+  fromJSRef = return . fmap ChildNode . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject ChildNode where
+  toGObject = GObject . unChildNode
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = ChildNode . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToChildNode :: IsGObject obj => obj -> ChildNode
+castToChildNode = castTo gTypeChildNode "ChildNode"
+
+foreign import javascript unsafe "window[\"ChildNode\"]" gTypeChildNode :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.ClientRect".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/ClientRect Mozilla ClientRect documentation>
+newtype ClientRect = ClientRect { unClientRect :: JSRef }
+
+instance Eq (ClientRect) where
+  (ClientRect a) == (ClientRect b) = js_eq a b
+
+instance PToJSRef ClientRect where
+  pToJSRef = unClientRect
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef ClientRect where
+  pFromJSRef = ClientRect
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef ClientRect where
+  toJSRef = return . unClientRect
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef ClientRect where
+  fromJSRef = return . fmap ClientRect . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject ClientRect where
+  toGObject = GObject . unClientRect
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = ClientRect . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToClientRect :: IsGObject obj => obj -> ClientRect
+castToClientRect = castTo gTypeClientRect "ClientRect"
+
+foreign import javascript unsafe "window[\"ClientRect\"]" gTypeClientRect :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.ClientRectList".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/ClientRectList Mozilla ClientRectList documentation>
+newtype ClientRectList = ClientRectList { unClientRectList :: JSRef }
+
+instance Eq (ClientRectList) where
+  (ClientRectList a) == (ClientRectList b) = js_eq a b
+
+instance PToJSRef ClientRectList where
+  pToJSRef = unClientRectList
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef ClientRectList where
+  pFromJSRef = ClientRectList
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef ClientRectList where
+  toJSRef = return . unClientRectList
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef ClientRectList where
+  fromJSRef = return . fmap ClientRectList . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject ClientRectList where
+  toGObject = GObject . unClientRectList
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = ClientRectList . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToClientRectList :: IsGObject obj => obj -> ClientRectList
+castToClientRectList = castTo gTypeClientRectList "ClientRectList"
+
+foreign import javascript unsafe "window[\"ClientRectList\"]" gTypeClientRectList :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.CloseEvent".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.Event"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent Mozilla CloseEvent documentation>
+newtype CloseEvent = CloseEvent { unCloseEvent :: JSRef }
+
+instance Eq (CloseEvent) where
+  (CloseEvent a) == (CloseEvent b) = js_eq a b
+
+instance PToJSRef CloseEvent where
+  pToJSRef = unCloseEvent
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef CloseEvent where
+  pFromJSRef = CloseEvent
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef CloseEvent where
+  toJSRef = return . unCloseEvent
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef CloseEvent where
+  fromJSRef = return . fmap CloseEvent . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEvent CloseEvent
+instance IsGObject CloseEvent where
+  toGObject = GObject . unCloseEvent
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = CloseEvent . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToCloseEvent :: IsGObject obj => obj -> CloseEvent
+castToCloseEvent = castTo gTypeCloseEvent "CloseEvent"
+
+foreign import javascript unsafe "window[\"CloseEvent\"]" gTypeCloseEvent :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.CommandLineAPIHost".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/CommandLineAPIHost Mozilla CommandLineAPIHost documentation>
+newtype CommandLineAPIHost = CommandLineAPIHost { unCommandLineAPIHost :: JSRef }
+
+instance Eq (CommandLineAPIHost) where
+  (CommandLineAPIHost a) == (CommandLineAPIHost b) = js_eq a b
+
+instance PToJSRef CommandLineAPIHost where
+  pToJSRef = unCommandLineAPIHost
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef CommandLineAPIHost where
+  pFromJSRef = CommandLineAPIHost
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef CommandLineAPIHost where
+  toJSRef = return . unCommandLineAPIHost
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef CommandLineAPIHost where
+  fromJSRef = return . fmap CommandLineAPIHost . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject CommandLineAPIHost where
+  toGObject = GObject . unCommandLineAPIHost
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = CommandLineAPIHost . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToCommandLineAPIHost :: IsGObject obj => obj -> CommandLineAPIHost
+castToCommandLineAPIHost = castTo gTypeCommandLineAPIHost "CommandLineAPIHost"
+
+foreign import javascript unsafe "window[\"CommandLineAPIHost\"]" gTypeCommandLineAPIHost :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.Comment".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.CharacterData"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/Comment Mozilla Comment documentation>
+newtype Comment = Comment { unComment :: JSRef }
+
+instance Eq (Comment) where
+  (Comment a) == (Comment b) = js_eq a b
+
+instance PToJSRef Comment where
+  pToJSRef = unComment
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef Comment where
+  pFromJSRef = Comment
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef Comment where
+  toJSRef = return . unComment
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef Comment where
+  fromJSRef = return . fmap Comment . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsCharacterData Comment
+instance IsNode Comment
+instance IsEventTarget Comment
+instance IsGObject Comment where
+  toGObject = GObject . unComment
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = Comment . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToComment :: IsGObject obj => obj -> Comment
+castToComment = castTo gTypeComment "Comment"
+
+foreign import javascript unsafe "window[\"Comment\"]" gTypeComment :: GType
+#else
+type IsComment o = CommentClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.CompositionEvent".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.UIEvent"
+--     * "GHCJS.DOM.Event"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/CompositionEvent Mozilla CompositionEvent documentation>
+newtype CompositionEvent = CompositionEvent { unCompositionEvent :: JSRef }
+
+instance Eq (CompositionEvent) where
+  (CompositionEvent a) == (CompositionEvent b) = js_eq a b
+
+instance PToJSRef CompositionEvent where
+  pToJSRef = unCompositionEvent
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef CompositionEvent where
+  pFromJSRef = CompositionEvent
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef CompositionEvent where
+  toJSRef = return . unCompositionEvent
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef CompositionEvent where
+  fromJSRef = return . fmap CompositionEvent . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsUIEvent CompositionEvent
+instance IsEvent CompositionEvent
+instance IsGObject CompositionEvent where
+  toGObject = GObject . unCompositionEvent
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = CompositionEvent . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToCompositionEvent :: IsGObject obj => obj -> CompositionEvent
+castToCompositionEvent = castTo gTypeCompositionEvent "CompositionEvent"
+
+foreign import javascript unsafe "window[\"CompositionEvent\"]" gTypeCompositionEvent :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.ConvolverNode".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.AudioNode"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/ConvolverNode Mozilla ConvolverNode documentation>
+newtype ConvolverNode = ConvolverNode { unConvolverNode :: JSRef }
+
+instance Eq (ConvolverNode) where
+  (ConvolverNode a) == (ConvolverNode b) = js_eq a b
+
+instance PToJSRef ConvolverNode where
+  pToJSRef = unConvolverNode
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef ConvolverNode where
+  pFromJSRef = ConvolverNode
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef ConvolverNode where
+  toJSRef = return . unConvolverNode
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef ConvolverNode where
+  fromJSRef = return . fmap ConvolverNode . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsAudioNode ConvolverNode
+instance IsEventTarget ConvolverNode
+instance IsGObject ConvolverNode where
+  toGObject = GObject . unConvolverNode
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = ConvolverNode . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToConvolverNode :: IsGObject obj => obj -> ConvolverNode
+castToConvolverNode = castTo gTypeConvolverNode "ConvolverNode"
+
+foreign import javascript unsafe "window[\"ConvolverNode\"]" gTypeConvolverNode :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.Coordinates".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/Coordinates Mozilla Coordinates documentation>
+newtype Coordinates = Coordinates { unCoordinates :: JSRef }
+
+instance Eq (Coordinates) where
+  (Coordinates a) == (Coordinates b) = js_eq a b
+
+instance PToJSRef Coordinates where
+  pToJSRef = unCoordinates
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef Coordinates where
+  pFromJSRef = Coordinates
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef Coordinates where
+  toJSRef = return . unCoordinates
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef Coordinates where
+  fromJSRef = return . fmap Coordinates . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject Coordinates where
+  toGObject = GObject . unCoordinates
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = Coordinates . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToCoordinates :: IsGObject obj => obj -> Coordinates
+castToCoordinates = castTo gTypeCoordinates "Coordinates"
+
+foreign import javascript unsafe "window[\"Coordinates\"]" gTypeCoordinates :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.Counter".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/Counter Mozilla Counter documentation>
+newtype Counter = Counter { unCounter :: JSRef }
+
+instance Eq (Counter) where
+  (Counter a) == (Counter b) = js_eq a b
+
+instance PToJSRef Counter where
+  pToJSRef = unCounter
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef Counter where
+  pFromJSRef = Counter
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef Counter where
+  toJSRef = return . unCounter
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef Counter where
+  fromJSRef = return . fmap Counter . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject Counter where
+  toGObject = GObject . unCounter
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = Counter . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToCounter :: IsGObject obj => obj -> Counter
+castToCounter = castTo gTypeCounter "Counter"
+
+foreign import javascript unsafe "window[\"Counter\"]" gTypeCounter :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.Crypto".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/Crypto Mozilla Crypto documentation>
+newtype Crypto = Crypto { unCrypto :: JSRef }
+
+instance Eq (Crypto) where
+  (Crypto a) == (Crypto b) = js_eq a b
+
+instance PToJSRef Crypto where
+  pToJSRef = unCrypto
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef Crypto where
+  pFromJSRef = Crypto
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef Crypto where
+  toJSRef = return . unCrypto
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef Crypto where
+  fromJSRef = return . fmap Crypto . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject Crypto where
+  toGObject = GObject . unCrypto
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = Crypto . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToCrypto :: IsGObject obj => obj -> Crypto
+castToCrypto = castTo gTypeCrypto "Crypto"
+
+foreign import javascript unsafe "window[\"Crypto\"]" gTypeCrypto :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.CryptoKey".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/CryptoKey Mozilla CryptoKey documentation>
+newtype CryptoKey = CryptoKey { unCryptoKey :: JSRef }
+
+instance Eq (CryptoKey) where
+  (CryptoKey a) == (CryptoKey b) = js_eq a b
+
+instance PToJSRef CryptoKey where
+  pToJSRef = unCryptoKey
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef CryptoKey where
+  pFromJSRef = CryptoKey
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef CryptoKey where
+  toJSRef = return . unCryptoKey
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef CryptoKey where
+  fromJSRef = return . fmap CryptoKey . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject CryptoKey where
+  toGObject = GObject . unCryptoKey
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = CryptoKey . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToCryptoKey :: IsGObject obj => obj -> CryptoKey
+castToCryptoKey = castTo gTypeCryptoKey "CryptoKey"
+
+foreign import javascript unsafe "window[\"CryptoKey\"]" gTypeCryptoKey :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.CryptoKeyPair".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/CryptoKeyPair Mozilla CryptoKeyPair documentation>
+newtype CryptoKeyPair = CryptoKeyPair { unCryptoKeyPair :: JSRef }
+
+instance Eq (CryptoKeyPair) where
+  (CryptoKeyPair a) == (CryptoKeyPair b) = js_eq a b
+
+instance PToJSRef CryptoKeyPair where
+  pToJSRef = unCryptoKeyPair
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef CryptoKeyPair where
+  pFromJSRef = CryptoKeyPair
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef CryptoKeyPair where
+  toJSRef = return . unCryptoKeyPair
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef CryptoKeyPair where
+  fromJSRef = return . fmap CryptoKeyPair . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject CryptoKeyPair where
+  toGObject = GObject . unCryptoKeyPair
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = CryptoKeyPair . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToCryptoKeyPair :: IsGObject obj => obj -> CryptoKeyPair
+castToCryptoKeyPair = castTo gTypeCryptoKeyPair "CryptoKeyPair"
+
+foreign import javascript unsafe "window[\"CryptoKeyPair\"]" gTypeCryptoKeyPair :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.CustomEvent".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.Event"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent Mozilla CustomEvent documentation>
+newtype CustomEvent = CustomEvent { unCustomEvent :: JSRef }
+
+instance Eq (CustomEvent) where
+  (CustomEvent a) == (CustomEvent b) = js_eq a b
+
+instance PToJSRef CustomEvent where
+  pToJSRef = unCustomEvent
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef CustomEvent where
+  pFromJSRef = CustomEvent
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef CustomEvent where
+  toJSRef = return . unCustomEvent
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef CustomEvent where
+  fromJSRef = return . fmap CustomEvent . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEvent CustomEvent
+instance IsGObject CustomEvent where
+  toGObject = GObject . unCustomEvent
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = CustomEvent . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToCustomEvent :: IsGObject obj => obj -> CustomEvent
+castToCustomEvent = castTo gTypeCustomEvent "CustomEvent"
+
+foreign import javascript unsafe "window[\"CustomEvent\"]" gTypeCustomEvent :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.DOMError".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/DOMError Mozilla DOMError documentation>
+newtype DOMError = DOMError { unDOMError :: JSRef }
+
+instance Eq (DOMError) where
+  (DOMError a) == (DOMError b) = js_eq a b
+
+instance PToJSRef DOMError where
+  pToJSRef = unDOMError
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef DOMError where
+  pFromJSRef = DOMError
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef DOMError where
+  toJSRef = return . unDOMError
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef DOMError where
+  fromJSRef = return . fmap DOMError . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsGObject o => IsDOMError o
+toDOMError :: IsDOMError o => o -> DOMError
+toDOMError = unsafeCastGObject . toGObject
+
+instance IsDOMError DOMError
+instance IsGObject DOMError where
+  toGObject = GObject . unDOMError
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = DOMError . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToDOMError :: IsGObject obj => obj -> DOMError
+castToDOMError = castTo gTypeDOMError "DOMError"
+
+foreign import javascript unsafe "window[\"DOMError\"]" gTypeDOMError :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.DOMImplementation".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation Mozilla DOMImplementation documentation>
+newtype DOMImplementation = DOMImplementation { unDOMImplementation :: JSRef }
+
+instance Eq (DOMImplementation) where
+  (DOMImplementation a) == (DOMImplementation b) = js_eq a b
+
+instance PToJSRef DOMImplementation where
+  pToJSRef = unDOMImplementation
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef DOMImplementation where
+  pFromJSRef = DOMImplementation
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef DOMImplementation where
+  toJSRef = return . unDOMImplementation
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef DOMImplementation where
+  fromJSRef = return . fmap DOMImplementation . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject DOMImplementation where
+  toGObject = GObject . unDOMImplementation
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = DOMImplementation . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToDOMImplementation :: IsGObject obj => obj -> DOMImplementation
+castToDOMImplementation = castTo gTypeDOMImplementation "DOMImplementation"
+
+foreign import javascript unsafe "window[\"DOMImplementation\"]" gTypeDOMImplementation :: GType
+#else
+type IsDOMImplementation o = DOMImplementationClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.DOMNamedFlowCollection".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/WebKitNamedFlowCollection Mozilla WebKitNamedFlowCollection documentation>
+newtype DOMNamedFlowCollection = DOMNamedFlowCollection { unDOMNamedFlowCollection :: JSRef }
+
+instance Eq (DOMNamedFlowCollection) where
+  (DOMNamedFlowCollection a) == (DOMNamedFlowCollection b) = js_eq a b
+
+instance PToJSRef DOMNamedFlowCollection where
+  pToJSRef = unDOMNamedFlowCollection
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef DOMNamedFlowCollection where
+  pFromJSRef = DOMNamedFlowCollection
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef DOMNamedFlowCollection where
+  toJSRef = return . unDOMNamedFlowCollection
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef DOMNamedFlowCollection where
+  fromJSRef = return . fmap DOMNamedFlowCollection . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject DOMNamedFlowCollection where
+  toGObject = GObject . unDOMNamedFlowCollection
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = DOMNamedFlowCollection . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToDOMNamedFlowCollection :: IsGObject obj => obj -> DOMNamedFlowCollection
+castToDOMNamedFlowCollection = castTo gTypeDOMNamedFlowCollection "DOMNamedFlowCollection"
+
+foreign import javascript unsafe "window[\"WebKitNamedFlowCollection\"]" gTypeDOMNamedFlowCollection :: GType
+#else
+#ifndef USE_OLD_WEBKIT
+type IsDOMNamedFlowCollection o = DOMNamedFlowCollectionClass o
+#endif
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.DOMParser".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/DOMParser Mozilla DOMParser documentation>
+newtype DOMParser = DOMParser { unDOMParser :: JSRef }
+
+instance Eq (DOMParser) where
+  (DOMParser a) == (DOMParser b) = js_eq a b
+
+instance PToJSRef DOMParser where
+  pToJSRef = unDOMParser
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef DOMParser where
+  pFromJSRef = DOMParser
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef DOMParser where
+  toJSRef = return . unDOMParser
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef DOMParser where
+  fromJSRef = return . fmap DOMParser . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject DOMParser where
+  toGObject = GObject . unDOMParser
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = DOMParser . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToDOMParser :: IsGObject obj => obj -> DOMParser
+castToDOMParser = castTo gTypeDOMParser "DOMParser"
+
+foreign import javascript unsafe "window[\"DOMParser\"]" gTypeDOMParser :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.DOMSettableTokenList".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.DOMTokenList"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/DOMSettableTokenList Mozilla DOMSettableTokenList documentation>
+newtype DOMSettableTokenList = DOMSettableTokenList { unDOMSettableTokenList :: JSRef }
+
+instance Eq (DOMSettableTokenList) where
+  (DOMSettableTokenList a) == (DOMSettableTokenList b) = js_eq a b
+
+instance PToJSRef DOMSettableTokenList where
+  pToJSRef = unDOMSettableTokenList
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef DOMSettableTokenList where
+  pFromJSRef = DOMSettableTokenList
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef DOMSettableTokenList where
+  toJSRef = return . unDOMSettableTokenList
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef DOMSettableTokenList where
+  fromJSRef = return . fmap DOMSettableTokenList . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsDOMTokenList DOMSettableTokenList
+instance IsGObject DOMSettableTokenList where
+  toGObject = GObject . unDOMSettableTokenList
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = DOMSettableTokenList . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToDOMSettableTokenList :: IsGObject obj => obj -> DOMSettableTokenList
+castToDOMSettableTokenList = castTo gTypeDOMSettableTokenList "DOMSettableTokenList"
+
+foreign import javascript unsafe "window[\"DOMSettableTokenList\"]" gTypeDOMSettableTokenList :: GType
+#else
+type IsDOMSettableTokenList o = DOMSettableTokenListClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.DOMStringList".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/DOMStringList Mozilla DOMStringList documentation>
+newtype DOMStringList = DOMStringList { unDOMStringList :: JSRef }
+
+instance Eq (DOMStringList) where
+  (DOMStringList a) == (DOMStringList b) = js_eq a b
+
+instance PToJSRef DOMStringList where
+  pToJSRef = unDOMStringList
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef DOMStringList where
+  pFromJSRef = DOMStringList
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef DOMStringList where
+  toJSRef = return . unDOMStringList
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef DOMStringList where
+  fromJSRef = return . fmap DOMStringList . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject DOMStringList where
+  toGObject = GObject . unDOMStringList
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = DOMStringList . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToDOMStringList :: IsGObject obj => obj -> DOMStringList
+castToDOMStringList = castTo gTypeDOMStringList "DOMStringList"
+
+foreign import javascript unsafe "window[\"DOMStringList\"]" gTypeDOMStringList :: GType
+#else
+type IsDOMStringList o = DOMStringListClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.DOMStringMap".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/DOMStringMap Mozilla DOMStringMap documentation>
+newtype DOMStringMap = DOMStringMap { unDOMStringMap :: JSRef }
+
+instance Eq (DOMStringMap) where
+  (DOMStringMap a) == (DOMStringMap b) = js_eq a b
+
+instance PToJSRef DOMStringMap where
+  pToJSRef = unDOMStringMap
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef DOMStringMap where
+  pFromJSRef = DOMStringMap
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef DOMStringMap where
+  toJSRef = return . unDOMStringMap
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef DOMStringMap where
+  fromJSRef = return . fmap DOMStringMap . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject DOMStringMap where
+  toGObject = GObject . unDOMStringMap
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = DOMStringMap . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToDOMStringMap :: IsGObject obj => obj -> DOMStringMap
+castToDOMStringMap = castTo gTypeDOMStringMap "DOMStringMap"
+
+foreign import javascript unsafe "window[\"DOMStringMap\"]" gTypeDOMStringMap :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.DOMTokenList".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/DOMTokenList Mozilla DOMTokenList documentation>
+newtype DOMTokenList = DOMTokenList { unDOMTokenList :: JSRef }
+
+instance Eq (DOMTokenList) where
+  (DOMTokenList a) == (DOMTokenList b) = js_eq a b
+
+instance PToJSRef DOMTokenList where
+  pToJSRef = unDOMTokenList
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef DOMTokenList where
+  pFromJSRef = DOMTokenList
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef DOMTokenList where
+  toJSRef = return . unDOMTokenList
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef DOMTokenList where
+  fromJSRef = return . fmap DOMTokenList . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsGObject o => IsDOMTokenList o
+toDOMTokenList :: IsDOMTokenList o => o -> DOMTokenList
+toDOMTokenList = unsafeCastGObject . toGObject
+
+instance IsDOMTokenList DOMTokenList
+instance IsGObject DOMTokenList where
+  toGObject = GObject . unDOMTokenList
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = DOMTokenList . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToDOMTokenList :: IsGObject obj => obj -> DOMTokenList
+castToDOMTokenList = castTo gTypeDOMTokenList "DOMTokenList"
+
+foreign import javascript unsafe "window[\"DOMTokenList\"]" gTypeDOMTokenList :: GType
+#else
+type IsDOMTokenList o = DOMTokenListClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.DataCue".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.TextTrackCue"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/WebKitDataCue Mozilla WebKitDataCue documentation>
+newtype DataCue = DataCue { unDataCue :: JSRef }
+
+instance Eq (DataCue) where
+  (DataCue a) == (DataCue b) = js_eq a b
+
+instance PToJSRef DataCue where
+  pToJSRef = unDataCue
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef DataCue where
+  pFromJSRef = DataCue
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef DataCue where
+  toJSRef = return . unDataCue
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef DataCue where
+  fromJSRef = return . fmap DataCue . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsTextTrackCue DataCue
+instance IsEventTarget DataCue
+instance IsGObject DataCue where
+  toGObject = GObject . unDataCue
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = DataCue . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToDataCue :: IsGObject obj => obj -> DataCue
+castToDataCue = castTo gTypeDataCue "DataCue"
+
+foreign import javascript unsafe "window[\"WebKitDataCue\"]" gTypeDataCue :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.DataTransfer".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer Mozilla DataTransfer documentation>
+newtype DataTransfer = DataTransfer { unDataTransfer :: JSRef }
+
+instance Eq (DataTransfer) where
+  (DataTransfer a) == (DataTransfer b) = js_eq a b
+
+instance PToJSRef DataTransfer where
+  pToJSRef = unDataTransfer
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef DataTransfer where
+  pFromJSRef = DataTransfer
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef DataTransfer where
+  toJSRef = return . unDataTransfer
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef DataTransfer where
+  fromJSRef = return . fmap DataTransfer . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject DataTransfer where
+  toGObject = GObject . unDataTransfer
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = DataTransfer . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToDataTransfer :: IsGObject obj => obj -> DataTransfer
+castToDataTransfer = castTo gTypeDataTransfer "DataTransfer"
+
+foreign import javascript unsafe "window[\"DataTransfer\"]" gTypeDataTransfer :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.DataTransferItem".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/DataTransferItem Mozilla DataTransferItem documentation>
+newtype DataTransferItem = DataTransferItem { unDataTransferItem :: JSRef }
+
+instance Eq (DataTransferItem) where
+  (DataTransferItem a) == (DataTransferItem b) = js_eq a b
+
+instance PToJSRef DataTransferItem where
+  pToJSRef = unDataTransferItem
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef DataTransferItem where
+  pFromJSRef = DataTransferItem
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef DataTransferItem where
+  toJSRef = return . unDataTransferItem
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef DataTransferItem where
+  fromJSRef = return . fmap DataTransferItem . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject DataTransferItem where
+  toGObject = GObject . unDataTransferItem
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = DataTransferItem . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToDataTransferItem :: IsGObject obj => obj -> DataTransferItem
+castToDataTransferItem = castTo gTypeDataTransferItem "DataTransferItem"
+
+foreign import javascript unsafe "window[\"DataTransferItem\"]" gTypeDataTransferItem :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.DataTransferItemList".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/DataTransferItemList Mozilla DataTransferItemList documentation>
+newtype DataTransferItemList = DataTransferItemList { unDataTransferItemList :: JSRef }
+
+instance Eq (DataTransferItemList) where
+  (DataTransferItemList a) == (DataTransferItemList b) = js_eq a b
+
+instance PToJSRef DataTransferItemList where
+  pToJSRef = unDataTransferItemList
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef DataTransferItemList where
+  pFromJSRef = DataTransferItemList
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef DataTransferItemList where
+  toJSRef = return . unDataTransferItemList
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef DataTransferItemList where
+  fromJSRef = return . fmap DataTransferItemList . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject DataTransferItemList where
+  toGObject = GObject . unDataTransferItemList
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = DataTransferItemList . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToDataTransferItemList :: IsGObject obj => obj -> DataTransferItemList
+castToDataTransferItemList = castTo gTypeDataTransferItemList "DataTransferItemList"
+
+foreign import javascript unsafe "window[\"DataTransferItemList\"]" gTypeDataTransferItemList :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.Database".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/Database Mozilla Database documentation>
+newtype Database = Database { unDatabase :: JSRef }
+
+instance Eq (Database) where
+  (Database a) == (Database b) = js_eq a b
+
+instance PToJSRef Database where
+  pToJSRef = unDatabase
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef Database where
+  pFromJSRef = Database
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef Database where
+  toJSRef = return . unDatabase
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef Database where
+  fromJSRef = return . fmap Database . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject Database where
+  toGObject = GObject . unDatabase
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = Database . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToDatabase :: IsGObject obj => obj -> Database
+castToDatabase = castTo gTypeDatabase "Database"
+
+foreign import javascript unsafe "window[\"Database\"]" gTypeDatabase :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.DedicatedWorkerGlobalScope".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.WorkerGlobalScope"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/DedicatedWorkerGlobalScope Mozilla DedicatedWorkerGlobalScope documentation>
+newtype DedicatedWorkerGlobalScope = DedicatedWorkerGlobalScope { unDedicatedWorkerGlobalScope :: JSRef }
+
+instance Eq (DedicatedWorkerGlobalScope) where
+  (DedicatedWorkerGlobalScope a) == (DedicatedWorkerGlobalScope b) = js_eq a b
+
+instance PToJSRef DedicatedWorkerGlobalScope where
+  pToJSRef = unDedicatedWorkerGlobalScope
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef DedicatedWorkerGlobalScope where
+  pFromJSRef = DedicatedWorkerGlobalScope
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef DedicatedWorkerGlobalScope where
+  toJSRef = return . unDedicatedWorkerGlobalScope
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef DedicatedWorkerGlobalScope where
+  fromJSRef = return . fmap DedicatedWorkerGlobalScope . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsWorkerGlobalScope DedicatedWorkerGlobalScope
+instance IsEventTarget DedicatedWorkerGlobalScope
+instance IsGObject DedicatedWorkerGlobalScope where
+  toGObject = GObject . unDedicatedWorkerGlobalScope
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = DedicatedWorkerGlobalScope . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToDedicatedWorkerGlobalScope :: IsGObject obj => obj -> DedicatedWorkerGlobalScope
+castToDedicatedWorkerGlobalScope = castTo gTypeDedicatedWorkerGlobalScope "DedicatedWorkerGlobalScope"
+
+foreign import javascript unsafe "window[\"DedicatedWorkerGlobalScope\"]" gTypeDedicatedWorkerGlobalScope :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.DelayNode".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.AudioNode"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/DelayNode Mozilla DelayNode documentation>
+newtype DelayNode = DelayNode { unDelayNode :: JSRef }
+
+instance Eq (DelayNode) where
+  (DelayNode a) == (DelayNode b) = js_eq a b
+
+instance PToJSRef DelayNode where
+  pToJSRef = unDelayNode
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef DelayNode where
+  pFromJSRef = DelayNode
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef DelayNode where
+  toJSRef = return . unDelayNode
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef DelayNode where
+  fromJSRef = return . fmap DelayNode . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsAudioNode DelayNode
+instance IsEventTarget DelayNode
+instance IsGObject DelayNode where
+  toGObject = GObject . unDelayNode
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = DelayNode . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToDelayNode :: IsGObject obj => obj -> DelayNode
+castToDelayNode = castTo gTypeDelayNode "DelayNode"
+
+foreign import javascript unsafe "window[\"DelayNode\"]" gTypeDelayNode :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.DeviceMotionEvent".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.Event"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/DeviceMotionEvent Mozilla DeviceMotionEvent documentation>
+newtype DeviceMotionEvent = DeviceMotionEvent { unDeviceMotionEvent :: JSRef }
+
+instance Eq (DeviceMotionEvent) where
+  (DeviceMotionEvent a) == (DeviceMotionEvent b) = js_eq a b
+
+instance PToJSRef DeviceMotionEvent where
+  pToJSRef = unDeviceMotionEvent
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef DeviceMotionEvent where
+  pFromJSRef = DeviceMotionEvent
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef DeviceMotionEvent where
+  toJSRef = return . unDeviceMotionEvent
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef DeviceMotionEvent where
+  fromJSRef = return . fmap DeviceMotionEvent . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEvent DeviceMotionEvent
+instance IsGObject DeviceMotionEvent where
+  toGObject = GObject . unDeviceMotionEvent
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = DeviceMotionEvent . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToDeviceMotionEvent :: IsGObject obj => obj -> DeviceMotionEvent
+castToDeviceMotionEvent = castTo gTypeDeviceMotionEvent "DeviceMotionEvent"
+
+foreign import javascript unsafe "window[\"DeviceMotionEvent\"]" gTypeDeviceMotionEvent :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.DeviceOrientationEvent".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.Event"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/DeviceOrientationEvent Mozilla DeviceOrientationEvent documentation>
+newtype DeviceOrientationEvent = DeviceOrientationEvent { unDeviceOrientationEvent :: JSRef }
+
+instance Eq (DeviceOrientationEvent) where
+  (DeviceOrientationEvent a) == (DeviceOrientationEvent b) = js_eq a b
+
+instance PToJSRef DeviceOrientationEvent where
+  pToJSRef = unDeviceOrientationEvent
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef DeviceOrientationEvent where
+  pFromJSRef = DeviceOrientationEvent
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef DeviceOrientationEvent where
+  toJSRef = return . unDeviceOrientationEvent
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef DeviceOrientationEvent where
+  fromJSRef = return . fmap DeviceOrientationEvent . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEvent DeviceOrientationEvent
+instance IsGObject DeviceOrientationEvent where
+  toGObject = GObject . unDeviceOrientationEvent
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = DeviceOrientationEvent . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToDeviceOrientationEvent :: IsGObject obj => obj -> DeviceOrientationEvent
+castToDeviceOrientationEvent = castTo gTypeDeviceOrientationEvent "DeviceOrientationEvent"
+
+foreign import javascript unsafe "window[\"DeviceOrientationEvent\"]" gTypeDeviceOrientationEvent :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.DeviceProximityEvent".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.Event"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/DeviceProximityEvent Mozilla DeviceProximityEvent documentation>
+newtype DeviceProximityEvent = DeviceProximityEvent { unDeviceProximityEvent :: JSRef }
+
+instance Eq (DeviceProximityEvent) where
+  (DeviceProximityEvent a) == (DeviceProximityEvent b) = js_eq a b
+
+instance PToJSRef DeviceProximityEvent where
+  pToJSRef = unDeviceProximityEvent
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef DeviceProximityEvent where
+  pFromJSRef = DeviceProximityEvent
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef DeviceProximityEvent where
+  toJSRef = return . unDeviceProximityEvent
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef DeviceProximityEvent where
+  fromJSRef = return . fmap DeviceProximityEvent . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEvent DeviceProximityEvent
+instance IsGObject DeviceProximityEvent where
+  toGObject = GObject . unDeviceProximityEvent
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = DeviceProximityEvent . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToDeviceProximityEvent :: IsGObject obj => obj -> DeviceProximityEvent
+castToDeviceProximityEvent = castTo gTypeDeviceProximityEvent "DeviceProximityEvent"
+
+foreign import javascript unsafe "window[\"DeviceProximityEvent\"]" gTypeDeviceProximityEvent :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.Document".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/Document Mozilla Document documentation>
+newtype Document = Document { unDocument :: JSRef }
+
+instance Eq (Document) where
+  (Document a) == (Document b) = js_eq a b
+
+instance PToJSRef Document where
+  pToJSRef = unDocument
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef Document where
+  pFromJSRef = Document
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef Document where
+  toJSRef = return . unDocument
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef Document where
+  fromJSRef = return . fmap Document . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsNode o => IsDocument o
+toDocument :: IsDocument o => o -> Document
+toDocument = unsafeCastGObject . toGObject
+
+instance IsDocument Document
+instance IsNode Document
+instance IsEventTarget Document
+instance IsGObject Document where
+  toGObject = GObject . unDocument
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = Document . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToDocument :: IsGObject obj => obj -> Document
+castToDocument = castTo gTypeDocument "Document"
+
+foreign import javascript unsafe "window[\"Document\"]" gTypeDocument :: GType
+#else
+type IsDocument o = DocumentClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.DocumentFragment".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/DocumentFragment Mozilla DocumentFragment documentation>
+newtype DocumentFragment = DocumentFragment { unDocumentFragment :: JSRef }
+
+instance Eq (DocumentFragment) where
+  (DocumentFragment a) == (DocumentFragment b) = js_eq a b
+
+instance PToJSRef DocumentFragment where
+  pToJSRef = unDocumentFragment
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef DocumentFragment where
+  pFromJSRef = DocumentFragment
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef DocumentFragment where
+  toJSRef = return . unDocumentFragment
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef DocumentFragment where
+  fromJSRef = return . fmap DocumentFragment . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsNode DocumentFragment
+instance IsEventTarget DocumentFragment
+instance IsGObject DocumentFragment where
+  toGObject = GObject . unDocumentFragment
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = DocumentFragment . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToDocumentFragment :: IsGObject obj => obj -> DocumentFragment
+castToDocumentFragment = castTo gTypeDocumentFragment "DocumentFragment"
+
+foreign import javascript unsafe "window[\"DocumentFragment\"]" gTypeDocumentFragment :: GType
+#else
+type IsDocumentFragment o = DocumentFragmentClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.DocumentType".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/DocumentType Mozilla DocumentType documentation>
+newtype DocumentType = DocumentType { unDocumentType :: JSRef }
+
+instance Eq (DocumentType) where
+  (DocumentType a) == (DocumentType b) = js_eq a b
+
+instance PToJSRef DocumentType where
+  pToJSRef = unDocumentType
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef DocumentType where
+  pFromJSRef = DocumentType
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef DocumentType where
+  toJSRef = return . unDocumentType
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef DocumentType where
+  fromJSRef = return . fmap DocumentType . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsNode DocumentType
+instance IsEventTarget DocumentType
+instance IsGObject DocumentType where
+  toGObject = GObject . unDocumentType
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = DocumentType . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToDocumentType :: IsGObject obj => obj -> DocumentType
+castToDocumentType = castTo gTypeDocumentType "DocumentType"
+
+foreign import javascript unsafe "window[\"DocumentType\"]" gTypeDocumentType :: GType
+#else
+type IsDocumentType o = DocumentTypeClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.DynamicsCompressorNode".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.AudioNode"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/DynamicsCompressorNode Mozilla DynamicsCompressorNode documentation>
+newtype DynamicsCompressorNode = DynamicsCompressorNode { unDynamicsCompressorNode :: JSRef }
+
+instance Eq (DynamicsCompressorNode) where
+  (DynamicsCompressorNode a) == (DynamicsCompressorNode b) = js_eq a b
+
+instance PToJSRef DynamicsCompressorNode where
+  pToJSRef = unDynamicsCompressorNode
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef DynamicsCompressorNode where
+  pFromJSRef = DynamicsCompressorNode
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef DynamicsCompressorNode where
+  toJSRef = return . unDynamicsCompressorNode
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef DynamicsCompressorNode where
+  fromJSRef = return . fmap DynamicsCompressorNode . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsAudioNode DynamicsCompressorNode
+instance IsEventTarget DynamicsCompressorNode
+instance IsGObject DynamicsCompressorNode where
+  toGObject = GObject . unDynamicsCompressorNode
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = DynamicsCompressorNode . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToDynamicsCompressorNode :: IsGObject obj => obj -> DynamicsCompressorNode
+castToDynamicsCompressorNode = castTo gTypeDynamicsCompressorNode "DynamicsCompressorNode"
+
+foreign import javascript unsafe "window[\"DynamicsCompressorNode\"]" gTypeDynamicsCompressorNode :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.EXTBlendMinMax".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/EXTBlendMinMax Mozilla EXTBlendMinMax documentation>
+newtype EXTBlendMinMax = EXTBlendMinMax { unEXTBlendMinMax :: JSRef }
+
+instance Eq (EXTBlendMinMax) where
+  (EXTBlendMinMax a) == (EXTBlendMinMax b) = js_eq a b
+
+instance PToJSRef EXTBlendMinMax where
+  pToJSRef = unEXTBlendMinMax
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef EXTBlendMinMax where
+  pFromJSRef = EXTBlendMinMax
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef EXTBlendMinMax where
+  toJSRef = return . unEXTBlendMinMax
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef EXTBlendMinMax where
+  fromJSRef = return . fmap EXTBlendMinMax . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject EXTBlendMinMax where
+  toGObject = GObject . unEXTBlendMinMax
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = EXTBlendMinMax . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToEXTBlendMinMax :: IsGObject obj => obj -> EXTBlendMinMax
+castToEXTBlendMinMax = castTo gTypeEXTBlendMinMax "EXTBlendMinMax"
+
+foreign import javascript unsafe "window[\"EXTBlendMinMax\"]" gTypeEXTBlendMinMax :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.EXTFragDepth".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/EXTFragDepth Mozilla EXTFragDepth documentation>
+newtype EXTFragDepth = EXTFragDepth { unEXTFragDepth :: JSRef }
+
+instance Eq (EXTFragDepth) where
+  (EXTFragDepth a) == (EXTFragDepth b) = js_eq a b
+
+instance PToJSRef EXTFragDepth where
+  pToJSRef = unEXTFragDepth
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef EXTFragDepth where
+  pFromJSRef = EXTFragDepth
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef EXTFragDepth where
+  toJSRef = return . unEXTFragDepth
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef EXTFragDepth where
+  fromJSRef = return . fmap EXTFragDepth . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject EXTFragDepth where
+  toGObject = GObject . unEXTFragDepth
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = EXTFragDepth . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToEXTFragDepth :: IsGObject obj => obj -> EXTFragDepth
+castToEXTFragDepth = castTo gTypeEXTFragDepth "EXTFragDepth"
+
+foreign import javascript unsafe "window[\"EXTFragDepth\"]" gTypeEXTFragDepth :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.EXTShaderTextureLOD".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/EXTShaderTextureLOD Mozilla EXTShaderTextureLOD documentation>
+newtype EXTShaderTextureLOD = EXTShaderTextureLOD { unEXTShaderTextureLOD :: JSRef }
+
+instance Eq (EXTShaderTextureLOD) where
+  (EXTShaderTextureLOD a) == (EXTShaderTextureLOD b) = js_eq a b
+
+instance PToJSRef EXTShaderTextureLOD where
+  pToJSRef = unEXTShaderTextureLOD
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef EXTShaderTextureLOD where
+  pFromJSRef = EXTShaderTextureLOD
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef EXTShaderTextureLOD where
+  toJSRef = return . unEXTShaderTextureLOD
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef EXTShaderTextureLOD where
+  fromJSRef = return . fmap EXTShaderTextureLOD . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject EXTShaderTextureLOD where
+  toGObject = GObject . unEXTShaderTextureLOD
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = EXTShaderTextureLOD . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToEXTShaderTextureLOD :: IsGObject obj => obj -> EXTShaderTextureLOD
+castToEXTShaderTextureLOD = castTo gTypeEXTShaderTextureLOD "EXTShaderTextureLOD"
+
+foreign import javascript unsafe "window[\"EXTShaderTextureLOD\"]" gTypeEXTShaderTextureLOD :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.EXTTextureFilterAnisotropic".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/EXTTextureFilterAnisotropic Mozilla EXTTextureFilterAnisotropic documentation>
+newtype EXTTextureFilterAnisotropic = EXTTextureFilterAnisotropic { unEXTTextureFilterAnisotropic :: JSRef }
+
+instance Eq (EXTTextureFilterAnisotropic) where
+  (EXTTextureFilterAnisotropic a) == (EXTTextureFilterAnisotropic b) = js_eq a b
+
+instance PToJSRef EXTTextureFilterAnisotropic where
+  pToJSRef = unEXTTextureFilterAnisotropic
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef EXTTextureFilterAnisotropic where
+  pFromJSRef = EXTTextureFilterAnisotropic
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef EXTTextureFilterAnisotropic where
+  toJSRef = return . unEXTTextureFilterAnisotropic
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef EXTTextureFilterAnisotropic where
+  fromJSRef = return . fmap EXTTextureFilterAnisotropic . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject EXTTextureFilterAnisotropic where
+  toGObject = GObject . unEXTTextureFilterAnisotropic
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = EXTTextureFilterAnisotropic . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToEXTTextureFilterAnisotropic :: IsGObject obj => obj -> EXTTextureFilterAnisotropic
+castToEXTTextureFilterAnisotropic = castTo gTypeEXTTextureFilterAnisotropic "EXTTextureFilterAnisotropic"
+
+foreign import javascript unsafe "window[\"EXTTextureFilterAnisotropic\"]" gTypeEXTTextureFilterAnisotropic :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.EXTsRGB".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/EXTsRGB Mozilla EXTsRGB documentation>
+newtype EXTsRGB = EXTsRGB { unEXTsRGB :: JSRef }
+
+instance Eq (EXTsRGB) where
+  (EXTsRGB a) == (EXTsRGB b) = js_eq a b
+
+instance PToJSRef EXTsRGB where
+  pToJSRef = unEXTsRGB
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef EXTsRGB where
+  pFromJSRef = EXTsRGB
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef EXTsRGB where
+  toJSRef = return . unEXTsRGB
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef EXTsRGB where
+  fromJSRef = return . fmap EXTsRGB . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject EXTsRGB where
+  toGObject = GObject . unEXTsRGB
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = EXTsRGB . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToEXTsRGB :: IsGObject obj => obj -> EXTsRGB
+castToEXTsRGB = castTo gTypeEXTsRGB "EXTsRGB"
+
+foreign import javascript unsafe "window[\"EXTsRGB\"]" gTypeEXTsRGB :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.Element".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/Element Mozilla Element documentation>
+newtype Element = Element { unElement :: JSRef }
+
+instance Eq (Element) where
+  (Element a) == (Element b) = js_eq a b
+
+instance PToJSRef Element where
+  pToJSRef = unElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef Element where
+  pFromJSRef = Element
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef Element where
+  toJSRef = return . unElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef Element where
+  fromJSRef = return . fmap Element . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsNode o => IsElement o
+toElement :: IsElement o => o -> Element
+toElement = unsafeCastGObject . toGObject
+
+instance IsElement Element
+instance IsNode Element
+instance IsEventTarget Element
+instance IsGObject Element where
+  toGObject = GObject . unElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = Element . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToElement :: IsGObject obj => obj -> Element
+castToElement = castTo gTypeElement "Element"
+
+foreign import javascript unsafe "window[\"Element\"]" gTypeElement :: GType
+#else
+type IsElement o = ElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.Entity".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/Entity Mozilla Entity documentation>
+newtype Entity = Entity { unEntity :: JSRef }
+
+instance Eq (Entity) where
+  (Entity a) == (Entity b) = js_eq a b
+
+instance PToJSRef Entity where
+  pToJSRef = unEntity
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef Entity where
+  pFromJSRef = Entity
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef Entity where
+  toJSRef = return . unEntity
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef Entity where
+  fromJSRef = return . fmap Entity . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsNode Entity
+instance IsEventTarget Entity
+instance IsGObject Entity where
+  toGObject = GObject . unEntity
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = Entity . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToEntity :: IsGObject obj => obj -> Entity
+castToEntity = castTo gTypeEntity "Entity"
+
+foreign import javascript unsafe "window[\"Entity\"]" gTypeEntity :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.EntityReference".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/EntityReference Mozilla EntityReference documentation>
+newtype EntityReference = EntityReference { unEntityReference :: JSRef }
+
+instance Eq (EntityReference) where
+  (EntityReference a) == (EntityReference b) = js_eq a b
+
+instance PToJSRef EntityReference where
+  pToJSRef = unEntityReference
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef EntityReference where
+  pFromJSRef = EntityReference
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef EntityReference where
+  toJSRef = return . unEntityReference
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef EntityReference where
+  fromJSRef = return . fmap EntityReference . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsNode EntityReference
+instance IsEventTarget EntityReference
+instance IsGObject EntityReference where
+  toGObject = GObject . unEntityReference
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = EntityReference . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToEntityReference :: IsGObject obj => obj -> EntityReference
+castToEntityReference = castTo gTypeEntityReference "EntityReference"
+
+foreign import javascript unsafe "window[\"EntityReference\"]" gTypeEntityReference :: GType
+#else
+type IsEntityReference o = EntityReferenceClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.ErrorEvent".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.Event"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/ErrorEvent Mozilla ErrorEvent documentation>
+newtype ErrorEvent = ErrorEvent { unErrorEvent :: JSRef }
+
+instance Eq (ErrorEvent) where
+  (ErrorEvent a) == (ErrorEvent b) = js_eq a b
+
+instance PToJSRef ErrorEvent where
+  pToJSRef = unErrorEvent
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef ErrorEvent where
+  pFromJSRef = ErrorEvent
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef ErrorEvent where
+  toJSRef = return . unErrorEvent
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef ErrorEvent where
+  fromJSRef = return . fmap ErrorEvent . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEvent ErrorEvent
+instance IsGObject ErrorEvent where
+  toGObject = GObject . unErrorEvent
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = ErrorEvent . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToErrorEvent :: IsGObject obj => obj -> ErrorEvent
+castToErrorEvent = castTo gTypeErrorEvent "ErrorEvent"
+
+foreign import javascript unsafe "window[\"ErrorEvent\"]" gTypeErrorEvent :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.Event".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/Event Mozilla Event documentation>
+newtype Event = Event { unEvent :: JSRef }
+
+instance Eq (Event) where
+  (Event a) == (Event b) = js_eq a b
+
+instance PToJSRef Event where
+  pToJSRef = unEvent
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef Event where
+  pFromJSRef = Event
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef Event where
+  toJSRef = return . unEvent
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef Event where
+  fromJSRef = return . fmap Event . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsGObject o => IsEvent o
+toEvent :: IsEvent o => o -> Event
+toEvent = unsafeCastGObject . toGObject
+
+instance IsEvent Event
+instance IsGObject Event where
+  toGObject = GObject . unEvent
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = Event . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToEvent :: IsGObject obj => obj -> Event
+castToEvent = castTo gTypeEvent "Event"
+
+foreign import javascript unsafe "window[\"Event\"]" gTypeEvent :: GType
+#else
+type IsEvent o = EventClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.EventListener".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/EventListener Mozilla EventListener documentation>
+newtype EventListener = EventListener { unEventListener :: JSRef }
+
+instance Eq (EventListener) where
+  (EventListener a) == (EventListener b) = js_eq a b
+
+instance PToJSRef EventListener where
+  pToJSRef = unEventListener
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef EventListener where
+  pFromJSRef = EventListener
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef EventListener where
+  toJSRef = return . unEventListener
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef EventListener where
+  fromJSRef = return . fmap EventListener . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject EventListener where
+  toGObject = GObject . unEventListener
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = EventListener . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToEventListener :: IsGObject obj => obj -> EventListener
+castToEventListener = castTo gTypeEventListener "EventListener"
+
+foreign import javascript unsafe "window[\"EventListener\"]" gTypeEventListener :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.EventSource".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/EventSource Mozilla EventSource documentation>
+newtype EventSource = EventSource { unEventSource :: JSRef }
+
+instance Eq (EventSource) where
+  (EventSource a) == (EventSource b) = js_eq a b
+
+instance PToJSRef EventSource where
+  pToJSRef = unEventSource
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef EventSource where
+  pFromJSRef = EventSource
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef EventSource where
+  toJSRef = return . unEventSource
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef EventSource where
+  fromJSRef = return . fmap EventSource . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEventTarget EventSource
+instance IsGObject EventSource where
+  toGObject = GObject . unEventSource
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = EventSource . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToEventSource :: IsGObject obj => obj -> EventSource
+castToEventSource = castTo gTypeEventSource "EventSource"
+
+foreign import javascript unsafe "window[\"EventSource\"]" gTypeEventSource :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.EventTarget".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/EventTarget Mozilla EventTarget documentation>
+newtype EventTarget = EventTarget { unEventTarget :: JSRef }
+
+instance Eq (EventTarget) where
+  (EventTarget a) == (EventTarget b) = js_eq a b
+
+instance PToJSRef EventTarget where
+  pToJSRef = unEventTarget
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef EventTarget where
+  pFromJSRef = EventTarget
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef EventTarget where
+  toJSRef = return . unEventTarget
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef EventTarget where
+  fromJSRef = return . fmap EventTarget . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsGObject o => IsEventTarget o
+toEventTarget :: IsEventTarget o => o -> EventTarget
+toEventTarget = unsafeCastGObject . toGObject
+
+instance IsEventTarget EventTarget
+instance IsGObject EventTarget where
+  toGObject = GObject . unEventTarget
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = EventTarget . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToEventTarget :: IsGObject obj => obj -> EventTarget
+castToEventTarget = castTo gTypeEventTarget "EventTarget"
+
+foreign import javascript unsafe "window[\"EventTarget\"]" gTypeEventTarget :: GType
+#else
+type IsEventTarget o = EventTargetClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.File".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.Blob"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/File Mozilla File documentation>
+newtype File = File { unFile :: JSRef }
+
+instance Eq (File) where
+  (File a) == (File b) = js_eq a b
+
+instance PToJSRef File where
+  pToJSRef = unFile
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef File where
+  pFromJSRef = File
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef File where
+  toJSRef = return . unFile
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef File where
+  fromJSRef = return . fmap File . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsBlob File
+instance IsGObject File where
+  toGObject = GObject . unFile
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = File . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToFile :: IsGObject obj => obj -> File
+castToFile = castTo gTypeFile "File"
+
+foreign import javascript unsafe "window[\"File\"]" gTypeFile :: GType
+#else
+type IsFile o = FileClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.FileError".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/FileError Mozilla FileError documentation>
+newtype FileError = FileError { unFileError :: JSRef }
+
+instance Eq (FileError) where
+  (FileError a) == (FileError b) = js_eq a b
+
+instance PToJSRef FileError where
+  pToJSRef = unFileError
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef FileError where
+  pFromJSRef = FileError
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef FileError where
+  toJSRef = return . unFileError
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef FileError where
+  fromJSRef = return . fmap FileError . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject FileError where
+  toGObject = GObject . unFileError
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = FileError . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToFileError :: IsGObject obj => obj -> FileError
+castToFileError = castTo gTypeFileError "FileError"
+
+foreign import javascript unsafe "window[\"FileError\"]" gTypeFileError :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.FileList".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/FileList Mozilla FileList documentation>
+newtype FileList = FileList { unFileList :: JSRef }
+
+instance Eq (FileList) where
+  (FileList a) == (FileList b) = js_eq a b
+
+instance PToJSRef FileList where
+  pToJSRef = unFileList
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef FileList where
+  pFromJSRef = FileList
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef FileList where
+  toJSRef = return . unFileList
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef FileList where
+  fromJSRef = return . fmap FileList . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject FileList where
+  toGObject = GObject . unFileList
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = FileList . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToFileList :: IsGObject obj => obj -> FileList
+castToFileList = castTo gTypeFileList "FileList"
+
+foreign import javascript unsafe "window[\"FileList\"]" gTypeFileList :: GType
+#else
+type IsFileList o = FileListClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.FileReader".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/FileReader Mozilla FileReader documentation>
+newtype FileReader = FileReader { unFileReader :: JSRef }
+
+instance Eq (FileReader) where
+  (FileReader a) == (FileReader b) = js_eq a b
+
+instance PToJSRef FileReader where
+  pToJSRef = unFileReader
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef FileReader where
+  pFromJSRef = FileReader
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef FileReader where
+  toJSRef = return . unFileReader
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef FileReader where
+  fromJSRef = return . fmap FileReader . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEventTarget FileReader
+instance IsGObject FileReader where
+  toGObject = GObject . unFileReader
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = FileReader . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToFileReader :: IsGObject obj => obj -> FileReader
+castToFileReader = castTo gTypeFileReader "FileReader"
+
+foreign import javascript unsafe "window[\"FileReader\"]" gTypeFileReader :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.FileReaderSync".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/FileReaderSync Mozilla FileReaderSync documentation>
+newtype FileReaderSync = FileReaderSync { unFileReaderSync :: JSRef }
+
+instance Eq (FileReaderSync) where
+  (FileReaderSync a) == (FileReaderSync b) = js_eq a b
+
+instance PToJSRef FileReaderSync where
+  pToJSRef = unFileReaderSync
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef FileReaderSync where
+  pFromJSRef = FileReaderSync
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef FileReaderSync where
+  toJSRef = return . unFileReaderSync
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef FileReaderSync where
+  fromJSRef = return . fmap FileReaderSync . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject FileReaderSync where
+  toGObject = GObject . unFileReaderSync
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = FileReaderSync . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToFileReaderSync :: IsGObject obj => obj -> FileReaderSync
+castToFileReaderSync = castTo gTypeFileReaderSync "FileReaderSync"
+
+foreign import javascript unsafe "window[\"FileReaderSync\"]" gTypeFileReaderSync :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.FocusEvent".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.UIEvent"
+--     * "GHCJS.DOM.Event"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/FocusEvent Mozilla FocusEvent documentation>
+newtype FocusEvent = FocusEvent { unFocusEvent :: JSRef }
+
+instance Eq (FocusEvent) where
+  (FocusEvent a) == (FocusEvent b) = js_eq a b
+
+instance PToJSRef FocusEvent where
+  pToJSRef = unFocusEvent
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef FocusEvent where
+  pFromJSRef = FocusEvent
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef FocusEvent where
+  toJSRef = return . unFocusEvent
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef FocusEvent where
+  fromJSRef = return . fmap FocusEvent . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsUIEvent FocusEvent
+instance IsEvent FocusEvent
+instance IsGObject FocusEvent where
+  toGObject = GObject . unFocusEvent
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = FocusEvent . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToFocusEvent :: IsGObject obj => obj -> FocusEvent
+castToFocusEvent = castTo gTypeFocusEvent "FocusEvent"
+
+foreign import javascript unsafe "window[\"FocusEvent\"]" gTypeFocusEvent :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.FontLoader".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/FontLoader Mozilla FontLoader documentation>
+newtype FontLoader = FontLoader { unFontLoader :: JSRef }
+
+instance Eq (FontLoader) where
+  (FontLoader a) == (FontLoader b) = js_eq a b
+
+instance PToJSRef FontLoader where
+  pToJSRef = unFontLoader
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef FontLoader where
+  pFromJSRef = FontLoader
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef FontLoader where
+  toJSRef = return . unFontLoader
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef FontLoader where
+  fromJSRef = return . fmap FontLoader . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEventTarget FontLoader
+instance IsGObject FontLoader where
+  toGObject = GObject . unFontLoader
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = FontLoader . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToFontLoader :: IsGObject obj => obj -> FontLoader
+castToFontLoader = castTo gTypeFontLoader "FontLoader"
+
+foreign import javascript unsafe "window[\"FontLoader\"]" gTypeFontLoader :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.FormData".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/FormData Mozilla FormData documentation>
+newtype FormData = FormData { unFormData :: JSRef }
+
+instance Eq (FormData) where
+  (FormData a) == (FormData b) = js_eq a b
+
+instance PToJSRef FormData where
+  pToJSRef = unFormData
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef FormData where
+  pFromJSRef = FormData
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef FormData where
+  toJSRef = return . unFormData
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef FormData where
+  fromJSRef = return . fmap FormData . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject FormData where
+  toGObject = GObject . unFormData
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = FormData . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToFormData :: IsGObject obj => obj -> FormData
+castToFormData = castTo gTypeFormData "FormData"
+
+foreign import javascript unsafe "window[\"FormData\"]" gTypeFormData :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.GainNode".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.AudioNode"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/GainNode Mozilla GainNode documentation>
+newtype GainNode = GainNode { unGainNode :: JSRef }
+
+instance Eq (GainNode) where
+  (GainNode a) == (GainNode b) = js_eq a b
+
+instance PToJSRef GainNode where
+  pToJSRef = unGainNode
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef GainNode where
+  pFromJSRef = GainNode
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef GainNode where
+  toJSRef = return . unGainNode
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef GainNode where
+  fromJSRef = return . fmap GainNode . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsAudioNode GainNode
+instance IsEventTarget GainNode
+instance IsGObject GainNode where
+  toGObject = GObject . unGainNode
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = GainNode . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToGainNode :: IsGObject obj => obj -> GainNode
+castToGainNode = castTo gTypeGainNode "GainNode"
+
+foreign import javascript unsafe "window[\"GainNode\"]" gTypeGainNode :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.Gamepad".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/Gamepad Mozilla Gamepad documentation>
+newtype Gamepad = Gamepad { unGamepad :: JSRef }
+
+instance Eq (Gamepad) where
+  (Gamepad a) == (Gamepad b) = js_eq a b
+
+instance PToJSRef Gamepad where
+  pToJSRef = unGamepad
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef Gamepad where
+  pFromJSRef = Gamepad
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef Gamepad where
+  toJSRef = return . unGamepad
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef Gamepad where
+  fromJSRef = return . fmap Gamepad . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject Gamepad where
+  toGObject = GObject . unGamepad
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = Gamepad . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToGamepad :: IsGObject obj => obj -> Gamepad
+castToGamepad = castTo gTypeGamepad "Gamepad"
+
+foreign import javascript unsafe "window[\"Gamepad\"]" gTypeGamepad :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.GamepadButton".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/GamepadButton Mozilla GamepadButton documentation>
+newtype GamepadButton = GamepadButton { unGamepadButton :: JSRef }
+
+instance Eq (GamepadButton) where
+  (GamepadButton a) == (GamepadButton b) = js_eq a b
+
+instance PToJSRef GamepadButton where
+  pToJSRef = unGamepadButton
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef GamepadButton where
+  pFromJSRef = GamepadButton
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef GamepadButton where
+  toJSRef = return . unGamepadButton
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef GamepadButton where
+  fromJSRef = return . fmap GamepadButton . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject GamepadButton where
+  toGObject = GObject . unGamepadButton
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = GamepadButton . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToGamepadButton :: IsGObject obj => obj -> GamepadButton
+castToGamepadButton = castTo gTypeGamepadButton "GamepadButton"
+
+foreign import javascript unsafe "window[\"GamepadButton\"]" gTypeGamepadButton :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.GamepadEvent".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.Event"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/GamepadEvent Mozilla GamepadEvent documentation>
+newtype GamepadEvent = GamepadEvent { unGamepadEvent :: JSRef }
+
+instance Eq (GamepadEvent) where
+  (GamepadEvent a) == (GamepadEvent b) = js_eq a b
+
+instance PToJSRef GamepadEvent where
+  pToJSRef = unGamepadEvent
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef GamepadEvent where
+  pFromJSRef = GamepadEvent
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef GamepadEvent where
+  toJSRef = return . unGamepadEvent
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef GamepadEvent where
+  fromJSRef = return . fmap GamepadEvent . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEvent GamepadEvent
+instance IsGObject GamepadEvent where
+  toGObject = GObject . unGamepadEvent
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = GamepadEvent . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToGamepadEvent :: IsGObject obj => obj -> GamepadEvent
+castToGamepadEvent = castTo gTypeGamepadEvent "GamepadEvent"
+
+foreign import javascript unsafe "window[\"GamepadEvent\"]" gTypeGamepadEvent :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.Geolocation".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/Geolocation Mozilla Geolocation documentation>
+newtype Geolocation = Geolocation { unGeolocation :: JSRef }
+
+instance Eq (Geolocation) where
+  (Geolocation a) == (Geolocation b) = js_eq a b
+
+instance PToJSRef Geolocation where
+  pToJSRef = unGeolocation
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef Geolocation where
+  pFromJSRef = Geolocation
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef Geolocation where
+  toJSRef = return . unGeolocation
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef Geolocation where
+  fromJSRef = return . fmap Geolocation . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject Geolocation where
+  toGObject = GObject . unGeolocation
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = Geolocation . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToGeolocation :: IsGObject obj => obj -> Geolocation
+castToGeolocation = castTo gTypeGeolocation "Geolocation"
+
+foreign import javascript unsafe "window[\"Geolocation\"]" gTypeGeolocation :: GType
+#else
+type IsGeolocation o = GeolocationClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.Geoposition".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/Geoposition Mozilla Geoposition documentation>
+newtype Geoposition = Geoposition { unGeoposition :: JSRef }
+
+instance Eq (Geoposition) where
+  (Geoposition a) == (Geoposition b) = js_eq a b
+
+instance PToJSRef Geoposition where
+  pToJSRef = unGeoposition
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef Geoposition where
+  pFromJSRef = Geoposition
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef Geoposition where
+  toJSRef = return . unGeoposition
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef Geoposition where
+  fromJSRef = return . fmap Geoposition . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject Geoposition where
+  toGObject = GObject . unGeoposition
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = Geoposition . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToGeoposition :: IsGObject obj => obj -> Geoposition
+castToGeoposition = castTo gTypeGeoposition "Geoposition"
+
+foreign import javascript unsafe "window[\"Geoposition\"]" gTypeGeoposition :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLAllCollection".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAllCollection Mozilla HTMLAllCollection documentation>
+newtype HTMLAllCollection = HTMLAllCollection { unHTMLAllCollection :: JSRef }
+
+instance Eq (HTMLAllCollection) where
+  (HTMLAllCollection a) == (HTMLAllCollection b) = js_eq a b
+
+instance PToJSRef HTMLAllCollection where
+  pToJSRef = unHTMLAllCollection
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLAllCollection where
+  pFromJSRef = HTMLAllCollection
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLAllCollection where
+  toJSRef = return . unHTMLAllCollection
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLAllCollection where
+  fromJSRef = return . fmap HTMLAllCollection . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject HTMLAllCollection where
+  toGObject = GObject . unHTMLAllCollection
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLAllCollection . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLAllCollection :: IsGObject obj => obj -> HTMLAllCollection
+castToHTMLAllCollection = castTo gTypeHTMLAllCollection "HTMLAllCollection"
+
+foreign import javascript unsafe "window[\"HTMLAllCollection\"]" gTypeHTMLAllCollection :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLAnchorElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement Mozilla HTMLAnchorElement documentation>
+newtype HTMLAnchorElement = HTMLAnchorElement { unHTMLAnchorElement :: JSRef }
+
+instance Eq (HTMLAnchorElement) where
+  (HTMLAnchorElement a) == (HTMLAnchorElement b) = js_eq a b
+
+instance PToJSRef HTMLAnchorElement where
+  pToJSRef = unHTMLAnchorElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLAnchorElement where
+  pFromJSRef = HTMLAnchorElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLAnchorElement where
+  toJSRef = return . unHTMLAnchorElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLAnchorElement where
+  fromJSRef = return . fmap HTMLAnchorElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLAnchorElement
+instance IsElement HTMLAnchorElement
+instance IsNode HTMLAnchorElement
+instance IsEventTarget HTMLAnchorElement
+instance IsGObject HTMLAnchorElement where
+  toGObject = GObject . unHTMLAnchorElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLAnchorElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLAnchorElement :: IsGObject obj => obj -> HTMLAnchorElement
+castToHTMLAnchorElement = castTo gTypeHTMLAnchorElement "HTMLAnchorElement"
+
+foreign import javascript unsafe "window[\"HTMLAnchorElement\"]" gTypeHTMLAnchorElement :: GType
+#else
+type IsHTMLAnchorElement o = HTMLAnchorElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLAppletElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAppletElement Mozilla HTMLAppletElement documentation>
+newtype HTMLAppletElement = HTMLAppletElement { unHTMLAppletElement :: JSRef }
+
+instance Eq (HTMLAppletElement) where
+  (HTMLAppletElement a) == (HTMLAppletElement b) = js_eq a b
+
+instance PToJSRef HTMLAppletElement where
+  pToJSRef = unHTMLAppletElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLAppletElement where
+  pFromJSRef = HTMLAppletElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLAppletElement where
+  toJSRef = return . unHTMLAppletElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLAppletElement where
+  fromJSRef = return . fmap HTMLAppletElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLAppletElement
+instance IsElement HTMLAppletElement
+instance IsNode HTMLAppletElement
+instance IsEventTarget HTMLAppletElement
+instance IsGObject HTMLAppletElement where
+  toGObject = GObject . unHTMLAppletElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLAppletElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLAppletElement :: IsGObject obj => obj -> HTMLAppletElement
+castToHTMLAppletElement = castTo gTypeHTMLAppletElement "HTMLAppletElement"
+
+foreign import javascript unsafe "window[\"HTMLAppletElement\"]" gTypeHTMLAppletElement :: GType
+#else
+type IsHTMLAppletElement o = HTMLAppletElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLAreaElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAreaElement Mozilla HTMLAreaElement documentation>
+newtype HTMLAreaElement = HTMLAreaElement { unHTMLAreaElement :: JSRef }
+
+instance Eq (HTMLAreaElement) where
+  (HTMLAreaElement a) == (HTMLAreaElement b) = js_eq a b
+
+instance PToJSRef HTMLAreaElement where
+  pToJSRef = unHTMLAreaElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLAreaElement where
+  pFromJSRef = HTMLAreaElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLAreaElement where
+  toJSRef = return . unHTMLAreaElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLAreaElement where
+  fromJSRef = return . fmap HTMLAreaElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLAreaElement
+instance IsElement HTMLAreaElement
+instance IsNode HTMLAreaElement
+instance IsEventTarget HTMLAreaElement
+instance IsGObject HTMLAreaElement where
+  toGObject = GObject . unHTMLAreaElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLAreaElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLAreaElement :: IsGObject obj => obj -> HTMLAreaElement
+castToHTMLAreaElement = castTo gTypeHTMLAreaElement "HTMLAreaElement"
+
+foreign import javascript unsafe "window[\"HTMLAreaElement\"]" gTypeHTMLAreaElement :: GType
+#else
+type IsHTMLAreaElement o = HTMLAreaElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLAudioElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLMediaElement"
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLAudioElement Mozilla HTMLAudioElement documentation>
+newtype HTMLAudioElement = HTMLAudioElement { unHTMLAudioElement :: JSRef }
+
+instance Eq (HTMLAudioElement) where
+  (HTMLAudioElement a) == (HTMLAudioElement b) = js_eq a b
+
+instance PToJSRef HTMLAudioElement where
+  pToJSRef = unHTMLAudioElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLAudioElement where
+  pFromJSRef = HTMLAudioElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLAudioElement where
+  toJSRef = return . unHTMLAudioElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLAudioElement where
+  fromJSRef = return . fmap HTMLAudioElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLMediaElement HTMLAudioElement
+instance IsHTMLElement HTMLAudioElement
+instance IsElement HTMLAudioElement
+instance IsNode HTMLAudioElement
+instance IsEventTarget HTMLAudioElement
+instance IsGObject HTMLAudioElement where
+  toGObject = GObject . unHTMLAudioElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLAudioElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLAudioElement :: IsGObject obj => obj -> HTMLAudioElement
+castToHTMLAudioElement = castTo gTypeHTMLAudioElement "HTMLAudioElement"
+
+foreign import javascript unsafe "window[\"HTMLAudioElement\"]" gTypeHTMLAudioElement :: GType
+#else
+type IsHTMLAudioElement o = HTMLAudioElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLBRElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLBRElement Mozilla HTMLBRElement documentation>
+newtype HTMLBRElement = HTMLBRElement { unHTMLBRElement :: JSRef }
+
+instance Eq (HTMLBRElement) where
+  (HTMLBRElement a) == (HTMLBRElement b) = js_eq a b
+
+instance PToJSRef HTMLBRElement where
+  pToJSRef = unHTMLBRElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLBRElement where
+  pFromJSRef = HTMLBRElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLBRElement where
+  toJSRef = return . unHTMLBRElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLBRElement where
+  fromJSRef = return . fmap HTMLBRElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLBRElement
+instance IsElement HTMLBRElement
+instance IsNode HTMLBRElement
+instance IsEventTarget HTMLBRElement
+instance IsGObject HTMLBRElement where
+  toGObject = GObject . unHTMLBRElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLBRElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLBRElement :: IsGObject obj => obj -> HTMLBRElement
+castToHTMLBRElement = castTo gTypeHTMLBRElement "HTMLBRElement"
+
+foreign import javascript unsafe "window[\"HTMLBRElement\"]" gTypeHTMLBRElement :: GType
+#else
+type IsHTMLBRElement o = HTMLBRElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLBaseElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLBaseElement Mozilla HTMLBaseElement documentation>
+newtype HTMLBaseElement = HTMLBaseElement { unHTMLBaseElement :: JSRef }
+
+instance Eq (HTMLBaseElement) where
+  (HTMLBaseElement a) == (HTMLBaseElement b) = js_eq a b
+
+instance PToJSRef HTMLBaseElement where
+  pToJSRef = unHTMLBaseElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLBaseElement where
+  pFromJSRef = HTMLBaseElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLBaseElement where
+  toJSRef = return . unHTMLBaseElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLBaseElement where
+  fromJSRef = return . fmap HTMLBaseElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLBaseElement
+instance IsElement HTMLBaseElement
+instance IsNode HTMLBaseElement
+instance IsEventTarget HTMLBaseElement
+instance IsGObject HTMLBaseElement where
+  toGObject = GObject . unHTMLBaseElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLBaseElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLBaseElement :: IsGObject obj => obj -> HTMLBaseElement
+castToHTMLBaseElement = castTo gTypeHTMLBaseElement "HTMLBaseElement"
+
+foreign import javascript unsafe "window[\"HTMLBaseElement\"]" gTypeHTMLBaseElement :: GType
+#else
+type IsHTMLBaseElement o = HTMLBaseElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLBaseFontElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLBaseFontElement Mozilla HTMLBaseFontElement documentation>
+newtype HTMLBaseFontElement = HTMLBaseFontElement { unHTMLBaseFontElement :: JSRef }
+
+instance Eq (HTMLBaseFontElement) where
+  (HTMLBaseFontElement a) == (HTMLBaseFontElement b) = js_eq a b
+
+instance PToJSRef HTMLBaseFontElement where
+  pToJSRef = unHTMLBaseFontElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLBaseFontElement where
+  pFromJSRef = HTMLBaseFontElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLBaseFontElement where
+  toJSRef = return . unHTMLBaseFontElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLBaseFontElement where
+  fromJSRef = return . fmap HTMLBaseFontElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLBaseFontElement
+instance IsElement HTMLBaseFontElement
+instance IsNode HTMLBaseFontElement
+instance IsEventTarget HTMLBaseFontElement
+instance IsGObject HTMLBaseFontElement where
+  toGObject = GObject . unHTMLBaseFontElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLBaseFontElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLBaseFontElement :: IsGObject obj => obj -> HTMLBaseFontElement
+castToHTMLBaseFontElement = castTo gTypeHTMLBaseFontElement "HTMLBaseFontElement"
+
+foreign import javascript unsafe "window[\"HTMLBaseFontElement\"]" gTypeHTMLBaseFontElement :: GType
+#else
+type IsHTMLBaseFontElement o = HTMLBaseFontElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLBodyElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLBodyElement Mozilla HTMLBodyElement documentation>
+newtype HTMLBodyElement = HTMLBodyElement { unHTMLBodyElement :: JSRef }
+
+instance Eq (HTMLBodyElement) where
+  (HTMLBodyElement a) == (HTMLBodyElement b) = js_eq a b
+
+instance PToJSRef HTMLBodyElement where
+  pToJSRef = unHTMLBodyElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLBodyElement where
+  pFromJSRef = HTMLBodyElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLBodyElement where
+  toJSRef = return . unHTMLBodyElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLBodyElement where
+  fromJSRef = return . fmap HTMLBodyElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLBodyElement
+instance IsElement HTMLBodyElement
+instance IsNode HTMLBodyElement
+instance IsEventTarget HTMLBodyElement
+instance IsGObject HTMLBodyElement where
+  toGObject = GObject . unHTMLBodyElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLBodyElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLBodyElement :: IsGObject obj => obj -> HTMLBodyElement
+castToHTMLBodyElement = castTo gTypeHTMLBodyElement "HTMLBodyElement"
+
+foreign import javascript unsafe "window[\"HTMLBodyElement\"]" gTypeHTMLBodyElement :: GType
+#else
+type IsHTMLBodyElement o = HTMLBodyElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLButtonElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLButtonElement Mozilla HTMLButtonElement documentation>
+newtype HTMLButtonElement = HTMLButtonElement { unHTMLButtonElement :: JSRef }
+
+instance Eq (HTMLButtonElement) where
+  (HTMLButtonElement a) == (HTMLButtonElement b) = js_eq a b
+
+instance PToJSRef HTMLButtonElement where
+  pToJSRef = unHTMLButtonElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLButtonElement where
+  pFromJSRef = HTMLButtonElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLButtonElement where
+  toJSRef = return . unHTMLButtonElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLButtonElement where
+  fromJSRef = return . fmap HTMLButtonElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLButtonElement
+instance IsElement HTMLButtonElement
+instance IsNode HTMLButtonElement
+instance IsEventTarget HTMLButtonElement
+instance IsGObject HTMLButtonElement where
+  toGObject = GObject . unHTMLButtonElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLButtonElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLButtonElement :: IsGObject obj => obj -> HTMLButtonElement
+castToHTMLButtonElement = castTo gTypeHTMLButtonElement "HTMLButtonElement"
+
+foreign import javascript unsafe "window[\"HTMLButtonElement\"]" gTypeHTMLButtonElement :: GType
+#else
+type IsHTMLButtonElement o = HTMLButtonElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLCanvasElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement Mozilla HTMLCanvasElement documentation>
+newtype HTMLCanvasElement = HTMLCanvasElement { unHTMLCanvasElement :: JSRef }
+
+instance Eq (HTMLCanvasElement) where
+  (HTMLCanvasElement a) == (HTMLCanvasElement b) = js_eq a b
+
+instance PToJSRef HTMLCanvasElement where
+  pToJSRef = unHTMLCanvasElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLCanvasElement where
+  pFromJSRef = HTMLCanvasElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLCanvasElement where
+  toJSRef = return . unHTMLCanvasElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLCanvasElement where
+  fromJSRef = return . fmap HTMLCanvasElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLCanvasElement
+instance IsElement HTMLCanvasElement
+instance IsNode HTMLCanvasElement
+instance IsEventTarget HTMLCanvasElement
+instance IsGObject HTMLCanvasElement where
+  toGObject = GObject . unHTMLCanvasElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLCanvasElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLCanvasElement :: IsGObject obj => obj -> HTMLCanvasElement
+castToHTMLCanvasElement = castTo gTypeHTMLCanvasElement "HTMLCanvasElement"
+
+foreign import javascript unsafe "window[\"HTMLCanvasElement\"]" gTypeHTMLCanvasElement :: GType
+#else
+type IsHTMLCanvasElement o = HTMLCanvasElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLCollection".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLCollection Mozilla HTMLCollection documentation>
+newtype HTMLCollection = HTMLCollection { unHTMLCollection :: JSRef }
+
+instance Eq (HTMLCollection) where
+  (HTMLCollection a) == (HTMLCollection b) = js_eq a b
+
+instance PToJSRef HTMLCollection where
+  pToJSRef = unHTMLCollection
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLCollection where
+  pFromJSRef = HTMLCollection
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLCollection where
+  toJSRef = return . unHTMLCollection
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLCollection where
+  fromJSRef = return . fmap HTMLCollection . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsGObject o => IsHTMLCollection o
+toHTMLCollection :: IsHTMLCollection o => o -> HTMLCollection
+toHTMLCollection = unsafeCastGObject . toGObject
+
+instance IsHTMLCollection HTMLCollection
+instance IsGObject HTMLCollection where
+  toGObject = GObject . unHTMLCollection
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLCollection . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLCollection :: IsGObject obj => obj -> HTMLCollection
+castToHTMLCollection = castTo gTypeHTMLCollection "HTMLCollection"
+
+foreign import javascript unsafe "window[\"HTMLCollection\"]" gTypeHTMLCollection :: GType
+#else
+type IsHTMLCollection o = HTMLCollectionClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLDListElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLDListElement Mozilla HTMLDListElement documentation>
+newtype HTMLDListElement = HTMLDListElement { unHTMLDListElement :: JSRef }
+
+instance Eq (HTMLDListElement) where
+  (HTMLDListElement a) == (HTMLDListElement b) = js_eq a b
+
+instance PToJSRef HTMLDListElement where
+  pToJSRef = unHTMLDListElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLDListElement where
+  pFromJSRef = HTMLDListElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLDListElement where
+  toJSRef = return . unHTMLDListElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLDListElement where
+  fromJSRef = return . fmap HTMLDListElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLDListElement
+instance IsElement HTMLDListElement
+instance IsNode HTMLDListElement
+instance IsEventTarget HTMLDListElement
+instance IsGObject HTMLDListElement where
+  toGObject = GObject . unHTMLDListElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLDListElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLDListElement :: IsGObject obj => obj -> HTMLDListElement
+castToHTMLDListElement = castTo gTypeHTMLDListElement "HTMLDListElement"
+
+foreign import javascript unsafe "window[\"HTMLDListElement\"]" gTypeHTMLDListElement :: GType
+#else
+type IsHTMLDListElement o = HTMLDListElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLDataListElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLDataListElement Mozilla HTMLDataListElement documentation>
+newtype HTMLDataListElement = HTMLDataListElement { unHTMLDataListElement :: JSRef }
+
+instance Eq (HTMLDataListElement) where
+  (HTMLDataListElement a) == (HTMLDataListElement b) = js_eq a b
+
+instance PToJSRef HTMLDataListElement where
+  pToJSRef = unHTMLDataListElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLDataListElement where
+  pFromJSRef = HTMLDataListElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLDataListElement where
+  toJSRef = return . unHTMLDataListElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLDataListElement where
+  fromJSRef = return . fmap HTMLDataListElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLDataListElement
+instance IsElement HTMLDataListElement
+instance IsNode HTMLDataListElement
+instance IsEventTarget HTMLDataListElement
+instance IsGObject HTMLDataListElement where
+  toGObject = GObject . unHTMLDataListElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLDataListElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLDataListElement :: IsGObject obj => obj -> HTMLDataListElement
+castToHTMLDataListElement = castTo gTypeHTMLDataListElement "HTMLDataListElement"
+
+foreign import javascript unsafe "window[\"HTMLDataListElement\"]" gTypeHTMLDataListElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLDetailsElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLDetailsElement Mozilla HTMLDetailsElement documentation>
+newtype HTMLDetailsElement = HTMLDetailsElement { unHTMLDetailsElement :: JSRef }
+
+instance Eq (HTMLDetailsElement) where
+  (HTMLDetailsElement a) == (HTMLDetailsElement b) = js_eq a b
+
+instance PToJSRef HTMLDetailsElement where
+  pToJSRef = unHTMLDetailsElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLDetailsElement where
+  pFromJSRef = HTMLDetailsElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLDetailsElement where
+  toJSRef = return . unHTMLDetailsElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLDetailsElement where
+  fromJSRef = return . fmap HTMLDetailsElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLDetailsElement
+instance IsElement HTMLDetailsElement
+instance IsNode HTMLDetailsElement
+instance IsEventTarget HTMLDetailsElement
+instance IsGObject HTMLDetailsElement where
+  toGObject = GObject . unHTMLDetailsElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLDetailsElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLDetailsElement :: IsGObject obj => obj -> HTMLDetailsElement
+castToHTMLDetailsElement = castTo gTypeHTMLDetailsElement "HTMLDetailsElement"
+
+foreign import javascript unsafe "window[\"HTMLDetailsElement\"]" gTypeHTMLDetailsElement :: GType
+#else
+type IsHTMLDetailsElement o = HTMLDetailsElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLDirectoryElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLDirectoryElement Mozilla HTMLDirectoryElement documentation>
+newtype HTMLDirectoryElement = HTMLDirectoryElement { unHTMLDirectoryElement :: JSRef }
+
+instance Eq (HTMLDirectoryElement) where
+  (HTMLDirectoryElement a) == (HTMLDirectoryElement b) = js_eq a b
+
+instance PToJSRef HTMLDirectoryElement where
+  pToJSRef = unHTMLDirectoryElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLDirectoryElement where
+  pFromJSRef = HTMLDirectoryElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLDirectoryElement where
+  toJSRef = return . unHTMLDirectoryElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLDirectoryElement where
+  fromJSRef = return . fmap HTMLDirectoryElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLDirectoryElement
+instance IsElement HTMLDirectoryElement
+instance IsNode HTMLDirectoryElement
+instance IsEventTarget HTMLDirectoryElement
+instance IsGObject HTMLDirectoryElement where
+  toGObject = GObject . unHTMLDirectoryElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLDirectoryElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLDirectoryElement :: IsGObject obj => obj -> HTMLDirectoryElement
+castToHTMLDirectoryElement = castTo gTypeHTMLDirectoryElement "HTMLDirectoryElement"
+
+foreign import javascript unsafe "window[\"HTMLDirectoryElement\"]" gTypeHTMLDirectoryElement :: GType
+#else
+type IsHTMLDirectoryElement o = HTMLDirectoryElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLDivElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLDivElement Mozilla HTMLDivElement documentation>
+newtype HTMLDivElement = HTMLDivElement { unHTMLDivElement :: JSRef }
+
+instance Eq (HTMLDivElement) where
+  (HTMLDivElement a) == (HTMLDivElement b) = js_eq a b
+
+instance PToJSRef HTMLDivElement where
+  pToJSRef = unHTMLDivElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLDivElement where
+  pFromJSRef = HTMLDivElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLDivElement where
+  toJSRef = return . unHTMLDivElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLDivElement where
+  fromJSRef = return . fmap HTMLDivElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLDivElement
+instance IsElement HTMLDivElement
+instance IsNode HTMLDivElement
+instance IsEventTarget HTMLDivElement
+instance IsGObject HTMLDivElement where
+  toGObject = GObject . unHTMLDivElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLDivElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLDivElement :: IsGObject obj => obj -> HTMLDivElement
+castToHTMLDivElement = castTo gTypeHTMLDivElement "HTMLDivElement"
+
+foreign import javascript unsafe "window[\"HTMLDivElement\"]" gTypeHTMLDivElement :: GType
+#else
+type IsHTMLDivElement o = HTMLDivElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLDocument".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.Document"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLDocument Mozilla HTMLDocument documentation>
+newtype HTMLDocument = HTMLDocument { unHTMLDocument :: JSRef }
+
+instance Eq (HTMLDocument) where
+  (HTMLDocument a) == (HTMLDocument b) = js_eq a b
+
+instance PToJSRef HTMLDocument where
+  pToJSRef = unHTMLDocument
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLDocument where
+  pFromJSRef = HTMLDocument
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLDocument where
+  toJSRef = return . unHTMLDocument
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLDocument where
+  fromJSRef = return . fmap HTMLDocument . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsDocument HTMLDocument
+instance IsNode HTMLDocument
+instance IsEventTarget HTMLDocument
+instance IsGObject HTMLDocument where
+  toGObject = GObject . unHTMLDocument
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLDocument . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLDocument :: IsGObject obj => obj -> HTMLDocument
+castToHTMLDocument = castTo gTypeHTMLDocument "HTMLDocument"
+
+foreign import javascript unsafe "window[\"HTMLDocument\"]" gTypeHTMLDocument :: GType
+#else
+type IsHTMLDocument o = HTMLDocumentClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement Mozilla HTMLElement documentation>
+newtype HTMLElement = HTMLElement { unHTMLElement :: JSRef }
+
+instance Eq (HTMLElement) where
+  (HTMLElement a) == (HTMLElement b) = js_eq a b
+
+instance PToJSRef HTMLElement where
+  pToJSRef = unHTMLElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLElement where
+  pFromJSRef = HTMLElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLElement where
+  toJSRef = return . unHTMLElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLElement where
+  fromJSRef = return . fmap HTMLElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsElement o => IsHTMLElement o
+toHTMLElement :: IsHTMLElement o => o -> HTMLElement
+toHTMLElement = unsafeCastGObject . toGObject
+
+instance IsHTMLElement HTMLElement
+instance IsElement HTMLElement
+instance IsNode HTMLElement
+instance IsEventTarget HTMLElement
+instance IsGObject HTMLElement where
+  toGObject = GObject . unHTMLElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLElement :: IsGObject obj => obj -> HTMLElement
+castToHTMLElement = castTo gTypeHTMLElement "HTMLElement"
+
+foreign import javascript unsafe "window[\"HTMLElement\"]" gTypeHTMLElement :: GType
+#else
+type IsHTMLElement o = HTMLElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLEmbedElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLEmbedElement Mozilla HTMLEmbedElement documentation>
+newtype HTMLEmbedElement = HTMLEmbedElement { unHTMLEmbedElement :: JSRef }
+
+instance Eq (HTMLEmbedElement) where
+  (HTMLEmbedElement a) == (HTMLEmbedElement b) = js_eq a b
+
+instance PToJSRef HTMLEmbedElement where
+  pToJSRef = unHTMLEmbedElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLEmbedElement where
+  pFromJSRef = HTMLEmbedElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLEmbedElement where
+  toJSRef = return . unHTMLEmbedElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLEmbedElement where
+  fromJSRef = return . fmap HTMLEmbedElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLEmbedElement
+instance IsElement HTMLEmbedElement
+instance IsNode HTMLEmbedElement
+instance IsEventTarget HTMLEmbedElement
+instance IsGObject HTMLEmbedElement where
+  toGObject = GObject . unHTMLEmbedElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLEmbedElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLEmbedElement :: IsGObject obj => obj -> HTMLEmbedElement
+castToHTMLEmbedElement = castTo gTypeHTMLEmbedElement "HTMLEmbedElement"
+
+foreign import javascript unsafe "window[\"HTMLEmbedElement\"]" gTypeHTMLEmbedElement :: GType
+#else
+type IsHTMLEmbedElement o = HTMLEmbedElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLFieldSetElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFieldSetElement Mozilla HTMLFieldSetElement documentation>
+newtype HTMLFieldSetElement = HTMLFieldSetElement { unHTMLFieldSetElement :: JSRef }
+
+instance Eq (HTMLFieldSetElement) where
+  (HTMLFieldSetElement a) == (HTMLFieldSetElement b) = js_eq a b
+
+instance PToJSRef HTMLFieldSetElement where
+  pToJSRef = unHTMLFieldSetElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLFieldSetElement where
+  pFromJSRef = HTMLFieldSetElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLFieldSetElement where
+  toJSRef = return . unHTMLFieldSetElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLFieldSetElement where
+  fromJSRef = return . fmap HTMLFieldSetElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLFieldSetElement
+instance IsElement HTMLFieldSetElement
+instance IsNode HTMLFieldSetElement
+instance IsEventTarget HTMLFieldSetElement
+instance IsGObject HTMLFieldSetElement where
+  toGObject = GObject . unHTMLFieldSetElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLFieldSetElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLFieldSetElement :: IsGObject obj => obj -> HTMLFieldSetElement
+castToHTMLFieldSetElement = castTo gTypeHTMLFieldSetElement "HTMLFieldSetElement"
+
+foreign import javascript unsafe "window[\"HTMLFieldSetElement\"]" gTypeHTMLFieldSetElement :: GType
+#else
+type IsHTMLFieldSetElement o = HTMLFieldSetElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLFontElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFontElement Mozilla HTMLFontElement documentation>
+newtype HTMLFontElement = HTMLFontElement { unHTMLFontElement :: JSRef }
+
+instance Eq (HTMLFontElement) where
+  (HTMLFontElement a) == (HTMLFontElement b) = js_eq a b
+
+instance PToJSRef HTMLFontElement where
+  pToJSRef = unHTMLFontElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLFontElement where
+  pFromJSRef = HTMLFontElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLFontElement where
+  toJSRef = return . unHTMLFontElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLFontElement where
+  fromJSRef = return . fmap HTMLFontElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLFontElement
+instance IsElement HTMLFontElement
+instance IsNode HTMLFontElement
+instance IsEventTarget HTMLFontElement
+instance IsGObject HTMLFontElement where
+  toGObject = GObject . unHTMLFontElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLFontElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLFontElement :: IsGObject obj => obj -> HTMLFontElement
+castToHTMLFontElement = castTo gTypeHTMLFontElement "HTMLFontElement"
+
+foreign import javascript unsafe "window[\"HTMLFontElement\"]" gTypeHTMLFontElement :: GType
+#else
+type IsHTMLFontElement o = HTMLFontElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLFormControlsCollection".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLCollection"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormControlsCollection Mozilla HTMLFormControlsCollection documentation>
+newtype HTMLFormControlsCollection = HTMLFormControlsCollection { unHTMLFormControlsCollection :: JSRef }
+
+instance Eq (HTMLFormControlsCollection) where
+  (HTMLFormControlsCollection a) == (HTMLFormControlsCollection b) = js_eq a b
+
+instance PToJSRef HTMLFormControlsCollection where
+  pToJSRef = unHTMLFormControlsCollection
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLFormControlsCollection where
+  pFromJSRef = HTMLFormControlsCollection
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLFormControlsCollection where
+  toJSRef = return . unHTMLFormControlsCollection
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLFormControlsCollection where
+  fromJSRef = return . fmap HTMLFormControlsCollection . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLCollection HTMLFormControlsCollection
+instance IsGObject HTMLFormControlsCollection where
+  toGObject = GObject . unHTMLFormControlsCollection
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLFormControlsCollection . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLFormControlsCollection :: IsGObject obj => obj -> HTMLFormControlsCollection
+castToHTMLFormControlsCollection = castTo gTypeHTMLFormControlsCollection "HTMLFormControlsCollection"
+
+foreign import javascript unsafe "window[\"HTMLFormControlsCollection\"]" gTypeHTMLFormControlsCollection :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLFormElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement Mozilla HTMLFormElement documentation>
+newtype HTMLFormElement = HTMLFormElement { unHTMLFormElement :: JSRef }
+
+instance Eq (HTMLFormElement) where
+  (HTMLFormElement a) == (HTMLFormElement b) = js_eq a b
+
+instance PToJSRef HTMLFormElement where
+  pToJSRef = unHTMLFormElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLFormElement where
+  pFromJSRef = HTMLFormElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLFormElement where
+  toJSRef = return . unHTMLFormElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLFormElement where
+  fromJSRef = return . fmap HTMLFormElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLFormElement
+instance IsElement HTMLFormElement
+instance IsNode HTMLFormElement
+instance IsEventTarget HTMLFormElement
+instance IsGObject HTMLFormElement where
+  toGObject = GObject . unHTMLFormElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLFormElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLFormElement :: IsGObject obj => obj -> HTMLFormElement
+castToHTMLFormElement = castTo gTypeHTMLFormElement "HTMLFormElement"
+
+foreign import javascript unsafe "window[\"HTMLFormElement\"]" gTypeHTMLFormElement :: GType
+#else
+type IsHTMLFormElement o = HTMLFormElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLFrameElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFrameElement Mozilla HTMLFrameElement documentation>
+newtype HTMLFrameElement = HTMLFrameElement { unHTMLFrameElement :: JSRef }
+
+instance Eq (HTMLFrameElement) where
+  (HTMLFrameElement a) == (HTMLFrameElement b) = js_eq a b
+
+instance PToJSRef HTMLFrameElement where
+  pToJSRef = unHTMLFrameElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLFrameElement where
+  pFromJSRef = HTMLFrameElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLFrameElement where
+  toJSRef = return . unHTMLFrameElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLFrameElement where
+  fromJSRef = return . fmap HTMLFrameElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLFrameElement
+instance IsElement HTMLFrameElement
+instance IsNode HTMLFrameElement
+instance IsEventTarget HTMLFrameElement
+instance IsGObject HTMLFrameElement where
+  toGObject = GObject . unHTMLFrameElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLFrameElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLFrameElement :: IsGObject obj => obj -> HTMLFrameElement
+castToHTMLFrameElement = castTo gTypeHTMLFrameElement "HTMLFrameElement"
+
+foreign import javascript unsafe "window[\"HTMLFrameElement\"]" gTypeHTMLFrameElement :: GType
+#else
+type IsHTMLFrameElement o = HTMLFrameElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLFrameSetElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLFrameSetElement Mozilla HTMLFrameSetElement documentation>
+newtype HTMLFrameSetElement = HTMLFrameSetElement { unHTMLFrameSetElement :: JSRef }
+
+instance Eq (HTMLFrameSetElement) where
+  (HTMLFrameSetElement a) == (HTMLFrameSetElement b) = js_eq a b
+
+instance PToJSRef HTMLFrameSetElement where
+  pToJSRef = unHTMLFrameSetElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLFrameSetElement where
+  pFromJSRef = HTMLFrameSetElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLFrameSetElement where
+  toJSRef = return . unHTMLFrameSetElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLFrameSetElement where
+  fromJSRef = return . fmap HTMLFrameSetElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLFrameSetElement
+instance IsElement HTMLFrameSetElement
+instance IsNode HTMLFrameSetElement
+instance IsEventTarget HTMLFrameSetElement
+instance IsGObject HTMLFrameSetElement where
+  toGObject = GObject . unHTMLFrameSetElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLFrameSetElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLFrameSetElement :: IsGObject obj => obj -> HTMLFrameSetElement
+castToHTMLFrameSetElement = castTo gTypeHTMLFrameSetElement "HTMLFrameSetElement"
+
+foreign import javascript unsafe "window[\"HTMLFrameSetElement\"]" gTypeHTMLFrameSetElement :: GType
+#else
+type IsHTMLFrameSetElement o = HTMLFrameSetElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLHRElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLHRElement Mozilla HTMLHRElement documentation>
+newtype HTMLHRElement = HTMLHRElement { unHTMLHRElement :: JSRef }
+
+instance Eq (HTMLHRElement) where
+  (HTMLHRElement a) == (HTMLHRElement b) = js_eq a b
+
+instance PToJSRef HTMLHRElement where
+  pToJSRef = unHTMLHRElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLHRElement where
+  pFromJSRef = HTMLHRElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLHRElement where
+  toJSRef = return . unHTMLHRElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLHRElement where
+  fromJSRef = return . fmap HTMLHRElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLHRElement
+instance IsElement HTMLHRElement
+instance IsNode HTMLHRElement
+instance IsEventTarget HTMLHRElement
+instance IsGObject HTMLHRElement where
+  toGObject = GObject . unHTMLHRElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLHRElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLHRElement :: IsGObject obj => obj -> HTMLHRElement
+castToHTMLHRElement = castTo gTypeHTMLHRElement "HTMLHRElement"
+
+foreign import javascript unsafe "window[\"HTMLHRElement\"]" gTypeHTMLHRElement :: GType
+#else
+type IsHTMLHRElement o = HTMLHRElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLHeadElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLHeadElement Mozilla HTMLHeadElement documentation>
+newtype HTMLHeadElement = HTMLHeadElement { unHTMLHeadElement :: JSRef }
+
+instance Eq (HTMLHeadElement) where
+  (HTMLHeadElement a) == (HTMLHeadElement b) = js_eq a b
+
+instance PToJSRef HTMLHeadElement where
+  pToJSRef = unHTMLHeadElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLHeadElement where
+  pFromJSRef = HTMLHeadElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLHeadElement where
+  toJSRef = return . unHTMLHeadElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLHeadElement where
+  fromJSRef = return . fmap HTMLHeadElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLHeadElement
+instance IsElement HTMLHeadElement
+instance IsNode HTMLHeadElement
+instance IsEventTarget HTMLHeadElement
+instance IsGObject HTMLHeadElement where
+  toGObject = GObject . unHTMLHeadElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLHeadElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLHeadElement :: IsGObject obj => obj -> HTMLHeadElement
+castToHTMLHeadElement = castTo gTypeHTMLHeadElement "HTMLHeadElement"
+
+foreign import javascript unsafe "window[\"HTMLHeadElement\"]" gTypeHTMLHeadElement :: GType
+#else
+type IsHTMLHeadElement o = HTMLHeadElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLHeadingElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLHeadingElement Mozilla HTMLHeadingElement documentation>
+newtype HTMLHeadingElement = HTMLHeadingElement { unHTMLHeadingElement :: JSRef }
+
+instance Eq (HTMLHeadingElement) where
+  (HTMLHeadingElement a) == (HTMLHeadingElement b) = js_eq a b
+
+instance PToJSRef HTMLHeadingElement where
+  pToJSRef = unHTMLHeadingElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLHeadingElement where
+  pFromJSRef = HTMLHeadingElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLHeadingElement where
+  toJSRef = return . unHTMLHeadingElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLHeadingElement where
+  fromJSRef = return . fmap HTMLHeadingElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLHeadingElement
+instance IsElement HTMLHeadingElement
+instance IsNode HTMLHeadingElement
+instance IsEventTarget HTMLHeadingElement
+instance IsGObject HTMLHeadingElement where
+  toGObject = GObject . unHTMLHeadingElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLHeadingElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLHeadingElement :: IsGObject obj => obj -> HTMLHeadingElement
+castToHTMLHeadingElement = castTo gTypeHTMLHeadingElement "HTMLHeadingElement"
+
+foreign import javascript unsafe "window[\"HTMLHeadingElement\"]" gTypeHTMLHeadingElement :: GType
+#else
+type IsHTMLHeadingElement o = HTMLHeadingElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLHtmlElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLHtmlElement Mozilla HTMLHtmlElement documentation>
+newtype HTMLHtmlElement = HTMLHtmlElement { unHTMLHtmlElement :: JSRef }
+
+instance Eq (HTMLHtmlElement) where
+  (HTMLHtmlElement a) == (HTMLHtmlElement b) = js_eq a b
+
+instance PToJSRef HTMLHtmlElement where
+  pToJSRef = unHTMLHtmlElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLHtmlElement where
+  pFromJSRef = HTMLHtmlElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLHtmlElement where
+  toJSRef = return . unHTMLHtmlElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLHtmlElement where
+  fromJSRef = return . fmap HTMLHtmlElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLHtmlElement
+instance IsElement HTMLHtmlElement
+instance IsNode HTMLHtmlElement
+instance IsEventTarget HTMLHtmlElement
+instance IsGObject HTMLHtmlElement where
+  toGObject = GObject . unHTMLHtmlElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLHtmlElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLHtmlElement :: IsGObject obj => obj -> HTMLHtmlElement
+castToHTMLHtmlElement = castTo gTypeHTMLHtmlElement "HTMLHtmlElement"
+
+foreign import javascript unsafe "window[\"HTMLHtmlElement\"]" gTypeHTMLHtmlElement :: GType
+#else
+type IsHTMLHtmlElement o = HTMLHtmlElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLIFrameElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement Mozilla HTMLIFrameElement documentation>
+newtype HTMLIFrameElement = HTMLIFrameElement { unHTMLIFrameElement :: JSRef }
+
+instance Eq (HTMLIFrameElement) where
+  (HTMLIFrameElement a) == (HTMLIFrameElement b) = js_eq a b
+
+instance PToJSRef HTMLIFrameElement where
+  pToJSRef = unHTMLIFrameElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLIFrameElement where
+  pFromJSRef = HTMLIFrameElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLIFrameElement where
+  toJSRef = return . unHTMLIFrameElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLIFrameElement where
+  fromJSRef = return . fmap HTMLIFrameElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLIFrameElement
+instance IsElement HTMLIFrameElement
+instance IsNode HTMLIFrameElement
+instance IsEventTarget HTMLIFrameElement
+instance IsGObject HTMLIFrameElement where
+  toGObject = GObject . unHTMLIFrameElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLIFrameElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLIFrameElement :: IsGObject obj => obj -> HTMLIFrameElement
+castToHTMLIFrameElement = castTo gTypeHTMLIFrameElement "HTMLIFrameElement"
+
+foreign import javascript unsafe "window[\"HTMLIFrameElement\"]" gTypeHTMLIFrameElement :: GType
+#else
+type IsHTMLIFrameElement o = HTMLIFrameElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLImageElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement Mozilla HTMLImageElement documentation>
+newtype HTMLImageElement = HTMLImageElement { unHTMLImageElement :: JSRef }
+
+instance Eq (HTMLImageElement) where
+  (HTMLImageElement a) == (HTMLImageElement b) = js_eq a b
+
+instance PToJSRef HTMLImageElement where
+  pToJSRef = unHTMLImageElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLImageElement where
+  pFromJSRef = HTMLImageElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLImageElement where
+  toJSRef = return . unHTMLImageElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLImageElement where
+  fromJSRef = return . fmap HTMLImageElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLImageElement
+instance IsElement HTMLImageElement
+instance IsNode HTMLImageElement
+instance IsEventTarget HTMLImageElement
+instance IsGObject HTMLImageElement where
+  toGObject = GObject . unHTMLImageElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLImageElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLImageElement :: IsGObject obj => obj -> HTMLImageElement
+castToHTMLImageElement = castTo gTypeHTMLImageElement "HTMLImageElement"
+
+foreign import javascript unsafe "window[\"HTMLImageElement\"]" gTypeHTMLImageElement :: GType
+#else
+type IsHTMLImageElement o = HTMLImageElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLInputElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement Mozilla HTMLInputElement documentation>
+newtype HTMLInputElement = HTMLInputElement { unHTMLInputElement :: JSRef }
+
+instance Eq (HTMLInputElement) where
+  (HTMLInputElement a) == (HTMLInputElement b) = js_eq a b
+
+instance PToJSRef HTMLInputElement where
+  pToJSRef = unHTMLInputElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLInputElement where
+  pFromJSRef = HTMLInputElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLInputElement where
+  toJSRef = return . unHTMLInputElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLInputElement where
+  fromJSRef = return . fmap HTMLInputElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLInputElement
+instance IsElement HTMLInputElement
+instance IsNode HTMLInputElement
+instance IsEventTarget HTMLInputElement
+instance IsGObject HTMLInputElement where
+  toGObject = GObject . unHTMLInputElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLInputElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLInputElement :: IsGObject obj => obj -> HTMLInputElement
+castToHTMLInputElement = castTo gTypeHTMLInputElement "HTMLInputElement"
+
+foreign import javascript unsafe "window[\"HTMLInputElement\"]" gTypeHTMLInputElement :: GType
+#else
+type IsHTMLInputElement o = HTMLInputElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLKeygenElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLKeygenElement Mozilla HTMLKeygenElement documentation>
+newtype HTMLKeygenElement = HTMLKeygenElement { unHTMLKeygenElement :: JSRef }
+
+instance Eq (HTMLKeygenElement) where
+  (HTMLKeygenElement a) == (HTMLKeygenElement b) = js_eq a b
+
+instance PToJSRef HTMLKeygenElement where
+  pToJSRef = unHTMLKeygenElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLKeygenElement where
+  pFromJSRef = HTMLKeygenElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLKeygenElement where
+  toJSRef = return . unHTMLKeygenElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLKeygenElement where
+  fromJSRef = return . fmap HTMLKeygenElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLKeygenElement
+instance IsElement HTMLKeygenElement
+instance IsNode HTMLKeygenElement
+instance IsEventTarget HTMLKeygenElement
+instance IsGObject HTMLKeygenElement where
+  toGObject = GObject . unHTMLKeygenElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLKeygenElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLKeygenElement :: IsGObject obj => obj -> HTMLKeygenElement
+castToHTMLKeygenElement = castTo gTypeHTMLKeygenElement "HTMLKeygenElement"
+
+foreign import javascript unsafe "window[\"HTMLKeygenElement\"]" gTypeHTMLKeygenElement :: GType
+#else
+type IsHTMLKeygenElement o = HTMLKeygenElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLLIElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLLIElement Mozilla HTMLLIElement documentation>
+newtype HTMLLIElement = HTMLLIElement { unHTMLLIElement :: JSRef }
+
+instance Eq (HTMLLIElement) where
+  (HTMLLIElement a) == (HTMLLIElement b) = js_eq a b
+
+instance PToJSRef HTMLLIElement where
+  pToJSRef = unHTMLLIElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLLIElement where
+  pFromJSRef = HTMLLIElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLLIElement where
+  toJSRef = return . unHTMLLIElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLLIElement where
+  fromJSRef = return . fmap HTMLLIElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLLIElement
+instance IsElement HTMLLIElement
+instance IsNode HTMLLIElement
+instance IsEventTarget HTMLLIElement
+instance IsGObject HTMLLIElement where
+  toGObject = GObject . unHTMLLIElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLLIElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLLIElement :: IsGObject obj => obj -> HTMLLIElement
+castToHTMLLIElement = castTo gTypeHTMLLIElement "HTMLLIElement"
+
+foreign import javascript unsafe "window[\"HTMLLIElement\"]" gTypeHTMLLIElement :: GType
+#else
+type IsHTMLLIElement o = HTMLLIElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLLabelElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLLabelElement Mozilla HTMLLabelElement documentation>
+newtype HTMLLabelElement = HTMLLabelElement { unHTMLLabelElement :: JSRef }
+
+instance Eq (HTMLLabelElement) where
+  (HTMLLabelElement a) == (HTMLLabelElement b) = js_eq a b
+
+instance PToJSRef HTMLLabelElement where
+  pToJSRef = unHTMLLabelElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLLabelElement where
+  pFromJSRef = HTMLLabelElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLLabelElement where
+  toJSRef = return . unHTMLLabelElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLLabelElement where
+  fromJSRef = return . fmap HTMLLabelElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLLabelElement
+instance IsElement HTMLLabelElement
+instance IsNode HTMLLabelElement
+instance IsEventTarget HTMLLabelElement
+instance IsGObject HTMLLabelElement where
+  toGObject = GObject . unHTMLLabelElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLLabelElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLLabelElement :: IsGObject obj => obj -> HTMLLabelElement
+castToHTMLLabelElement = castTo gTypeHTMLLabelElement "HTMLLabelElement"
+
+foreign import javascript unsafe "window[\"HTMLLabelElement\"]" gTypeHTMLLabelElement :: GType
+#else
+type IsHTMLLabelElement o = HTMLLabelElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLLegendElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLLegendElement Mozilla HTMLLegendElement documentation>
+newtype HTMLLegendElement = HTMLLegendElement { unHTMLLegendElement :: JSRef }
+
+instance Eq (HTMLLegendElement) where
+  (HTMLLegendElement a) == (HTMLLegendElement b) = js_eq a b
+
+instance PToJSRef HTMLLegendElement where
+  pToJSRef = unHTMLLegendElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLLegendElement where
+  pFromJSRef = HTMLLegendElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLLegendElement where
+  toJSRef = return . unHTMLLegendElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLLegendElement where
+  fromJSRef = return . fmap HTMLLegendElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLLegendElement
+instance IsElement HTMLLegendElement
+instance IsNode HTMLLegendElement
+instance IsEventTarget HTMLLegendElement
+instance IsGObject HTMLLegendElement where
+  toGObject = GObject . unHTMLLegendElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLLegendElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLLegendElement :: IsGObject obj => obj -> HTMLLegendElement
+castToHTMLLegendElement = castTo gTypeHTMLLegendElement "HTMLLegendElement"
+
+foreign import javascript unsafe "window[\"HTMLLegendElement\"]" gTypeHTMLLegendElement :: GType
+#else
+type IsHTMLLegendElement o = HTMLLegendElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLLinkElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLLinkElement Mozilla HTMLLinkElement documentation>
+newtype HTMLLinkElement = HTMLLinkElement { unHTMLLinkElement :: JSRef }
+
+instance Eq (HTMLLinkElement) where
+  (HTMLLinkElement a) == (HTMLLinkElement b) = js_eq a b
+
+instance PToJSRef HTMLLinkElement where
+  pToJSRef = unHTMLLinkElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLLinkElement where
+  pFromJSRef = HTMLLinkElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLLinkElement where
+  toJSRef = return . unHTMLLinkElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLLinkElement where
+  fromJSRef = return . fmap HTMLLinkElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLLinkElement
+instance IsElement HTMLLinkElement
+instance IsNode HTMLLinkElement
+instance IsEventTarget HTMLLinkElement
+instance IsGObject HTMLLinkElement where
+  toGObject = GObject . unHTMLLinkElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLLinkElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLLinkElement :: IsGObject obj => obj -> HTMLLinkElement
+castToHTMLLinkElement = castTo gTypeHTMLLinkElement "HTMLLinkElement"
+
+foreign import javascript unsafe "window[\"HTMLLinkElement\"]" gTypeHTMLLinkElement :: GType
+#else
+type IsHTMLLinkElement o = HTMLLinkElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLMapElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMapElement Mozilla HTMLMapElement documentation>
+newtype HTMLMapElement = HTMLMapElement { unHTMLMapElement :: JSRef }
+
+instance Eq (HTMLMapElement) where
+  (HTMLMapElement a) == (HTMLMapElement b) = js_eq a b
+
+instance PToJSRef HTMLMapElement where
+  pToJSRef = unHTMLMapElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLMapElement where
+  pFromJSRef = HTMLMapElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLMapElement where
+  toJSRef = return . unHTMLMapElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLMapElement where
+  fromJSRef = return . fmap HTMLMapElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLMapElement
+instance IsElement HTMLMapElement
+instance IsNode HTMLMapElement
+instance IsEventTarget HTMLMapElement
+instance IsGObject HTMLMapElement where
+  toGObject = GObject . unHTMLMapElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLMapElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLMapElement :: IsGObject obj => obj -> HTMLMapElement
+castToHTMLMapElement = castTo gTypeHTMLMapElement "HTMLMapElement"
+
+foreign import javascript unsafe "window[\"HTMLMapElement\"]" gTypeHTMLMapElement :: GType
+#else
+type IsHTMLMapElement o = HTMLMapElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLMarqueeElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMarqueeElement Mozilla HTMLMarqueeElement documentation>
+newtype HTMLMarqueeElement = HTMLMarqueeElement { unHTMLMarqueeElement :: JSRef }
+
+instance Eq (HTMLMarqueeElement) where
+  (HTMLMarqueeElement a) == (HTMLMarqueeElement b) = js_eq a b
+
+instance PToJSRef HTMLMarqueeElement where
+  pToJSRef = unHTMLMarqueeElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLMarqueeElement where
+  pFromJSRef = HTMLMarqueeElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLMarqueeElement where
+  toJSRef = return . unHTMLMarqueeElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLMarqueeElement where
+  fromJSRef = return . fmap HTMLMarqueeElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLMarqueeElement
+instance IsElement HTMLMarqueeElement
+instance IsNode HTMLMarqueeElement
+instance IsEventTarget HTMLMarqueeElement
+instance IsGObject HTMLMarqueeElement where
+  toGObject = GObject . unHTMLMarqueeElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLMarqueeElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLMarqueeElement :: IsGObject obj => obj -> HTMLMarqueeElement
+castToHTMLMarqueeElement = castTo gTypeHTMLMarqueeElement "HTMLMarqueeElement"
+
+foreign import javascript unsafe "window[\"HTMLMarqueeElement\"]" gTypeHTMLMarqueeElement :: GType
+#else
+type IsHTMLMarqueeElement o = HTMLMarqueeElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLMediaElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement Mozilla HTMLMediaElement documentation>
+newtype HTMLMediaElement = HTMLMediaElement { unHTMLMediaElement :: JSRef }
+
+instance Eq (HTMLMediaElement) where
+  (HTMLMediaElement a) == (HTMLMediaElement b) = js_eq a b
+
+instance PToJSRef HTMLMediaElement where
+  pToJSRef = unHTMLMediaElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLMediaElement where
+  pFromJSRef = HTMLMediaElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLMediaElement where
+  toJSRef = return . unHTMLMediaElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLMediaElement where
+  fromJSRef = return . fmap HTMLMediaElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsHTMLElement o => IsHTMLMediaElement o
+toHTMLMediaElement :: IsHTMLMediaElement o => o -> HTMLMediaElement
+toHTMLMediaElement = unsafeCastGObject . toGObject
+
+instance IsHTMLMediaElement HTMLMediaElement
+instance IsHTMLElement HTMLMediaElement
+instance IsElement HTMLMediaElement
+instance IsNode HTMLMediaElement
+instance IsEventTarget HTMLMediaElement
+instance IsGObject HTMLMediaElement where
+  toGObject = GObject . unHTMLMediaElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLMediaElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLMediaElement :: IsGObject obj => obj -> HTMLMediaElement
+castToHTMLMediaElement = castTo gTypeHTMLMediaElement "HTMLMediaElement"
+
+foreign import javascript unsafe "window[\"HTMLMediaElement\"]" gTypeHTMLMediaElement :: GType
+#else
+type IsHTMLMediaElement o = HTMLMediaElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLMenuElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMenuElement Mozilla HTMLMenuElement documentation>
+newtype HTMLMenuElement = HTMLMenuElement { unHTMLMenuElement :: JSRef }
+
+instance Eq (HTMLMenuElement) where
+  (HTMLMenuElement a) == (HTMLMenuElement b) = js_eq a b
+
+instance PToJSRef HTMLMenuElement where
+  pToJSRef = unHTMLMenuElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLMenuElement where
+  pFromJSRef = HTMLMenuElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLMenuElement where
+  toJSRef = return . unHTMLMenuElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLMenuElement where
+  fromJSRef = return . fmap HTMLMenuElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLMenuElement
+instance IsElement HTMLMenuElement
+instance IsNode HTMLMenuElement
+instance IsEventTarget HTMLMenuElement
+instance IsGObject HTMLMenuElement where
+  toGObject = GObject . unHTMLMenuElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLMenuElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLMenuElement :: IsGObject obj => obj -> HTMLMenuElement
+castToHTMLMenuElement = castTo gTypeHTMLMenuElement "HTMLMenuElement"
+
+foreign import javascript unsafe "window[\"HTMLMenuElement\"]" gTypeHTMLMenuElement :: GType
+#else
+type IsHTMLMenuElement o = HTMLMenuElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLMetaElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMetaElement Mozilla HTMLMetaElement documentation>
+newtype HTMLMetaElement = HTMLMetaElement { unHTMLMetaElement :: JSRef }
+
+instance Eq (HTMLMetaElement) where
+  (HTMLMetaElement a) == (HTMLMetaElement b) = js_eq a b
+
+instance PToJSRef HTMLMetaElement where
+  pToJSRef = unHTMLMetaElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLMetaElement where
+  pFromJSRef = HTMLMetaElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLMetaElement where
+  toJSRef = return . unHTMLMetaElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLMetaElement where
+  fromJSRef = return . fmap HTMLMetaElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLMetaElement
+instance IsElement HTMLMetaElement
+instance IsNode HTMLMetaElement
+instance IsEventTarget HTMLMetaElement
+instance IsGObject HTMLMetaElement where
+  toGObject = GObject . unHTMLMetaElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLMetaElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLMetaElement :: IsGObject obj => obj -> HTMLMetaElement
+castToHTMLMetaElement = castTo gTypeHTMLMetaElement "HTMLMetaElement"
+
+foreign import javascript unsafe "window[\"HTMLMetaElement\"]" gTypeHTMLMetaElement :: GType
+#else
+type IsHTMLMetaElement o = HTMLMetaElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLMeterElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLMeterElement Mozilla HTMLMeterElement documentation>
+newtype HTMLMeterElement = HTMLMeterElement { unHTMLMeterElement :: JSRef }
+
+instance Eq (HTMLMeterElement) where
+  (HTMLMeterElement a) == (HTMLMeterElement b) = js_eq a b
+
+instance PToJSRef HTMLMeterElement where
+  pToJSRef = unHTMLMeterElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLMeterElement where
+  pFromJSRef = HTMLMeterElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLMeterElement where
+  toJSRef = return . unHTMLMeterElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLMeterElement where
+  fromJSRef = return . fmap HTMLMeterElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLMeterElement
+instance IsElement HTMLMeterElement
+instance IsNode HTMLMeterElement
+instance IsEventTarget HTMLMeterElement
+instance IsGObject HTMLMeterElement where
+  toGObject = GObject . unHTMLMeterElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLMeterElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLMeterElement :: IsGObject obj => obj -> HTMLMeterElement
+castToHTMLMeterElement = castTo gTypeHTMLMeterElement "HTMLMeterElement"
+
+foreign import javascript unsafe "window[\"HTMLMeterElement\"]" gTypeHTMLMeterElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLModElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLModElement Mozilla HTMLModElement documentation>
+newtype HTMLModElement = HTMLModElement { unHTMLModElement :: JSRef }
+
+instance Eq (HTMLModElement) where
+  (HTMLModElement a) == (HTMLModElement b) = js_eq a b
+
+instance PToJSRef HTMLModElement where
+  pToJSRef = unHTMLModElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLModElement where
+  pFromJSRef = HTMLModElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLModElement where
+  toJSRef = return . unHTMLModElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLModElement where
+  fromJSRef = return . fmap HTMLModElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLModElement
+instance IsElement HTMLModElement
+instance IsNode HTMLModElement
+instance IsEventTarget HTMLModElement
+instance IsGObject HTMLModElement where
+  toGObject = GObject . unHTMLModElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLModElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLModElement :: IsGObject obj => obj -> HTMLModElement
+castToHTMLModElement = castTo gTypeHTMLModElement "HTMLModElement"
+
+foreign import javascript unsafe "window[\"HTMLModElement\"]" gTypeHTMLModElement :: GType
+#else
+type IsHTMLModElement o = HTMLModElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLOListElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOListElement Mozilla HTMLOListElement documentation>
+newtype HTMLOListElement = HTMLOListElement { unHTMLOListElement :: JSRef }
+
+instance Eq (HTMLOListElement) where
+  (HTMLOListElement a) == (HTMLOListElement b) = js_eq a b
+
+instance PToJSRef HTMLOListElement where
+  pToJSRef = unHTMLOListElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLOListElement where
+  pFromJSRef = HTMLOListElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLOListElement where
+  toJSRef = return . unHTMLOListElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLOListElement where
+  fromJSRef = return . fmap HTMLOListElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLOListElement
+instance IsElement HTMLOListElement
+instance IsNode HTMLOListElement
+instance IsEventTarget HTMLOListElement
+instance IsGObject HTMLOListElement where
+  toGObject = GObject . unHTMLOListElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLOListElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLOListElement :: IsGObject obj => obj -> HTMLOListElement
+castToHTMLOListElement = castTo gTypeHTMLOListElement "HTMLOListElement"
+
+foreign import javascript unsafe "window[\"HTMLOListElement\"]" gTypeHTMLOListElement :: GType
+#else
+type IsHTMLOListElement o = HTMLOListElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLObjectElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLObjectElement Mozilla HTMLObjectElement documentation>
+newtype HTMLObjectElement = HTMLObjectElement { unHTMLObjectElement :: JSRef }
+
+instance Eq (HTMLObjectElement) where
+  (HTMLObjectElement a) == (HTMLObjectElement b) = js_eq a b
+
+instance PToJSRef HTMLObjectElement where
+  pToJSRef = unHTMLObjectElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLObjectElement where
+  pFromJSRef = HTMLObjectElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLObjectElement where
+  toJSRef = return . unHTMLObjectElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLObjectElement where
+  fromJSRef = return . fmap HTMLObjectElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLObjectElement
+instance IsElement HTMLObjectElement
+instance IsNode HTMLObjectElement
+instance IsEventTarget HTMLObjectElement
+instance IsGObject HTMLObjectElement where
+  toGObject = GObject . unHTMLObjectElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLObjectElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLObjectElement :: IsGObject obj => obj -> HTMLObjectElement
+castToHTMLObjectElement = castTo gTypeHTMLObjectElement "HTMLObjectElement"
+
+foreign import javascript unsafe "window[\"HTMLObjectElement\"]" gTypeHTMLObjectElement :: GType
+#else
+type IsHTMLObjectElement o = HTMLObjectElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLOptGroupElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOptGroupElement Mozilla HTMLOptGroupElement documentation>
+newtype HTMLOptGroupElement = HTMLOptGroupElement { unHTMLOptGroupElement :: JSRef }
+
+instance Eq (HTMLOptGroupElement) where
+  (HTMLOptGroupElement a) == (HTMLOptGroupElement b) = js_eq a b
+
+instance PToJSRef HTMLOptGroupElement where
+  pToJSRef = unHTMLOptGroupElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLOptGroupElement where
+  pFromJSRef = HTMLOptGroupElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLOptGroupElement where
+  toJSRef = return . unHTMLOptGroupElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLOptGroupElement where
+  fromJSRef = return . fmap HTMLOptGroupElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLOptGroupElement
+instance IsElement HTMLOptGroupElement
+instance IsNode HTMLOptGroupElement
+instance IsEventTarget HTMLOptGroupElement
+instance IsGObject HTMLOptGroupElement where
+  toGObject = GObject . unHTMLOptGroupElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLOptGroupElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLOptGroupElement :: IsGObject obj => obj -> HTMLOptGroupElement
+castToHTMLOptGroupElement = castTo gTypeHTMLOptGroupElement "HTMLOptGroupElement"
+
+foreign import javascript unsafe "window[\"HTMLOptGroupElement\"]" gTypeHTMLOptGroupElement :: GType
+#else
+type IsHTMLOptGroupElement o = HTMLOptGroupElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLOptionElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOptionElement Mozilla HTMLOptionElement documentation>
+newtype HTMLOptionElement = HTMLOptionElement { unHTMLOptionElement :: JSRef }
+
+instance Eq (HTMLOptionElement) where
+  (HTMLOptionElement a) == (HTMLOptionElement b) = js_eq a b
+
+instance PToJSRef HTMLOptionElement where
+  pToJSRef = unHTMLOptionElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLOptionElement where
+  pFromJSRef = HTMLOptionElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLOptionElement where
+  toJSRef = return . unHTMLOptionElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLOptionElement where
+  fromJSRef = return . fmap HTMLOptionElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLOptionElement
+instance IsElement HTMLOptionElement
+instance IsNode HTMLOptionElement
+instance IsEventTarget HTMLOptionElement
+instance IsGObject HTMLOptionElement where
+  toGObject = GObject . unHTMLOptionElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLOptionElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLOptionElement :: IsGObject obj => obj -> HTMLOptionElement
+castToHTMLOptionElement = castTo gTypeHTMLOptionElement "HTMLOptionElement"
+
+foreign import javascript unsafe "window[\"HTMLOptionElement\"]" gTypeHTMLOptionElement :: GType
+#else
+type IsHTMLOptionElement o = HTMLOptionElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLOptionsCollection".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLCollection"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOptionsCollection Mozilla HTMLOptionsCollection documentation>
+newtype HTMLOptionsCollection = HTMLOptionsCollection { unHTMLOptionsCollection :: JSRef }
+
+instance Eq (HTMLOptionsCollection) where
+  (HTMLOptionsCollection a) == (HTMLOptionsCollection b) = js_eq a b
+
+instance PToJSRef HTMLOptionsCollection where
+  pToJSRef = unHTMLOptionsCollection
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLOptionsCollection where
+  pFromJSRef = HTMLOptionsCollection
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLOptionsCollection where
+  toJSRef = return . unHTMLOptionsCollection
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLOptionsCollection where
+  fromJSRef = return . fmap HTMLOptionsCollection . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLCollection HTMLOptionsCollection
+instance IsGObject HTMLOptionsCollection where
+  toGObject = GObject . unHTMLOptionsCollection
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLOptionsCollection . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLOptionsCollection :: IsGObject obj => obj -> HTMLOptionsCollection
+castToHTMLOptionsCollection = castTo gTypeHTMLOptionsCollection "HTMLOptionsCollection"
+
+foreign import javascript unsafe "window[\"HTMLOptionsCollection\"]" gTypeHTMLOptionsCollection :: GType
+#else
+type IsHTMLOptionsCollection o = HTMLOptionsCollectionClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLOutputElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLOutputElement Mozilla HTMLOutputElement documentation>
+newtype HTMLOutputElement = HTMLOutputElement { unHTMLOutputElement :: JSRef }
+
+instance Eq (HTMLOutputElement) where
+  (HTMLOutputElement a) == (HTMLOutputElement b) = js_eq a b
+
+instance PToJSRef HTMLOutputElement where
+  pToJSRef = unHTMLOutputElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLOutputElement where
+  pFromJSRef = HTMLOutputElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLOutputElement where
+  toJSRef = return . unHTMLOutputElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLOutputElement where
+  fromJSRef = return . fmap HTMLOutputElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLOutputElement
+instance IsElement HTMLOutputElement
+instance IsNode HTMLOutputElement
+instance IsEventTarget HTMLOutputElement
+instance IsGObject HTMLOutputElement where
+  toGObject = GObject . unHTMLOutputElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLOutputElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLOutputElement :: IsGObject obj => obj -> HTMLOutputElement
+castToHTMLOutputElement = castTo gTypeHTMLOutputElement "HTMLOutputElement"
+
+foreign import javascript unsafe "window[\"HTMLOutputElement\"]" gTypeHTMLOutputElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLParagraphElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLParagraphElement Mozilla HTMLParagraphElement documentation>
+newtype HTMLParagraphElement = HTMLParagraphElement { unHTMLParagraphElement :: JSRef }
+
+instance Eq (HTMLParagraphElement) where
+  (HTMLParagraphElement a) == (HTMLParagraphElement b) = js_eq a b
+
+instance PToJSRef HTMLParagraphElement where
+  pToJSRef = unHTMLParagraphElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLParagraphElement where
+  pFromJSRef = HTMLParagraphElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLParagraphElement where
+  toJSRef = return . unHTMLParagraphElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLParagraphElement where
+  fromJSRef = return . fmap HTMLParagraphElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLParagraphElement
+instance IsElement HTMLParagraphElement
+instance IsNode HTMLParagraphElement
+instance IsEventTarget HTMLParagraphElement
+instance IsGObject HTMLParagraphElement where
+  toGObject = GObject . unHTMLParagraphElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLParagraphElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLParagraphElement :: IsGObject obj => obj -> HTMLParagraphElement
+castToHTMLParagraphElement = castTo gTypeHTMLParagraphElement "HTMLParagraphElement"
+
+foreign import javascript unsafe "window[\"HTMLParagraphElement\"]" gTypeHTMLParagraphElement :: GType
+#else
+type IsHTMLParagraphElement o = HTMLParagraphElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLParamElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLParamElement Mozilla HTMLParamElement documentation>
+newtype HTMLParamElement = HTMLParamElement { unHTMLParamElement :: JSRef }
+
+instance Eq (HTMLParamElement) where
+  (HTMLParamElement a) == (HTMLParamElement b) = js_eq a b
+
+instance PToJSRef HTMLParamElement where
+  pToJSRef = unHTMLParamElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLParamElement where
+  pFromJSRef = HTMLParamElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLParamElement where
+  toJSRef = return . unHTMLParamElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLParamElement where
+  fromJSRef = return . fmap HTMLParamElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLParamElement
+instance IsElement HTMLParamElement
+instance IsNode HTMLParamElement
+instance IsEventTarget HTMLParamElement
+instance IsGObject HTMLParamElement where
+  toGObject = GObject . unHTMLParamElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLParamElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLParamElement :: IsGObject obj => obj -> HTMLParamElement
+castToHTMLParamElement = castTo gTypeHTMLParamElement "HTMLParamElement"
+
+foreign import javascript unsafe "window[\"HTMLParamElement\"]" gTypeHTMLParamElement :: GType
+#else
+type IsHTMLParamElement o = HTMLParamElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLPreElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLPreElement Mozilla HTMLPreElement documentation>
+newtype HTMLPreElement = HTMLPreElement { unHTMLPreElement :: JSRef }
+
+instance Eq (HTMLPreElement) where
+  (HTMLPreElement a) == (HTMLPreElement b) = js_eq a b
+
+instance PToJSRef HTMLPreElement where
+  pToJSRef = unHTMLPreElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLPreElement where
+  pFromJSRef = HTMLPreElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLPreElement where
+  toJSRef = return . unHTMLPreElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLPreElement where
+  fromJSRef = return . fmap HTMLPreElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLPreElement
+instance IsElement HTMLPreElement
+instance IsNode HTMLPreElement
+instance IsEventTarget HTMLPreElement
+instance IsGObject HTMLPreElement where
+  toGObject = GObject . unHTMLPreElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLPreElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLPreElement :: IsGObject obj => obj -> HTMLPreElement
+castToHTMLPreElement = castTo gTypeHTMLPreElement "HTMLPreElement"
+
+foreign import javascript unsafe "window[\"HTMLPreElement\"]" gTypeHTMLPreElement :: GType
+#else
+type IsHTMLPreElement o = HTMLPreElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLProgressElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLProgressElement Mozilla HTMLProgressElement documentation>
+newtype HTMLProgressElement = HTMLProgressElement { unHTMLProgressElement :: JSRef }
+
+instance Eq (HTMLProgressElement) where
+  (HTMLProgressElement a) == (HTMLProgressElement b) = js_eq a b
+
+instance PToJSRef HTMLProgressElement where
+  pToJSRef = unHTMLProgressElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLProgressElement where
+  pFromJSRef = HTMLProgressElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLProgressElement where
+  toJSRef = return . unHTMLProgressElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLProgressElement where
+  fromJSRef = return . fmap HTMLProgressElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLProgressElement
+instance IsElement HTMLProgressElement
+instance IsNode HTMLProgressElement
+instance IsEventTarget HTMLProgressElement
+instance IsGObject HTMLProgressElement where
+  toGObject = GObject . unHTMLProgressElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLProgressElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLProgressElement :: IsGObject obj => obj -> HTMLProgressElement
+castToHTMLProgressElement = castTo gTypeHTMLProgressElement "HTMLProgressElement"
+
+foreign import javascript unsafe "window[\"HTMLProgressElement\"]" gTypeHTMLProgressElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLQuoteElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLQuoteElement Mozilla HTMLQuoteElement documentation>
+newtype HTMLQuoteElement = HTMLQuoteElement { unHTMLQuoteElement :: JSRef }
+
+instance Eq (HTMLQuoteElement) where
+  (HTMLQuoteElement a) == (HTMLQuoteElement b) = js_eq a b
+
+instance PToJSRef HTMLQuoteElement where
+  pToJSRef = unHTMLQuoteElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLQuoteElement where
+  pFromJSRef = HTMLQuoteElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLQuoteElement where
+  toJSRef = return . unHTMLQuoteElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLQuoteElement where
+  fromJSRef = return . fmap HTMLQuoteElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLQuoteElement
+instance IsElement HTMLQuoteElement
+instance IsNode HTMLQuoteElement
+instance IsEventTarget HTMLQuoteElement
+instance IsGObject HTMLQuoteElement where
+  toGObject = GObject . unHTMLQuoteElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLQuoteElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLQuoteElement :: IsGObject obj => obj -> HTMLQuoteElement
+castToHTMLQuoteElement = castTo gTypeHTMLQuoteElement "HTMLQuoteElement"
+
+foreign import javascript unsafe "window[\"HTMLQuoteElement\"]" gTypeHTMLQuoteElement :: GType
+#else
+type IsHTMLQuoteElement o = HTMLQuoteElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLScriptElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLScriptElement Mozilla HTMLScriptElement documentation>
+newtype HTMLScriptElement = HTMLScriptElement { unHTMLScriptElement :: JSRef }
+
+instance Eq (HTMLScriptElement) where
+  (HTMLScriptElement a) == (HTMLScriptElement b) = js_eq a b
+
+instance PToJSRef HTMLScriptElement where
+  pToJSRef = unHTMLScriptElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLScriptElement where
+  pFromJSRef = HTMLScriptElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLScriptElement where
+  toJSRef = return . unHTMLScriptElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLScriptElement where
+  fromJSRef = return . fmap HTMLScriptElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLScriptElement
+instance IsElement HTMLScriptElement
+instance IsNode HTMLScriptElement
+instance IsEventTarget HTMLScriptElement
+instance IsGObject HTMLScriptElement where
+  toGObject = GObject . unHTMLScriptElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLScriptElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLScriptElement :: IsGObject obj => obj -> HTMLScriptElement
+castToHTMLScriptElement = castTo gTypeHTMLScriptElement "HTMLScriptElement"
+
+foreign import javascript unsafe "window[\"HTMLScriptElement\"]" gTypeHTMLScriptElement :: GType
+#else
+type IsHTMLScriptElement o = HTMLScriptElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLSelectElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement Mozilla HTMLSelectElement documentation>
+newtype HTMLSelectElement = HTMLSelectElement { unHTMLSelectElement :: JSRef }
+
+instance Eq (HTMLSelectElement) where
+  (HTMLSelectElement a) == (HTMLSelectElement b) = js_eq a b
+
+instance PToJSRef HTMLSelectElement where
+  pToJSRef = unHTMLSelectElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLSelectElement where
+  pFromJSRef = HTMLSelectElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLSelectElement where
+  toJSRef = return . unHTMLSelectElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLSelectElement where
+  fromJSRef = return . fmap HTMLSelectElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLSelectElement
+instance IsElement HTMLSelectElement
+instance IsNode HTMLSelectElement
+instance IsEventTarget HTMLSelectElement
+instance IsGObject HTMLSelectElement where
+  toGObject = GObject . unHTMLSelectElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLSelectElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLSelectElement :: IsGObject obj => obj -> HTMLSelectElement
+castToHTMLSelectElement = castTo gTypeHTMLSelectElement "HTMLSelectElement"
+
+foreign import javascript unsafe "window[\"HTMLSelectElement\"]" gTypeHTMLSelectElement :: GType
+#else
+type IsHTMLSelectElement o = HTMLSelectElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLSourceElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLSourceElement Mozilla HTMLSourceElement documentation>
+newtype HTMLSourceElement = HTMLSourceElement { unHTMLSourceElement :: JSRef }
+
+instance Eq (HTMLSourceElement) where
+  (HTMLSourceElement a) == (HTMLSourceElement b) = js_eq a b
+
+instance PToJSRef HTMLSourceElement where
+  pToJSRef = unHTMLSourceElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLSourceElement where
+  pFromJSRef = HTMLSourceElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLSourceElement where
+  toJSRef = return . unHTMLSourceElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLSourceElement where
+  fromJSRef = return . fmap HTMLSourceElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLSourceElement
+instance IsElement HTMLSourceElement
+instance IsNode HTMLSourceElement
+instance IsEventTarget HTMLSourceElement
+instance IsGObject HTMLSourceElement where
+  toGObject = GObject . unHTMLSourceElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLSourceElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLSourceElement :: IsGObject obj => obj -> HTMLSourceElement
+castToHTMLSourceElement = castTo gTypeHTMLSourceElement "HTMLSourceElement"
+
+foreign import javascript unsafe "window[\"HTMLSourceElement\"]" gTypeHTMLSourceElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLSpanElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLSpanElement Mozilla HTMLSpanElement documentation>
+newtype HTMLSpanElement = HTMLSpanElement { unHTMLSpanElement :: JSRef }
+
+instance Eq (HTMLSpanElement) where
+  (HTMLSpanElement a) == (HTMLSpanElement b) = js_eq a b
+
+instance PToJSRef HTMLSpanElement where
+  pToJSRef = unHTMLSpanElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLSpanElement where
+  pFromJSRef = HTMLSpanElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLSpanElement where
+  toJSRef = return . unHTMLSpanElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLSpanElement where
+  fromJSRef = return . fmap HTMLSpanElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLSpanElement
+instance IsElement HTMLSpanElement
+instance IsNode HTMLSpanElement
+instance IsEventTarget HTMLSpanElement
+instance IsGObject HTMLSpanElement where
+  toGObject = GObject . unHTMLSpanElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLSpanElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLSpanElement :: IsGObject obj => obj -> HTMLSpanElement
+castToHTMLSpanElement = castTo gTypeHTMLSpanElement "HTMLSpanElement"
+
+foreign import javascript unsafe "window[\"HTMLSpanElement\"]" gTypeHTMLSpanElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLStyleElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLStyleElement Mozilla HTMLStyleElement documentation>
+newtype HTMLStyleElement = HTMLStyleElement { unHTMLStyleElement :: JSRef }
+
+instance Eq (HTMLStyleElement) where
+  (HTMLStyleElement a) == (HTMLStyleElement b) = js_eq a b
+
+instance PToJSRef HTMLStyleElement where
+  pToJSRef = unHTMLStyleElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLStyleElement where
+  pFromJSRef = HTMLStyleElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLStyleElement where
+  toJSRef = return . unHTMLStyleElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLStyleElement where
+  fromJSRef = return . fmap HTMLStyleElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLStyleElement
+instance IsElement HTMLStyleElement
+instance IsNode HTMLStyleElement
+instance IsEventTarget HTMLStyleElement
+instance IsGObject HTMLStyleElement where
+  toGObject = GObject . unHTMLStyleElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLStyleElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLStyleElement :: IsGObject obj => obj -> HTMLStyleElement
+castToHTMLStyleElement = castTo gTypeHTMLStyleElement "HTMLStyleElement"
+
+foreign import javascript unsafe "window[\"HTMLStyleElement\"]" gTypeHTMLStyleElement :: GType
+#else
+type IsHTMLStyleElement o = HTMLStyleElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLTableCaptionElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableCaptionElement Mozilla HTMLTableCaptionElement documentation>
+newtype HTMLTableCaptionElement = HTMLTableCaptionElement { unHTMLTableCaptionElement :: JSRef }
+
+instance Eq (HTMLTableCaptionElement) where
+  (HTMLTableCaptionElement a) == (HTMLTableCaptionElement b) = js_eq a b
+
+instance PToJSRef HTMLTableCaptionElement where
+  pToJSRef = unHTMLTableCaptionElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLTableCaptionElement where
+  pFromJSRef = HTMLTableCaptionElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLTableCaptionElement where
+  toJSRef = return . unHTMLTableCaptionElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLTableCaptionElement where
+  fromJSRef = return . fmap HTMLTableCaptionElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLTableCaptionElement
+instance IsElement HTMLTableCaptionElement
+instance IsNode HTMLTableCaptionElement
+instance IsEventTarget HTMLTableCaptionElement
+instance IsGObject HTMLTableCaptionElement where
+  toGObject = GObject . unHTMLTableCaptionElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLTableCaptionElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLTableCaptionElement :: IsGObject obj => obj -> HTMLTableCaptionElement
+castToHTMLTableCaptionElement = castTo gTypeHTMLTableCaptionElement "HTMLTableCaptionElement"
+
+foreign import javascript unsafe "window[\"HTMLTableCaptionElement\"]" gTypeHTMLTableCaptionElement :: GType
+#else
+type IsHTMLTableCaptionElement o = HTMLTableCaptionElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLTableCellElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableCellElement Mozilla HTMLTableCellElement documentation>
+newtype HTMLTableCellElement = HTMLTableCellElement { unHTMLTableCellElement :: JSRef }
+
+instance Eq (HTMLTableCellElement) where
+  (HTMLTableCellElement a) == (HTMLTableCellElement b) = js_eq a b
+
+instance PToJSRef HTMLTableCellElement where
+  pToJSRef = unHTMLTableCellElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLTableCellElement where
+  pFromJSRef = HTMLTableCellElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLTableCellElement where
+  toJSRef = return . unHTMLTableCellElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLTableCellElement where
+  fromJSRef = return . fmap HTMLTableCellElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLTableCellElement
+instance IsElement HTMLTableCellElement
+instance IsNode HTMLTableCellElement
+instance IsEventTarget HTMLTableCellElement
+instance IsGObject HTMLTableCellElement where
+  toGObject = GObject . unHTMLTableCellElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLTableCellElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLTableCellElement :: IsGObject obj => obj -> HTMLTableCellElement
+castToHTMLTableCellElement = castTo gTypeHTMLTableCellElement "HTMLTableCellElement"
+
+foreign import javascript unsafe "window[\"HTMLTableCellElement\"]" gTypeHTMLTableCellElement :: GType
+#else
+type IsHTMLTableCellElement o = HTMLTableCellElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLTableColElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableColElement Mozilla HTMLTableColElement documentation>
+newtype HTMLTableColElement = HTMLTableColElement { unHTMLTableColElement :: JSRef }
+
+instance Eq (HTMLTableColElement) where
+  (HTMLTableColElement a) == (HTMLTableColElement b) = js_eq a b
+
+instance PToJSRef HTMLTableColElement where
+  pToJSRef = unHTMLTableColElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLTableColElement where
+  pFromJSRef = HTMLTableColElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLTableColElement where
+  toJSRef = return . unHTMLTableColElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLTableColElement where
+  fromJSRef = return . fmap HTMLTableColElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLTableColElement
+instance IsElement HTMLTableColElement
+instance IsNode HTMLTableColElement
+instance IsEventTarget HTMLTableColElement
+instance IsGObject HTMLTableColElement where
+  toGObject = GObject . unHTMLTableColElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLTableColElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLTableColElement :: IsGObject obj => obj -> HTMLTableColElement
+castToHTMLTableColElement = castTo gTypeHTMLTableColElement "HTMLTableColElement"
+
+foreign import javascript unsafe "window[\"HTMLTableColElement\"]" gTypeHTMLTableColElement :: GType
+#else
+type IsHTMLTableColElement o = HTMLTableColElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLTableElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableElement Mozilla HTMLTableElement documentation>
+newtype HTMLTableElement = HTMLTableElement { unHTMLTableElement :: JSRef }
+
+instance Eq (HTMLTableElement) where
+  (HTMLTableElement a) == (HTMLTableElement b) = js_eq a b
+
+instance PToJSRef HTMLTableElement where
+  pToJSRef = unHTMLTableElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLTableElement where
+  pFromJSRef = HTMLTableElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLTableElement where
+  toJSRef = return . unHTMLTableElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLTableElement where
+  fromJSRef = return . fmap HTMLTableElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLTableElement
+instance IsElement HTMLTableElement
+instance IsNode HTMLTableElement
+instance IsEventTarget HTMLTableElement
+instance IsGObject HTMLTableElement where
+  toGObject = GObject . unHTMLTableElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLTableElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLTableElement :: IsGObject obj => obj -> HTMLTableElement
+castToHTMLTableElement = castTo gTypeHTMLTableElement "HTMLTableElement"
+
+foreign import javascript unsafe "window[\"HTMLTableElement\"]" gTypeHTMLTableElement :: GType
+#else
+type IsHTMLTableElement o = HTMLTableElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLTableRowElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableRowElement Mozilla HTMLTableRowElement documentation>
+newtype HTMLTableRowElement = HTMLTableRowElement { unHTMLTableRowElement :: JSRef }
+
+instance Eq (HTMLTableRowElement) where
+  (HTMLTableRowElement a) == (HTMLTableRowElement b) = js_eq a b
+
+instance PToJSRef HTMLTableRowElement where
+  pToJSRef = unHTMLTableRowElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLTableRowElement where
+  pFromJSRef = HTMLTableRowElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLTableRowElement where
+  toJSRef = return . unHTMLTableRowElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLTableRowElement where
+  fromJSRef = return . fmap HTMLTableRowElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLTableRowElement
+instance IsElement HTMLTableRowElement
+instance IsNode HTMLTableRowElement
+instance IsEventTarget HTMLTableRowElement
+instance IsGObject HTMLTableRowElement where
+  toGObject = GObject . unHTMLTableRowElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLTableRowElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLTableRowElement :: IsGObject obj => obj -> HTMLTableRowElement
+castToHTMLTableRowElement = castTo gTypeHTMLTableRowElement "HTMLTableRowElement"
+
+foreign import javascript unsafe "window[\"HTMLTableRowElement\"]" gTypeHTMLTableRowElement :: GType
+#else
+type IsHTMLTableRowElement o = HTMLTableRowElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLTableSectionElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableSectionElement Mozilla HTMLTableSectionElement documentation>
+newtype HTMLTableSectionElement = HTMLTableSectionElement { unHTMLTableSectionElement :: JSRef }
+
+instance Eq (HTMLTableSectionElement) where
+  (HTMLTableSectionElement a) == (HTMLTableSectionElement b) = js_eq a b
+
+instance PToJSRef HTMLTableSectionElement where
+  pToJSRef = unHTMLTableSectionElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLTableSectionElement where
+  pFromJSRef = HTMLTableSectionElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLTableSectionElement where
+  toJSRef = return . unHTMLTableSectionElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLTableSectionElement where
+  fromJSRef = return . fmap HTMLTableSectionElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLTableSectionElement
+instance IsElement HTMLTableSectionElement
+instance IsNode HTMLTableSectionElement
+instance IsEventTarget HTMLTableSectionElement
+instance IsGObject HTMLTableSectionElement where
+  toGObject = GObject . unHTMLTableSectionElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLTableSectionElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLTableSectionElement :: IsGObject obj => obj -> HTMLTableSectionElement
+castToHTMLTableSectionElement = castTo gTypeHTMLTableSectionElement "HTMLTableSectionElement"
+
+foreign import javascript unsafe "window[\"HTMLTableSectionElement\"]" gTypeHTMLTableSectionElement :: GType
+#else
+type IsHTMLTableSectionElement o = HTMLTableSectionElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLTemplateElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTemplateElement Mozilla HTMLTemplateElement documentation>
+newtype HTMLTemplateElement = HTMLTemplateElement { unHTMLTemplateElement :: JSRef }
+
+instance Eq (HTMLTemplateElement) where
+  (HTMLTemplateElement a) == (HTMLTemplateElement b) = js_eq a b
+
+instance PToJSRef HTMLTemplateElement where
+  pToJSRef = unHTMLTemplateElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLTemplateElement where
+  pFromJSRef = HTMLTemplateElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLTemplateElement where
+  toJSRef = return . unHTMLTemplateElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLTemplateElement where
+  fromJSRef = return . fmap HTMLTemplateElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLTemplateElement
+instance IsElement HTMLTemplateElement
+instance IsNode HTMLTemplateElement
+instance IsEventTarget HTMLTemplateElement
+instance IsGObject HTMLTemplateElement where
+  toGObject = GObject . unHTMLTemplateElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLTemplateElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLTemplateElement :: IsGObject obj => obj -> HTMLTemplateElement
+castToHTMLTemplateElement = castTo gTypeHTMLTemplateElement "HTMLTemplateElement"
+
+foreign import javascript unsafe "window[\"HTMLTemplateElement\"]" gTypeHTMLTemplateElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLTextAreaElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElement Mozilla HTMLTextAreaElement documentation>
+newtype HTMLTextAreaElement = HTMLTextAreaElement { unHTMLTextAreaElement :: JSRef }
+
+instance Eq (HTMLTextAreaElement) where
+  (HTMLTextAreaElement a) == (HTMLTextAreaElement b) = js_eq a b
+
+instance PToJSRef HTMLTextAreaElement where
+  pToJSRef = unHTMLTextAreaElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLTextAreaElement where
+  pFromJSRef = HTMLTextAreaElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLTextAreaElement where
+  toJSRef = return . unHTMLTextAreaElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLTextAreaElement where
+  fromJSRef = return . fmap HTMLTextAreaElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLTextAreaElement
+instance IsElement HTMLTextAreaElement
+instance IsNode HTMLTextAreaElement
+instance IsEventTarget HTMLTextAreaElement
+instance IsGObject HTMLTextAreaElement where
+  toGObject = GObject . unHTMLTextAreaElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLTextAreaElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLTextAreaElement :: IsGObject obj => obj -> HTMLTextAreaElement
+castToHTMLTextAreaElement = castTo gTypeHTMLTextAreaElement "HTMLTextAreaElement"
+
+foreign import javascript unsafe "window[\"HTMLTextAreaElement\"]" gTypeHTMLTextAreaElement :: GType
+#else
+type IsHTMLTextAreaElement o = HTMLTextAreaElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLTitleElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTitleElement Mozilla HTMLTitleElement documentation>
+newtype HTMLTitleElement = HTMLTitleElement { unHTMLTitleElement :: JSRef }
+
+instance Eq (HTMLTitleElement) where
+  (HTMLTitleElement a) == (HTMLTitleElement b) = js_eq a b
+
+instance PToJSRef HTMLTitleElement where
+  pToJSRef = unHTMLTitleElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLTitleElement where
+  pFromJSRef = HTMLTitleElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLTitleElement where
+  toJSRef = return . unHTMLTitleElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLTitleElement where
+  fromJSRef = return . fmap HTMLTitleElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLTitleElement
+instance IsElement HTMLTitleElement
+instance IsNode HTMLTitleElement
+instance IsEventTarget HTMLTitleElement
+instance IsGObject HTMLTitleElement where
+  toGObject = GObject . unHTMLTitleElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLTitleElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLTitleElement :: IsGObject obj => obj -> HTMLTitleElement
+castToHTMLTitleElement = castTo gTypeHTMLTitleElement "HTMLTitleElement"
+
+foreign import javascript unsafe "window[\"HTMLTitleElement\"]" gTypeHTMLTitleElement :: GType
+#else
+type IsHTMLTitleElement o = HTMLTitleElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLTrackElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLTrackElement Mozilla HTMLTrackElement documentation>
+newtype HTMLTrackElement = HTMLTrackElement { unHTMLTrackElement :: JSRef }
+
+instance Eq (HTMLTrackElement) where
+  (HTMLTrackElement a) == (HTMLTrackElement b) = js_eq a b
+
+instance PToJSRef HTMLTrackElement where
+  pToJSRef = unHTMLTrackElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLTrackElement where
+  pFromJSRef = HTMLTrackElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLTrackElement where
+  toJSRef = return . unHTMLTrackElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLTrackElement where
+  fromJSRef = return . fmap HTMLTrackElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLTrackElement
+instance IsElement HTMLTrackElement
+instance IsNode HTMLTrackElement
+instance IsEventTarget HTMLTrackElement
+instance IsGObject HTMLTrackElement where
+  toGObject = GObject . unHTMLTrackElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLTrackElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLTrackElement :: IsGObject obj => obj -> HTMLTrackElement
+castToHTMLTrackElement = castTo gTypeHTMLTrackElement "HTMLTrackElement"
+
+foreign import javascript unsafe "window[\"HTMLTrackElement\"]" gTypeHTMLTrackElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLUListElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLUListElement Mozilla HTMLUListElement documentation>
+newtype HTMLUListElement = HTMLUListElement { unHTMLUListElement :: JSRef }
+
+instance Eq (HTMLUListElement) where
+  (HTMLUListElement a) == (HTMLUListElement b) = js_eq a b
+
+instance PToJSRef HTMLUListElement where
+  pToJSRef = unHTMLUListElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLUListElement where
+  pFromJSRef = HTMLUListElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLUListElement where
+  toJSRef = return . unHTMLUListElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLUListElement where
+  fromJSRef = return . fmap HTMLUListElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLUListElement
+instance IsElement HTMLUListElement
+instance IsNode HTMLUListElement
+instance IsEventTarget HTMLUListElement
+instance IsGObject HTMLUListElement where
+  toGObject = GObject . unHTMLUListElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLUListElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLUListElement :: IsGObject obj => obj -> HTMLUListElement
+castToHTMLUListElement = castTo gTypeHTMLUListElement "HTMLUListElement"
+
+foreign import javascript unsafe "window[\"HTMLUListElement\"]" gTypeHTMLUListElement :: GType
+#else
+type IsHTMLUListElement o = HTMLUListElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLUnknownElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLUnknownElement Mozilla HTMLUnknownElement documentation>
+newtype HTMLUnknownElement = HTMLUnknownElement { unHTMLUnknownElement :: JSRef }
+
+instance Eq (HTMLUnknownElement) where
+  (HTMLUnknownElement a) == (HTMLUnknownElement b) = js_eq a b
+
+instance PToJSRef HTMLUnknownElement where
+  pToJSRef = unHTMLUnknownElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLUnknownElement where
+  pFromJSRef = HTMLUnknownElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLUnknownElement where
+  toJSRef = return . unHTMLUnknownElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLUnknownElement where
+  fromJSRef = return . fmap HTMLUnknownElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLElement HTMLUnknownElement
+instance IsElement HTMLUnknownElement
+instance IsNode HTMLUnknownElement
+instance IsEventTarget HTMLUnknownElement
+instance IsGObject HTMLUnknownElement where
+  toGObject = GObject . unHTMLUnknownElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLUnknownElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLUnknownElement :: IsGObject obj => obj -> HTMLUnknownElement
+castToHTMLUnknownElement = castTo gTypeHTMLUnknownElement "HTMLUnknownElement"
+
+foreign import javascript unsafe "window[\"HTMLUnknownElement\"]" gTypeHTMLUnknownElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HTMLVideoElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.HTMLMediaElement"
+--     * "GHCJS.DOM.HTMLElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement Mozilla HTMLVideoElement documentation>
+newtype HTMLVideoElement = HTMLVideoElement { unHTMLVideoElement :: JSRef }
+
+instance Eq (HTMLVideoElement) where
+  (HTMLVideoElement a) == (HTMLVideoElement b) = js_eq a b
+
+instance PToJSRef HTMLVideoElement where
+  pToJSRef = unHTMLVideoElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HTMLVideoElement where
+  pFromJSRef = HTMLVideoElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HTMLVideoElement where
+  toJSRef = return . unHTMLVideoElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HTMLVideoElement where
+  fromJSRef = return . fmap HTMLVideoElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsHTMLMediaElement HTMLVideoElement
+instance IsHTMLElement HTMLVideoElement
+instance IsElement HTMLVideoElement
+instance IsNode HTMLVideoElement
+instance IsEventTarget HTMLVideoElement
+instance IsGObject HTMLVideoElement where
+  toGObject = GObject . unHTMLVideoElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HTMLVideoElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHTMLVideoElement :: IsGObject obj => obj -> HTMLVideoElement
+castToHTMLVideoElement = castTo gTypeHTMLVideoElement "HTMLVideoElement"
+
+foreign import javascript unsafe "window[\"HTMLVideoElement\"]" gTypeHTMLVideoElement :: GType
+#else
+type IsHTMLVideoElement o = HTMLVideoElementClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.HashChangeEvent".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.Event"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/HashChangeEvent Mozilla HashChangeEvent documentation>
+newtype HashChangeEvent = HashChangeEvent { unHashChangeEvent :: JSRef }
+
+instance Eq (HashChangeEvent) where
+  (HashChangeEvent a) == (HashChangeEvent b) = js_eq a b
+
+instance PToJSRef HashChangeEvent where
+  pToJSRef = unHashChangeEvent
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef HashChangeEvent where
+  pFromJSRef = HashChangeEvent
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef HashChangeEvent where
+  toJSRef = return . unHashChangeEvent
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef HashChangeEvent where
+  fromJSRef = return . fmap HashChangeEvent . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEvent HashChangeEvent
+instance IsGObject HashChangeEvent where
+  toGObject = GObject . unHashChangeEvent
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = HashChangeEvent . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHashChangeEvent :: IsGObject obj => obj -> HashChangeEvent
+castToHashChangeEvent = castTo gTypeHashChangeEvent "HashChangeEvent"
+
+foreign import javascript unsafe "window[\"HashChangeEvent\"]" gTypeHashChangeEvent :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.History".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/History Mozilla History documentation>
+newtype History = History { unHistory :: JSRef }
+
+instance Eq (History) where
+  (History a) == (History b) = js_eq a b
+
+instance PToJSRef History where
+  pToJSRef = unHistory
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef History where
+  pFromJSRef = History
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef History where
+  toJSRef = return . unHistory
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef History where
+  fromJSRef = return . fmap History . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject History where
+  toGObject = GObject . unHistory
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = History . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToHistory :: IsGObject obj => obj -> History
+castToHistory = castTo gTypeHistory "History"
+
+foreign import javascript unsafe "window[\"History\"]" gTypeHistory :: GType
+#else
+type IsHistory o = HistoryClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.IDBAny".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/IDBAny Mozilla IDBAny documentation>
+newtype IDBAny = IDBAny { unIDBAny :: JSRef }
+
+instance Eq (IDBAny) where
+  (IDBAny a) == (IDBAny b) = js_eq a b
+
+instance PToJSRef IDBAny where
+  pToJSRef = unIDBAny
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef IDBAny where
+  pFromJSRef = IDBAny
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef IDBAny where
+  toJSRef = return . unIDBAny
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef IDBAny where
+  fromJSRef = return . fmap IDBAny . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject IDBAny where
+  toGObject = GObject . unIDBAny
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = IDBAny . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToIDBAny :: IsGObject obj => obj -> IDBAny
+castToIDBAny = castTo gTypeIDBAny "IDBAny"
+
+foreign import javascript unsafe "window[\"IDBAny\"]" gTypeIDBAny :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.IDBCursor".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/IDBCursor Mozilla IDBCursor documentation>
+newtype IDBCursor = IDBCursor { unIDBCursor :: JSRef }
+
+instance Eq (IDBCursor) where
+  (IDBCursor a) == (IDBCursor b) = js_eq a b
+
+instance PToJSRef IDBCursor where
+  pToJSRef = unIDBCursor
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef IDBCursor where
+  pFromJSRef = IDBCursor
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef IDBCursor where
+  toJSRef = return . unIDBCursor
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef IDBCursor where
+  fromJSRef = return . fmap IDBCursor . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsGObject o => IsIDBCursor o
+toIDBCursor :: IsIDBCursor o => o -> IDBCursor
+toIDBCursor = unsafeCastGObject . toGObject
+
+instance IsIDBCursor IDBCursor
+instance IsGObject IDBCursor where
+  toGObject = GObject . unIDBCursor
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = IDBCursor . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToIDBCursor :: IsGObject obj => obj -> IDBCursor
+castToIDBCursor = castTo gTypeIDBCursor "IDBCursor"
+
+foreign import javascript unsafe "window[\"IDBCursor\"]" gTypeIDBCursor :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.IDBCursorWithValue".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.IDBCursor"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/IDBCursorWithValue Mozilla IDBCursorWithValue documentation>
+newtype IDBCursorWithValue = IDBCursorWithValue { unIDBCursorWithValue :: JSRef }
+
+instance Eq (IDBCursorWithValue) where
+  (IDBCursorWithValue a) == (IDBCursorWithValue b) = js_eq a b
+
+instance PToJSRef IDBCursorWithValue where
+  pToJSRef = unIDBCursorWithValue
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef IDBCursorWithValue where
+  pFromJSRef = IDBCursorWithValue
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef IDBCursorWithValue where
+  toJSRef = return . unIDBCursorWithValue
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef IDBCursorWithValue where
+  fromJSRef = return . fmap IDBCursorWithValue . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsIDBCursor IDBCursorWithValue
+instance IsGObject IDBCursorWithValue where
+  toGObject = GObject . unIDBCursorWithValue
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = IDBCursorWithValue . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToIDBCursorWithValue :: IsGObject obj => obj -> IDBCursorWithValue
+castToIDBCursorWithValue = castTo gTypeIDBCursorWithValue "IDBCursorWithValue"
+
+foreign import javascript unsafe "window[\"IDBCursorWithValue\"]" gTypeIDBCursorWithValue :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.IDBDatabase".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/IDBDatabase Mozilla IDBDatabase documentation>
+newtype IDBDatabase = IDBDatabase { unIDBDatabase :: JSRef }
+
+instance Eq (IDBDatabase) where
+  (IDBDatabase a) == (IDBDatabase b) = js_eq a b
+
+instance PToJSRef IDBDatabase where
+  pToJSRef = unIDBDatabase
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef IDBDatabase where
+  pFromJSRef = IDBDatabase
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef IDBDatabase where
+  toJSRef = return . unIDBDatabase
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef IDBDatabase where
+  fromJSRef = return . fmap IDBDatabase . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEventTarget IDBDatabase
+instance IsGObject IDBDatabase where
+  toGObject = GObject . unIDBDatabase
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = IDBDatabase . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToIDBDatabase :: IsGObject obj => obj -> IDBDatabase
+castToIDBDatabase = castTo gTypeIDBDatabase "IDBDatabase"
+
+foreign import javascript unsafe "window[\"IDBDatabase\"]" gTypeIDBDatabase :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.IDBFactory".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/IDBFactory Mozilla IDBFactory documentation>
+newtype IDBFactory = IDBFactory { unIDBFactory :: JSRef }
+
+instance Eq (IDBFactory) where
+  (IDBFactory a) == (IDBFactory b) = js_eq a b
+
+instance PToJSRef IDBFactory where
+  pToJSRef = unIDBFactory
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef IDBFactory where
+  pFromJSRef = IDBFactory
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef IDBFactory where
+  toJSRef = return . unIDBFactory
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef IDBFactory where
+  fromJSRef = return . fmap IDBFactory . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject IDBFactory where
+  toGObject = GObject . unIDBFactory
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = IDBFactory . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToIDBFactory :: IsGObject obj => obj -> IDBFactory
+castToIDBFactory = castTo gTypeIDBFactory "IDBFactory"
+
+foreign import javascript unsafe "window[\"IDBFactory\"]" gTypeIDBFactory :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.IDBIndex".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/IDBIndex Mozilla IDBIndex documentation>
+newtype IDBIndex = IDBIndex { unIDBIndex :: JSRef }
+
+instance Eq (IDBIndex) where
+  (IDBIndex a) == (IDBIndex b) = js_eq a b
+
+instance PToJSRef IDBIndex where
+  pToJSRef = unIDBIndex
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef IDBIndex where
+  pFromJSRef = IDBIndex
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef IDBIndex where
+  toJSRef = return . unIDBIndex
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef IDBIndex where
+  fromJSRef = return . fmap IDBIndex . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject IDBIndex where
+  toGObject = GObject . unIDBIndex
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = IDBIndex . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToIDBIndex :: IsGObject obj => obj -> IDBIndex
+castToIDBIndex = castTo gTypeIDBIndex "IDBIndex"
+
+foreign import javascript unsafe "window[\"IDBIndex\"]" gTypeIDBIndex :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.IDBKeyRange".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/IDBKeyRange Mozilla IDBKeyRange documentation>
+newtype IDBKeyRange = IDBKeyRange { unIDBKeyRange :: JSRef }
+
+instance Eq (IDBKeyRange) where
+  (IDBKeyRange a) == (IDBKeyRange b) = js_eq a b
+
+instance PToJSRef IDBKeyRange where
+  pToJSRef = unIDBKeyRange
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef IDBKeyRange where
+  pFromJSRef = IDBKeyRange
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef IDBKeyRange where
+  toJSRef = return . unIDBKeyRange
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef IDBKeyRange where
+  fromJSRef = return . fmap IDBKeyRange . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject IDBKeyRange where
+  toGObject = GObject . unIDBKeyRange
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = IDBKeyRange . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToIDBKeyRange :: IsGObject obj => obj -> IDBKeyRange
+castToIDBKeyRange = castTo gTypeIDBKeyRange "IDBKeyRange"
+
+foreign import javascript unsafe "window[\"IDBKeyRange\"]" gTypeIDBKeyRange :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.IDBObjectStore".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/IDBObjectStore Mozilla IDBObjectStore documentation>
+newtype IDBObjectStore = IDBObjectStore { unIDBObjectStore :: JSRef }
+
+instance Eq (IDBObjectStore) where
+  (IDBObjectStore a) == (IDBObjectStore b) = js_eq a b
+
+instance PToJSRef IDBObjectStore where
+  pToJSRef = unIDBObjectStore
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef IDBObjectStore where
+  pFromJSRef = IDBObjectStore
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef IDBObjectStore where
+  toJSRef = return . unIDBObjectStore
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef IDBObjectStore where
+  fromJSRef = return . fmap IDBObjectStore . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject IDBObjectStore where
+  toGObject = GObject . unIDBObjectStore
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = IDBObjectStore . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToIDBObjectStore :: IsGObject obj => obj -> IDBObjectStore
+castToIDBObjectStore = castTo gTypeIDBObjectStore "IDBObjectStore"
+
+foreign import javascript unsafe "window[\"IDBObjectStore\"]" gTypeIDBObjectStore :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.IDBOpenDBRequest".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.IDBRequest"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/IDBOpenDBRequest Mozilla IDBOpenDBRequest documentation>
+newtype IDBOpenDBRequest = IDBOpenDBRequest { unIDBOpenDBRequest :: JSRef }
+
+instance Eq (IDBOpenDBRequest) where
+  (IDBOpenDBRequest a) == (IDBOpenDBRequest b) = js_eq a b
+
+instance PToJSRef IDBOpenDBRequest where
+  pToJSRef = unIDBOpenDBRequest
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef IDBOpenDBRequest where
+  pFromJSRef = IDBOpenDBRequest
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef IDBOpenDBRequest where
+  toJSRef = return . unIDBOpenDBRequest
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef IDBOpenDBRequest where
+  fromJSRef = return . fmap IDBOpenDBRequest . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsIDBRequest IDBOpenDBRequest
+instance IsEventTarget IDBOpenDBRequest
+instance IsGObject IDBOpenDBRequest where
+  toGObject = GObject . unIDBOpenDBRequest
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = IDBOpenDBRequest . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToIDBOpenDBRequest :: IsGObject obj => obj -> IDBOpenDBRequest
+castToIDBOpenDBRequest = castTo gTypeIDBOpenDBRequest "IDBOpenDBRequest"
+
+foreign import javascript unsafe "window[\"IDBOpenDBRequest\"]" gTypeIDBOpenDBRequest :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.IDBRequest".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/IDBRequest Mozilla IDBRequest documentation>
+newtype IDBRequest = IDBRequest { unIDBRequest :: JSRef }
+
+instance Eq (IDBRequest) where
+  (IDBRequest a) == (IDBRequest b) = js_eq a b
+
+instance PToJSRef IDBRequest where
+  pToJSRef = unIDBRequest
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef IDBRequest where
+  pFromJSRef = IDBRequest
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef IDBRequest where
+  toJSRef = return . unIDBRequest
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef IDBRequest where
+  fromJSRef = return . fmap IDBRequest . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsEventTarget o => IsIDBRequest o
+toIDBRequest :: IsIDBRequest o => o -> IDBRequest
+toIDBRequest = unsafeCastGObject . toGObject
+
+instance IsIDBRequest IDBRequest
+instance IsEventTarget IDBRequest
+instance IsGObject IDBRequest where
+  toGObject = GObject . unIDBRequest
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = IDBRequest . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToIDBRequest :: IsGObject obj => obj -> IDBRequest
+castToIDBRequest = castTo gTypeIDBRequest "IDBRequest"
+
+foreign import javascript unsafe "window[\"IDBRequest\"]" gTypeIDBRequest :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.IDBTransaction".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/IDBTransaction Mozilla IDBTransaction documentation>
+newtype IDBTransaction = IDBTransaction { unIDBTransaction :: JSRef }
+
+instance Eq (IDBTransaction) where
+  (IDBTransaction a) == (IDBTransaction b) = js_eq a b
+
+instance PToJSRef IDBTransaction where
+  pToJSRef = unIDBTransaction
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef IDBTransaction where
+  pFromJSRef = IDBTransaction
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef IDBTransaction where
+  toJSRef = return . unIDBTransaction
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef IDBTransaction where
+  fromJSRef = return . fmap IDBTransaction . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEventTarget IDBTransaction
+instance IsGObject IDBTransaction where
+  toGObject = GObject . unIDBTransaction
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = IDBTransaction . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToIDBTransaction :: IsGObject obj => obj -> IDBTransaction
+castToIDBTransaction = castTo gTypeIDBTransaction "IDBTransaction"
+
+foreign import javascript unsafe "window[\"IDBTransaction\"]" gTypeIDBTransaction :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.IDBVersionChangeEvent".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.Event"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/IDBVersionChangeEvent Mozilla IDBVersionChangeEvent documentation>
+newtype IDBVersionChangeEvent = IDBVersionChangeEvent { unIDBVersionChangeEvent :: JSRef }
+
+instance Eq (IDBVersionChangeEvent) where
+  (IDBVersionChangeEvent a) == (IDBVersionChangeEvent b) = js_eq a b
+
+instance PToJSRef IDBVersionChangeEvent where
+  pToJSRef = unIDBVersionChangeEvent
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef IDBVersionChangeEvent where
+  pFromJSRef = IDBVersionChangeEvent
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef IDBVersionChangeEvent where
+  toJSRef = return . unIDBVersionChangeEvent
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef IDBVersionChangeEvent where
+  fromJSRef = return . fmap IDBVersionChangeEvent . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEvent IDBVersionChangeEvent
+instance IsGObject IDBVersionChangeEvent where
+  toGObject = GObject . unIDBVersionChangeEvent
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = IDBVersionChangeEvent . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToIDBVersionChangeEvent :: IsGObject obj => obj -> IDBVersionChangeEvent
+castToIDBVersionChangeEvent = castTo gTypeIDBVersionChangeEvent "IDBVersionChangeEvent"
+
+foreign import javascript unsafe "window[\"IDBVersionChangeEvent\"]" gTypeIDBVersionChangeEvent :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.ImageData".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/ImageData Mozilla ImageData documentation>
+newtype ImageData = ImageData { unImageData :: JSRef }
+
+instance Eq (ImageData) where
+  (ImageData a) == (ImageData b) = js_eq a b
+
+instance PToJSRef ImageData where
+  pToJSRef = unImageData
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef ImageData where
+  pFromJSRef = ImageData
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef ImageData where
+  toJSRef = return . unImageData
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef ImageData where
+  fromJSRef = return . fmap ImageData . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject ImageData where
+  toGObject = GObject . unImageData
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = ImageData . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToImageData :: IsGObject obj => obj -> ImageData
+castToImageData = castTo gTypeImageData "ImageData"
+
+foreign import javascript unsafe "window[\"ImageData\"]" gTypeImageData :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.InspectorFrontendHost".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/InspectorFrontendHost Mozilla InspectorFrontendHost documentation>
+newtype InspectorFrontendHost = InspectorFrontendHost { unInspectorFrontendHost :: JSRef }
+
+instance Eq (InspectorFrontendHost) where
+  (InspectorFrontendHost a) == (InspectorFrontendHost b) = js_eq a b
+
+instance PToJSRef InspectorFrontendHost where
+  pToJSRef = unInspectorFrontendHost
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef InspectorFrontendHost where
+  pFromJSRef = InspectorFrontendHost
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef InspectorFrontendHost where
+  toJSRef = return . unInspectorFrontendHost
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef InspectorFrontendHost where
+  fromJSRef = return . fmap InspectorFrontendHost . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject InspectorFrontendHost where
+  toGObject = GObject . unInspectorFrontendHost
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = InspectorFrontendHost . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToInspectorFrontendHost :: IsGObject obj => obj -> InspectorFrontendHost
+castToInspectorFrontendHost = castTo gTypeInspectorFrontendHost "InspectorFrontendHost"
+
+foreign import javascript unsafe "window[\"InspectorFrontendHost\"]" gTypeInspectorFrontendHost :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.InternalSettings".
+-- Base interface functions are in:
+--
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/InternalSettings Mozilla InternalSettings documentation>
+newtype InternalSettings = InternalSettings { unInternalSettings :: JSRef }
+
+instance Eq (InternalSettings) where
+  (InternalSettings a) == (InternalSettings b) = js_eq a b
+
+instance PToJSRef InternalSettings where
+  pToJSRef = unInternalSettings
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef InternalSettings where
+  pFromJSRef = InternalSettings
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef InternalSettings where
+  toJSRef = return . unInternalSettings
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef InternalSettings where
+  fromJSRef = return . fmap InternalSettings . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject InternalSettings where
+  toGObject = GObject . unInternalSettings
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = InternalSettings . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToInternalSettings :: IsGObject obj => obj -> InternalSettings
+castToInternalSettings = castTo gTypeInternalSettings "InternalSettings"
+
+foreign import javascript unsafe "window[\"InternalSettings\"]" gTypeInternalSettings :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.Internals".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/Internals Mozilla Internals documentation>
+newtype Internals = Internals { unInternals :: JSRef }
+
+instance Eq (Internals) where
+  (Internals a) == (Internals b) = js_eq a b
+
+instance PToJSRef Internals where
+  pToJSRef = unInternals
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef Internals where
+  pFromJSRef = Internals
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef Internals where
+  toJSRef = return . unInternals
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef Internals where
+  fromJSRef = return . fmap Internals . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject Internals where
+  toGObject = GObject . unInternals
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = Internals . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToInternals :: IsGObject obj => obj -> Internals
+castToInternals = castTo gTypeInternals "Internals"
+
+foreign import javascript unsafe "window[\"Internals\"]" gTypeInternals :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.KeyboardEvent".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.UIEvent"
+--     * "GHCJS.DOM.Event"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent Mozilla KeyboardEvent documentation>
+newtype KeyboardEvent = KeyboardEvent { unKeyboardEvent :: JSRef }
+
+instance Eq (KeyboardEvent) where
+  (KeyboardEvent a) == (KeyboardEvent b) = js_eq a b
+
+instance PToJSRef KeyboardEvent where
+  pToJSRef = unKeyboardEvent
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef KeyboardEvent where
+  pFromJSRef = KeyboardEvent
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef KeyboardEvent where
+  toJSRef = return . unKeyboardEvent
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef KeyboardEvent where
+  fromJSRef = return . fmap KeyboardEvent . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsUIEvent KeyboardEvent
+instance IsEvent KeyboardEvent
+instance IsGObject KeyboardEvent where
+  toGObject = GObject . unKeyboardEvent
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = KeyboardEvent . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToKeyboardEvent :: IsGObject obj => obj -> KeyboardEvent
+castToKeyboardEvent = castTo gTypeKeyboardEvent "KeyboardEvent"
+
+foreign import javascript unsafe "window[\"KeyboardEvent\"]" gTypeKeyboardEvent :: GType
+#else
+#ifndef USE_OLD_WEBKIT
+type IsKeyboardEvent o = KeyboardEventClass o
+#endif
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.Location".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/Location Mozilla Location documentation>
+newtype Location = Location { unLocation :: JSRef }
+
+instance Eq (Location) where
+  (Location a) == (Location b) = js_eq a b
+
+instance PToJSRef Location where
+  pToJSRef = unLocation
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef Location where
+  pFromJSRef = Location
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef Location where
+  toJSRef = return . unLocation
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef Location where
+  fromJSRef = return . fmap Location . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject Location where
+  toGObject = GObject . unLocation
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = Location . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToLocation :: IsGObject obj => obj -> Location
+castToLocation = castTo gTypeLocation "Location"
+
+foreign import javascript unsafe "window[\"Location\"]" gTypeLocation :: GType
+#else
+type IsLocation o = LocationClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.MallocStatistics".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/MallocStatistics Mozilla MallocStatistics documentation>
+newtype MallocStatistics = MallocStatistics { unMallocStatistics :: JSRef }
+
+instance Eq (MallocStatistics) where
+  (MallocStatistics a) == (MallocStatistics b) = js_eq a b
+
+instance PToJSRef MallocStatistics where
+  pToJSRef = unMallocStatistics
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef MallocStatistics where
+  pFromJSRef = MallocStatistics
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef MallocStatistics where
+  toJSRef = return . unMallocStatistics
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef MallocStatistics where
+  fromJSRef = return . fmap MallocStatistics . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject MallocStatistics where
+  toGObject = GObject . unMallocStatistics
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = MallocStatistics . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToMallocStatistics :: IsGObject obj => obj -> MallocStatistics
+castToMallocStatistics = castTo gTypeMallocStatistics "MallocStatistics"
+
+foreign import javascript unsafe "window[\"MallocStatistics\"]" gTypeMallocStatistics :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.MediaController".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/MediaController Mozilla MediaController documentation>
+newtype MediaController = MediaController { unMediaController :: JSRef }
+
+instance Eq (MediaController) where
+  (MediaController a) == (MediaController b) = js_eq a b
+
+instance PToJSRef MediaController where
+  pToJSRef = unMediaController
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef MediaController where
+  pFromJSRef = MediaController
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef MediaController where
+  toJSRef = return . unMediaController
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef MediaController where
+  fromJSRef = return . fmap MediaController . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEventTarget MediaController
+instance IsGObject MediaController where
+  toGObject = GObject . unMediaController
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = MediaController . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToMediaController :: IsGObject obj => obj -> MediaController
+castToMediaController = castTo gTypeMediaController "MediaController"
+
+foreign import javascript unsafe "window[\"MediaController\"]" gTypeMediaController :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.MediaControlsHost".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/MediaControlsHost Mozilla MediaControlsHost documentation>
+newtype MediaControlsHost = MediaControlsHost { unMediaControlsHost :: JSRef }
+
+instance Eq (MediaControlsHost) where
+  (MediaControlsHost a) == (MediaControlsHost b) = js_eq a b
+
+instance PToJSRef MediaControlsHost where
+  pToJSRef = unMediaControlsHost
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef MediaControlsHost where
+  pFromJSRef = MediaControlsHost
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef MediaControlsHost where
+  toJSRef = return . unMediaControlsHost
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef MediaControlsHost where
+  fromJSRef = return . fmap MediaControlsHost . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject MediaControlsHost where
+  toGObject = GObject . unMediaControlsHost
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = MediaControlsHost . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToMediaControlsHost :: IsGObject obj => obj -> MediaControlsHost
+castToMediaControlsHost = castTo gTypeMediaControlsHost "MediaControlsHost"
+
+foreign import javascript unsafe "window[\"MediaControlsHost\"]" gTypeMediaControlsHost :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.MediaElementAudioSourceNode".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.AudioNode"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/MediaElementAudioSourceNode Mozilla MediaElementAudioSourceNode documentation>
+newtype MediaElementAudioSourceNode = MediaElementAudioSourceNode { unMediaElementAudioSourceNode :: JSRef }
+
+instance Eq (MediaElementAudioSourceNode) where
+  (MediaElementAudioSourceNode a) == (MediaElementAudioSourceNode b) = js_eq a b
+
+instance PToJSRef MediaElementAudioSourceNode where
+  pToJSRef = unMediaElementAudioSourceNode
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef MediaElementAudioSourceNode where
+  pFromJSRef = MediaElementAudioSourceNode
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef MediaElementAudioSourceNode where
+  toJSRef = return . unMediaElementAudioSourceNode
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef MediaElementAudioSourceNode where
+  fromJSRef = return . fmap MediaElementAudioSourceNode . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsAudioNode MediaElementAudioSourceNode
+instance IsEventTarget MediaElementAudioSourceNode
+instance IsGObject MediaElementAudioSourceNode where
+  toGObject = GObject . unMediaElementAudioSourceNode
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = MediaElementAudioSourceNode . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToMediaElementAudioSourceNode :: IsGObject obj => obj -> MediaElementAudioSourceNode
+castToMediaElementAudioSourceNode = castTo gTypeMediaElementAudioSourceNode "MediaElementAudioSourceNode"
+
+foreign import javascript unsafe "window[\"MediaElementAudioSourceNode\"]" gTypeMediaElementAudioSourceNode :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.MediaError".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/MediaError Mozilla MediaError documentation>
+newtype MediaError = MediaError { unMediaError :: JSRef }
+
+instance Eq (MediaError) where
+  (MediaError a) == (MediaError b) = js_eq a b
+
+instance PToJSRef MediaError where
+  pToJSRef = unMediaError
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef MediaError where
+  pFromJSRef = MediaError
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef MediaError where
+  toJSRef = return . unMediaError
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef MediaError where
+  fromJSRef = return . fmap MediaError . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject MediaError where
+  toGObject = GObject . unMediaError
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = MediaError . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToMediaError :: IsGObject obj => obj -> MediaError
+castToMediaError = castTo gTypeMediaError "MediaError"
+
+foreign import javascript unsafe "window[\"MediaError\"]" gTypeMediaError :: GType
+#else
+type IsMediaError o = MediaErrorClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.MediaKeyError".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/WebKitMediaKeyError Mozilla WebKitMediaKeyError documentation>
+newtype MediaKeyError = MediaKeyError { unMediaKeyError :: JSRef }
+
+instance Eq (MediaKeyError) where
+  (MediaKeyError a) == (MediaKeyError b) = js_eq a b
+
+instance PToJSRef MediaKeyError where
+  pToJSRef = unMediaKeyError
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef MediaKeyError where
+  pFromJSRef = MediaKeyError
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef MediaKeyError where
+  toJSRef = return . unMediaKeyError
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef MediaKeyError where
+  fromJSRef = return . fmap MediaKeyError . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject MediaKeyError where
+  toGObject = GObject . unMediaKeyError
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = MediaKeyError . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToMediaKeyError :: IsGObject obj => obj -> MediaKeyError
+castToMediaKeyError = castTo gTypeMediaKeyError "MediaKeyError"
+
+foreign import javascript unsafe "window[\"WebKitMediaKeyError\"]" gTypeMediaKeyError :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.MediaKeyEvent".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.Event"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/MediaKeyEvent Mozilla MediaKeyEvent documentation>
+newtype MediaKeyEvent = MediaKeyEvent { unMediaKeyEvent :: JSRef }
+
+instance Eq (MediaKeyEvent) where
+  (MediaKeyEvent a) == (MediaKeyEvent b) = js_eq a b
+
+instance PToJSRef MediaKeyEvent where
+  pToJSRef = unMediaKeyEvent
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef MediaKeyEvent where
+  pFromJSRef = MediaKeyEvent
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef MediaKeyEvent where
+  toJSRef = return . unMediaKeyEvent
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef MediaKeyEvent where
+  fromJSRef = return . fmap MediaKeyEvent . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEvent MediaKeyEvent
+instance IsGObject MediaKeyEvent where
+  toGObject = GObject . unMediaKeyEvent
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = MediaKeyEvent . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToMediaKeyEvent :: IsGObject obj => obj -> MediaKeyEvent
+castToMediaKeyEvent = castTo gTypeMediaKeyEvent "MediaKeyEvent"
+
+foreign import javascript unsafe "window[\"MediaKeyEvent\"]" gTypeMediaKeyEvent :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.MediaKeyMessageEvent".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.Event"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/WebKitMediaKeyMessageEvent Mozilla WebKitMediaKeyMessageEvent documentation>
+newtype MediaKeyMessageEvent = MediaKeyMessageEvent { unMediaKeyMessageEvent :: JSRef }
+
+instance Eq (MediaKeyMessageEvent) where
+  (MediaKeyMessageEvent a) == (MediaKeyMessageEvent b) = js_eq a b
+
+instance PToJSRef MediaKeyMessageEvent where
+  pToJSRef = unMediaKeyMessageEvent
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef MediaKeyMessageEvent where
+  pFromJSRef = MediaKeyMessageEvent
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef MediaKeyMessageEvent where
+  toJSRef = return . unMediaKeyMessageEvent
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef MediaKeyMessageEvent where
+  fromJSRef = return . fmap MediaKeyMessageEvent . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEvent MediaKeyMessageEvent
+instance IsGObject MediaKeyMessageEvent where
+  toGObject = GObject . unMediaKeyMessageEvent
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = MediaKeyMessageEvent . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToMediaKeyMessageEvent :: IsGObject obj => obj -> MediaKeyMessageEvent
+castToMediaKeyMessageEvent = castTo gTypeMediaKeyMessageEvent "MediaKeyMessageEvent"
+
+foreign import javascript unsafe "window[\"WebKitMediaKeyMessageEvent\"]" gTypeMediaKeyMessageEvent :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.MediaKeyNeededEvent".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.Event"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/MediaKeyNeededEvent Mozilla MediaKeyNeededEvent documentation>
+newtype MediaKeyNeededEvent = MediaKeyNeededEvent { unMediaKeyNeededEvent :: JSRef }
+
+instance Eq (MediaKeyNeededEvent) where
+  (MediaKeyNeededEvent a) == (MediaKeyNeededEvent b) = js_eq a b
+
+instance PToJSRef MediaKeyNeededEvent where
+  pToJSRef = unMediaKeyNeededEvent
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef MediaKeyNeededEvent where
+  pFromJSRef = MediaKeyNeededEvent
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef MediaKeyNeededEvent where
+  toJSRef = return . unMediaKeyNeededEvent
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef MediaKeyNeededEvent where
+  fromJSRef = return . fmap MediaKeyNeededEvent . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEvent MediaKeyNeededEvent
+instance IsGObject MediaKeyNeededEvent where
+  toGObject = GObject . unMediaKeyNeededEvent
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = MediaKeyNeededEvent . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToMediaKeyNeededEvent :: IsGObject obj => obj -> MediaKeyNeededEvent
+castToMediaKeyNeededEvent = castTo gTypeMediaKeyNeededEvent "MediaKeyNeededEvent"
+
+foreign import javascript unsafe "window[\"MediaKeyNeededEvent\"]" gTypeMediaKeyNeededEvent :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.MediaKeySession".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/WebKitMediaKeySession Mozilla WebKitMediaKeySession documentation>
+newtype MediaKeySession = MediaKeySession { unMediaKeySession :: JSRef }
+
+instance Eq (MediaKeySession) where
+  (MediaKeySession a) == (MediaKeySession b) = js_eq a b
+
+instance PToJSRef MediaKeySession where
+  pToJSRef = unMediaKeySession
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef MediaKeySession where
+  pFromJSRef = MediaKeySession
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef MediaKeySession where
+  toJSRef = return . unMediaKeySession
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef MediaKeySession where
+  fromJSRef = return . fmap MediaKeySession . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEventTarget MediaKeySession
+instance IsGObject MediaKeySession where
+  toGObject = GObject . unMediaKeySession
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = MediaKeySession . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToMediaKeySession :: IsGObject obj => obj -> MediaKeySession
+castToMediaKeySession = castTo gTypeMediaKeySession "MediaKeySession"
+
+foreign import javascript unsafe "window[\"WebKitMediaKeySession\"]" gTypeMediaKeySession :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.MediaKeys".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/WebKitMediaKeys Mozilla WebKitMediaKeys documentation>
+newtype MediaKeys = MediaKeys { unMediaKeys :: JSRef }
+
+instance Eq (MediaKeys) where
+  (MediaKeys a) == (MediaKeys b) = js_eq a b
+
+instance PToJSRef MediaKeys where
+  pToJSRef = unMediaKeys
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef MediaKeys where
+  pFromJSRef = MediaKeys
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef MediaKeys where
+  toJSRef = return . unMediaKeys
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef MediaKeys where
+  fromJSRef = return . fmap MediaKeys . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject MediaKeys where
+  toGObject = GObject . unMediaKeys
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = MediaKeys . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToMediaKeys :: IsGObject obj => obj -> MediaKeys
+castToMediaKeys = castTo gTypeMediaKeys "MediaKeys"
+
+foreign import javascript unsafe "window[\"WebKitMediaKeys\"]" gTypeMediaKeys :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.MediaList".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/MediaList Mozilla MediaList documentation>
+newtype MediaList = MediaList { unMediaList :: JSRef }
+
+instance Eq (MediaList) where
+  (MediaList a) == (MediaList b) = js_eq a b
+
+instance PToJSRef MediaList where
+  pToJSRef = unMediaList
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef MediaList where
+  pFromJSRef = MediaList
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef MediaList where
+  toJSRef = return . unMediaList
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef MediaList where
+  fromJSRef = return . fmap MediaList . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject MediaList where
+  toGObject = GObject . unMediaList
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = MediaList . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToMediaList :: IsGObject obj => obj -> MediaList
+castToMediaList = castTo gTypeMediaList "MediaList"
+
+foreign import javascript unsafe "window[\"MediaList\"]" gTypeMediaList :: GType
+#else
+type IsMediaList o = MediaListClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.MediaQueryList".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/MediaQueryList Mozilla MediaQueryList documentation>
+newtype MediaQueryList = MediaQueryList { unMediaQueryList :: JSRef }
+
+instance Eq (MediaQueryList) where
+  (MediaQueryList a) == (MediaQueryList b) = js_eq a b
+
+instance PToJSRef MediaQueryList where
+  pToJSRef = unMediaQueryList
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef MediaQueryList where
+  pFromJSRef = MediaQueryList
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef MediaQueryList where
+  toJSRef = return . unMediaQueryList
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef MediaQueryList where
+  fromJSRef = return . fmap MediaQueryList . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject MediaQueryList where
+  toGObject = GObject . unMediaQueryList
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = MediaQueryList . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToMediaQueryList :: IsGObject obj => obj -> MediaQueryList
+castToMediaQueryList = castTo gTypeMediaQueryList "MediaQueryList"
+
+foreign import javascript unsafe "window[\"MediaQueryList\"]" gTypeMediaQueryList :: GType
+#else
+type IsMediaQueryList o = MediaQueryListClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.MediaSource".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/MediaSource Mozilla MediaSource documentation>
+newtype MediaSource = MediaSource { unMediaSource :: JSRef }
+
+instance Eq (MediaSource) where
+  (MediaSource a) == (MediaSource b) = js_eq a b
+
+instance PToJSRef MediaSource where
+  pToJSRef = unMediaSource
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef MediaSource where
+  pFromJSRef = MediaSource
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef MediaSource where
+  toJSRef = return . unMediaSource
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef MediaSource where
+  fromJSRef = return . fmap MediaSource . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEventTarget MediaSource
+instance IsGObject MediaSource where
+  toGObject = GObject . unMediaSource
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = MediaSource . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToMediaSource :: IsGObject obj => obj -> MediaSource
+castToMediaSource = castTo gTypeMediaSource "MediaSource"
+
+foreign import javascript unsafe "window[\"MediaSource\"]" gTypeMediaSource :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.MediaSourceStates".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/MediaSourceStates Mozilla MediaSourceStates documentation>
+newtype MediaSourceStates = MediaSourceStates { unMediaSourceStates :: JSRef }
+
+instance Eq (MediaSourceStates) where
+  (MediaSourceStates a) == (MediaSourceStates b) = js_eq a b
+
+instance PToJSRef MediaSourceStates where
+  pToJSRef = unMediaSourceStates
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef MediaSourceStates where
+  pFromJSRef = MediaSourceStates
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef MediaSourceStates where
+  toJSRef = return . unMediaSourceStates
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef MediaSourceStates where
+  fromJSRef = return . fmap MediaSourceStates . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject MediaSourceStates where
+  toGObject = GObject . unMediaSourceStates
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = MediaSourceStates . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToMediaSourceStates :: IsGObject obj => obj -> MediaSourceStates
+castToMediaSourceStates = castTo gTypeMediaSourceStates "MediaSourceStates"
+
+foreign import javascript unsafe "window[\"MediaSourceStates\"]" gTypeMediaSourceStates :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.MediaStream".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/webkitMediaStream Mozilla webkitMediaStream documentation>
+newtype MediaStream = MediaStream { unMediaStream :: JSRef }
+
+instance Eq (MediaStream) where
+  (MediaStream a) == (MediaStream b) = js_eq a b
+
+instance PToJSRef MediaStream where
+  pToJSRef = unMediaStream
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef MediaStream where
+  pFromJSRef = MediaStream
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef MediaStream where
+  toJSRef = return . unMediaStream
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef MediaStream where
+  fromJSRef = return . fmap MediaStream . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEventTarget MediaStream
+instance IsGObject MediaStream where
+  toGObject = GObject . unMediaStream
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = MediaStream . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToMediaStream :: IsGObject obj => obj -> MediaStream
+castToMediaStream = castTo gTypeMediaStream "MediaStream"
+
+foreign import javascript unsafe "window[\"webkitMediaStream\"]" gTypeMediaStream :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.MediaStreamAudioDestinationNode".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.AudioNode"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamAudioDestinationNode Mozilla MediaStreamAudioDestinationNode documentation>
+newtype MediaStreamAudioDestinationNode = MediaStreamAudioDestinationNode { unMediaStreamAudioDestinationNode :: JSRef }
+
+instance Eq (MediaStreamAudioDestinationNode) where
+  (MediaStreamAudioDestinationNode a) == (MediaStreamAudioDestinationNode b) = js_eq a b
+
+instance PToJSRef MediaStreamAudioDestinationNode where
+  pToJSRef = unMediaStreamAudioDestinationNode
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef MediaStreamAudioDestinationNode where
+  pFromJSRef = MediaStreamAudioDestinationNode
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef MediaStreamAudioDestinationNode where
+  toJSRef = return . unMediaStreamAudioDestinationNode
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef MediaStreamAudioDestinationNode where
+  fromJSRef = return . fmap MediaStreamAudioDestinationNode . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsAudioNode MediaStreamAudioDestinationNode
+instance IsEventTarget MediaStreamAudioDestinationNode
+instance IsGObject MediaStreamAudioDestinationNode where
+  toGObject = GObject . unMediaStreamAudioDestinationNode
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = MediaStreamAudioDestinationNode . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToMediaStreamAudioDestinationNode :: IsGObject obj => obj -> MediaStreamAudioDestinationNode
+castToMediaStreamAudioDestinationNode = castTo gTypeMediaStreamAudioDestinationNode "MediaStreamAudioDestinationNode"
+
+foreign import javascript unsafe "window[\"MediaStreamAudioDestinationNode\"]" gTypeMediaStreamAudioDestinationNode :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.MediaStreamAudioSourceNode".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.AudioNode"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamAudioSourceNode Mozilla MediaStreamAudioSourceNode documentation>
+newtype MediaStreamAudioSourceNode = MediaStreamAudioSourceNode { unMediaStreamAudioSourceNode :: JSRef }
+
+instance Eq (MediaStreamAudioSourceNode) where
+  (MediaStreamAudioSourceNode a) == (MediaStreamAudioSourceNode b) = js_eq a b
+
+instance PToJSRef MediaStreamAudioSourceNode where
+  pToJSRef = unMediaStreamAudioSourceNode
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef MediaStreamAudioSourceNode where
+  pFromJSRef = MediaStreamAudioSourceNode
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef MediaStreamAudioSourceNode where
+  toJSRef = return . unMediaStreamAudioSourceNode
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef MediaStreamAudioSourceNode where
+  fromJSRef = return . fmap MediaStreamAudioSourceNode . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsAudioNode MediaStreamAudioSourceNode
+instance IsEventTarget MediaStreamAudioSourceNode
+instance IsGObject MediaStreamAudioSourceNode where
+  toGObject = GObject . unMediaStreamAudioSourceNode
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = MediaStreamAudioSourceNode . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToMediaStreamAudioSourceNode :: IsGObject obj => obj -> MediaStreamAudioSourceNode
+castToMediaStreamAudioSourceNode = castTo gTypeMediaStreamAudioSourceNode "MediaStreamAudioSourceNode"
+
+foreign import javascript unsafe "window[\"MediaStreamAudioSourceNode\"]" gTypeMediaStreamAudioSourceNode :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.MediaStreamCapabilities".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamCapabilities Mozilla MediaStreamCapabilities documentation>
+newtype MediaStreamCapabilities = MediaStreamCapabilities { unMediaStreamCapabilities :: JSRef }
+
+instance Eq (MediaStreamCapabilities) where
+  (MediaStreamCapabilities a) == (MediaStreamCapabilities b) = js_eq a b
+
+instance PToJSRef MediaStreamCapabilities where
+  pToJSRef = unMediaStreamCapabilities
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef MediaStreamCapabilities where
+  pFromJSRef = MediaStreamCapabilities
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef MediaStreamCapabilities where
+  toJSRef = return . unMediaStreamCapabilities
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef MediaStreamCapabilities where
+  fromJSRef = return . fmap MediaStreamCapabilities . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsGObject o => IsMediaStreamCapabilities o
+toMediaStreamCapabilities :: IsMediaStreamCapabilities o => o -> MediaStreamCapabilities
+toMediaStreamCapabilities = unsafeCastGObject . toGObject
+
+instance IsMediaStreamCapabilities MediaStreamCapabilities
+instance IsGObject MediaStreamCapabilities where
+  toGObject = GObject . unMediaStreamCapabilities
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = MediaStreamCapabilities . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToMediaStreamCapabilities :: IsGObject obj => obj -> MediaStreamCapabilities
+castToMediaStreamCapabilities = castTo gTypeMediaStreamCapabilities "MediaStreamCapabilities"
+
+foreign import javascript unsafe "window[\"MediaStreamCapabilities\"]" gTypeMediaStreamCapabilities :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.MediaStreamEvent".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.Event"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamEvent Mozilla MediaStreamEvent documentation>
+newtype MediaStreamEvent = MediaStreamEvent { unMediaStreamEvent :: JSRef }
+
+instance Eq (MediaStreamEvent) where
+  (MediaStreamEvent a) == (MediaStreamEvent b) = js_eq a b
+
+instance PToJSRef MediaStreamEvent where
+  pToJSRef = unMediaStreamEvent
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef MediaStreamEvent where
+  pFromJSRef = MediaStreamEvent
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef MediaStreamEvent where
+  toJSRef = return . unMediaStreamEvent
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef MediaStreamEvent where
+  fromJSRef = return . fmap MediaStreamEvent . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEvent MediaStreamEvent
+instance IsGObject MediaStreamEvent where
+  toGObject = GObject . unMediaStreamEvent
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = MediaStreamEvent . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToMediaStreamEvent :: IsGObject obj => obj -> MediaStreamEvent
+castToMediaStreamEvent = castTo gTypeMediaStreamEvent "MediaStreamEvent"
+
+foreign import javascript unsafe "window[\"MediaStreamEvent\"]" gTypeMediaStreamEvent :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.MediaStreamTrack".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack Mozilla MediaStreamTrack documentation>
+newtype MediaStreamTrack = MediaStreamTrack { unMediaStreamTrack :: JSRef }
+
+instance Eq (MediaStreamTrack) where
+  (MediaStreamTrack a) == (MediaStreamTrack b) = js_eq a b
+
+instance PToJSRef MediaStreamTrack where
+  pToJSRef = unMediaStreamTrack
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef MediaStreamTrack where
+  pFromJSRef = MediaStreamTrack
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef MediaStreamTrack where
+  toJSRef = return . unMediaStreamTrack
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef MediaStreamTrack where
+  fromJSRef = return . fmap MediaStreamTrack . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsEventTarget o => IsMediaStreamTrack o
+toMediaStreamTrack :: IsMediaStreamTrack o => o -> MediaStreamTrack
+toMediaStreamTrack = unsafeCastGObject . toGObject
+
+instance IsMediaStreamTrack MediaStreamTrack
+instance IsEventTarget MediaStreamTrack
+instance IsGObject MediaStreamTrack where
+  toGObject = GObject . unMediaStreamTrack
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = MediaStreamTrack . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToMediaStreamTrack :: IsGObject obj => obj -> MediaStreamTrack
+castToMediaStreamTrack = castTo gTypeMediaStreamTrack "MediaStreamTrack"
+
+foreign import javascript unsafe "window[\"MediaStreamTrack\"]" gTypeMediaStreamTrack :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.MediaStreamTrackEvent".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.Event"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrackEvent Mozilla MediaStreamTrackEvent documentation>
+newtype MediaStreamTrackEvent = MediaStreamTrackEvent { unMediaStreamTrackEvent :: JSRef }
+
+instance Eq (MediaStreamTrackEvent) where
+  (MediaStreamTrackEvent a) == (MediaStreamTrackEvent b) = js_eq a b
+
+instance PToJSRef MediaStreamTrackEvent where
+  pToJSRef = unMediaStreamTrackEvent
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef MediaStreamTrackEvent where
+  pFromJSRef = MediaStreamTrackEvent
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef MediaStreamTrackEvent where
+  toJSRef = return . unMediaStreamTrackEvent
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef MediaStreamTrackEvent where
+  fromJSRef = return . fmap MediaStreamTrackEvent . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEvent MediaStreamTrackEvent
+instance IsGObject MediaStreamTrackEvent where
+  toGObject = GObject . unMediaStreamTrackEvent
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = MediaStreamTrackEvent . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToMediaStreamTrackEvent :: IsGObject obj => obj -> MediaStreamTrackEvent
+castToMediaStreamTrackEvent = castTo gTypeMediaStreamTrackEvent "MediaStreamTrackEvent"
+
+foreign import javascript unsafe "window[\"MediaStreamTrackEvent\"]" gTypeMediaStreamTrackEvent :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.MediaTrackConstraint".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraint Mozilla MediaTrackConstraint documentation>
+newtype MediaTrackConstraint = MediaTrackConstraint { unMediaTrackConstraint :: JSRef }
+
+instance Eq (MediaTrackConstraint) where
+  (MediaTrackConstraint a) == (MediaTrackConstraint b) = js_eq a b
+
+instance PToJSRef MediaTrackConstraint where
+  pToJSRef = unMediaTrackConstraint
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef MediaTrackConstraint where
+  pFromJSRef = MediaTrackConstraint
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef MediaTrackConstraint where
+  toJSRef = return . unMediaTrackConstraint
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef MediaTrackConstraint where
+  fromJSRef = return . fmap MediaTrackConstraint . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject MediaTrackConstraint where
+  toGObject = GObject . unMediaTrackConstraint
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = MediaTrackConstraint . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToMediaTrackConstraint :: IsGObject obj => obj -> MediaTrackConstraint
+castToMediaTrackConstraint = castTo gTypeMediaTrackConstraint "MediaTrackConstraint"
+
+foreign import javascript unsafe "window[\"MediaTrackConstraint\"]" gTypeMediaTrackConstraint :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.MediaTrackConstraintSet".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraintSet Mozilla MediaTrackConstraintSet documentation>
+newtype MediaTrackConstraintSet = MediaTrackConstraintSet { unMediaTrackConstraintSet :: JSRef }
+
+instance Eq (MediaTrackConstraintSet) where
+  (MediaTrackConstraintSet a) == (MediaTrackConstraintSet b) = js_eq a b
+
+instance PToJSRef MediaTrackConstraintSet where
+  pToJSRef = unMediaTrackConstraintSet
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef MediaTrackConstraintSet where
+  pFromJSRef = MediaTrackConstraintSet
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef MediaTrackConstraintSet where
+  toJSRef = return . unMediaTrackConstraintSet
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef MediaTrackConstraintSet where
+  fromJSRef = return . fmap MediaTrackConstraintSet . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject MediaTrackConstraintSet where
+  toGObject = GObject . unMediaTrackConstraintSet
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = MediaTrackConstraintSet . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToMediaTrackConstraintSet :: IsGObject obj => obj -> MediaTrackConstraintSet
+castToMediaTrackConstraintSet = castTo gTypeMediaTrackConstraintSet "MediaTrackConstraintSet"
+
+foreign import javascript unsafe "window[\"MediaTrackConstraintSet\"]" gTypeMediaTrackConstraintSet :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.MediaTrackConstraints".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraints Mozilla MediaTrackConstraints documentation>
+newtype MediaTrackConstraints = MediaTrackConstraints { unMediaTrackConstraints :: JSRef }
+
+instance Eq (MediaTrackConstraints) where
+  (MediaTrackConstraints a) == (MediaTrackConstraints b) = js_eq a b
+
+instance PToJSRef MediaTrackConstraints where
+  pToJSRef = unMediaTrackConstraints
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef MediaTrackConstraints where
+  pFromJSRef = MediaTrackConstraints
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef MediaTrackConstraints where
+  toJSRef = return . unMediaTrackConstraints
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef MediaTrackConstraints where
+  fromJSRef = return . fmap MediaTrackConstraints . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject MediaTrackConstraints where
+  toGObject = GObject . unMediaTrackConstraints
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = MediaTrackConstraints . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToMediaTrackConstraints :: IsGObject obj => obj -> MediaTrackConstraints
+castToMediaTrackConstraints = castTo gTypeMediaTrackConstraints "MediaTrackConstraints"
+
+foreign import javascript unsafe "window[\"MediaTrackConstraints\"]" gTypeMediaTrackConstraints :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.MemoryInfo".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/MemoryInfo Mozilla MemoryInfo documentation>
+newtype MemoryInfo = MemoryInfo { unMemoryInfo :: JSRef }
+
+instance Eq (MemoryInfo) where
+  (MemoryInfo a) == (MemoryInfo b) = js_eq a b
+
+instance PToJSRef MemoryInfo where
+  pToJSRef = unMemoryInfo
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef MemoryInfo where
+  pFromJSRef = MemoryInfo
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef MemoryInfo where
+  toJSRef = return . unMemoryInfo
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef MemoryInfo where
+  fromJSRef = return . fmap MemoryInfo . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject MemoryInfo where
+  toGObject = GObject . unMemoryInfo
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = MemoryInfo . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToMemoryInfo :: IsGObject obj => obj -> MemoryInfo
+castToMemoryInfo = castTo gTypeMemoryInfo "MemoryInfo"
+
+foreign import javascript unsafe "window[\"MemoryInfo\"]" gTypeMemoryInfo :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.MessageChannel".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/MessageChannel Mozilla MessageChannel documentation>
+newtype MessageChannel = MessageChannel { unMessageChannel :: JSRef }
+
+instance Eq (MessageChannel) where
+  (MessageChannel a) == (MessageChannel b) = js_eq a b
+
+instance PToJSRef MessageChannel where
+  pToJSRef = unMessageChannel
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef MessageChannel where
+  pFromJSRef = MessageChannel
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef MessageChannel where
+  toJSRef = return . unMessageChannel
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef MessageChannel where
+  fromJSRef = return . fmap MessageChannel . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject MessageChannel where
+  toGObject = GObject . unMessageChannel
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = MessageChannel . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToMessageChannel :: IsGObject obj => obj -> MessageChannel
+castToMessageChannel = castTo gTypeMessageChannel "MessageChannel"
+
+foreign import javascript unsafe "window[\"MessageChannel\"]" gTypeMessageChannel :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.MessageEvent".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.Event"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/MessageEvent Mozilla MessageEvent documentation>
+newtype MessageEvent = MessageEvent { unMessageEvent :: JSRef }
+
+instance Eq (MessageEvent) where
+  (MessageEvent a) == (MessageEvent b) = js_eq a b
+
+instance PToJSRef MessageEvent where
+  pToJSRef = unMessageEvent
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef MessageEvent where
+  pFromJSRef = MessageEvent
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef MessageEvent where
+  toJSRef = return . unMessageEvent
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef MessageEvent where
+  fromJSRef = return . fmap MessageEvent . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEvent MessageEvent
+instance IsGObject MessageEvent where
+  toGObject = GObject . unMessageEvent
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = MessageEvent . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToMessageEvent :: IsGObject obj => obj -> MessageEvent
+castToMessageEvent = castTo gTypeMessageEvent "MessageEvent"
+
+foreign import javascript unsafe "window[\"MessageEvent\"]" gTypeMessageEvent :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.MessagePort".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/MessagePort Mozilla MessagePort documentation>
+newtype MessagePort = MessagePort { unMessagePort :: JSRef }
+
+instance Eq (MessagePort) where
+  (MessagePort a) == (MessagePort b) = js_eq a b
+
+instance PToJSRef MessagePort where
+  pToJSRef = unMessagePort
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef MessagePort where
+  pFromJSRef = MessagePort
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef MessagePort where
+  toJSRef = return . unMessagePort
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef MessagePort where
+  fromJSRef = return . fmap MessagePort . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEventTarget MessagePort
+instance IsGObject MessagePort where
+  toGObject = GObject . unMessagePort
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = MessagePort . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToMessagePort :: IsGObject obj => obj -> MessagePort
+castToMessagePort = castTo gTypeMessagePort "MessagePort"
+
+foreign import javascript unsafe "window[\"MessagePort\"]" gTypeMessagePort :: GType
+#else
+type IsMessagePort o = MessagePortClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.MimeType".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/MimeType Mozilla MimeType documentation>
+newtype MimeType = MimeType { unMimeType :: JSRef }
+
+instance Eq (MimeType) where
+  (MimeType a) == (MimeType b) = js_eq a b
+
+instance PToJSRef MimeType where
+  pToJSRef = unMimeType
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef MimeType where
+  pFromJSRef = MimeType
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef MimeType where
+  toJSRef = return . unMimeType
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef MimeType where
+  fromJSRef = return . fmap MimeType . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject MimeType where
+  toGObject = GObject . unMimeType
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = MimeType . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToMimeType :: IsGObject obj => obj -> MimeType
+castToMimeType = castTo gTypeMimeType "MimeType"
+
+foreign import javascript unsafe "window[\"MimeType\"]" gTypeMimeType :: GType
+#else
+type IsMimeType o = MimeTypeClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.MimeTypeArray".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/MimeTypeArray Mozilla MimeTypeArray documentation>
+newtype MimeTypeArray = MimeTypeArray { unMimeTypeArray :: JSRef }
+
+instance Eq (MimeTypeArray) where
+  (MimeTypeArray a) == (MimeTypeArray b) = js_eq a b
+
+instance PToJSRef MimeTypeArray where
+  pToJSRef = unMimeTypeArray
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef MimeTypeArray where
+  pFromJSRef = MimeTypeArray
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef MimeTypeArray where
+  toJSRef = return . unMimeTypeArray
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef MimeTypeArray where
+  fromJSRef = return . fmap MimeTypeArray . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject MimeTypeArray where
+  toGObject = GObject . unMimeTypeArray
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = MimeTypeArray . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToMimeTypeArray :: IsGObject obj => obj -> MimeTypeArray
+castToMimeTypeArray = castTo gTypeMimeTypeArray "MimeTypeArray"
+
+foreign import javascript unsafe "window[\"MimeTypeArray\"]" gTypeMimeTypeArray :: GType
+#else
+type IsMimeTypeArray o = MimeTypeArrayClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.MouseEvent".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.UIEvent"
+--     * "GHCJS.DOM.Event"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent Mozilla MouseEvent documentation>
+newtype MouseEvent = MouseEvent { unMouseEvent :: JSRef }
+
+instance Eq (MouseEvent) where
+  (MouseEvent a) == (MouseEvent b) = js_eq a b
+
+instance PToJSRef MouseEvent where
+  pToJSRef = unMouseEvent
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef MouseEvent where
+  pFromJSRef = MouseEvent
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef MouseEvent where
+  toJSRef = return . unMouseEvent
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef MouseEvent where
+  fromJSRef = return . fmap MouseEvent . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsUIEvent o => IsMouseEvent o
+toMouseEvent :: IsMouseEvent o => o -> MouseEvent
+toMouseEvent = unsafeCastGObject . toGObject
+
+instance IsMouseEvent MouseEvent
+instance IsUIEvent MouseEvent
+instance IsEvent MouseEvent
+instance IsGObject MouseEvent where
+  toGObject = GObject . unMouseEvent
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = MouseEvent . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToMouseEvent :: IsGObject obj => obj -> MouseEvent
+castToMouseEvent = castTo gTypeMouseEvent "MouseEvent"
+
+foreign import javascript unsafe "window[\"MouseEvent\"]" gTypeMouseEvent :: GType
+#else
+type IsMouseEvent o = MouseEventClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.MutationEvent".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.Event"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/MutationEvent Mozilla MutationEvent documentation>
+newtype MutationEvent = MutationEvent { unMutationEvent :: JSRef }
+
+instance Eq (MutationEvent) where
+  (MutationEvent a) == (MutationEvent b) = js_eq a b
+
+instance PToJSRef MutationEvent where
+  pToJSRef = unMutationEvent
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef MutationEvent where
+  pFromJSRef = MutationEvent
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef MutationEvent where
+  toJSRef = return . unMutationEvent
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef MutationEvent where
+  fromJSRef = return . fmap MutationEvent . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEvent MutationEvent
+instance IsGObject MutationEvent where
+  toGObject = GObject . unMutationEvent
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = MutationEvent . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToMutationEvent :: IsGObject obj => obj -> MutationEvent
+castToMutationEvent = castTo gTypeMutationEvent "MutationEvent"
+
+foreign import javascript unsafe "window[\"MutationEvent\"]" gTypeMutationEvent :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.MutationObserver".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver Mozilla MutationObserver documentation>
+newtype MutationObserver = MutationObserver { unMutationObserver :: JSRef }
+
+instance Eq (MutationObserver) where
+  (MutationObserver a) == (MutationObserver b) = js_eq a b
+
+instance PToJSRef MutationObserver where
+  pToJSRef = unMutationObserver
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef MutationObserver where
+  pFromJSRef = MutationObserver
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef MutationObserver where
+  toJSRef = return . unMutationObserver
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef MutationObserver where
+  fromJSRef = return . fmap MutationObserver . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject MutationObserver where
+  toGObject = GObject . unMutationObserver
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = MutationObserver . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToMutationObserver :: IsGObject obj => obj -> MutationObserver
+castToMutationObserver = castTo gTypeMutationObserver "MutationObserver"
+
+foreign import javascript unsafe "window[\"MutationObserver\"]" gTypeMutationObserver :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.MutationRecord".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/MutationRecord Mozilla MutationRecord documentation>
+newtype MutationRecord = MutationRecord { unMutationRecord :: JSRef }
+
+instance Eq (MutationRecord) where
+  (MutationRecord a) == (MutationRecord b) = js_eq a b
+
+instance PToJSRef MutationRecord where
+  pToJSRef = unMutationRecord
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef MutationRecord where
+  pFromJSRef = MutationRecord
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef MutationRecord where
+  toJSRef = return . unMutationRecord
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef MutationRecord where
+  fromJSRef = return . fmap MutationRecord . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject MutationRecord where
+  toGObject = GObject . unMutationRecord
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = MutationRecord . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToMutationRecord :: IsGObject obj => obj -> MutationRecord
+castToMutationRecord = castTo gTypeMutationRecord "MutationRecord"
+
+foreign import javascript unsafe "window[\"MutationRecord\"]" gTypeMutationRecord :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.NamedNodeMap".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/NamedNodeMap Mozilla NamedNodeMap documentation>
+newtype NamedNodeMap = NamedNodeMap { unNamedNodeMap :: JSRef }
+
+instance Eq (NamedNodeMap) where
+  (NamedNodeMap a) == (NamedNodeMap b) = js_eq a b
+
+instance PToJSRef NamedNodeMap where
+  pToJSRef = unNamedNodeMap
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef NamedNodeMap where
+  pFromJSRef = NamedNodeMap
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef NamedNodeMap where
+  toJSRef = return . unNamedNodeMap
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef NamedNodeMap where
+  fromJSRef = return . fmap NamedNodeMap . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject NamedNodeMap where
+  toGObject = GObject . unNamedNodeMap
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = NamedNodeMap . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToNamedNodeMap :: IsGObject obj => obj -> NamedNodeMap
+castToNamedNodeMap = castTo gTypeNamedNodeMap "NamedNodeMap"
+
+foreign import javascript unsafe "window[\"NamedNodeMap\"]" gTypeNamedNodeMap :: GType
+#else
+type IsNamedNodeMap o = NamedNodeMapClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.Navigator".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/Navigator Mozilla Navigator documentation>
+newtype Navigator = Navigator { unNavigator :: JSRef }
+
+instance Eq (Navigator) where
+  (Navigator a) == (Navigator b) = js_eq a b
+
+instance PToJSRef Navigator where
+  pToJSRef = unNavigator
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef Navigator where
+  pFromJSRef = Navigator
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef Navigator where
+  toJSRef = return . unNavigator
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef Navigator where
+  fromJSRef = return . fmap Navigator . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject Navigator where
+  toGObject = GObject . unNavigator
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = Navigator . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToNavigator :: IsGObject obj => obj -> Navigator
+castToNavigator = castTo gTypeNavigator "Navigator"
+
+foreign import javascript unsafe "window[\"Navigator\"]" gTypeNavigator :: GType
+#else
+type IsNavigator o = NavigatorClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.NavigatorUserMediaError".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.DOMError"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/NavigatorUserMediaError Mozilla NavigatorUserMediaError documentation>
+newtype NavigatorUserMediaError = NavigatorUserMediaError { unNavigatorUserMediaError :: JSRef }
+
+instance Eq (NavigatorUserMediaError) where
+  (NavigatorUserMediaError a) == (NavigatorUserMediaError b) = js_eq a b
+
+instance PToJSRef NavigatorUserMediaError where
+  pToJSRef = unNavigatorUserMediaError
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef NavigatorUserMediaError where
+  pFromJSRef = NavigatorUserMediaError
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef NavigatorUserMediaError where
+  toJSRef = return . unNavigatorUserMediaError
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef NavigatorUserMediaError where
+  fromJSRef = return . fmap NavigatorUserMediaError . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsDOMError NavigatorUserMediaError
+instance IsGObject NavigatorUserMediaError where
+  toGObject = GObject . unNavigatorUserMediaError
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = NavigatorUserMediaError . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToNavigatorUserMediaError :: IsGObject obj => obj -> NavigatorUserMediaError
+castToNavigatorUserMediaError = castTo gTypeNavigatorUserMediaError "NavigatorUserMediaError"
+
+foreign import javascript unsafe "window[\"NavigatorUserMediaError\"]" gTypeNavigatorUserMediaError :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.Node".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/Node Mozilla Node documentation>
+newtype Node = Node { unNode :: JSRef }
+
+instance Eq (Node) where
+  (Node a) == (Node b) = js_eq a b
+
+instance PToJSRef Node where
+  pToJSRef = unNode
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef Node where
+  pFromJSRef = Node
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef Node where
+  toJSRef = return . unNode
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef Node where
+  fromJSRef = return . fmap Node . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsEventTarget o => IsNode o
+toNode :: IsNode o => o -> Node
+toNode = unsafeCastGObject . toGObject
+
+instance IsNode Node
+instance IsEventTarget Node
+instance IsGObject Node where
+  toGObject = GObject . unNode
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = Node . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToNode :: IsGObject obj => obj -> Node
+castToNode = castTo gTypeNode "Node"
+
+foreign import javascript unsafe "window[\"Node\"]" gTypeNode :: GType
+#else
+type IsNode o = NodeClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.NodeFilter".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/NodeFilter Mozilla NodeFilter documentation>
+newtype NodeFilter = NodeFilter { unNodeFilter :: JSRef }
+
+instance Eq (NodeFilter) where
+  (NodeFilter a) == (NodeFilter b) = js_eq a b
+
+instance PToJSRef NodeFilter where
+  pToJSRef = unNodeFilter
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef NodeFilter where
+  pFromJSRef = NodeFilter
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef NodeFilter where
+  toJSRef = return . unNodeFilter
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef NodeFilter where
+  fromJSRef = return . fmap NodeFilter . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject NodeFilter where
+  toGObject = GObject . unNodeFilter
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = NodeFilter . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToNodeFilter :: IsGObject obj => obj -> NodeFilter
+castToNodeFilter = castTo gTypeNodeFilter "NodeFilter"
+
+foreign import javascript unsafe "window[\"NodeFilter\"]" gTypeNodeFilter :: GType
+#else
+type IsNodeFilter o = NodeFilterClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.NodeIterator".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/NodeIterator Mozilla NodeIterator documentation>
+newtype NodeIterator = NodeIterator { unNodeIterator :: JSRef }
+
+instance Eq (NodeIterator) where
+  (NodeIterator a) == (NodeIterator b) = js_eq a b
+
+instance PToJSRef NodeIterator where
+  pToJSRef = unNodeIterator
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef NodeIterator where
+  pFromJSRef = NodeIterator
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef NodeIterator where
+  toJSRef = return . unNodeIterator
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef NodeIterator where
+  fromJSRef = return . fmap NodeIterator . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject NodeIterator where
+  toGObject = GObject . unNodeIterator
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = NodeIterator . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToNodeIterator :: IsGObject obj => obj -> NodeIterator
+castToNodeIterator = castTo gTypeNodeIterator "NodeIterator"
+
+foreign import javascript unsafe "window[\"NodeIterator\"]" gTypeNodeIterator :: GType
+#else
+type IsNodeIterator o = NodeIteratorClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.NodeList".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/NodeList Mozilla NodeList documentation>
+newtype NodeList = NodeList { unNodeList :: JSRef }
+
+instance Eq (NodeList) where
+  (NodeList a) == (NodeList b) = js_eq a b
+
+instance PToJSRef NodeList where
+  pToJSRef = unNodeList
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef NodeList where
+  pFromJSRef = NodeList
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef NodeList where
+  toJSRef = return . unNodeList
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef NodeList where
+  fromJSRef = return . fmap NodeList . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsGObject o => IsNodeList o
+toNodeList :: IsNodeList o => o -> NodeList
+toNodeList = unsafeCastGObject . toGObject
+
+instance IsNodeList NodeList
+instance IsGObject NodeList where
+  toGObject = GObject . unNodeList
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = NodeList . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToNodeList :: IsGObject obj => obj -> NodeList
+castToNodeList = castTo gTypeNodeList "NodeList"
+
+foreign import javascript unsafe "window[\"NodeList\"]" gTypeNodeList :: GType
+#else
+type IsNodeList o = NodeListClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.Notification".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/Notification Mozilla Notification documentation>
+newtype Notification = Notification { unNotification :: JSRef }
+
+instance Eq (Notification) where
+  (Notification a) == (Notification b) = js_eq a b
+
+instance PToJSRef Notification where
+  pToJSRef = unNotification
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef Notification where
+  pFromJSRef = Notification
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef Notification where
+  toJSRef = return . unNotification
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef Notification where
+  fromJSRef = return . fmap Notification . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEventTarget Notification
+instance IsGObject Notification where
+  toGObject = GObject . unNotification
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = Notification . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToNotification :: IsGObject obj => obj -> Notification
+castToNotification = castTo gTypeNotification "Notification"
+
+foreign import javascript unsafe "window[\"Notification\"]" gTypeNotification :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.NotificationCenter".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/NotificationCenter Mozilla NotificationCenter documentation>
+newtype NotificationCenter = NotificationCenter { unNotificationCenter :: JSRef }
+
+instance Eq (NotificationCenter) where
+  (NotificationCenter a) == (NotificationCenter b) = js_eq a b
+
+instance PToJSRef NotificationCenter where
+  pToJSRef = unNotificationCenter
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef NotificationCenter where
+  pFromJSRef = NotificationCenter
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef NotificationCenter where
+  toJSRef = return . unNotificationCenter
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef NotificationCenter where
+  fromJSRef = return . fmap NotificationCenter . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject NotificationCenter where
+  toGObject = GObject . unNotificationCenter
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = NotificationCenter . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToNotificationCenter :: IsGObject obj => obj -> NotificationCenter
+castToNotificationCenter = castTo gTypeNotificationCenter "NotificationCenter"
+
+foreign import javascript unsafe "window[\"NotificationCenter\"]" gTypeNotificationCenter :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.OESElementIndexUint".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/OESElementIndexUint Mozilla OESElementIndexUint documentation>
+newtype OESElementIndexUint = OESElementIndexUint { unOESElementIndexUint :: JSRef }
+
+instance Eq (OESElementIndexUint) where
+  (OESElementIndexUint a) == (OESElementIndexUint b) = js_eq a b
+
+instance PToJSRef OESElementIndexUint where
+  pToJSRef = unOESElementIndexUint
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef OESElementIndexUint where
+  pFromJSRef = OESElementIndexUint
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef OESElementIndexUint where
+  toJSRef = return . unOESElementIndexUint
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef OESElementIndexUint where
+  fromJSRef = return . fmap OESElementIndexUint . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject OESElementIndexUint where
+  toGObject = GObject . unOESElementIndexUint
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = OESElementIndexUint . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToOESElementIndexUint :: IsGObject obj => obj -> OESElementIndexUint
+castToOESElementIndexUint = castTo gTypeOESElementIndexUint "OESElementIndexUint"
+
+foreign import javascript unsafe "window[\"OESElementIndexUint\"]" gTypeOESElementIndexUint :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.OESStandardDerivatives".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/OESStandardDerivatives Mozilla OESStandardDerivatives documentation>
+newtype OESStandardDerivatives = OESStandardDerivatives { unOESStandardDerivatives :: JSRef }
+
+instance Eq (OESStandardDerivatives) where
+  (OESStandardDerivatives a) == (OESStandardDerivatives b) = js_eq a b
+
+instance PToJSRef OESStandardDerivatives where
+  pToJSRef = unOESStandardDerivatives
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef OESStandardDerivatives where
+  pFromJSRef = OESStandardDerivatives
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef OESStandardDerivatives where
+  toJSRef = return . unOESStandardDerivatives
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef OESStandardDerivatives where
+  fromJSRef = return . fmap OESStandardDerivatives . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject OESStandardDerivatives where
+  toGObject = GObject . unOESStandardDerivatives
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = OESStandardDerivatives . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToOESStandardDerivatives :: IsGObject obj => obj -> OESStandardDerivatives
+castToOESStandardDerivatives = castTo gTypeOESStandardDerivatives "OESStandardDerivatives"
+
+foreign import javascript unsafe "window[\"OESStandardDerivatives\"]" gTypeOESStandardDerivatives :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.OESTextureFloat".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/OESTextureFloat Mozilla OESTextureFloat documentation>
+newtype OESTextureFloat = OESTextureFloat { unOESTextureFloat :: JSRef }
+
+instance Eq (OESTextureFloat) where
+  (OESTextureFloat a) == (OESTextureFloat b) = js_eq a b
+
+instance PToJSRef OESTextureFloat where
+  pToJSRef = unOESTextureFloat
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef OESTextureFloat where
+  pFromJSRef = OESTextureFloat
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef OESTextureFloat where
+  toJSRef = return . unOESTextureFloat
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef OESTextureFloat where
+  fromJSRef = return . fmap OESTextureFloat . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject OESTextureFloat where
+  toGObject = GObject . unOESTextureFloat
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = OESTextureFloat . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToOESTextureFloat :: IsGObject obj => obj -> OESTextureFloat
+castToOESTextureFloat = castTo gTypeOESTextureFloat "OESTextureFloat"
+
+foreign import javascript unsafe "window[\"OESTextureFloat\"]" gTypeOESTextureFloat :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.OESTextureFloatLinear".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/OESTextureFloatLinear Mozilla OESTextureFloatLinear documentation>
+newtype OESTextureFloatLinear = OESTextureFloatLinear { unOESTextureFloatLinear :: JSRef }
+
+instance Eq (OESTextureFloatLinear) where
+  (OESTextureFloatLinear a) == (OESTextureFloatLinear b) = js_eq a b
+
+instance PToJSRef OESTextureFloatLinear where
+  pToJSRef = unOESTextureFloatLinear
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef OESTextureFloatLinear where
+  pFromJSRef = OESTextureFloatLinear
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef OESTextureFloatLinear where
+  toJSRef = return . unOESTextureFloatLinear
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef OESTextureFloatLinear where
+  fromJSRef = return . fmap OESTextureFloatLinear . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject OESTextureFloatLinear where
+  toGObject = GObject . unOESTextureFloatLinear
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = OESTextureFloatLinear . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToOESTextureFloatLinear :: IsGObject obj => obj -> OESTextureFloatLinear
+castToOESTextureFloatLinear = castTo gTypeOESTextureFloatLinear "OESTextureFloatLinear"
+
+foreign import javascript unsafe "window[\"OESTextureFloatLinear\"]" gTypeOESTextureFloatLinear :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.OESTextureHalfFloat".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/OESTextureHalfFloat Mozilla OESTextureHalfFloat documentation>
+newtype OESTextureHalfFloat = OESTextureHalfFloat { unOESTextureHalfFloat :: JSRef }
+
+instance Eq (OESTextureHalfFloat) where
+  (OESTextureHalfFloat a) == (OESTextureHalfFloat b) = js_eq a b
+
+instance PToJSRef OESTextureHalfFloat where
+  pToJSRef = unOESTextureHalfFloat
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef OESTextureHalfFloat where
+  pFromJSRef = OESTextureHalfFloat
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef OESTextureHalfFloat where
+  toJSRef = return . unOESTextureHalfFloat
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef OESTextureHalfFloat where
+  fromJSRef = return . fmap OESTextureHalfFloat . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject OESTextureHalfFloat where
+  toGObject = GObject . unOESTextureHalfFloat
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = OESTextureHalfFloat . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToOESTextureHalfFloat :: IsGObject obj => obj -> OESTextureHalfFloat
+castToOESTextureHalfFloat = castTo gTypeOESTextureHalfFloat "OESTextureHalfFloat"
+
+foreign import javascript unsafe "window[\"OESTextureHalfFloat\"]" gTypeOESTextureHalfFloat :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.OESTextureHalfFloatLinear".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/OESTextureHalfFloatLinear Mozilla OESTextureHalfFloatLinear documentation>
+newtype OESTextureHalfFloatLinear = OESTextureHalfFloatLinear { unOESTextureHalfFloatLinear :: JSRef }
+
+instance Eq (OESTextureHalfFloatLinear) where
+  (OESTextureHalfFloatLinear a) == (OESTextureHalfFloatLinear b) = js_eq a b
+
+instance PToJSRef OESTextureHalfFloatLinear where
+  pToJSRef = unOESTextureHalfFloatLinear
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef OESTextureHalfFloatLinear where
+  pFromJSRef = OESTextureHalfFloatLinear
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef OESTextureHalfFloatLinear where
+  toJSRef = return . unOESTextureHalfFloatLinear
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef OESTextureHalfFloatLinear where
+  fromJSRef = return . fmap OESTextureHalfFloatLinear . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject OESTextureHalfFloatLinear where
+  toGObject = GObject . unOESTextureHalfFloatLinear
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = OESTextureHalfFloatLinear . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToOESTextureHalfFloatLinear :: IsGObject obj => obj -> OESTextureHalfFloatLinear
+castToOESTextureHalfFloatLinear = castTo gTypeOESTextureHalfFloatLinear "OESTextureHalfFloatLinear"
+
+foreign import javascript unsafe "window[\"OESTextureHalfFloatLinear\"]" gTypeOESTextureHalfFloatLinear :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.OESVertexArrayObject".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/OESVertexArrayObject Mozilla OESVertexArrayObject documentation>
+newtype OESVertexArrayObject = OESVertexArrayObject { unOESVertexArrayObject :: JSRef }
+
+instance Eq (OESVertexArrayObject) where
+  (OESVertexArrayObject a) == (OESVertexArrayObject b) = js_eq a b
+
+instance PToJSRef OESVertexArrayObject where
+  pToJSRef = unOESVertexArrayObject
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef OESVertexArrayObject where
+  pFromJSRef = OESVertexArrayObject
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef OESVertexArrayObject where
+  toJSRef = return . unOESVertexArrayObject
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef OESVertexArrayObject where
+  fromJSRef = return . fmap OESVertexArrayObject . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject OESVertexArrayObject where
+  toGObject = GObject . unOESVertexArrayObject
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = OESVertexArrayObject . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToOESVertexArrayObject :: IsGObject obj => obj -> OESVertexArrayObject
+castToOESVertexArrayObject = castTo gTypeOESVertexArrayObject "OESVertexArrayObject"
+
+foreign import javascript unsafe "window[\"OESVertexArrayObject\"]" gTypeOESVertexArrayObject :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.OfflineAudioCompletionEvent".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.Event"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/OfflineAudioCompletionEvent Mozilla OfflineAudioCompletionEvent documentation>
+newtype OfflineAudioCompletionEvent = OfflineAudioCompletionEvent { unOfflineAudioCompletionEvent :: JSRef }
+
+instance Eq (OfflineAudioCompletionEvent) where
+  (OfflineAudioCompletionEvent a) == (OfflineAudioCompletionEvent b) = js_eq a b
+
+instance PToJSRef OfflineAudioCompletionEvent where
+  pToJSRef = unOfflineAudioCompletionEvent
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef OfflineAudioCompletionEvent where
+  pFromJSRef = OfflineAudioCompletionEvent
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef OfflineAudioCompletionEvent where
+  toJSRef = return . unOfflineAudioCompletionEvent
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef OfflineAudioCompletionEvent where
+  fromJSRef = return . fmap OfflineAudioCompletionEvent . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEvent OfflineAudioCompletionEvent
+instance IsGObject OfflineAudioCompletionEvent where
+  toGObject = GObject . unOfflineAudioCompletionEvent
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = OfflineAudioCompletionEvent . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToOfflineAudioCompletionEvent :: IsGObject obj => obj -> OfflineAudioCompletionEvent
+castToOfflineAudioCompletionEvent = castTo gTypeOfflineAudioCompletionEvent "OfflineAudioCompletionEvent"
+
+foreign import javascript unsafe "window[\"OfflineAudioCompletionEvent\"]" gTypeOfflineAudioCompletionEvent :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.OfflineAudioContext".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.AudioContext"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/OfflineAudioContext Mozilla OfflineAudioContext documentation>
+newtype OfflineAudioContext = OfflineAudioContext { unOfflineAudioContext :: JSRef }
+
+instance Eq (OfflineAudioContext) where
+  (OfflineAudioContext a) == (OfflineAudioContext b) = js_eq a b
+
+instance PToJSRef OfflineAudioContext where
+  pToJSRef = unOfflineAudioContext
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef OfflineAudioContext where
+  pFromJSRef = OfflineAudioContext
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef OfflineAudioContext where
+  toJSRef = return . unOfflineAudioContext
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef OfflineAudioContext where
+  fromJSRef = return . fmap OfflineAudioContext . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsAudioContext OfflineAudioContext
+instance IsEventTarget OfflineAudioContext
+instance IsGObject OfflineAudioContext where
+  toGObject = GObject . unOfflineAudioContext
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = OfflineAudioContext . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToOfflineAudioContext :: IsGObject obj => obj -> OfflineAudioContext
+castToOfflineAudioContext = castTo gTypeOfflineAudioContext "OfflineAudioContext"
+
+foreign import javascript unsafe "window[\"OfflineAudioContext\"]" gTypeOfflineAudioContext :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.OscillatorNode".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.AudioNode"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/OscillatorNode Mozilla OscillatorNode documentation>
+newtype OscillatorNode = OscillatorNode { unOscillatorNode :: JSRef }
+
+instance Eq (OscillatorNode) where
+  (OscillatorNode a) == (OscillatorNode b) = js_eq a b
+
+instance PToJSRef OscillatorNode where
+  pToJSRef = unOscillatorNode
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef OscillatorNode where
+  pFromJSRef = OscillatorNode
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef OscillatorNode where
+  toJSRef = return . unOscillatorNode
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef OscillatorNode where
+  fromJSRef = return . fmap OscillatorNode . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsAudioNode OscillatorNode
+instance IsEventTarget OscillatorNode
+instance IsGObject OscillatorNode where
+  toGObject = GObject . unOscillatorNode
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = OscillatorNode . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToOscillatorNode :: IsGObject obj => obj -> OscillatorNode
+castToOscillatorNode = castTo gTypeOscillatorNode "OscillatorNode"
+
+foreign import javascript unsafe "window[\"OscillatorNode\"]" gTypeOscillatorNode :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.OverflowEvent".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.Event"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/OverflowEvent Mozilla OverflowEvent documentation>
+newtype OverflowEvent = OverflowEvent { unOverflowEvent :: JSRef }
+
+instance Eq (OverflowEvent) where
+  (OverflowEvent a) == (OverflowEvent b) = js_eq a b
+
+instance PToJSRef OverflowEvent where
+  pToJSRef = unOverflowEvent
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef OverflowEvent where
+  pFromJSRef = OverflowEvent
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef OverflowEvent where
+  toJSRef = return . unOverflowEvent
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef OverflowEvent where
+  fromJSRef = return . fmap OverflowEvent . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEvent OverflowEvent
+instance IsGObject OverflowEvent where
+  toGObject = GObject . unOverflowEvent
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = OverflowEvent . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToOverflowEvent :: IsGObject obj => obj -> OverflowEvent
+castToOverflowEvent = castTo gTypeOverflowEvent "OverflowEvent"
+
+foreign import javascript unsafe "window[\"OverflowEvent\"]" gTypeOverflowEvent :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.PageTransitionEvent".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.Event"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/PageTransitionEvent Mozilla PageTransitionEvent documentation>
+newtype PageTransitionEvent = PageTransitionEvent { unPageTransitionEvent :: JSRef }
+
+instance Eq (PageTransitionEvent) where
+  (PageTransitionEvent a) == (PageTransitionEvent b) = js_eq a b
+
+instance PToJSRef PageTransitionEvent where
+  pToJSRef = unPageTransitionEvent
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef PageTransitionEvent where
+  pFromJSRef = PageTransitionEvent
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef PageTransitionEvent where
+  toJSRef = return . unPageTransitionEvent
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef PageTransitionEvent where
+  fromJSRef = return . fmap PageTransitionEvent . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEvent PageTransitionEvent
+instance IsGObject PageTransitionEvent where
+  toGObject = GObject . unPageTransitionEvent
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = PageTransitionEvent . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToPageTransitionEvent :: IsGObject obj => obj -> PageTransitionEvent
+castToPageTransitionEvent = castTo gTypePageTransitionEvent "PageTransitionEvent"
+
+foreign import javascript unsafe "window[\"PageTransitionEvent\"]" gTypePageTransitionEvent :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.PannerNode".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.AudioNode"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/webkitAudioPannerNode Mozilla webkitAudioPannerNode documentation>
+newtype PannerNode = PannerNode { unPannerNode :: JSRef }
+
+instance Eq (PannerNode) where
+  (PannerNode a) == (PannerNode b) = js_eq a b
+
+instance PToJSRef PannerNode where
+  pToJSRef = unPannerNode
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef PannerNode where
+  pFromJSRef = PannerNode
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef PannerNode where
+  toJSRef = return . unPannerNode
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef PannerNode where
+  fromJSRef = return . fmap PannerNode . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsAudioNode PannerNode
+instance IsEventTarget PannerNode
+instance IsGObject PannerNode where
+  toGObject = GObject . unPannerNode
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = PannerNode . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToPannerNode :: IsGObject obj => obj -> PannerNode
+castToPannerNode = castTo gTypePannerNode "PannerNode"
+
+foreign import javascript unsafe "window[\"webkitAudioPannerNode\"]" gTypePannerNode :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.Path2D".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/Path2D Mozilla Path2D documentation>
+newtype Path2D = Path2D { unPath2D :: JSRef }
+
+instance Eq (Path2D) where
+  (Path2D a) == (Path2D b) = js_eq a b
+
+instance PToJSRef Path2D where
+  pToJSRef = unPath2D
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef Path2D where
+  pFromJSRef = Path2D
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef Path2D where
+  toJSRef = return . unPath2D
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef Path2D where
+  fromJSRef = return . fmap Path2D . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject Path2D where
+  toGObject = GObject . unPath2D
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = Path2D . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToPath2D :: IsGObject obj => obj -> Path2D
+castToPath2D = castTo gTypePath2D "Path2D"
+
+foreign import javascript unsafe "window[\"Path2D\"]" gTypePath2D :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.Performance".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/Performance Mozilla Performance documentation>
+newtype Performance = Performance { unPerformance :: JSRef }
+
+instance Eq (Performance) where
+  (Performance a) == (Performance b) = js_eq a b
+
+instance PToJSRef Performance where
+  pToJSRef = unPerformance
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef Performance where
+  pFromJSRef = Performance
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef Performance where
+  toJSRef = return . unPerformance
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef Performance where
+  fromJSRef = return . fmap Performance . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEventTarget Performance
+instance IsGObject Performance where
+  toGObject = GObject . unPerformance
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = Performance . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToPerformance :: IsGObject obj => obj -> Performance
+castToPerformance = castTo gTypePerformance "Performance"
+
+foreign import javascript unsafe "window[\"Performance\"]" gTypePerformance :: GType
+#else
+#ifndef USE_OLD_WEBKIT
+type IsPerformance o = PerformanceClass o
+#endif
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.PerformanceEntry".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/PerformanceEntry Mozilla PerformanceEntry documentation>
+newtype PerformanceEntry = PerformanceEntry { unPerformanceEntry :: JSRef }
+
+instance Eq (PerformanceEntry) where
+  (PerformanceEntry a) == (PerformanceEntry b) = js_eq a b
+
+instance PToJSRef PerformanceEntry where
+  pToJSRef = unPerformanceEntry
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef PerformanceEntry where
+  pFromJSRef = PerformanceEntry
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef PerformanceEntry where
+  toJSRef = return . unPerformanceEntry
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef PerformanceEntry where
+  fromJSRef = return . fmap PerformanceEntry . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsGObject o => IsPerformanceEntry o
+toPerformanceEntry :: IsPerformanceEntry o => o -> PerformanceEntry
+toPerformanceEntry = unsafeCastGObject . toGObject
+
+instance IsPerformanceEntry PerformanceEntry
+instance IsGObject PerformanceEntry where
+  toGObject = GObject . unPerformanceEntry
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = PerformanceEntry . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToPerformanceEntry :: IsGObject obj => obj -> PerformanceEntry
+castToPerformanceEntry = castTo gTypePerformanceEntry "PerformanceEntry"
+
+foreign import javascript unsafe "window[\"PerformanceEntry\"]" gTypePerformanceEntry :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.PerformanceEntryList".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/PerformanceEntryList Mozilla PerformanceEntryList documentation>
+newtype PerformanceEntryList = PerformanceEntryList { unPerformanceEntryList :: JSRef }
+
+instance Eq (PerformanceEntryList) where
+  (PerformanceEntryList a) == (PerformanceEntryList b) = js_eq a b
+
+instance PToJSRef PerformanceEntryList where
+  pToJSRef = unPerformanceEntryList
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef PerformanceEntryList where
+  pFromJSRef = PerformanceEntryList
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef PerformanceEntryList where
+  toJSRef = return . unPerformanceEntryList
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef PerformanceEntryList where
+  fromJSRef = return . fmap PerformanceEntryList . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject PerformanceEntryList where
+  toGObject = GObject . unPerformanceEntryList
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = PerformanceEntryList . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToPerformanceEntryList :: IsGObject obj => obj -> PerformanceEntryList
+castToPerformanceEntryList = castTo gTypePerformanceEntryList "PerformanceEntryList"
+
+foreign import javascript unsafe "window[\"PerformanceEntryList\"]" gTypePerformanceEntryList :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.PerformanceMark".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.PerformanceEntry"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/PerformanceMark Mozilla PerformanceMark documentation>
+newtype PerformanceMark = PerformanceMark { unPerformanceMark :: JSRef }
+
+instance Eq (PerformanceMark) where
+  (PerformanceMark a) == (PerformanceMark b) = js_eq a b
+
+instance PToJSRef PerformanceMark where
+  pToJSRef = unPerformanceMark
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef PerformanceMark where
+  pFromJSRef = PerformanceMark
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef PerformanceMark where
+  toJSRef = return . unPerformanceMark
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef PerformanceMark where
+  fromJSRef = return . fmap PerformanceMark . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsPerformanceEntry PerformanceMark
+instance IsGObject PerformanceMark where
+  toGObject = GObject . unPerformanceMark
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = PerformanceMark . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToPerformanceMark :: IsGObject obj => obj -> PerformanceMark
+castToPerformanceMark = castTo gTypePerformanceMark "PerformanceMark"
+
+foreign import javascript unsafe "window[\"PerformanceMark\"]" gTypePerformanceMark :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.PerformanceMeasure".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.PerformanceEntry"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/PerformanceMeasure Mozilla PerformanceMeasure documentation>
+newtype PerformanceMeasure = PerformanceMeasure { unPerformanceMeasure :: JSRef }
+
+instance Eq (PerformanceMeasure) where
+  (PerformanceMeasure a) == (PerformanceMeasure b) = js_eq a b
+
+instance PToJSRef PerformanceMeasure where
+  pToJSRef = unPerformanceMeasure
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef PerformanceMeasure where
+  pFromJSRef = PerformanceMeasure
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef PerformanceMeasure where
+  toJSRef = return . unPerformanceMeasure
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef PerformanceMeasure where
+  fromJSRef = return . fmap PerformanceMeasure . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsPerformanceEntry PerformanceMeasure
+instance IsGObject PerformanceMeasure where
+  toGObject = GObject . unPerformanceMeasure
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = PerformanceMeasure . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToPerformanceMeasure :: IsGObject obj => obj -> PerformanceMeasure
+castToPerformanceMeasure = castTo gTypePerformanceMeasure "PerformanceMeasure"
+
+foreign import javascript unsafe "window[\"PerformanceMeasure\"]" gTypePerformanceMeasure :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.PerformanceNavigation".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/PerformanceNavigation Mozilla PerformanceNavigation documentation>
+newtype PerformanceNavigation = PerformanceNavigation { unPerformanceNavigation :: JSRef }
+
+instance Eq (PerformanceNavigation) where
+  (PerformanceNavigation a) == (PerformanceNavigation b) = js_eq a b
+
+instance PToJSRef PerformanceNavigation where
+  pToJSRef = unPerformanceNavigation
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef PerformanceNavigation where
+  pFromJSRef = PerformanceNavigation
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef PerformanceNavigation where
+  toJSRef = return . unPerformanceNavigation
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef PerformanceNavigation where
+  fromJSRef = return . fmap PerformanceNavigation . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject PerformanceNavigation where
+  toGObject = GObject . unPerformanceNavigation
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = PerformanceNavigation . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToPerformanceNavigation :: IsGObject obj => obj -> PerformanceNavigation
+castToPerformanceNavigation = castTo gTypePerformanceNavigation "PerformanceNavigation"
+
+foreign import javascript unsafe "window[\"PerformanceNavigation\"]" gTypePerformanceNavigation :: GType
+#else
+#ifndef USE_OLD_WEBKIT
+type IsPerformanceNavigation o = PerformanceNavigationClass o
+#endif
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.PerformanceResourceTiming".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.PerformanceEntry"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming Mozilla PerformanceResourceTiming documentation>
+newtype PerformanceResourceTiming = PerformanceResourceTiming { unPerformanceResourceTiming :: JSRef }
+
+instance Eq (PerformanceResourceTiming) where
+  (PerformanceResourceTiming a) == (PerformanceResourceTiming b) = js_eq a b
+
+instance PToJSRef PerformanceResourceTiming where
+  pToJSRef = unPerformanceResourceTiming
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef PerformanceResourceTiming where
+  pFromJSRef = PerformanceResourceTiming
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef PerformanceResourceTiming where
+  toJSRef = return . unPerformanceResourceTiming
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef PerformanceResourceTiming where
+  fromJSRef = return . fmap PerformanceResourceTiming . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsPerformanceEntry PerformanceResourceTiming
+instance IsGObject PerformanceResourceTiming where
+  toGObject = GObject . unPerformanceResourceTiming
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = PerformanceResourceTiming . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToPerformanceResourceTiming :: IsGObject obj => obj -> PerformanceResourceTiming
+castToPerformanceResourceTiming = castTo gTypePerformanceResourceTiming "PerformanceResourceTiming"
+
+foreign import javascript unsafe "window[\"PerformanceResourceTiming\"]" gTypePerformanceResourceTiming :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.PerformanceTiming".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/PerformanceTiming Mozilla PerformanceTiming documentation>
+newtype PerformanceTiming = PerformanceTiming { unPerformanceTiming :: JSRef }
+
+instance Eq (PerformanceTiming) where
+  (PerformanceTiming a) == (PerformanceTiming b) = js_eq a b
+
+instance PToJSRef PerformanceTiming where
+  pToJSRef = unPerformanceTiming
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef PerformanceTiming where
+  pFromJSRef = PerformanceTiming
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef PerformanceTiming where
+  toJSRef = return . unPerformanceTiming
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef PerformanceTiming where
+  fromJSRef = return . fmap PerformanceTiming . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject PerformanceTiming where
+  toGObject = GObject . unPerformanceTiming
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = PerformanceTiming . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToPerformanceTiming :: IsGObject obj => obj -> PerformanceTiming
+castToPerformanceTiming = castTo gTypePerformanceTiming "PerformanceTiming"
+
+foreign import javascript unsafe "window[\"PerformanceTiming\"]" gTypePerformanceTiming :: GType
+#else
+#ifndef USE_OLD_WEBKIT
+type IsPerformanceTiming o = PerformanceTimingClass o
+#endif
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.PeriodicWave".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/PeriodicWave Mozilla PeriodicWave documentation>
+newtype PeriodicWave = PeriodicWave { unPeriodicWave :: JSRef }
+
+instance Eq (PeriodicWave) where
+  (PeriodicWave a) == (PeriodicWave b) = js_eq a b
+
+instance PToJSRef PeriodicWave where
+  pToJSRef = unPeriodicWave
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef PeriodicWave where
+  pFromJSRef = PeriodicWave
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef PeriodicWave where
+  toJSRef = return . unPeriodicWave
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef PeriodicWave where
+  fromJSRef = return . fmap PeriodicWave . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject PeriodicWave where
+  toGObject = GObject . unPeriodicWave
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = PeriodicWave . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToPeriodicWave :: IsGObject obj => obj -> PeriodicWave
+castToPeriodicWave = castTo gTypePeriodicWave "PeriodicWave"
+
+foreign import javascript unsafe "window[\"PeriodicWave\"]" gTypePeriodicWave :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.Plugin".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/Plugin Mozilla Plugin documentation>
+newtype Plugin = Plugin { unPlugin :: JSRef }
+
+instance Eq (Plugin) where
+  (Plugin a) == (Plugin b) = js_eq a b
+
+instance PToJSRef Plugin where
+  pToJSRef = unPlugin
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef Plugin where
+  pFromJSRef = Plugin
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef Plugin where
+  toJSRef = return . unPlugin
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef Plugin where
+  fromJSRef = return . fmap Plugin . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject Plugin where
+  toGObject = GObject . unPlugin
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = Plugin . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToPlugin :: IsGObject obj => obj -> Plugin
+castToPlugin = castTo gTypePlugin "Plugin"
+
+foreign import javascript unsafe "window[\"Plugin\"]" gTypePlugin :: GType
+#else
+type IsPlugin o = PluginClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.PluginArray".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/PluginArray Mozilla PluginArray documentation>
+newtype PluginArray = PluginArray { unPluginArray :: JSRef }
+
+instance Eq (PluginArray) where
+  (PluginArray a) == (PluginArray b) = js_eq a b
+
+instance PToJSRef PluginArray where
+  pToJSRef = unPluginArray
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef PluginArray where
+  pFromJSRef = PluginArray
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef PluginArray where
+  toJSRef = return . unPluginArray
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef PluginArray where
+  fromJSRef = return . fmap PluginArray . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject PluginArray where
+  toGObject = GObject . unPluginArray
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = PluginArray . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToPluginArray :: IsGObject obj => obj -> PluginArray
+castToPluginArray = castTo gTypePluginArray "PluginArray"
+
+foreign import javascript unsafe "window[\"PluginArray\"]" gTypePluginArray :: GType
+#else
+type IsPluginArray o = PluginArrayClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.PopStateEvent".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.Event"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/PopStateEvent Mozilla PopStateEvent documentation>
+newtype PopStateEvent = PopStateEvent { unPopStateEvent :: JSRef }
+
+instance Eq (PopStateEvent) where
+  (PopStateEvent a) == (PopStateEvent b) = js_eq a b
+
+instance PToJSRef PopStateEvent where
+  pToJSRef = unPopStateEvent
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef PopStateEvent where
+  pFromJSRef = PopStateEvent
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef PopStateEvent where
+  toJSRef = return . unPopStateEvent
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef PopStateEvent where
+  fromJSRef = return . fmap PopStateEvent . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEvent PopStateEvent
+instance IsGObject PopStateEvent where
+  toGObject = GObject . unPopStateEvent
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = PopStateEvent . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToPopStateEvent :: IsGObject obj => obj -> PopStateEvent
+castToPopStateEvent = castTo gTypePopStateEvent "PopStateEvent"
+
+foreign import javascript unsafe "window[\"PopStateEvent\"]" gTypePopStateEvent :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.PositionError".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/PositionError Mozilla PositionError documentation>
+newtype PositionError = PositionError { unPositionError :: JSRef }
+
+instance Eq (PositionError) where
+  (PositionError a) == (PositionError b) = js_eq a b
+
+instance PToJSRef PositionError where
+  pToJSRef = unPositionError
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef PositionError where
+  pFromJSRef = PositionError
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef PositionError where
+  toJSRef = return . unPositionError
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef PositionError where
+  fromJSRef = return . fmap PositionError . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject PositionError where
+  toGObject = GObject . unPositionError
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = PositionError . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToPositionError :: IsGObject obj => obj -> PositionError
+castToPositionError = castTo gTypePositionError "PositionError"
+
+foreign import javascript unsafe "window[\"PositionError\"]" gTypePositionError :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.ProcessingInstruction".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.CharacterData"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/ProcessingInstruction Mozilla ProcessingInstruction documentation>
+newtype ProcessingInstruction = ProcessingInstruction { unProcessingInstruction :: JSRef }
+
+instance Eq (ProcessingInstruction) where
+  (ProcessingInstruction a) == (ProcessingInstruction b) = js_eq a b
+
+instance PToJSRef ProcessingInstruction where
+  pToJSRef = unProcessingInstruction
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef ProcessingInstruction where
+  pFromJSRef = ProcessingInstruction
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef ProcessingInstruction where
+  toJSRef = return . unProcessingInstruction
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef ProcessingInstruction where
+  fromJSRef = return . fmap ProcessingInstruction . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsCharacterData ProcessingInstruction
+instance IsNode ProcessingInstruction
+instance IsEventTarget ProcessingInstruction
+instance IsGObject ProcessingInstruction where
+  toGObject = GObject . unProcessingInstruction
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = ProcessingInstruction . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToProcessingInstruction :: IsGObject obj => obj -> ProcessingInstruction
+castToProcessingInstruction = castTo gTypeProcessingInstruction "ProcessingInstruction"
+
+foreign import javascript unsafe "window[\"ProcessingInstruction\"]" gTypeProcessingInstruction :: GType
+#else
+type IsProcessingInstruction o = ProcessingInstructionClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.ProgressEvent".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.Event"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/ProgressEvent Mozilla ProgressEvent documentation>
+newtype ProgressEvent = ProgressEvent { unProgressEvent :: JSRef }
+
+instance Eq (ProgressEvent) where
+  (ProgressEvent a) == (ProgressEvent b) = js_eq a b
+
+instance PToJSRef ProgressEvent where
+  pToJSRef = unProgressEvent
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef ProgressEvent where
+  pFromJSRef = ProgressEvent
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef ProgressEvent where
+  toJSRef = return . unProgressEvent
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef ProgressEvent where
+  fromJSRef = return . fmap ProgressEvent . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsEvent o => IsProgressEvent o
+toProgressEvent :: IsProgressEvent o => o -> ProgressEvent
+toProgressEvent = unsafeCastGObject . toGObject
+
+instance IsProgressEvent ProgressEvent
+instance IsEvent ProgressEvent
+instance IsGObject ProgressEvent where
+  toGObject = GObject . unProgressEvent
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = ProgressEvent . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToProgressEvent :: IsGObject obj => obj -> ProgressEvent
+castToProgressEvent = castTo gTypeProgressEvent "ProgressEvent"
+
+foreign import javascript unsafe "window[\"ProgressEvent\"]" gTypeProgressEvent :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.QuickTimePluginReplacement".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/QuickTimePluginReplacement Mozilla QuickTimePluginReplacement documentation>
+newtype QuickTimePluginReplacement = QuickTimePluginReplacement { unQuickTimePluginReplacement :: JSRef }
+
+instance Eq (QuickTimePluginReplacement) where
+  (QuickTimePluginReplacement a) == (QuickTimePluginReplacement b) = js_eq a b
+
+instance PToJSRef QuickTimePluginReplacement where
+  pToJSRef = unQuickTimePluginReplacement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef QuickTimePluginReplacement where
+  pFromJSRef = QuickTimePluginReplacement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef QuickTimePluginReplacement where
+  toJSRef = return . unQuickTimePluginReplacement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef QuickTimePluginReplacement where
+  fromJSRef = return . fmap QuickTimePluginReplacement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject QuickTimePluginReplacement where
+  toGObject = GObject . unQuickTimePluginReplacement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = QuickTimePluginReplacement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToQuickTimePluginReplacement :: IsGObject obj => obj -> QuickTimePluginReplacement
+castToQuickTimePluginReplacement = castTo gTypeQuickTimePluginReplacement "QuickTimePluginReplacement"
+
+foreign import javascript unsafe "window[\"QuickTimePluginReplacement\"]" gTypeQuickTimePluginReplacement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.RGBColor".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/RGBColor Mozilla RGBColor documentation>
+newtype RGBColor = RGBColor { unRGBColor :: JSRef }
+
+instance Eq (RGBColor) where
+  (RGBColor a) == (RGBColor b) = js_eq a b
+
+instance PToJSRef RGBColor where
+  pToJSRef = unRGBColor
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef RGBColor where
+  pFromJSRef = RGBColor
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef RGBColor where
+  toJSRef = return . unRGBColor
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef RGBColor where
+  fromJSRef = return . fmap RGBColor . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject RGBColor where
+  toGObject = GObject . unRGBColor
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = RGBColor . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToRGBColor :: IsGObject obj => obj -> RGBColor
+castToRGBColor = castTo gTypeRGBColor "RGBColor"
+
+foreign import javascript unsafe "window[\"RGBColor\"]" gTypeRGBColor :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.RTCConfiguration".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/RTCConfiguration Mozilla RTCConfiguration documentation>
+newtype RTCConfiguration = RTCConfiguration { unRTCConfiguration :: JSRef }
+
+instance Eq (RTCConfiguration) where
+  (RTCConfiguration a) == (RTCConfiguration b) = js_eq a b
+
+instance PToJSRef RTCConfiguration where
+  pToJSRef = unRTCConfiguration
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef RTCConfiguration where
+  pFromJSRef = RTCConfiguration
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef RTCConfiguration where
+  toJSRef = return . unRTCConfiguration
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef RTCConfiguration where
+  fromJSRef = return . fmap RTCConfiguration . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject RTCConfiguration where
+  toGObject = GObject . unRTCConfiguration
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = RTCConfiguration . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToRTCConfiguration :: IsGObject obj => obj -> RTCConfiguration
+castToRTCConfiguration = castTo gTypeRTCConfiguration "RTCConfiguration"
+
+foreign import javascript unsafe "window[\"RTCConfiguration\"]" gTypeRTCConfiguration :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.RTCDTMFSender".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/RTCDTMFSender Mozilla RTCDTMFSender documentation>
+newtype RTCDTMFSender = RTCDTMFSender { unRTCDTMFSender :: JSRef }
+
+instance Eq (RTCDTMFSender) where
+  (RTCDTMFSender a) == (RTCDTMFSender b) = js_eq a b
+
+instance PToJSRef RTCDTMFSender where
+  pToJSRef = unRTCDTMFSender
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef RTCDTMFSender where
+  pFromJSRef = RTCDTMFSender
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef RTCDTMFSender where
+  toJSRef = return . unRTCDTMFSender
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef RTCDTMFSender where
+  fromJSRef = return . fmap RTCDTMFSender . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEventTarget RTCDTMFSender
+instance IsGObject RTCDTMFSender where
+  toGObject = GObject . unRTCDTMFSender
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = RTCDTMFSender . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToRTCDTMFSender :: IsGObject obj => obj -> RTCDTMFSender
+castToRTCDTMFSender = castTo gTypeRTCDTMFSender "RTCDTMFSender"
+
+foreign import javascript unsafe "window[\"RTCDTMFSender\"]" gTypeRTCDTMFSender :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.RTCDTMFToneChangeEvent".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.Event"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/RTCDTMFToneChangeEvent Mozilla RTCDTMFToneChangeEvent documentation>
+newtype RTCDTMFToneChangeEvent = RTCDTMFToneChangeEvent { unRTCDTMFToneChangeEvent :: JSRef }
+
+instance Eq (RTCDTMFToneChangeEvent) where
+  (RTCDTMFToneChangeEvent a) == (RTCDTMFToneChangeEvent b) = js_eq a b
+
+instance PToJSRef RTCDTMFToneChangeEvent where
+  pToJSRef = unRTCDTMFToneChangeEvent
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef RTCDTMFToneChangeEvent where
+  pFromJSRef = RTCDTMFToneChangeEvent
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef RTCDTMFToneChangeEvent where
+  toJSRef = return . unRTCDTMFToneChangeEvent
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef RTCDTMFToneChangeEvent where
+  fromJSRef = return . fmap RTCDTMFToneChangeEvent . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEvent RTCDTMFToneChangeEvent
+instance IsGObject RTCDTMFToneChangeEvent where
+  toGObject = GObject . unRTCDTMFToneChangeEvent
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = RTCDTMFToneChangeEvent . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToRTCDTMFToneChangeEvent :: IsGObject obj => obj -> RTCDTMFToneChangeEvent
+castToRTCDTMFToneChangeEvent = castTo gTypeRTCDTMFToneChangeEvent "RTCDTMFToneChangeEvent"
+
+foreign import javascript unsafe "window[\"RTCDTMFToneChangeEvent\"]" gTypeRTCDTMFToneChangeEvent :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.RTCDataChannel".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/RTCDataChannel Mozilla RTCDataChannel documentation>
+newtype RTCDataChannel = RTCDataChannel { unRTCDataChannel :: JSRef }
+
+instance Eq (RTCDataChannel) where
+  (RTCDataChannel a) == (RTCDataChannel b) = js_eq a b
+
+instance PToJSRef RTCDataChannel where
+  pToJSRef = unRTCDataChannel
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef RTCDataChannel where
+  pFromJSRef = RTCDataChannel
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef RTCDataChannel where
+  toJSRef = return . unRTCDataChannel
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef RTCDataChannel where
+  fromJSRef = return . fmap RTCDataChannel . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEventTarget RTCDataChannel
+instance IsGObject RTCDataChannel where
+  toGObject = GObject . unRTCDataChannel
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = RTCDataChannel . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToRTCDataChannel :: IsGObject obj => obj -> RTCDataChannel
+castToRTCDataChannel = castTo gTypeRTCDataChannel "RTCDataChannel"
+
+foreign import javascript unsafe "window[\"RTCDataChannel\"]" gTypeRTCDataChannel :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.RTCDataChannelEvent".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.Event"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/RTCDataChannelEvent Mozilla RTCDataChannelEvent documentation>
+newtype RTCDataChannelEvent = RTCDataChannelEvent { unRTCDataChannelEvent :: JSRef }
+
+instance Eq (RTCDataChannelEvent) where
+  (RTCDataChannelEvent a) == (RTCDataChannelEvent b) = js_eq a b
+
+instance PToJSRef RTCDataChannelEvent where
+  pToJSRef = unRTCDataChannelEvent
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef RTCDataChannelEvent where
+  pFromJSRef = RTCDataChannelEvent
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef RTCDataChannelEvent where
+  toJSRef = return . unRTCDataChannelEvent
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef RTCDataChannelEvent where
+  fromJSRef = return . fmap RTCDataChannelEvent . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEvent RTCDataChannelEvent
+instance IsGObject RTCDataChannelEvent where
+  toGObject = GObject . unRTCDataChannelEvent
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = RTCDataChannelEvent . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToRTCDataChannelEvent :: IsGObject obj => obj -> RTCDataChannelEvent
+castToRTCDataChannelEvent = castTo gTypeRTCDataChannelEvent "RTCDataChannelEvent"
+
+foreign import javascript unsafe "window[\"RTCDataChannelEvent\"]" gTypeRTCDataChannelEvent :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.RTCIceCandidate".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/RTCIceCandidate Mozilla RTCIceCandidate documentation>
+newtype RTCIceCandidate = RTCIceCandidate { unRTCIceCandidate :: JSRef }
+
+instance Eq (RTCIceCandidate) where
+  (RTCIceCandidate a) == (RTCIceCandidate b) = js_eq a b
+
+instance PToJSRef RTCIceCandidate where
+  pToJSRef = unRTCIceCandidate
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef RTCIceCandidate where
+  pFromJSRef = RTCIceCandidate
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef RTCIceCandidate where
+  toJSRef = return . unRTCIceCandidate
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef RTCIceCandidate where
+  fromJSRef = return . fmap RTCIceCandidate . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject RTCIceCandidate where
+  toGObject = GObject . unRTCIceCandidate
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = RTCIceCandidate . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToRTCIceCandidate :: IsGObject obj => obj -> RTCIceCandidate
+castToRTCIceCandidate = castTo gTypeRTCIceCandidate "RTCIceCandidate"
+
+foreign import javascript unsafe "window[\"RTCIceCandidate\"]" gTypeRTCIceCandidate :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.RTCIceCandidateEvent".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.Event"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/RTCIceCandidateEvent Mozilla RTCIceCandidateEvent documentation>
+newtype RTCIceCandidateEvent = RTCIceCandidateEvent { unRTCIceCandidateEvent :: JSRef }
+
+instance Eq (RTCIceCandidateEvent) where
+  (RTCIceCandidateEvent a) == (RTCIceCandidateEvent b) = js_eq a b
+
+instance PToJSRef RTCIceCandidateEvent where
+  pToJSRef = unRTCIceCandidateEvent
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef RTCIceCandidateEvent where
+  pFromJSRef = RTCIceCandidateEvent
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef RTCIceCandidateEvent where
+  toJSRef = return . unRTCIceCandidateEvent
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef RTCIceCandidateEvent where
+  fromJSRef = return . fmap RTCIceCandidateEvent . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEvent RTCIceCandidateEvent
+instance IsGObject RTCIceCandidateEvent where
+  toGObject = GObject . unRTCIceCandidateEvent
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = RTCIceCandidateEvent . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToRTCIceCandidateEvent :: IsGObject obj => obj -> RTCIceCandidateEvent
+castToRTCIceCandidateEvent = castTo gTypeRTCIceCandidateEvent "RTCIceCandidateEvent"
+
+foreign import javascript unsafe "window[\"RTCIceCandidateEvent\"]" gTypeRTCIceCandidateEvent :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.RTCIceServer".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/RTCIceServer Mozilla RTCIceServer documentation>
+newtype RTCIceServer = RTCIceServer { unRTCIceServer :: JSRef }
+
+instance Eq (RTCIceServer) where
+  (RTCIceServer a) == (RTCIceServer b) = js_eq a b
+
+instance PToJSRef RTCIceServer where
+  pToJSRef = unRTCIceServer
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef RTCIceServer where
+  pFromJSRef = RTCIceServer
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef RTCIceServer where
+  toJSRef = return . unRTCIceServer
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef RTCIceServer where
+  fromJSRef = return . fmap RTCIceServer . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject RTCIceServer where
+  toGObject = GObject . unRTCIceServer
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = RTCIceServer . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToRTCIceServer :: IsGObject obj => obj -> RTCIceServer
+castToRTCIceServer = castTo gTypeRTCIceServer "RTCIceServer"
+
+foreign import javascript unsafe "window[\"RTCIceServer\"]" gTypeRTCIceServer :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.RTCPeerConnection".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/webkitRTCPeerConnection Mozilla webkitRTCPeerConnection documentation>
+newtype RTCPeerConnection = RTCPeerConnection { unRTCPeerConnection :: JSRef }
+
+instance Eq (RTCPeerConnection) where
+  (RTCPeerConnection a) == (RTCPeerConnection b) = js_eq a b
+
+instance PToJSRef RTCPeerConnection where
+  pToJSRef = unRTCPeerConnection
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef RTCPeerConnection where
+  pFromJSRef = RTCPeerConnection
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef RTCPeerConnection where
+  toJSRef = return . unRTCPeerConnection
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef RTCPeerConnection where
+  fromJSRef = return . fmap RTCPeerConnection . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEventTarget RTCPeerConnection
+instance IsGObject RTCPeerConnection where
+  toGObject = GObject . unRTCPeerConnection
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = RTCPeerConnection . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToRTCPeerConnection :: IsGObject obj => obj -> RTCPeerConnection
+castToRTCPeerConnection = castTo gTypeRTCPeerConnection "RTCPeerConnection"
+
+foreign import javascript unsafe "window[\"webkitRTCPeerConnection\"]" gTypeRTCPeerConnection :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.RTCSessionDescription".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/RTCSessionDescription Mozilla RTCSessionDescription documentation>
+newtype RTCSessionDescription = RTCSessionDescription { unRTCSessionDescription :: JSRef }
+
+instance Eq (RTCSessionDescription) where
+  (RTCSessionDescription a) == (RTCSessionDescription b) = js_eq a b
+
+instance PToJSRef RTCSessionDescription where
+  pToJSRef = unRTCSessionDescription
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef RTCSessionDescription where
+  pFromJSRef = RTCSessionDescription
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef RTCSessionDescription where
+  toJSRef = return . unRTCSessionDescription
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef RTCSessionDescription where
+  fromJSRef = return . fmap RTCSessionDescription . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject RTCSessionDescription where
+  toGObject = GObject . unRTCSessionDescription
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = RTCSessionDescription . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToRTCSessionDescription :: IsGObject obj => obj -> RTCSessionDescription
+castToRTCSessionDescription = castTo gTypeRTCSessionDescription "RTCSessionDescription"
+
+foreign import javascript unsafe "window[\"RTCSessionDescription\"]" gTypeRTCSessionDescription :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.RTCStatsReport".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/RTCStatsReport Mozilla RTCStatsReport documentation>
+newtype RTCStatsReport = RTCStatsReport { unRTCStatsReport :: JSRef }
+
+instance Eq (RTCStatsReport) where
+  (RTCStatsReport a) == (RTCStatsReport b) = js_eq a b
+
+instance PToJSRef RTCStatsReport where
+  pToJSRef = unRTCStatsReport
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef RTCStatsReport where
+  pFromJSRef = RTCStatsReport
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef RTCStatsReport where
+  toJSRef = return . unRTCStatsReport
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef RTCStatsReport where
+  fromJSRef = return . fmap RTCStatsReport . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject RTCStatsReport where
+  toGObject = GObject . unRTCStatsReport
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = RTCStatsReport . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToRTCStatsReport :: IsGObject obj => obj -> RTCStatsReport
+castToRTCStatsReport = castTo gTypeRTCStatsReport "RTCStatsReport"
+
+foreign import javascript unsafe "window[\"RTCStatsReport\"]" gTypeRTCStatsReport :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.RTCStatsResponse".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/RTCStatsResponse Mozilla RTCStatsResponse documentation>
+newtype RTCStatsResponse = RTCStatsResponse { unRTCStatsResponse :: JSRef }
+
+instance Eq (RTCStatsResponse) where
+  (RTCStatsResponse a) == (RTCStatsResponse b) = js_eq a b
+
+instance PToJSRef RTCStatsResponse where
+  pToJSRef = unRTCStatsResponse
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef RTCStatsResponse where
+  pFromJSRef = RTCStatsResponse
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef RTCStatsResponse where
+  toJSRef = return . unRTCStatsResponse
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef RTCStatsResponse where
+  fromJSRef = return . fmap RTCStatsResponse . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject RTCStatsResponse where
+  toGObject = GObject . unRTCStatsResponse
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = RTCStatsResponse . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToRTCStatsResponse :: IsGObject obj => obj -> RTCStatsResponse
+castToRTCStatsResponse = castTo gTypeRTCStatsResponse "RTCStatsResponse"
+
+foreign import javascript unsafe "window[\"RTCStatsResponse\"]" gTypeRTCStatsResponse :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.RadioNodeList".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.NodeList"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/RadioNodeList Mozilla RadioNodeList documentation>
+newtype RadioNodeList = RadioNodeList { unRadioNodeList :: JSRef }
+
+instance Eq (RadioNodeList) where
+  (RadioNodeList a) == (RadioNodeList b) = js_eq a b
+
+instance PToJSRef RadioNodeList where
+  pToJSRef = unRadioNodeList
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef RadioNodeList where
+  pFromJSRef = RadioNodeList
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef RadioNodeList where
+  toJSRef = return . unRadioNodeList
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef RadioNodeList where
+  fromJSRef = return . fmap RadioNodeList . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsNodeList RadioNodeList
+instance IsGObject RadioNodeList where
+  toGObject = GObject . unRadioNodeList
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = RadioNodeList . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToRadioNodeList :: IsGObject obj => obj -> RadioNodeList
+castToRadioNodeList = castTo gTypeRadioNodeList "RadioNodeList"
+
+foreign import javascript unsafe "window[\"RadioNodeList\"]" gTypeRadioNodeList :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.Range".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/Range Mozilla Range documentation>
+newtype Range = Range { unRange :: JSRef }
+
+instance Eq (Range) where
+  (Range a) == (Range b) = js_eq a b
+
+instance PToJSRef Range where
+  pToJSRef = unRange
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef Range where
+  pFromJSRef = Range
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef Range where
+  toJSRef = return . unRange
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef Range where
+  fromJSRef = return . fmap Range . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject Range where
+  toGObject = GObject . unRange
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = Range . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToRange :: IsGObject obj => obj -> Range
+castToRange = castTo gTypeRange "Range"
+
+foreign import javascript unsafe "window[\"Range\"]" gTypeRange :: GType
+#else
+type IsRange o = RangeClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.ReadableStream".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream Mozilla ReadableStream documentation>
+newtype ReadableStream = ReadableStream { unReadableStream :: JSRef }
+
+instance Eq (ReadableStream) where
+  (ReadableStream a) == (ReadableStream b) = js_eq a b
+
+instance PToJSRef ReadableStream where
+  pToJSRef = unReadableStream
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef ReadableStream where
+  pFromJSRef = ReadableStream
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef ReadableStream where
+  toJSRef = return . unReadableStream
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef ReadableStream where
+  fromJSRef = return . fmap ReadableStream . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject ReadableStream where
+  toGObject = GObject . unReadableStream
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = ReadableStream . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToReadableStream :: IsGObject obj => obj -> ReadableStream
+castToReadableStream = castTo gTypeReadableStream "ReadableStream"
+
+foreign import javascript unsafe "window[\"ReadableStream\"]" gTypeReadableStream :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.Rect".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/Rect Mozilla Rect documentation>
+newtype Rect = Rect { unRect :: JSRef }
+
+instance Eq (Rect) where
+  (Rect a) == (Rect b) = js_eq a b
+
+instance PToJSRef Rect where
+  pToJSRef = unRect
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef Rect where
+  pFromJSRef = Rect
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef Rect where
+  toJSRef = return . unRect
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef Rect where
+  fromJSRef = return . fmap Rect . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject Rect where
+  toGObject = GObject . unRect
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = Rect . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToRect :: IsGObject obj => obj -> Rect
+castToRect = castTo gTypeRect "Rect"
+
+foreign import javascript unsafe "window[\"Rect\"]" gTypeRect :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SQLError".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SQLError Mozilla SQLError documentation>
+newtype SQLError = SQLError { unSQLError :: JSRef }
+
+instance Eq (SQLError) where
+  (SQLError a) == (SQLError b) = js_eq a b
+
+instance PToJSRef SQLError where
+  pToJSRef = unSQLError
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SQLError where
+  pFromJSRef = SQLError
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SQLError where
+  toJSRef = return . unSQLError
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SQLError where
+  fromJSRef = return . fmap SQLError . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject SQLError where
+  toGObject = GObject . unSQLError
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SQLError . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSQLError :: IsGObject obj => obj -> SQLError
+castToSQLError = castTo gTypeSQLError "SQLError"
+
+foreign import javascript unsafe "window[\"SQLError\"]" gTypeSQLError :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SQLResultSet".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SQLResultSet Mozilla SQLResultSet documentation>
+newtype SQLResultSet = SQLResultSet { unSQLResultSet :: JSRef }
+
+instance Eq (SQLResultSet) where
+  (SQLResultSet a) == (SQLResultSet b) = js_eq a b
+
+instance PToJSRef SQLResultSet where
+  pToJSRef = unSQLResultSet
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SQLResultSet where
+  pFromJSRef = SQLResultSet
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SQLResultSet where
+  toJSRef = return . unSQLResultSet
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SQLResultSet where
+  fromJSRef = return . fmap SQLResultSet . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject SQLResultSet where
+  toGObject = GObject . unSQLResultSet
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SQLResultSet . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSQLResultSet :: IsGObject obj => obj -> SQLResultSet
+castToSQLResultSet = castTo gTypeSQLResultSet "SQLResultSet"
+
+foreign import javascript unsafe "window[\"SQLResultSet\"]" gTypeSQLResultSet :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SQLResultSetRowList".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SQLResultSetRowList Mozilla SQLResultSetRowList documentation>
+newtype SQLResultSetRowList = SQLResultSetRowList { unSQLResultSetRowList :: JSRef }
+
+instance Eq (SQLResultSetRowList) where
+  (SQLResultSetRowList a) == (SQLResultSetRowList b) = js_eq a b
+
+instance PToJSRef SQLResultSetRowList where
+  pToJSRef = unSQLResultSetRowList
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SQLResultSetRowList where
+  pFromJSRef = SQLResultSetRowList
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SQLResultSetRowList where
+  toJSRef = return . unSQLResultSetRowList
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SQLResultSetRowList where
+  fromJSRef = return . fmap SQLResultSetRowList . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject SQLResultSetRowList where
+  toGObject = GObject . unSQLResultSetRowList
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SQLResultSetRowList . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSQLResultSetRowList :: IsGObject obj => obj -> SQLResultSetRowList
+castToSQLResultSetRowList = castTo gTypeSQLResultSetRowList "SQLResultSetRowList"
+
+foreign import javascript unsafe "window[\"SQLResultSetRowList\"]" gTypeSQLResultSetRowList :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SQLTransaction".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SQLTransaction Mozilla SQLTransaction documentation>
+newtype SQLTransaction = SQLTransaction { unSQLTransaction :: JSRef }
+
+instance Eq (SQLTransaction) where
+  (SQLTransaction a) == (SQLTransaction b) = js_eq a b
+
+instance PToJSRef SQLTransaction where
+  pToJSRef = unSQLTransaction
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SQLTransaction where
+  pFromJSRef = SQLTransaction
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SQLTransaction where
+  toJSRef = return . unSQLTransaction
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SQLTransaction where
+  fromJSRef = return . fmap SQLTransaction . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject SQLTransaction where
+  toGObject = GObject . unSQLTransaction
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SQLTransaction . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSQLTransaction :: IsGObject obj => obj -> SQLTransaction
+castToSQLTransaction = castTo gTypeSQLTransaction "SQLTransaction"
+
+foreign import javascript unsafe "window[\"SQLTransaction\"]" gTypeSQLTransaction :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGAElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGGraphicsElement"
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGAElement Mozilla SVGAElement documentation>
+newtype SVGAElement = SVGAElement { unSVGAElement :: JSRef }
+
+instance Eq (SVGAElement) where
+  (SVGAElement a) == (SVGAElement b) = js_eq a b
+
+instance PToJSRef SVGAElement where
+  pToJSRef = unSVGAElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGAElement where
+  pFromJSRef = SVGAElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGAElement where
+  toJSRef = return . unSVGAElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGAElement where
+  fromJSRef = return . fmap SVGAElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGGraphicsElement SVGAElement
+instance IsSVGElement SVGAElement
+instance IsElement SVGAElement
+instance IsNode SVGAElement
+instance IsEventTarget SVGAElement
+instance IsGObject SVGAElement where
+  toGObject = GObject . unSVGAElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGAElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGAElement :: IsGObject obj => obj -> SVGAElement
+castToSVGAElement = castTo gTypeSVGAElement "SVGAElement"
+
+foreign import javascript unsafe "window[\"SVGAElement\"]" gTypeSVGAElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGAltGlyphDefElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGAltGlyphDefElement Mozilla SVGAltGlyphDefElement documentation>
+newtype SVGAltGlyphDefElement = SVGAltGlyphDefElement { unSVGAltGlyphDefElement :: JSRef }
+
+instance Eq (SVGAltGlyphDefElement) where
+  (SVGAltGlyphDefElement a) == (SVGAltGlyphDefElement b) = js_eq a b
+
+instance PToJSRef SVGAltGlyphDefElement where
+  pToJSRef = unSVGAltGlyphDefElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGAltGlyphDefElement where
+  pFromJSRef = SVGAltGlyphDefElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGAltGlyphDefElement where
+  toJSRef = return . unSVGAltGlyphDefElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGAltGlyphDefElement where
+  fromJSRef = return . fmap SVGAltGlyphDefElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGElement SVGAltGlyphDefElement
+instance IsElement SVGAltGlyphDefElement
+instance IsNode SVGAltGlyphDefElement
+instance IsEventTarget SVGAltGlyphDefElement
+instance IsGObject SVGAltGlyphDefElement where
+  toGObject = GObject . unSVGAltGlyphDefElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGAltGlyphDefElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGAltGlyphDefElement :: IsGObject obj => obj -> SVGAltGlyphDefElement
+castToSVGAltGlyphDefElement = castTo gTypeSVGAltGlyphDefElement "SVGAltGlyphDefElement"
+
+foreign import javascript unsafe "window[\"SVGAltGlyphDefElement\"]" gTypeSVGAltGlyphDefElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGAltGlyphElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGTextPositioningElement"
+--     * "GHCJS.DOM.SVGTextContentElement"
+--     * "GHCJS.DOM.SVGGraphicsElement"
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGAltGlyphElement Mozilla SVGAltGlyphElement documentation>
+newtype SVGAltGlyphElement = SVGAltGlyphElement { unSVGAltGlyphElement :: JSRef }
+
+instance Eq (SVGAltGlyphElement) where
+  (SVGAltGlyphElement a) == (SVGAltGlyphElement b) = js_eq a b
+
+instance PToJSRef SVGAltGlyphElement where
+  pToJSRef = unSVGAltGlyphElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGAltGlyphElement where
+  pFromJSRef = SVGAltGlyphElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGAltGlyphElement where
+  toJSRef = return . unSVGAltGlyphElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGAltGlyphElement where
+  fromJSRef = return . fmap SVGAltGlyphElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGTextPositioningElement SVGAltGlyphElement
+instance IsSVGTextContentElement SVGAltGlyphElement
+instance IsSVGGraphicsElement SVGAltGlyphElement
+instance IsSVGElement SVGAltGlyphElement
+instance IsElement SVGAltGlyphElement
+instance IsNode SVGAltGlyphElement
+instance IsEventTarget SVGAltGlyphElement
+instance IsGObject SVGAltGlyphElement where
+  toGObject = GObject . unSVGAltGlyphElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGAltGlyphElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGAltGlyphElement :: IsGObject obj => obj -> SVGAltGlyphElement
+castToSVGAltGlyphElement = castTo gTypeSVGAltGlyphElement "SVGAltGlyphElement"
+
+foreign import javascript unsafe "window[\"SVGAltGlyphElement\"]" gTypeSVGAltGlyphElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGAltGlyphItemElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGAltGlyphItemElement Mozilla SVGAltGlyphItemElement documentation>
+newtype SVGAltGlyphItemElement = SVGAltGlyphItemElement { unSVGAltGlyphItemElement :: JSRef }
+
+instance Eq (SVGAltGlyphItemElement) where
+  (SVGAltGlyphItemElement a) == (SVGAltGlyphItemElement b) = js_eq a b
+
+instance PToJSRef SVGAltGlyphItemElement where
+  pToJSRef = unSVGAltGlyphItemElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGAltGlyphItemElement where
+  pFromJSRef = SVGAltGlyphItemElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGAltGlyphItemElement where
+  toJSRef = return . unSVGAltGlyphItemElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGAltGlyphItemElement where
+  fromJSRef = return . fmap SVGAltGlyphItemElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGElement SVGAltGlyphItemElement
+instance IsElement SVGAltGlyphItemElement
+instance IsNode SVGAltGlyphItemElement
+instance IsEventTarget SVGAltGlyphItemElement
+instance IsGObject SVGAltGlyphItemElement where
+  toGObject = GObject . unSVGAltGlyphItemElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGAltGlyphItemElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGAltGlyphItemElement :: IsGObject obj => obj -> SVGAltGlyphItemElement
+castToSVGAltGlyphItemElement = castTo gTypeSVGAltGlyphItemElement "SVGAltGlyphItemElement"
+
+foreign import javascript unsafe "window[\"SVGAltGlyphItemElement\"]" gTypeSVGAltGlyphItemElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGAngle".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGAngle Mozilla SVGAngle documentation>
+newtype SVGAngle = SVGAngle { unSVGAngle :: JSRef }
+
+instance Eq (SVGAngle) where
+  (SVGAngle a) == (SVGAngle b) = js_eq a b
+
+instance PToJSRef SVGAngle where
+  pToJSRef = unSVGAngle
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGAngle where
+  pFromJSRef = SVGAngle
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGAngle where
+  toJSRef = return . unSVGAngle
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGAngle where
+  fromJSRef = return . fmap SVGAngle . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject SVGAngle where
+  toGObject = GObject . unSVGAngle
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGAngle . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGAngle :: IsGObject obj => obj -> SVGAngle
+castToSVGAngle = castTo gTypeSVGAngle "SVGAngle"
+
+foreign import javascript unsafe "window[\"SVGAngle\"]" gTypeSVGAngle :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGAnimateColorElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGAnimationElement"
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimateColorElement Mozilla SVGAnimateColorElement documentation>
+newtype SVGAnimateColorElement = SVGAnimateColorElement { unSVGAnimateColorElement :: JSRef }
+
+instance Eq (SVGAnimateColorElement) where
+  (SVGAnimateColorElement a) == (SVGAnimateColorElement b) = js_eq a b
+
+instance PToJSRef SVGAnimateColorElement where
+  pToJSRef = unSVGAnimateColorElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGAnimateColorElement where
+  pFromJSRef = SVGAnimateColorElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGAnimateColorElement where
+  toJSRef = return . unSVGAnimateColorElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGAnimateColorElement where
+  fromJSRef = return . fmap SVGAnimateColorElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGAnimationElement SVGAnimateColorElement
+instance IsSVGElement SVGAnimateColorElement
+instance IsElement SVGAnimateColorElement
+instance IsNode SVGAnimateColorElement
+instance IsEventTarget SVGAnimateColorElement
+instance IsGObject SVGAnimateColorElement where
+  toGObject = GObject . unSVGAnimateColorElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGAnimateColorElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGAnimateColorElement :: IsGObject obj => obj -> SVGAnimateColorElement
+castToSVGAnimateColorElement = castTo gTypeSVGAnimateColorElement "SVGAnimateColorElement"
+
+foreign import javascript unsafe "window[\"SVGAnimateColorElement\"]" gTypeSVGAnimateColorElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGAnimateElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGAnimationElement"
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimateElement Mozilla SVGAnimateElement documentation>
+newtype SVGAnimateElement = SVGAnimateElement { unSVGAnimateElement :: JSRef }
+
+instance Eq (SVGAnimateElement) where
+  (SVGAnimateElement a) == (SVGAnimateElement b) = js_eq a b
+
+instance PToJSRef SVGAnimateElement where
+  pToJSRef = unSVGAnimateElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGAnimateElement where
+  pFromJSRef = SVGAnimateElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGAnimateElement where
+  toJSRef = return . unSVGAnimateElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGAnimateElement where
+  fromJSRef = return . fmap SVGAnimateElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGAnimationElement SVGAnimateElement
+instance IsSVGElement SVGAnimateElement
+instance IsElement SVGAnimateElement
+instance IsNode SVGAnimateElement
+instance IsEventTarget SVGAnimateElement
+instance IsGObject SVGAnimateElement where
+  toGObject = GObject . unSVGAnimateElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGAnimateElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGAnimateElement :: IsGObject obj => obj -> SVGAnimateElement
+castToSVGAnimateElement = castTo gTypeSVGAnimateElement "SVGAnimateElement"
+
+foreign import javascript unsafe "window[\"SVGAnimateElement\"]" gTypeSVGAnimateElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGAnimateMotionElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGAnimationElement"
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimateMotionElement Mozilla SVGAnimateMotionElement documentation>
+newtype SVGAnimateMotionElement = SVGAnimateMotionElement { unSVGAnimateMotionElement :: JSRef }
+
+instance Eq (SVGAnimateMotionElement) where
+  (SVGAnimateMotionElement a) == (SVGAnimateMotionElement b) = js_eq a b
+
+instance PToJSRef SVGAnimateMotionElement where
+  pToJSRef = unSVGAnimateMotionElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGAnimateMotionElement where
+  pFromJSRef = SVGAnimateMotionElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGAnimateMotionElement where
+  toJSRef = return . unSVGAnimateMotionElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGAnimateMotionElement where
+  fromJSRef = return . fmap SVGAnimateMotionElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGAnimationElement SVGAnimateMotionElement
+instance IsSVGElement SVGAnimateMotionElement
+instance IsElement SVGAnimateMotionElement
+instance IsNode SVGAnimateMotionElement
+instance IsEventTarget SVGAnimateMotionElement
+instance IsGObject SVGAnimateMotionElement where
+  toGObject = GObject . unSVGAnimateMotionElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGAnimateMotionElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGAnimateMotionElement :: IsGObject obj => obj -> SVGAnimateMotionElement
+castToSVGAnimateMotionElement = castTo gTypeSVGAnimateMotionElement "SVGAnimateMotionElement"
+
+foreign import javascript unsafe "window[\"SVGAnimateMotionElement\"]" gTypeSVGAnimateMotionElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGAnimateTransformElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGAnimationElement"
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimateTransformElement Mozilla SVGAnimateTransformElement documentation>
+newtype SVGAnimateTransformElement = SVGAnimateTransformElement { unSVGAnimateTransformElement :: JSRef }
+
+instance Eq (SVGAnimateTransformElement) where
+  (SVGAnimateTransformElement a) == (SVGAnimateTransformElement b) = js_eq a b
+
+instance PToJSRef SVGAnimateTransformElement where
+  pToJSRef = unSVGAnimateTransformElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGAnimateTransformElement where
+  pFromJSRef = SVGAnimateTransformElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGAnimateTransformElement where
+  toJSRef = return . unSVGAnimateTransformElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGAnimateTransformElement where
+  fromJSRef = return . fmap SVGAnimateTransformElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGAnimationElement SVGAnimateTransformElement
+instance IsSVGElement SVGAnimateTransformElement
+instance IsElement SVGAnimateTransformElement
+instance IsNode SVGAnimateTransformElement
+instance IsEventTarget SVGAnimateTransformElement
+instance IsGObject SVGAnimateTransformElement where
+  toGObject = GObject . unSVGAnimateTransformElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGAnimateTransformElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGAnimateTransformElement :: IsGObject obj => obj -> SVGAnimateTransformElement
+castToSVGAnimateTransformElement = castTo gTypeSVGAnimateTransformElement "SVGAnimateTransformElement"
+
+foreign import javascript unsafe "window[\"SVGAnimateTransformElement\"]" gTypeSVGAnimateTransformElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGAnimatedAngle".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimatedAngle Mozilla SVGAnimatedAngle documentation>
+newtype SVGAnimatedAngle = SVGAnimatedAngle { unSVGAnimatedAngle :: JSRef }
+
+instance Eq (SVGAnimatedAngle) where
+  (SVGAnimatedAngle a) == (SVGAnimatedAngle b) = js_eq a b
+
+instance PToJSRef SVGAnimatedAngle where
+  pToJSRef = unSVGAnimatedAngle
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGAnimatedAngle where
+  pFromJSRef = SVGAnimatedAngle
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGAnimatedAngle where
+  toJSRef = return . unSVGAnimatedAngle
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGAnimatedAngle where
+  fromJSRef = return . fmap SVGAnimatedAngle . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject SVGAnimatedAngle where
+  toGObject = GObject . unSVGAnimatedAngle
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGAnimatedAngle . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGAnimatedAngle :: IsGObject obj => obj -> SVGAnimatedAngle
+castToSVGAnimatedAngle = castTo gTypeSVGAnimatedAngle "SVGAnimatedAngle"
+
+foreign import javascript unsafe "window[\"SVGAnimatedAngle\"]" gTypeSVGAnimatedAngle :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGAnimatedBoolean".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimatedBoolean Mozilla SVGAnimatedBoolean documentation>
+newtype SVGAnimatedBoolean = SVGAnimatedBoolean { unSVGAnimatedBoolean :: JSRef }
+
+instance Eq (SVGAnimatedBoolean) where
+  (SVGAnimatedBoolean a) == (SVGAnimatedBoolean b) = js_eq a b
+
+instance PToJSRef SVGAnimatedBoolean where
+  pToJSRef = unSVGAnimatedBoolean
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGAnimatedBoolean where
+  pFromJSRef = SVGAnimatedBoolean
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGAnimatedBoolean where
+  toJSRef = return . unSVGAnimatedBoolean
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGAnimatedBoolean where
+  fromJSRef = return . fmap SVGAnimatedBoolean . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject SVGAnimatedBoolean where
+  toGObject = GObject . unSVGAnimatedBoolean
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGAnimatedBoolean . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGAnimatedBoolean :: IsGObject obj => obj -> SVGAnimatedBoolean
+castToSVGAnimatedBoolean = castTo gTypeSVGAnimatedBoolean "SVGAnimatedBoolean"
+
+foreign import javascript unsafe "window[\"SVGAnimatedBoolean\"]" gTypeSVGAnimatedBoolean :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGAnimatedEnumeration".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimatedEnumeration Mozilla SVGAnimatedEnumeration documentation>
+newtype SVGAnimatedEnumeration = SVGAnimatedEnumeration { unSVGAnimatedEnumeration :: JSRef }
+
+instance Eq (SVGAnimatedEnumeration) where
+  (SVGAnimatedEnumeration a) == (SVGAnimatedEnumeration b) = js_eq a b
+
+instance PToJSRef SVGAnimatedEnumeration where
+  pToJSRef = unSVGAnimatedEnumeration
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGAnimatedEnumeration where
+  pFromJSRef = SVGAnimatedEnumeration
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGAnimatedEnumeration where
+  toJSRef = return . unSVGAnimatedEnumeration
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGAnimatedEnumeration where
+  fromJSRef = return . fmap SVGAnimatedEnumeration . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject SVGAnimatedEnumeration where
+  toGObject = GObject . unSVGAnimatedEnumeration
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGAnimatedEnumeration . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGAnimatedEnumeration :: IsGObject obj => obj -> SVGAnimatedEnumeration
+castToSVGAnimatedEnumeration = castTo gTypeSVGAnimatedEnumeration "SVGAnimatedEnumeration"
+
+foreign import javascript unsafe "window[\"SVGAnimatedEnumeration\"]" gTypeSVGAnimatedEnumeration :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGAnimatedInteger".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimatedInteger Mozilla SVGAnimatedInteger documentation>
+newtype SVGAnimatedInteger = SVGAnimatedInteger { unSVGAnimatedInteger :: JSRef }
+
+instance Eq (SVGAnimatedInteger) where
+  (SVGAnimatedInteger a) == (SVGAnimatedInteger b) = js_eq a b
+
+instance PToJSRef SVGAnimatedInteger where
+  pToJSRef = unSVGAnimatedInteger
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGAnimatedInteger where
+  pFromJSRef = SVGAnimatedInteger
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGAnimatedInteger where
+  toJSRef = return . unSVGAnimatedInteger
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGAnimatedInteger where
+  fromJSRef = return . fmap SVGAnimatedInteger . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject SVGAnimatedInteger where
+  toGObject = GObject . unSVGAnimatedInteger
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGAnimatedInteger . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGAnimatedInteger :: IsGObject obj => obj -> SVGAnimatedInteger
+castToSVGAnimatedInteger = castTo gTypeSVGAnimatedInteger "SVGAnimatedInteger"
+
+foreign import javascript unsafe "window[\"SVGAnimatedInteger\"]" gTypeSVGAnimatedInteger :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGAnimatedLength".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimatedLength Mozilla SVGAnimatedLength documentation>
+newtype SVGAnimatedLength = SVGAnimatedLength { unSVGAnimatedLength :: JSRef }
+
+instance Eq (SVGAnimatedLength) where
+  (SVGAnimatedLength a) == (SVGAnimatedLength b) = js_eq a b
+
+instance PToJSRef SVGAnimatedLength where
+  pToJSRef = unSVGAnimatedLength
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGAnimatedLength where
+  pFromJSRef = SVGAnimatedLength
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGAnimatedLength where
+  toJSRef = return . unSVGAnimatedLength
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGAnimatedLength where
+  fromJSRef = return . fmap SVGAnimatedLength . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject SVGAnimatedLength where
+  toGObject = GObject . unSVGAnimatedLength
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGAnimatedLength . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGAnimatedLength :: IsGObject obj => obj -> SVGAnimatedLength
+castToSVGAnimatedLength = castTo gTypeSVGAnimatedLength "SVGAnimatedLength"
+
+foreign import javascript unsafe "window[\"SVGAnimatedLength\"]" gTypeSVGAnimatedLength :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGAnimatedLengthList".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimatedLengthList Mozilla SVGAnimatedLengthList documentation>
+newtype SVGAnimatedLengthList = SVGAnimatedLengthList { unSVGAnimatedLengthList :: JSRef }
+
+instance Eq (SVGAnimatedLengthList) where
+  (SVGAnimatedLengthList a) == (SVGAnimatedLengthList b) = js_eq a b
+
+instance PToJSRef SVGAnimatedLengthList where
+  pToJSRef = unSVGAnimatedLengthList
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGAnimatedLengthList where
+  pFromJSRef = SVGAnimatedLengthList
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGAnimatedLengthList where
+  toJSRef = return . unSVGAnimatedLengthList
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGAnimatedLengthList where
+  fromJSRef = return . fmap SVGAnimatedLengthList . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject SVGAnimatedLengthList where
+  toGObject = GObject . unSVGAnimatedLengthList
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGAnimatedLengthList . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGAnimatedLengthList :: IsGObject obj => obj -> SVGAnimatedLengthList
+castToSVGAnimatedLengthList = castTo gTypeSVGAnimatedLengthList "SVGAnimatedLengthList"
+
+foreign import javascript unsafe "window[\"SVGAnimatedLengthList\"]" gTypeSVGAnimatedLengthList :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGAnimatedNumber".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimatedNumber Mozilla SVGAnimatedNumber documentation>
+newtype SVGAnimatedNumber = SVGAnimatedNumber { unSVGAnimatedNumber :: JSRef }
+
+instance Eq (SVGAnimatedNumber) where
+  (SVGAnimatedNumber a) == (SVGAnimatedNumber b) = js_eq a b
+
+instance PToJSRef SVGAnimatedNumber where
+  pToJSRef = unSVGAnimatedNumber
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGAnimatedNumber where
+  pFromJSRef = SVGAnimatedNumber
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGAnimatedNumber where
+  toJSRef = return . unSVGAnimatedNumber
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGAnimatedNumber where
+  fromJSRef = return . fmap SVGAnimatedNumber . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject SVGAnimatedNumber where
+  toGObject = GObject . unSVGAnimatedNumber
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGAnimatedNumber . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGAnimatedNumber :: IsGObject obj => obj -> SVGAnimatedNumber
+castToSVGAnimatedNumber = castTo gTypeSVGAnimatedNumber "SVGAnimatedNumber"
+
+foreign import javascript unsafe "window[\"SVGAnimatedNumber\"]" gTypeSVGAnimatedNumber :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGAnimatedNumberList".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimatedNumberList Mozilla SVGAnimatedNumberList documentation>
+newtype SVGAnimatedNumberList = SVGAnimatedNumberList { unSVGAnimatedNumberList :: JSRef }
+
+instance Eq (SVGAnimatedNumberList) where
+  (SVGAnimatedNumberList a) == (SVGAnimatedNumberList b) = js_eq a b
+
+instance PToJSRef SVGAnimatedNumberList where
+  pToJSRef = unSVGAnimatedNumberList
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGAnimatedNumberList where
+  pFromJSRef = SVGAnimatedNumberList
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGAnimatedNumberList where
+  toJSRef = return . unSVGAnimatedNumberList
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGAnimatedNumberList where
+  fromJSRef = return . fmap SVGAnimatedNumberList . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject SVGAnimatedNumberList where
+  toGObject = GObject . unSVGAnimatedNumberList
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGAnimatedNumberList . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGAnimatedNumberList :: IsGObject obj => obj -> SVGAnimatedNumberList
+castToSVGAnimatedNumberList = castTo gTypeSVGAnimatedNumberList "SVGAnimatedNumberList"
+
+foreign import javascript unsafe "window[\"SVGAnimatedNumberList\"]" gTypeSVGAnimatedNumberList :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGAnimatedPreserveAspectRatio".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimatedPreserveAspectRatio Mozilla SVGAnimatedPreserveAspectRatio documentation>
+newtype SVGAnimatedPreserveAspectRatio = SVGAnimatedPreserveAspectRatio { unSVGAnimatedPreserveAspectRatio :: JSRef }
+
+instance Eq (SVGAnimatedPreserveAspectRatio) where
+  (SVGAnimatedPreserveAspectRatio a) == (SVGAnimatedPreserveAspectRatio b) = js_eq a b
+
+instance PToJSRef SVGAnimatedPreserveAspectRatio where
+  pToJSRef = unSVGAnimatedPreserveAspectRatio
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGAnimatedPreserveAspectRatio where
+  pFromJSRef = SVGAnimatedPreserveAspectRatio
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGAnimatedPreserveAspectRatio where
+  toJSRef = return . unSVGAnimatedPreserveAspectRatio
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGAnimatedPreserveAspectRatio where
+  fromJSRef = return . fmap SVGAnimatedPreserveAspectRatio . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject SVGAnimatedPreserveAspectRatio where
+  toGObject = GObject . unSVGAnimatedPreserveAspectRatio
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGAnimatedPreserveAspectRatio . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGAnimatedPreserveAspectRatio :: IsGObject obj => obj -> SVGAnimatedPreserveAspectRatio
+castToSVGAnimatedPreserveAspectRatio = castTo gTypeSVGAnimatedPreserveAspectRatio "SVGAnimatedPreserveAspectRatio"
+
+foreign import javascript unsafe "window[\"SVGAnimatedPreserveAspectRatio\"]" gTypeSVGAnimatedPreserveAspectRatio :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGAnimatedRect".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimatedRect Mozilla SVGAnimatedRect documentation>
+newtype SVGAnimatedRect = SVGAnimatedRect { unSVGAnimatedRect :: JSRef }
+
+instance Eq (SVGAnimatedRect) where
+  (SVGAnimatedRect a) == (SVGAnimatedRect b) = js_eq a b
+
+instance PToJSRef SVGAnimatedRect where
+  pToJSRef = unSVGAnimatedRect
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGAnimatedRect where
+  pFromJSRef = SVGAnimatedRect
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGAnimatedRect where
+  toJSRef = return . unSVGAnimatedRect
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGAnimatedRect where
+  fromJSRef = return . fmap SVGAnimatedRect . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject SVGAnimatedRect where
+  toGObject = GObject . unSVGAnimatedRect
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGAnimatedRect . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGAnimatedRect :: IsGObject obj => obj -> SVGAnimatedRect
+castToSVGAnimatedRect = castTo gTypeSVGAnimatedRect "SVGAnimatedRect"
+
+foreign import javascript unsafe "window[\"SVGAnimatedRect\"]" gTypeSVGAnimatedRect :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGAnimatedString".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimatedString Mozilla SVGAnimatedString documentation>
+newtype SVGAnimatedString = SVGAnimatedString { unSVGAnimatedString :: JSRef }
+
+instance Eq (SVGAnimatedString) where
+  (SVGAnimatedString a) == (SVGAnimatedString b) = js_eq a b
+
+instance PToJSRef SVGAnimatedString where
+  pToJSRef = unSVGAnimatedString
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGAnimatedString where
+  pFromJSRef = SVGAnimatedString
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGAnimatedString where
+  toJSRef = return . unSVGAnimatedString
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGAnimatedString where
+  fromJSRef = return . fmap SVGAnimatedString . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject SVGAnimatedString where
+  toGObject = GObject . unSVGAnimatedString
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGAnimatedString . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGAnimatedString :: IsGObject obj => obj -> SVGAnimatedString
+castToSVGAnimatedString = castTo gTypeSVGAnimatedString "SVGAnimatedString"
+
+foreign import javascript unsafe "window[\"SVGAnimatedString\"]" gTypeSVGAnimatedString :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGAnimatedTransformList".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimatedTransformList Mozilla SVGAnimatedTransformList documentation>
+newtype SVGAnimatedTransformList = SVGAnimatedTransformList { unSVGAnimatedTransformList :: JSRef }
+
+instance Eq (SVGAnimatedTransformList) where
+  (SVGAnimatedTransformList a) == (SVGAnimatedTransformList b) = js_eq a b
+
+instance PToJSRef SVGAnimatedTransformList where
+  pToJSRef = unSVGAnimatedTransformList
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGAnimatedTransformList where
+  pFromJSRef = SVGAnimatedTransformList
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGAnimatedTransformList where
+  toJSRef = return . unSVGAnimatedTransformList
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGAnimatedTransformList where
+  fromJSRef = return . fmap SVGAnimatedTransformList . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject SVGAnimatedTransformList where
+  toGObject = GObject . unSVGAnimatedTransformList
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGAnimatedTransformList . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGAnimatedTransformList :: IsGObject obj => obj -> SVGAnimatedTransformList
+castToSVGAnimatedTransformList = castTo gTypeSVGAnimatedTransformList "SVGAnimatedTransformList"
+
+foreign import javascript unsafe "window[\"SVGAnimatedTransformList\"]" gTypeSVGAnimatedTransformList :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGAnimationElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGAnimationElement Mozilla SVGAnimationElement documentation>
+newtype SVGAnimationElement = SVGAnimationElement { unSVGAnimationElement :: JSRef }
+
+instance Eq (SVGAnimationElement) where
+  (SVGAnimationElement a) == (SVGAnimationElement b) = js_eq a b
+
+instance PToJSRef SVGAnimationElement where
+  pToJSRef = unSVGAnimationElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGAnimationElement where
+  pFromJSRef = SVGAnimationElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGAnimationElement where
+  toJSRef = return . unSVGAnimationElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGAnimationElement where
+  fromJSRef = return . fmap SVGAnimationElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsSVGElement o => IsSVGAnimationElement o
+toSVGAnimationElement :: IsSVGAnimationElement o => o -> SVGAnimationElement
+toSVGAnimationElement = unsafeCastGObject . toGObject
+
+instance IsSVGAnimationElement SVGAnimationElement
+instance IsSVGElement SVGAnimationElement
+instance IsElement SVGAnimationElement
+instance IsNode SVGAnimationElement
+instance IsEventTarget SVGAnimationElement
+instance IsGObject SVGAnimationElement where
+  toGObject = GObject . unSVGAnimationElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGAnimationElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGAnimationElement :: IsGObject obj => obj -> SVGAnimationElement
+castToSVGAnimationElement = castTo gTypeSVGAnimationElement "SVGAnimationElement"
+
+foreign import javascript unsafe "window[\"SVGAnimationElement\"]" gTypeSVGAnimationElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGCircleElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGGraphicsElement"
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGCircleElement Mozilla SVGCircleElement documentation>
+newtype SVGCircleElement = SVGCircleElement { unSVGCircleElement :: JSRef }
+
+instance Eq (SVGCircleElement) where
+  (SVGCircleElement a) == (SVGCircleElement b) = js_eq a b
+
+instance PToJSRef SVGCircleElement where
+  pToJSRef = unSVGCircleElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGCircleElement where
+  pFromJSRef = SVGCircleElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGCircleElement where
+  toJSRef = return . unSVGCircleElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGCircleElement where
+  fromJSRef = return . fmap SVGCircleElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGGraphicsElement SVGCircleElement
+instance IsSVGElement SVGCircleElement
+instance IsElement SVGCircleElement
+instance IsNode SVGCircleElement
+instance IsEventTarget SVGCircleElement
+instance IsGObject SVGCircleElement where
+  toGObject = GObject . unSVGCircleElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGCircleElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGCircleElement :: IsGObject obj => obj -> SVGCircleElement
+castToSVGCircleElement = castTo gTypeSVGCircleElement "SVGCircleElement"
+
+foreign import javascript unsafe "window[\"SVGCircleElement\"]" gTypeSVGCircleElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGClipPathElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGGraphicsElement"
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGClipPathElement Mozilla SVGClipPathElement documentation>
+newtype SVGClipPathElement = SVGClipPathElement { unSVGClipPathElement :: JSRef }
+
+instance Eq (SVGClipPathElement) where
+  (SVGClipPathElement a) == (SVGClipPathElement b) = js_eq a b
+
+instance PToJSRef SVGClipPathElement where
+  pToJSRef = unSVGClipPathElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGClipPathElement where
+  pFromJSRef = SVGClipPathElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGClipPathElement where
+  toJSRef = return . unSVGClipPathElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGClipPathElement where
+  fromJSRef = return . fmap SVGClipPathElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGGraphicsElement SVGClipPathElement
+instance IsSVGElement SVGClipPathElement
+instance IsElement SVGClipPathElement
+instance IsNode SVGClipPathElement
+instance IsEventTarget SVGClipPathElement
+instance IsGObject SVGClipPathElement where
+  toGObject = GObject . unSVGClipPathElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGClipPathElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGClipPathElement :: IsGObject obj => obj -> SVGClipPathElement
+castToSVGClipPathElement = castTo gTypeSVGClipPathElement "SVGClipPathElement"
+
+foreign import javascript unsafe "window[\"SVGClipPathElement\"]" gTypeSVGClipPathElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGColor".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.CSSValue"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGColor Mozilla SVGColor documentation>
+newtype SVGColor = SVGColor { unSVGColor :: JSRef }
+
+instance Eq (SVGColor) where
+  (SVGColor a) == (SVGColor b) = js_eq a b
+
+instance PToJSRef SVGColor where
+  pToJSRef = unSVGColor
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGColor where
+  pFromJSRef = SVGColor
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGColor where
+  toJSRef = return . unSVGColor
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGColor where
+  fromJSRef = return . fmap SVGColor . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsCSSValue o => IsSVGColor o
+toSVGColor :: IsSVGColor o => o -> SVGColor
+toSVGColor = unsafeCastGObject . toGObject
+
+instance IsSVGColor SVGColor
+instance IsCSSValue SVGColor
+instance IsGObject SVGColor where
+  toGObject = GObject . unSVGColor
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGColor . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGColor :: IsGObject obj => obj -> SVGColor
+castToSVGColor = castTo gTypeSVGColor "SVGColor"
+
+foreign import javascript unsafe "window[\"SVGColor\"]" gTypeSVGColor :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGComponentTransferFunctionElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGComponentTransferFunctionElement Mozilla SVGComponentTransferFunctionElement documentation>
+newtype SVGComponentTransferFunctionElement = SVGComponentTransferFunctionElement { unSVGComponentTransferFunctionElement :: JSRef }
+
+instance Eq (SVGComponentTransferFunctionElement) where
+  (SVGComponentTransferFunctionElement a) == (SVGComponentTransferFunctionElement b) = js_eq a b
+
+instance PToJSRef SVGComponentTransferFunctionElement where
+  pToJSRef = unSVGComponentTransferFunctionElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGComponentTransferFunctionElement where
+  pFromJSRef = SVGComponentTransferFunctionElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGComponentTransferFunctionElement where
+  toJSRef = return . unSVGComponentTransferFunctionElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGComponentTransferFunctionElement where
+  fromJSRef = return . fmap SVGComponentTransferFunctionElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsSVGElement o => IsSVGComponentTransferFunctionElement o
+toSVGComponentTransferFunctionElement :: IsSVGComponentTransferFunctionElement o => o -> SVGComponentTransferFunctionElement
+toSVGComponentTransferFunctionElement = unsafeCastGObject . toGObject
+
+instance IsSVGComponentTransferFunctionElement SVGComponentTransferFunctionElement
+instance IsSVGElement SVGComponentTransferFunctionElement
+instance IsElement SVGComponentTransferFunctionElement
+instance IsNode SVGComponentTransferFunctionElement
+instance IsEventTarget SVGComponentTransferFunctionElement
+instance IsGObject SVGComponentTransferFunctionElement where
+  toGObject = GObject . unSVGComponentTransferFunctionElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGComponentTransferFunctionElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGComponentTransferFunctionElement :: IsGObject obj => obj -> SVGComponentTransferFunctionElement
+castToSVGComponentTransferFunctionElement = castTo gTypeSVGComponentTransferFunctionElement "SVGComponentTransferFunctionElement"
+
+foreign import javascript unsafe "window[\"SVGComponentTransferFunctionElement\"]" gTypeSVGComponentTransferFunctionElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGCursorElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGCursorElement Mozilla SVGCursorElement documentation>
+newtype SVGCursorElement = SVGCursorElement { unSVGCursorElement :: JSRef }
+
+instance Eq (SVGCursorElement) where
+  (SVGCursorElement a) == (SVGCursorElement b) = js_eq a b
+
+instance PToJSRef SVGCursorElement where
+  pToJSRef = unSVGCursorElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGCursorElement where
+  pFromJSRef = SVGCursorElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGCursorElement where
+  toJSRef = return . unSVGCursorElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGCursorElement where
+  fromJSRef = return . fmap SVGCursorElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGElement SVGCursorElement
+instance IsElement SVGCursorElement
+instance IsNode SVGCursorElement
+instance IsEventTarget SVGCursorElement
+instance IsGObject SVGCursorElement where
+  toGObject = GObject . unSVGCursorElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGCursorElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGCursorElement :: IsGObject obj => obj -> SVGCursorElement
+castToSVGCursorElement = castTo gTypeSVGCursorElement "SVGCursorElement"
+
+foreign import javascript unsafe "window[\"SVGCursorElement\"]" gTypeSVGCursorElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGDefsElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGGraphicsElement"
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGDefsElement Mozilla SVGDefsElement documentation>
+newtype SVGDefsElement = SVGDefsElement { unSVGDefsElement :: JSRef }
+
+instance Eq (SVGDefsElement) where
+  (SVGDefsElement a) == (SVGDefsElement b) = js_eq a b
+
+instance PToJSRef SVGDefsElement where
+  pToJSRef = unSVGDefsElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGDefsElement where
+  pFromJSRef = SVGDefsElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGDefsElement where
+  toJSRef = return . unSVGDefsElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGDefsElement where
+  fromJSRef = return . fmap SVGDefsElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGGraphicsElement SVGDefsElement
+instance IsSVGElement SVGDefsElement
+instance IsElement SVGDefsElement
+instance IsNode SVGDefsElement
+instance IsEventTarget SVGDefsElement
+instance IsGObject SVGDefsElement where
+  toGObject = GObject . unSVGDefsElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGDefsElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGDefsElement :: IsGObject obj => obj -> SVGDefsElement
+castToSVGDefsElement = castTo gTypeSVGDefsElement "SVGDefsElement"
+
+foreign import javascript unsafe "window[\"SVGDefsElement\"]" gTypeSVGDefsElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGDescElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGDescElement Mozilla SVGDescElement documentation>
+newtype SVGDescElement = SVGDescElement { unSVGDescElement :: JSRef }
+
+instance Eq (SVGDescElement) where
+  (SVGDescElement a) == (SVGDescElement b) = js_eq a b
+
+instance PToJSRef SVGDescElement where
+  pToJSRef = unSVGDescElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGDescElement where
+  pFromJSRef = SVGDescElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGDescElement where
+  toJSRef = return . unSVGDescElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGDescElement where
+  fromJSRef = return . fmap SVGDescElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGElement SVGDescElement
+instance IsElement SVGDescElement
+instance IsNode SVGDescElement
+instance IsEventTarget SVGDescElement
+instance IsGObject SVGDescElement where
+  toGObject = GObject . unSVGDescElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGDescElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGDescElement :: IsGObject obj => obj -> SVGDescElement
+castToSVGDescElement = castTo gTypeSVGDescElement "SVGDescElement"
+
+foreign import javascript unsafe "window[\"SVGDescElement\"]" gTypeSVGDescElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGDocument".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.Document"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGDocument Mozilla SVGDocument documentation>
+newtype SVGDocument = SVGDocument { unSVGDocument :: JSRef }
+
+instance Eq (SVGDocument) where
+  (SVGDocument a) == (SVGDocument b) = js_eq a b
+
+instance PToJSRef SVGDocument where
+  pToJSRef = unSVGDocument
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGDocument where
+  pFromJSRef = SVGDocument
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGDocument where
+  toJSRef = return . unSVGDocument
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGDocument where
+  fromJSRef = return . fmap SVGDocument . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsDocument SVGDocument
+instance IsNode SVGDocument
+instance IsEventTarget SVGDocument
+instance IsGObject SVGDocument where
+  toGObject = GObject . unSVGDocument
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGDocument . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGDocument :: IsGObject obj => obj -> SVGDocument
+castToSVGDocument = castTo gTypeSVGDocument "SVGDocument"
+
+foreign import javascript unsafe "window[\"SVGDocument\"]" gTypeSVGDocument :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGElement Mozilla SVGElement documentation>
+newtype SVGElement = SVGElement { unSVGElement :: JSRef }
+
+instance Eq (SVGElement) where
+  (SVGElement a) == (SVGElement b) = js_eq a b
+
+instance PToJSRef SVGElement where
+  pToJSRef = unSVGElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGElement where
+  pFromJSRef = SVGElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGElement where
+  toJSRef = return . unSVGElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGElement where
+  fromJSRef = return . fmap SVGElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsElement o => IsSVGElement o
+toSVGElement :: IsSVGElement o => o -> SVGElement
+toSVGElement = unsafeCastGObject . toGObject
+
+instance IsSVGElement SVGElement
+instance IsElement SVGElement
+instance IsNode SVGElement
+instance IsEventTarget SVGElement
+instance IsGObject SVGElement where
+  toGObject = GObject . unSVGElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGElement :: IsGObject obj => obj -> SVGElement
+castToSVGElement = castTo gTypeSVGElement "SVGElement"
+
+foreign import javascript unsafe "window[\"SVGElement\"]" gTypeSVGElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGEllipseElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGGraphicsElement"
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGEllipseElement Mozilla SVGEllipseElement documentation>
+newtype SVGEllipseElement = SVGEllipseElement { unSVGEllipseElement :: JSRef }
+
+instance Eq (SVGEllipseElement) where
+  (SVGEllipseElement a) == (SVGEllipseElement b) = js_eq a b
+
+instance PToJSRef SVGEllipseElement where
+  pToJSRef = unSVGEllipseElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGEllipseElement where
+  pFromJSRef = SVGEllipseElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGEllipseElement where
+  toJSRef = return . unSVGEllipseElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGEllipseElement where
+  fromJSRef = return . fmap SVGEllipseElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGGraphicsElement SVGEllipseElement
+instance IsSVGElement SVGEllipseElement
+instance IsElement SVGEllipseElement
+instance IsNode SVGEllipseElement
+instance IsEventTarget SVGEllipseElement
+instance IsGObject SVGEllipseElement where
+  toGObject = GObject . unSVGEllipseElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGEllipseElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGEllipseElement :: IsGObject obj => obj -> SVGEllipseElement
+castToSVGEllipseElement = castTo gTypeSVGEllipseElement "SVGEllipseElement"
+
+foreign import javascript unsafe "window[\"SVGEllipseElement\"]" gTypeSVGEllipseElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGExternalResourcesRequired".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGExternalResourcesRequired Mozilla SVGExternalResourcesRequired documentation>
+newtype SVGExternalResourcesRequired = SVGExternalResourcesRequired { unSVGExternalResourcesRequired :: JSRef }
+
+instance Eq (SVGExternalResourcesRequired) where
+  (SVGExternalResourcesRequired a) == (SVGExternalResourcesRequired b) = js_eq a b
+
+instance PToJSRef SVGExternalResourcesRequired where
+  pToJSRef = unSVGExternalResourcesRequired
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGExternalResourcesRequired where
+  pFromJSRef = SVGExternalResourcesRequired
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGExternalResourcesRequired where
+  toJSRef = return . unSVGExternalResourcesRequired
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGExternalResourcesRequired where
+  fromJSRef = return . fmap SVGExternalResourcesRequired . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject SVGExternalResourcesRequired where
+  toGObject = GObject . unSVGExternalResourcesRequired
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGExternalResourcesRequired . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGExternalResourcesRequired :: IsGObject obj => obj -> SVGExternalResourcesRequired
+castToSVGExternalResourcesRequired = castTo gTypeSVGExternalResourcesRequired "SVGExternalResourcesRequired"
+
+foreign import javascript unsafe "window[\"SVGExternalResourcesRequired\"]" gTypeSVGExternalResourcesRequired :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGFEBlendElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEBlendElement Mozilla SVGFEBlendElement documentation>
+newtype SVGFEBlendElement = SVGFEBlendElement { unSVGFEBlendElement :: JSRef }
+
+instance Eq (SVGFEBlendElement) where
+  (SVGFEBlendElement a) == (SVGFEBlendElement b) = js_eq a b
+
+instance PToJSRef SVGFEBlendElement where
+  pToJSRef = unSVGFEBlendElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGFEBlendElement where
+  pFromJSRef = SVGFEBlendElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGFEBlendElement where
+  toJSRef = return . unSVGFEBlendElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGFEBlendElement where
+  fromJSRef = return . fmap SVGFEBlendElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGElement SVGFEBlendElement
+instance IsElement SVGFEBlendElement
+instance IsNode SVGFEBlendElement
+instance IsEventTarget SVGFEBlendElement
+instance IsGObject SVGFEBlendElement where
+  toGObject = GObject . unSVGFEBlendElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGFEBlendElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGFEBlendElement :: IsGObject obj => obj -> SVGFEBlendElement
+castToSVGFEBlendElement = castTo gTypeSVGFEBlendElement "SVGFEBlendElement"
+
+foreign import javascript unsafe "window[\"SVGFEBlendElement\"]" gTypeSVGFEBlendElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGFEColorMatrixElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEColorMatrixElement Mozilla SVGFEColorMatrixElement documentation>
+newtype SVGFEColorMatrixElement = SVGFEColorMatrixElement { unSVGFEColorMatrixElement :: JSRef }
+
+instance Eq (SVGFEColorMatrixElement) where
+  (SVGFEColorMatrixElement a) == (SVGFEColorMatrixElement b) = js_eq a b
+
+instance PToJSRef SVGFEColorMatrixElement where
+  pToJSRef = unSVGFEColorMatrixElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGFEColorMatrixElement where
+  pFromJSRef = SVGFEColorMatrixElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGFEColorMatrixElement where
+  toJSRef = return . unSVGFEColorMatrixElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGFEColorMatrixElement where
+  fromJSRef = return . fmap SVGFEColorMatrixElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGElement SVGFEColorMatrixElement
+instance IsElement SVGFEColorMatrixElement
+instance IsNode SVGFEColorMatrixElement
+instance IsEventTarget SVGFEColorMatrixElement
+instance IsGObject SVGFEColorMatrixElement where
+  toGObject = GObject . unSVGFEColorMatrixElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGFEColorMatrixElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGFEColorMatrixElement :: IsGObject obj => obj -> SVGFEColorMatrixElement
+castToSVGFEColorMatrixElement = castTo gTypeSVGFEColorMatrixElement "SVGFEColorMatrixElement"
+
+foreign import javascript unsafe "window[\"SVGFEColorMatrixElement\"]" gTypeSVGFEColorMatrixElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGFEComponentTransferElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEComponentTransferElement Mozilla SVGFEComponentTransferElement documentation>
+newtype SVGFEComponentTransferElement = SVGFEComponentTransferElement { unSVGFEComponentTransferElement :: JSRef }
+
+instance Eq (SVGFEComponentTransferElement) where
+  (SVGFEComponentTransferElement a) == (SVGFEComponentTransferElement b) = js_eq a b
+
+instance PToJSRef SVGFEComponentTransferElement where
+  pToJSRef = unSVGFEComponentTransferElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGFEComponentTransferElement where
+  pFromJSRef = SVGFEComponentTransferElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGFEComponentTransferElement where
+  toJSRef = return . unSVGFEComponentTransferElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGFEComponentTransferElement where
+  fromJSRef = return . fmap SVGFEComponentTransferElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGElement SVGFEComponentTransferElement
+instance IsElement SVGFEComponentTransferElement
+instance IsNode SVGFEComponentTransferElement
+instance IsEventTarget SVGFEComponentTransferElement
+instance IsGObject SVGFEComponentTransferElement where
+  toGObject = GObject . unSVGFEComponentTransferElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGFEComponentTransferElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGFEComponentTransferElement :: IsGObject obj => obj -> SVGFEComponentTransferElement
+castToSVGFEComponentTransferElement = castTo gTypeSVGFEComponentTransferElement "SVGFEComponentTransferElement"
+
+foreign import javascript unsafe "window[\"SVGFEComponentTransferElement\"]" gTypeSVGFEComponentTransferElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGFECompositeElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFECompositeElement Mozilla SVGFECompositeElement documentation>
+newtype SVGFECompositeElement = SVGFECompositeElement { unSVGFECompositeElement :: JSRef }
+
+instance Eq (SVGFECompositeElement) where
+  (SVGFECompositeElement a) == (SVGFECompositeElement b) = js_eq a b
+
+instance PToJSRef SVGFECompositeElement where
+  pToJSRef = unSVGFECompositeElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGFECompositeElement where
+  pFromJSRef = SVGFECompositeElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGFECompositeElement where
+  toJSRef = return . unSVGFECompositeElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGFECompositeElement where
+  fromJSRef = return . fmap SVGFECompositeElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGElement SVGFECompositeElement
+instance IsElement SVGFECompositeElement
+instance IsNode SVGFECompositeElement
+instance IsEventTarget SVGFECompositeElement
+instance IsGObject SVGFECompositeElement where
+  toGObject = GObject . unSVGFECompositeElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGFECompositeElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGFECompositeElement :: IsGObject obj => obj -> SVGFECompositeElement
+castToSVGFECompositeElement = castTo gTypeSVGFECompositeElement "SVGFECompositeElement"
+
+foreign import javascript unsafe "window[\"SVGFECompositeElement\"]" gTypeSVGFECompositeElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGFEConvolveMatrixElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEConvolveMatrixElement Mozilla SVGFEConvolveMatrixElement documentation>
+newtype SVGFEConvolveMatrixElement = SVGFEConvolveMatrixElement { unSVGFEConvolveMatrixElement :: JSRef }
+
+instance Eq (SVGFEConvolveMatrixElement) where
+  (SVGFEConvolveMatrixElement a) == (SVGFEConvolveMatrixElement b) = js_eq a b
+
+instance PToJSRef SVGFEConvolveMatrixElement where
+  pToJSRef = unSVGFEConvolveMatrixElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGFEConvolveMatrixElement where
+  pFromJSRef = SVGFEConvolveMatrixElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGFEConvolveMatrixElement where
+  toJSRef = return . unSVGFEConvolveMatrixElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGFEConvolveMatrixElement where
+  fromJSRef = return . fmap SVGFEConvolveMatrixElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGElement SVGFEConvolveMatrixElement
+instance IsElement SVGFEConvolveMatrixElement
+instance IsNode SVGFEConvolveMatrixElement
+instance IsEventTarget SVGFEConvolveMatrixElement
+instance IsGObject SVGFEConvolveMatrixElement where
+  toGObject = GObject . unSVGFEConvolveMatrixElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGFEConvolveMatrixElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGFEConvolveMatrixElement :: IsGObject obj => obj -> SVGFEConvolveMatrixElement
+castToSVGFEConvolveMatrixElement = castTo gTypeSVGFEConvolveMatrixElement "SVGFEConvolveMatrixElement"
+
+foreign import javascript unsafe "window[\"SVGFEConvolveMatrixElement\"]" gTypeSVGFEConvolveMatrixElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGFEDiffuseLightingElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEDiffuseLightingElement Mozilla SVGFEDiffuseLightingElement documentation>
+newtype SVGFEDiffuseLightingElement = SVGFEDiffuseLightingElement { unSVGFEDiffuseLightingElement :: JSRef }
+
+instance Eq (SVGFEDiffuseLightingElement) where
+  (SVGFEDiffuseLightingElement a) == (SVGFEDiffuseLightingElement b) = js_eq a b
+
+instance PToJSRef SVGFEDiffuseLightingElement where
+  pToJSRef = unSVGFEDiffuseLightingElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGFEDiffuseLightingElement where
+  pFromJSRef = SVGFEDiffuseLightingElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGFEDiffuseLightingElement where
+  toJSRef = return . unSVGFEDiffuseLightingElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGFEDiffuseLightingElement where
+  fromJSRef = return . fmap SVGFEDiffuseLightingElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGElement SVGFEDiffuseLightingElement
+instance IsElement SVGFEDiffuseLightingElement
+instance IsNode SVGFEDiffuseLightingElement
+instance IsEventTarget SVGFEDiffuseLightingElement
+instance IsGObject SVGFEDiffuseLightingElement where
+  toGObject = GObject . unSVGFEDiffuseLightingElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGFEDiffuseLightingElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGFEDiffuseLightingElement :: IsGObject obj => obj -> SVGFEDiffuseLightingElement
+castToSVGFEDiffuseLightingElement = castTo gTypeSVGFEDiffuseLightingElement "SVGFEDiffuseLightingElement"
+
+foreign import javascript unsafe "window[\"SVGFEDiffuseLightingElement\"]" gTypeSVGFEDiffuseLightingElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGFEDisplacementMapElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEDisplacementMapElement Mozilla SVGFEDisplacementMapElement documentation>
+newtype SVGFEDisplacementMapElement = SVGFEDisplacementMapElement { unSVGFEDisplacementMapElement :: JSRef }
+
+instance Eq (SVGFEDisplacementMapElement) where
+  (SVGFEDisplacementMapElement a) == (SVGFEDisplacementMapElement b) = js_eq a b
+
+instance PToJSRef SVGFEDisplacementMapElement where
+  pToJSRef = unSVGFEDisplacementMapElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGFEDisplacementMapElement where
+  pFromJSRef = SVGFEDisplacementMapElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGFEDisplacementMapElement where
+  toJSRef = return . unSVGFEDisplacementMapElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGFEDisplacementMapElement where
+  fromJSRef = return . fmap SVGFEDisplacementMapElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGElement SVGFEDisplacementMapElement
+instance IsElement SVGFEDisplacementMapElement
+instance IsNode SVGFEDisplacementMapElement
+instance IsEventTarget SVGFEDisplacementMapElement
+instance IsGObject SVGFEDisplacementMapElement where
+  toGObject = GObject . unSVGFEDisplacementMapElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGFEDisplacementMapElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGFEDisplacementMapElement :: IsGObject obj => obj -> SVGFEDisplacementMapElement
+castToSVGFEDisplacementMapElement = castTo gTypeSVGFEDisplacementMapElement "SVGFEDisplacementMapElement"
+
+foreign import javascript unsafe "window[\"SVGFEDisplacementMapElement\"]" gTypeSVGFEDisplacementMapElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGFEDistantLightElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEDistantLightElement Mozilla SVGFEDistantLightElement documentation>
+newtype SVGFEDistantLightElement = SVGFEDistantLightElement { unSVGFEDistantLightElement :: JSRef }
+
+instance Eq (SVGFEDistantLightElement) where
+  (SVGFEDistantLightElement a) == (SVGFEDistantLightElement b) = js_eq a b
+
+instance PToJSRef SVGFEDistantLightElement where
+  pToJSRef = unSVGFEDistantLightElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGFEDistantLightElement where
+  pFromJSRef = SVGFEDistantLightElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGFEDistantLightElement where
+  toJSRef = return . unSVGFEDistantLightElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGFEDistantLightElement where
+  fromJSRef = return . fmap SVGFEDistantLightElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGElement SVGFEDistantLightElement
+instance IsElement SVGFEDistantLightElement
+instance IsNode SVGFEDistantLightElement
+instance IsEventTarget SVGFEDistantLightElement
+instance IsGObject SVGFEDistantLightElement where
+  toGObject = GObject . unSVGFEDistantLightElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGFEDistantLightElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGFEDistantLightElement :: IsGObject obj => obj -> SVGFEDistantLightElement
+castToSVGFEDistantLightElement = castTo gTypeSVGFEDistantLightElement "SVGFEDistantLightElement"
+
+foreign import javascript unsafe "window[\"SVGFEDistantLightElement\"]" gTypeSVGFEDistantLightElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGFEDropShadowElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEDropShadowElement Mozilla SVGFEDropShadowElement documentation>
+newtype SVGFEDropShadowElement = SVGFEDropShadowElement { unSVGFEDropShadowElement :: JSRef }
+
+instance Eq (SVGFEDropShadowElement) where
+  (SVGFEDropShadowElement a) == (SVGFEDropShadowElement b) = js_eq a b
+
+instance PToJSRef SVGFEDropShadowElement where
+  pToJSRef = unSVGFEDropShadowElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGFEDropShadowElement where
+  pFromJSRef = SVGFEDropShadowElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGFEDropShadowElement where
+  toJSRef = return . unSVGFEDropShadowElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGFEDropShadowElement where
+  fromJSRef = return . fmap SVGFEDropShadowElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGElement SVGFEDropShadowElement
+instance IsElement SVGFEDropShadowElement
+instance IsNode SVGFEDropShadowElement
+instance IsEventTarget SVGFEDropShadowElement
+instance IsGObject SVGFEDropShadowElement where
+  toGObject = GObject . unSVGFEDropShadowElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGFEDropShadowElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGFEDropShadowElement :: IsGObject obj => obj -> SVGFEDropShadowElement
+castToSVGFEDropShadowElement = castTo gTypeSVGFEDropShadowElement "SVGFEDropShadowElement"
+
+foreign import javascript unsafe "window[\"SVGFEDropShadowElement\"]" gTypeSVGFEDropShadowElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGFEFloodElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEFloodElement Mozilla SVGFEFloodElement documentation>
+newtype SVGFEFloodElement = SVGFEFloodElement { unSVGFEFloodElement :: JSRef }
+
+instance Eq (SVGFEFloodElement) where
+  (SVGFEFloodElement a) == (SVGFEFloodElement b) = js_eq a b
+
+instance PToJSRef SVGFEFloodElement where
+  pToJSRef = unSVGFEFloodElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGFEFloodElement where
+  pFromJSRef = SVGFEFloodElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGFEFloodElement where
+  toJSRef = return . unSVGFEFloodElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGFEFloodElement where
+  fromJSRef = return . fmap SVGFEFloodElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGElement SVGFEFloodElement
+instance IsElement SVGFEFloodElement
+instance IsNode SVGFEFloodElement
+instance IsEventTarget SVGFEFloodElement
+instance IsGObject SVGFEFloodElement where
+  toGObject = GObject . unSVGFEFloodElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGFEFloodElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGFEFloodElement :: IsGObject obj => obj -> SVGFEFloodElement
+castToSVGFEFloodElement = castTo gTypeSVGFEFloodElement "SVGFEFloodElement"
+
+foreign import javascript unsafe "window[\"SVGFEFloodElement\"]" gTypeSVGFEFloodElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGFEFuncAElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGComponentTransferFunctionElement"
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEFuncAElement Mozilla SVGFEFuncAElement documentation>
+newtype SVGFEFuncAElement = SVGFEFuncAElement { unSVGFEFuncAElement :: JSRef }
+
+instance Eq (SVGFEFuncAElement) where
+  (SVGFEFuncAElement a) == (SVGFEFuncAElement b) = js_eq a b
+
+instance PToJSRef SVGFEFuncAElement where
+  pToJSRef = unSVGFEFuncAElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGFEFuncAElement where
+  pFromJSRef = SVGFEFuncAElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGFEFuncAElement where
+  toJSRef = return . unSVGFEFuncAElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGFEFuncAElement where
+  fromJSRef = return . fmap SVGFEFuncAElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGComponentTransferFunctionElement SVGFEFuncAElement
+instance IsSVGElement SVGFEFuncAElement
+instance IsElement SVGFEFuncAElement
+instance IsNode SVGFEFuncAElement
+instance IsEventTarget SVGFEFuncAElement
+instance IsGObject SVGFEFuncAElement where
+  toGObject = GObject . unSVGFEFuncAElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGFEFuncAElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGFEFuncAElement :: IsGObject obj => obj -> SVGFEFuncAElement
+castToSVGFEFuncAElement = castTo gTypeSVGFEFuncAElement "SVGFEFuncAElement"
+
+foreign import javascript unsafe "window[\"SVGFEFuncAElement\"]" gTypeSVGFEFuncAElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGFEFuncBElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGComponentTransferFunctionElement"
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEFuncBElement Mozilla SVGFEFuncBElement documentation>
+newtype SVGFEFuncBElement = SVGFEFuncBElement { unSVGFEFuncBElement :: JSRef }
+
+instance Eq (SVGFEFuncBElement) where
+  (SVGFEFuncBElement a) == (SVGFEFuncBElement b) = js_eq a b
+
+instance PToJSRef SVGFEFuncBElement where
+  pToJSRef = unSVGFEFuncBElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGFEFuncBElement where
+  pFromJSRef = SVGFEFuncBElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGFEFuncBElement where
+  toJSRef = return . unSVGFEFuncBElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGFEFuncBElement where
+  fromJSRef = return . fmap SVGFEFuncBElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGComponentTransferFunctionElement SVGFEFuncBElement
+instance IsSVGElement SVGFEFuncBElement
+instance IsElement SVGFEFuncBElement
+instance IsNode SVGFEFuncBElement
+instance IsEventTarget SVGFEFuncBElement
+instance IsGObject SVGFEFuncBElement where
+  toGObject = GObject . unSVGFEFuncBElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGFEFuncBElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGFEFuncBElement :: IsGObject obj => obj -> SVGFEFuncBElement
+castToSVGFEFuncBElement = castTo gTypeSVGFEFuncBElement "SVGFEFuncBElement"
+
+foreign import javascript unsafe "window[\"SVGFEFuncBElement\"]" gTypeSVGFEFuncBElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGFEFuncGElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGComponentTransferFunctionElement"
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEFuncGElement Mozilla SVGFEFuncGElement documentation>
+newtype SVGFEFuncGElement = SVGFEFuncGElement { unSVGFEFuncGElement :: JSRef }
+
+instance Eq (SVGFEFuncGElement) where
+  (SVGFEFuncGElement a) == (SVGFEFuncGElement b) = js_eq a b
+
+instance PToJSRef SVGFEFuncGElement where
+  pToJSRef = unSVGFEFuncGElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGFEFuncGElement where
+  pFromJSRef = SVGFEFuncGElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGFEFuncGElement where
+  toJSRef = return . unSVGFEFuncGElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGFEFuncGElement where
+  fromJSRef = return . fmap SVGFEFuncGElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGComponentTransferFunctionElement SVGFEFuncGElement
+instance IsSVGElement SVGFEFuncGElement
+instance IsElement SVGFEFuncGElement
+instance IsNode SVGFEFuncGElement
+instance IsEventTarget SVGFEFuncGElement
+instance IsGObject SVGFEFuncGElement where
+  toGObject = GObject . unSVGFEFuncGElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGFEFuncGElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGFEFuncGElement :: IsGObject obj => obj -> SVGFEFuncGElement
+castToSVGFEFuncGElement = castTo gTypeSVGFEFuncGElement "SVGFEFuncGElement"
+
+foreign import javascript unsafe "window[\"SVGFEFuncGElement\"]" gTypeSVGFEFuncGElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGFEFuncRElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGComponentTransferFunctionElement"
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEFuncRElement Mozilla SVGFEFuncRElement documentation>
+newtype SVGFEFuncRElement = SVGFEFuncRElement { unSVGFEFuncRElement :: JSRef }
+
+instance Eq (SVGFEFuncRElement) where
+  (SVGFEFuncRElement a) == (SVGFEFuncRElement b) = js_eq a b
+
+instance PToJSRef SVGFEFuncRElement where
+  pToJSRef = unSVGFEFuncRElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGFEFuncRElement where
+  pFromJSRef = SVGFEFuncRElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGFEFuncRElement where
+  toJSRef = return . unSVGFEFuncRElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGFEFuncRElement where
+  fromJSRef = return . fmap SVGFEFuncRElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGComponentTransferFunctionElement SVGFEFuncRElement
+instance IsSVGElement SVGFEFuncRElement
+instance IsElement SVGFEFuncRElement
+instance IsNode SVGFEFuncRElement
+instance IsEventTarget SVGFEFuncRElement
+instance IsGObject SVGFEFuncRElement where
+  toGObject = GObject . unSVGFEFuncRElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGFEFuncRElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGFEFuncRElement :: IsGObject obj => obj -> SVGFEFuncRElement
+castToSVGFEFuncRElement = castTo gTypeSVGFEFuncRElement "SVGFEFuncRElement"
+
+foreign import javascript unsafe "window[\"SVGFEFuncRElement\"]" gTypeSVGFEFuncRElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGFEGaussianBlurElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEGaussianBlurElement Mozilla SVGFEGaussianBlurElement documentation>
+newtype SVGFEGaussianBlurElement = SVGFEGaussianBlurElement { unSVGFEGaussianBlurElement :: JSRef }
+
+instance Eq (SVGFEGaussianBlurElement) where
+  (SVGFEGaussianBlurElement a) == (SVGFEGaussianBlurElement b) = js_eq a b
+
+instance PToJSRef SVGFEGaussianBlurElement where
+  pToJSRef = unSVGFEGaussianBlurElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGFEGaussianBlurElement where
+  pFromJSRef = SVGFEGaussianBlurElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGFEGaussianBlurElement where
+  toJSRef = return . unSVGFEGaussianBlurElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGFEGaussianBlurElement where
+  fromJSRef = return . fmap SVGFEGaussianBlurElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGElement SVGFEGaussianBlurElement
+instance IsElement SVGFEGaussianBlurElement
+instance IsNode SVGFEGaussianBlurElement
+instance IsEventTarget SVGFEGaussianBlurElement
+instance IsGObject SVGFEGaussianBlurElement where
+  toGObject = GObject . unSVGFEGaussianBlurElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGFEGaussianBlurElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGFEGaussianBlurElement :: IsGObject obj => obj -> SVGFEGaussianBlurElement
+castToSVGFEGaussianBlurElement = castTo gTypeSVGFEGaussianBlurElement "SVGFEGaussianBlurElement"
+
+foreign import javascript unsafe "window[\"SVGFEGaussianBlurElement\"]" gTypeSVGFEGaussianBlurElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGFEImageElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEImageElement Mozilla SVGFEImageElement documentation>
+newtype SVGFEImageElement = SVGFEImageElement { unSVGFEImageElement :: JSRef }
+
+instance Eq (SVGFEImageElement) where
+  (SVGFEImageElement a) == (SVGFEImageElement b) = js_eq a b
+
+instance PToJSRef SVGFEImageElement where
+  pToJSRef = unSVGFEImageElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGFEImageElement where
+  pFromJSRef = SVGFEImageElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGFEImageElement where
+  toJSRef = return . unSVGFEImageElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGFEImageElement where
+  fromJSRef = return . fmap SVGFEImageElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGElement SVGFEImageElement
+instance IsElement SVGFEImageElement
+instance IsNode SVGFEImageElement
+instance IsEventTarget SVGFEImageElement
+instance IsGObject SVGFEImageElement where
+  toGObject = GObject . unSVGFEImageElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGFEImageElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGFEImageElement :: IsGObject obj => obj -> SVGFEImageElement
+castToSVGFEImageElement = castTo gTypeSVGFEImageElement "SVGFEImageElement"
+
+foreign import javascript unsafe "window[\"SVGFEImageElement\"]" gTypeSVGFEImageElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGFEMergeElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEMergeElement Mozilla SVGFEMergeElement documentation>
+newtype SVGFEMergeElement = SVGFEMergeElement { unSVGFEMergeElement :: JSRef }
+
+instance Eq (SVGFEMergeElement) where
+  (SVGFEMergeElement a) == (SVGFEMergeElement b) = js_eq a b
+
+instance PToJSRef SVGFEMergeElement where
+  pToJSRef = unSVGFEMergeElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGFEMergeElement where
+  pFromJSRef = SVGFEMergeElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGFEMergeElement where
+  toJSRef = return . unSVGFEMergeElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGFEMergeElement where
+  fromJSRef = return . fmap SVGFEMergeElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGElement SVGFEMergeElement
+instance IsElement SVGFEMergeElement
+instance IsNode SVGFEMergeElement
+instance IsEventTarget SVGFEMergeElement
+instance IsGObject SVGFEMergeElement where
+  toGObject = GObject . unSVGFEMergeElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGFEMergeElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGFEMergeElement :: IsGObject obj => obj -> SVGFEMergeElement
+castToSVGFEMergeElement = castTo gTypeSVGFEMergeElement "SVGFEMergeElement"
+
+foreign import javascript unsafe "window[\"SVGFEMergeElement\"]" gTypeSVGFEMergeElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGFEMergeNodeElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEMergeNodeElement Mozilla SVGFEMergeNodeElement documentation>
+newtype SVGFEMergeNodeElement = SVGFEMergeNodeElement { unSVGFEMergeNodeElement :: JSRef }
+
+instance Eq (SVGFEMergeNodeElement) where
+  (SVGFEMergeNodeElement a) == (SVGFEMergeNodeElement b) = js_eq a b
+
+instance PToJSRef SVGFEMergeNodeElement where
+  pToJSRef = unSVGFEMergeNodeElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGFEMergeNodeElement where
+  pFromJSRef = SVGFEMergeNodeElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGFEMergeNodeElement where
+  toJSRef = return . unSVGFEMergeNodeElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGFEMergeNodeElement where
+  fromJSRef = return . fmap SVGFEMergeNodeElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGElement SVGFEMergeNodeElement
+instance IsElement SVGFEMergeNodeElement
+instance IsNode SVGFEMergeNodeElement
+instance IsEventTarget SVGFEMergeNodeElement
+instance IsGObject SVGFEMergeNodeElement where
+  toGObject = GObject . unSVGFEMergeNodeElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGFEMergeNodeElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGFEMergeNodeElement :: IsGObject obj => obj -> SVGFEMergeNodeElement
+castToSVGFEMergeNodeElement = castTo gTypeSVGFEMergeNodeElement "SVGFEMergeNodeElement"
+
+foreign import javascript unsafe "window[\"SVGFEMergeNodeElement\"]" gTypeSVGFEMergeNodeElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGFEMorphologyElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEMorphologyElement Mozilla SVGFEMorphologyElement documentation>
+newtype SVGFEMorphologyElement = SVGFEMorphologyElement { unSVGFEMorphologyElement :: JSRef }
+
+instance Eq (SVGFEMorphologyElement) where
+  (SVGFEMorphologyElement a) == (SVGFEMorphologyElement b) = js_eq a b
+
+instance PToJSRef SVGFEMorphologyElement where
+  pToJSRef = unSVGFEMorphologyElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGFEMorphologyElement where
+  pFromJSRef = SVGFEMorphologyElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGFEMorphologyElement where
+  toJSRef = return . unSVGFEMorphologyElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGFEMorphologyElement where
+  fromJSRef = return . fmap SVGFEMorphologyElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGElement SVGFEMorphologyElement
+instance IsElement SVGFEMorphologyElement
+instance IsNode SVGFEMorphologyElement
+instance IsEventTarget SVGFEMorphologyElement
+instance IsGObject SVGFEMorphologyElement where
+  toGObject = GObject . unSVGFEMorphologyElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGFEMorphologyElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGFEMorphologyElement :: IsGObject obj => obj -> SVGFEMorphologyElement
+castToSVGFEMorphologyElement = castTo gTypeSVGFEMorphologyElement "SVGFEMorphologyElement"
+
+foreign import javascript unsafe "window[\"SVGFEMorphologyElement\"]" gTypeSVGFEMorphologyElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGFEOffsetElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEOffsetElement Mozilla SVGFEOffsetElement documentation>
+newtype SVGFEOffsetElement = SVGFEOffsetElement { unSVGFEOffsetElement :: JSRef }
+
+instance Eq (SVGFEOffsetElement) where
+  (SVGFEOffsetElement a) == (SVGFEOffsetElement b) = js_eq a b
+
+instance PToJSRef SVGFEOffsetElement where
+  pToJSRef = unSVGFEOffsetElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGFEOffsetElement where
+  pFromJSRef = SVGFEOffsetElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGFEOffsetElement where
+  toJSRef = return . unSVGFEOffsetElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGFEOffsetElement where
+  fromJSRef = return . fmap SVGFEOffsetElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGElement SVGFEOffsetElement
+instance IsElement SVGFEOffsetElement
+instance IsNode SVGFEOffsetElement
+instance IsEventTarget SVGFEOffsetElement
+instance IsGObject SVGFEOffsetElement where
+  toGObject = GObject . unSVGFEOffsetElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGFEOffsetElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGFEOffsetElement :: IsGObject obj => obj -> SVGFEOffsetElement
+castToSVGFEOffsetElement = castTo gTypeSVGFEOffsetElement "SVGFEOffsetElement"
+
+foreign import javascript unsafe "window[\"SVGFEOffsetElement\"]" gTypeSVGFEOffsetElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGFEPointLightElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFEPointLightElement Mozilla SVGFEPointLightElement documentation>
+newtype SVGFEPointLightElement = SVGFEPointLightElement { unSVGFEPointLightElement :: JSRef }
+
+instance Eq (SVGFEPointLightElement) where
+  (SVGFEPointLightElement a) == (SVGFEPointLightElement b) = js_eq a b
+
+instance PToJSRef SVGFEPointLightElement where
+  pToJSRef = unSVGFEPointLightElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGFEPointLightElement where
+  pFromJSRef = SVGFEPointLightElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGFEPointLightElement where
+  toJSRef = return . unSVGFEPointLightElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGFEPointLightElement where
+  fromJSRef = return . fmap SVGFEPointLightElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGElement SVGFEPointLightElement
+instance IsElement SVGFEPointLightElement
+instance IsNode SVGFEPointLightElement
+instance IsEventTarget SVGFEPointLightElement
+instance IsGObject SVGFEPointLightElement where
+  toGObject = GObject . unSVGFEPointLightElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGFEPointLightElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGFEPointLightElement :: IsGObject obj => obj -> SVGFEPointLightElement
+castToSVGFEPointLightElement = castTo gTypeSVGFEPointLightElement "SVGFEPointLightElement"
+
+foreign import javascript unsafe "window[\"SVGFEPointLightElement\"]" gTypeSVGFEPointLightElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGFESpecularLightingElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFESpecularLightingElement Mozilla SVGFESpecularLightingElement documentation>
+newtype SVGFESpecularLightingElement = SVGFESpecularLightingElement { unSVGFESpecularLightingElement :: JSRef }
+
+instance Eq (SVGFESpecularLightingElement) where
+  (SVGFESpecularLightingElement a) == (SVGFESpecularLightingElement b) = js_eq a b
+
+instance PToJSRef SVGFESpecularLightingElement where
+  pToJSRef = unSVGFESpecularLightingElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGFESpecularLightingElement where
+  pFromJSRef = SVGFESpecularLightingElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGFESpecularLightingElement where
+  toJSRef = return . unSVGFESpecularLightingElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGFESpecularLightingElement where
+  fromJSRef = return . fmap SVGFESpecularLightingElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGElement SVGFESpecularLightingElement
+instance IsElement SVGFESpecularLightingElement
+instance IsNode SVGFESpecularLightingElement
+instance IsEventTarget SVGFESpecularLightingElement
+instance IsGObject SVGFESpecularLightingElement where
+  toGObject = GObject . unSVGFESpecularLightingElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGFESpecularLightingElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGFESpecularLightingElement :: IsGObject obj => obj -> SVGFESpecularLightingElement
+castToSVGFESpecularLightingElement = castTo gTypeSVGFESpecularLightingElement "SVGFESpecularLightingElement"
+
+foreign import javascript unsafe "window[\"SVGFESpecularLightingElement\"]" gTypeSVGFESpecularLightingElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGFESpotLightElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFESpotLightElement Mozilla SVGFESpotLightElement documentation>
+newtype SVGFESpotLightElement = SVGFESpotLightElement { unSVGFESpotLightElement :: JSRef }
+
+instance Eq (SVGFESpotLightElement) where
+  (SVGFESpotLightElement a) == (SVGFESpotLightElement b) = js_eq a b
+
+instance PToJSRef SVGFESpotLightElement where
+  pToJSRef = unSVGFESpotLightElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGFESpotLightElement where
+  pFromJSRef = SVGFESpotLightElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGFESpotLightElement where
+  toJSRef = return . unSVGFESpotLightElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGFESpotLightElement where
+  fromJSRef = return . fmap SVGFESpotLightElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGElement SVGFESpotLightElement
+instance IsElement SVGFESpotLightElement
+instance IsNode SVGFESpotLightElement
+instance IsEventTarget SVGFESpotLightElement
+instance IsGObject SVGFESpotLightElement where
+  toGObject = GObject . unSVGFESpotLightElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGFESpotLightElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGFESpotLightElement :: IsGObject obj => obj -> SVGFESpotLightElement
+castToSVGFESpotLightElement = castTo gTypeSVGFESpotLightElement "SVGFESpotLightElement"
+
+foreign import javascript unsafe "window[\"SVGFESpotLightElement\"]" gTypeSVGFESpotLightElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGFETileElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFETileElement Mozilla SVGFETileElement documentation>
+newtype SVGFETileElement = SVGFETileElement { unSVGFETileElement :: JSRef }
+
+instance Eq (SVGFETileElement) where
+  (SVGFETileElement a) == (SVGFETileElement b) = js_eq a b
+
+instance PToJSRef SVGFETileElement where
+  pToJSRef = unSVGFETileElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGFETileElement where
+  pFromJSRef = SVGFETileElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGFETileElement where
+  toJSRef = return . unSVGFETileElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGFETileElement where
+  fromJSRef = return . fmap SVGFETileElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGElement SVGFETileElement
+instance IsElement SVGFETileElement
+instance IsNode SVGFETileElement
+instance IsEventTarget SVGFETileElement
+instance IsGObject SVGFETileElement where
+  toGObject = GObject . unSVGFETileElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGFETileElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGFETileElement :: IsGObject obj => obj -> SVGFETileElement
+castToSVGFETileElement = castTo gTypeSVGFETileElement "SVGFETileElement"
+
+foreign import javascript unsafe "window[\"SVGFETileElement\"]" gTypeSVGFETileElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGFETurbulenceElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFETurbulenceElement Mozilla SVGFETurbulenceElement documentation>
+newtype SVGFETurbulenceElement = SVGFETurbulenceElement { unSVGFETurbulenceElement :: JSRef }
+
+instance Eq (SVGFETurbulenceElement) where
+  (SVGFETurbulenceElement a) == (SVGFETurbulenceElement b) = js_eq a b
+
+instance PToJSRef SVGFETurbulenceElement where
+  pToJSRef = unSVGFETurbulenceElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGFETurbulenceElement where
+  pFromJSRef = SVGFETurbulenceElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGFETurbulenceElement where
+  toJSRef = return . unSVGFETurbulenceElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGFETurbulenceElement where
+  fromJSRef = return . fmap SVGFETurbulenceElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGElement SVGFETurbulenceElement
+instance IsElement SVGFETurbulenceElement
+instance IsNode SVGFETurbulenceElement
+instance IsEventTarget SVGFETurbulenceElement
+instance IsGObject SVGFETurbulenceElement where
+  toGObject = GObject . unSVGFETurbulenceElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGFETurbulenceElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGFETurbulenceElement :: IsGObject obj => obj -> SVGFETurbulenceElement
+castToSVGFETurbulenceElement = castTo gTypeSVGFETurbulenceElement "SVGFETurbulenceElement"
+
+foreign import javascript unsafe "window[\"SVGFETurbulenceElement\"]" gTypeSVGFETurbulenceElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGFilterElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFilterElement Mozilla SVGFilterElement documentation>
+newtype SVGFilterElement = SVGFilterElement { unSVGFilterElement :: JSRef }
+
+instance Eq (SVGFilterElement) where
+  (SVGFilterElement a) == (SVGFilterElement b) = js_eq a b
+
+instance PToJSRef SVGFilterElement where
+  pToJSRef = unSVGFilterElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGFilterElement where
+  pFromJSRef = SVGFilterElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGFilterElement where
+  toJSRef = return . unSVGFilterElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGFilterElement where
+  fromJSRef = return . fmap SVGFilterElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGElement SVGFilterElement
+instance IsElement SVGFilterElement
+instance IsNode SVGFilterElement
+instance IsEventTarget SVGFilterElement
+instance IsGObject SVGFilterElement where
+  toGObject = GObject . unSVGFilterElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGFilterElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGFilterElement :: IsGObject obj => obj -> SVGFilterElement
+castToSVGFilterElement = castTo gTypeSVGFilterElement "SVGFilterElement"
+
+foreign import javascript unsafe "window[\"SVGFilterElement\"]" gTypeSVGFilterElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGFilterPrimitiveStandardAttributes".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFilterPrimitiveStandardAttributes Mozilla SVGFilterPrimitiveStandardAttributes documentation>
+newtype SVGFilterPrimitiveStandardAttributes = SVGFilterPrimitiveStandardAttributes { unSVGFilterPrimitiveStandardAttributes :: JSRef }
+
+instance Eq (SVGFilterPrimitiveStandardAttributes) where
+  (SVGFilterPrimitiveStandardAttributes a) == (SVGFilterPrimitiveStandardAttributes b) = js_eq a b
+
+instance PToJSRef SVGFilterPrimitiveStandardAttributes where
+  pToJSRef = unSVGFilterPrimitiveStandardAttributes
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGFilterPrimitiveStandardAttributes where
+  pFromJSRef = SVGFilterPrimitiveStandardAttributes
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGFilterPrimitiveStandardAttributes where
+  toJSRef = return . unSVGFilterPrimitiveStandardAttributes
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGFilterPrimitiveStandardAttributes where
+  fromJSRef = return . fmap SVGFilterPrimitiveStandardAttributes . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject SVGFilterPrimitiveStandardAttributes where
+  toGObject = GObject . unSVGFilterPrimitiveStandardAttributes
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGFilterPrimitiveStandardAttributes . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGFilterPrimitiveStandardAttributes :: IsGObject obj => obj -> SVGFilterPrimitiveStandardAttributes
+castToSVGFilterPrimitiveStandardAttributes = castTo gTypeSVGFilterPrimitiveStandardAttributes "SVGFilterPrimitiveStandardAttributes"
+
+foreign import javascript unsafe "window[\"SVGFilterPrimitiveStandardAttributes\"]" gTypeSVGFilterPrimitiveStandardAttributes :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGFitToViewBox".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFitToViewBox Mozilla SVGFitToViewBox documentation>
+newtype SVGFitToViewBox = SVGFitToViewBox { unSVGFitToViewBox :: JSRef }
+
+instance Eq (SVGFitToViewBox) where
+  (SVGFitToViewBox a) == (SVGFitToViewBox b) = js_eq a b
+
+instance PToJSRef SVGFitToViewBox where
+  pToJSRef = unSVGFitToViewBox
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGFitToViewBox where
+  pFromJSRef = SVGFitToViewBox
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGFitToViewBox where
+  toJSRef = return . unSVGFitToViewBox
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGFitToViewBox where
+  fromJSRef = return . fmap SVGFitToViewBox . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject SVGFitToViewBox where
+  toGObject = GObject . unSVGFitToViewBox
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGFitToViewBox . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGFitToViewBox :: IsGObject obj => obj -> SVGFitToViewBox
+castToSVGFitToViewBox = castTo gTypeSVGFitToViewBox "SVGFitToViewBox"
+
+foreign import javascript unsafe "window[\"SVGFitToViewBox\"]" gTypeSVGFitToViewBox :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGFontElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFontElement Mozilla SVGFontElement documentation>
+newtype SVGFontElement = SVGFontElement { unSVGFontElement :: JSRef }
+
+instance Eq (SVGFontElement) where
+  (SVGFontElement a) == (SVGFontElement b) = js_eq a b
+
+instance PToJSRef SVGFontElement where
+  pToJSRef = unSVGFontElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGFontElement where
+  pFromJSRef = SVGFontElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGFontElement where
+  toJSRef = return . unSVGFontElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGFontElement where
+  fromJSRef = return . fmap SVGFontElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGElement SVGFontElement
+instance IsElement SVGFontElement
+instance IsNode SVGFontElement
+instance IsEventTarget SVGFontElement
+instance IsGObject SVGFontElement where
+  toGObject = GObject . unSVGFontElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGFontElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGFontElement :: IsGObject obj => obj -> SVGFontElement
+castToSVGFontElement = castTo gTypeSVGFontElement "SVGFontElement"
+
+foreign import javascript unsafe "window[\"SVGFontElement\"]" gTypeSVGFontElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGFontFaceElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFontFaceElement Mozilla SVGFontFaceElement documentation>
+newtype SVGFontFaceElement = SVGFontFaceElement { unSVGFontFaceElement :: JSRef }
+
+instance Eq (SVGFontFaceElement) where
+  (SVGFontFaceElement a) == (SVGFontFaceElement b) = js_eq a b
+
+instance PToJSRef SVGFontFaceElement where
+  pToJSRef = unSVGFontFaceElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGFontFaceElement where
+  pFromJSRef = SVGFontFaceElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGFontFaceElement where
+  toJSRef = return . unSVGFontFaceElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGFontFaceElement where
+  fromJSRef = return . fmap SVGFontFaceElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGElement SVGFontFaceElement
+instance IsElement SVGFontFaceElement
+instance IsNode SVGFontFaceElement
+instance IsEventTarget SVGFontFaceElement
+instance IsGObject SVGFontFaceElement where
+  toGObject = GObject . unSVGFontFaceElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGFontFaceElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGFontFaceElement :: IsGObject obj => obj -> SVGFontFaceElement
+castToSVGFontFaceElement = castTo gTypeSVGFontFaceElement "SVGFontFaceElement"
+
+foreign import javascript unsafe "window[\"SVGFontFaceElement\"]" gTypeSVGFontFaceElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGFontFaceFormatElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFontFaceFormatElement Mozilla SVGFontFaceFormatElement documentation>
+newtype SVGFontFaceFormatElement = SVGFontFaceFormatElement { unSVGFontFaceFormatElement :: JSRef }
+
+instance Eq (SVGFontFaceFormatElement) where
+  (SVGFontFaceFormatElement a) == (SVGFontFaceFormatElement b) = js_eq a b
+
+instance PToJSRef SVGFontFaceFormatElement where
+  pToJSRef = unSVGFontFaceFormatElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGFontFaceFormatElement where
+  pFromJSRef = SVGFontFaceFormatElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGFontFaceFormatElement where
+  toJSRef = return . unSVGFontFaceFormatElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGFontFaceFormatElement where
+  fromJSRef = return . fmap SVGFontFaceFormatElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGElement SVGFontFaceFormatElement
+instance IsElement SVGFontFaceFormatElement
+instance IsNode SVGFontFaceFormatElement
+instance IsEventTarget SVGFontFaceFormatElement
+instance IsGObject SVGFontFaceFormatElement where
+  toGObject = GObject . unSVGFontFaceFormatElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGFontFaceFormatElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGFontFaceFormatElement :: IsGObject obj => obj -> SVGFontFaceFormatElement
+castToSVGFontFaceFormatElement = castTo gTypeSVGFontFaceFormatElement "SVGFontFaceFormatElement"
+
+foreign import javascript unsafe "window[\"SVGFontFaceFormatElement\"]" gTypeSVGFontFaceFormatElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGFontFaceNameElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFontFaceNameElement Mozilla SVGFontFaceNameElement documentation>
+newtype SVGFontFaceNameElement = SVGFontFaceNameElement { unSVGFontFaceNameElement :: JSRef }
+
+instance Eq (SVGFontFaceNameElement) where
+  (SVGFontFaceNameElement a) == (SVGFontFaceNameElement b) = js_eq a b
+
+instance PToJSRef SVGFontFaceNameElement where
+  pToJSRef = unSVGFontFaceNameElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGFontFaceNameElement where
+  pFromJSRef = SVGFontFaceNameElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGFontFaceNameElement where
+  toJSRef = return . unSVGFontFaceNameElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGFontFaceNameElement where
+  fromJSRef = return . fmap SVGFontFaceNameElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGElement SVGFontFaceNameElement
+instance IsElement SVGFontFaceNameElement
+instance IsNode SVGFontFaceNameElement
+instance IsEventTarget SVGFontFaceNameElement
+instance IsGObject SVGFontFaceNameElement where
+  toGObject = GObject . unSVGFontFaceNameElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGFontFaceNameElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGFontFaceNameElement :: IsGObject obj => obj -> SVGFontFaceNameElement
+castToSVGFontFaceNameElement = castTo gTypeSVGFontFaceNameElement "SVGFontFaceNameElement"
+
+foreign import javascript unsafe "window[\"SVGFontFaceNameElement\"]" gTypeSVGFontFaceNameElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGFontFaceSrcElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFontFaceSrcElement Mozilla SVGFontFaceSrcElement documentation>
+newtype SVGFontFaceSrcElement = SVGFontFaceSrcElement { unSVGFontFaceSrcElement :: JSRef }
+
+instance Eq (SVGFontFaceSrcElement) where
+  (SVGFontFaceSrcElement a) == (SVGFontFaceSrcElement b) = js_eq a b
+
+instance PToJSRef SVGFontFaceSrcElement where
+  pToJSRef = unSVGFontFaceSrcElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGFontFaceSrcElement where
+  pFromJSRef = SVGFontFaceSrcElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGFontFaceSrcElement where
+  toJSRef = return . unSVGFontFaceSrcElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGFontFaceSrcElement where
+  fromJSRef = return . fmap SVGFontFaceSrcElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGElement SVGFontFaceSrcElement
+instance IsElement SVGFontFaceSrcElement
+instance IsNode SVGFontFaceSrcElement
+instance IsEventTarget SVGFontFaceSrcElement
+instance IsGObject SVGFontFaceSrcElement where
+  toGObject = GObject . unSVGFontFaceSrcElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGFontFaceSrcElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGFontFaceSrcElement :: IsGObject obj => obj -> SVGFontFaceSrcElement
+castToSVGFontFaceSrcElement = castTo gTypeSVGFontFaceSrcElement "SVGFontFaceSrcElement"
+
+foreign import javascript unsafe "window[\"SVGFontFaceSrcElement\"]" gTypeSVGFontFaceSrcElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGFontFaceUriElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGFontFaceUriElement Mozilla SVGFontFaceUriElement documentation>
+newtype SVGFontFaceUriElement = SVGFontFaceUriElement { unSVGFontFaceUriElement :: JSRef }
+
+instance Eq (SVGFontFaceUriElement) where
+  (SVGFontFaceUriElement a) == (SVGFontFaceUriElement b) = js_eq a b
+
+instance PToJSRef SVGFontFaceUriElement where
+  pToJSRef = unSVGFontFaceUriElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGFontFaceUriElement where
+  pFromJSRef = SVGFontFaceUriElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGFontFaceUriElement where
+  toJSRef = return . unSVGFontFaceUriElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGFontFaceUriElement where
+  fromJSRef = return . fmap SVGFontFaceUriElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGElement SVGFontFaceUriElement
+instance IsElement SVGFontFaceUriElement
+instance IsNode SVGFontFaceUriElement
+instance IsEventTarget SVGFontFaceUriElement
+instance IsGObject SVGFontFaceUriElement where
+  toGObject = GObject . unSVGFontFaceUriElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGFontFaceUriElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGFontFaceUriElement :: IsGObject obj => obj -> SVGFontFaceUriElement
+castToSVGFontFaceUriElement = castTo gTypeSVGFontFaceUriElement "SVGFontFaceUriElement"
+
+foreign import javascript unsafe "window[\"SVGFontFaceUriElement\"]" gTypeSVGFontFaceUriElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGForeignObjectElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGGraphicsElement"
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGForeignObjectElement Mozilla SVGForeignObjectElement documentation>
+newtype SVGForeignObjectElement = SVGForeignObjectElement { unSVGForeignObjectElement :: JSRef }
+
+instance Eq (SVGForeignObjectElement) where
+  (SVGForeignObjectElement a) == (SVGForeignObjectElement b) = js_eq a b
+
+instance PToJSRef SVGForeignObjectElement where
+  pToJSRef = unSVGForeignObjectElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGForeignObjectElement where
+  pFromJSRef = SVGForeignObjectElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGForeignObjectElement where
+  toJSRef = return . unSVGForeignObjectElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGForeignObjectElement where
+  fromJSRef = return . fmap SVGForeignObjectElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGGraphicsElement SVGForeignObjectElement
+instance IsSVGElement SVGForeignObjectElement
+instance IsElement SVGForeignObjectElement
+instance IsNode SVGForeignObjectElement
+instance IsEventTarget SVGForeignObjectElement
+instance IsGObject SVGForeignObjectElement where
+  toGObject = GObject . unSVGForeignObjectElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGForeignObjectElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGForeignObjectElement :: IsGObject obj => obj -> SVGForeignObjectElement
+castToSVGForeignObjectElement = castTo gTypeSVGForeignObjectElement "SVGForeignObjectElement"
+
+foreign import javascript unsafe "window[\"SVGForeignObjectElement\"]" gTypeSVGForeignObjectElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGGElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGGraphicsElement"
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGGElement Mozilla SVGGElement documentation>
+newtype SVGGElement = SVGGElement { unSVGGElement :: JSRef }
+
+instance Eq (SVGGElement) where
+  (SVGGElement a) == (SVGGElement b) = js_eq a b
+
+instance PToJSRef SVGGElement where
+  pToJSRef = unSVGGElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGGElement where
+  pFromJSRef = SVGGElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGGElement where
+  toJSRef = return . unSVGGElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGGElement where
+  fromJSRef = return . fmap SVGGElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGGraphicsElement SVGGElement
+instance IsSVGElement SVGGElement
+instance IsElement SVGGElement
+instance IsNode SVGGElement
+instance IsEventTarget SVGGElement
+instance IsGObject SVGGElement where
+  toGObject = GObject . unSVGGElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGGElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGGElement :: IsGObject obj => obj -> SVGGElement
+castToSVGGElement = castTo gTypeSVGGElement "SVGGElement"
+
+foreign import javascript unsafe "window[\"SVGGElement\"]" gTypeSVGGElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGGlyphElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGGlyphElement Mozilla SVGGlyphElement documentation>
+newtype SVGGlyphElement = SVGGlyphElement { unSVGGlyphElement :: JSRef }
+
+instance Eq (SVGGlyphElement) where
+  (SVGGlyphElement a) == (SVGGlyphElement b) = js_eq a b
+
+instance PToJSRef SVGGlyphElement where
+  pToJSRef = unSVGGlyphElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGGlyphElement where
+  pFromJSRef = SVGGlyphElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGGlyphElement where
+  toJSRef = return . unSVGGlyphElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGGlyphElement where
+  fromJSRef = return . fmap SVGGlyphElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGElement SVGGlyphElement
+instance IsElement SVGGlyphElement
+instance IsNode SVGGlyphElement
+instance IsEventTarget SVGGlyphElement
+instance IsGObject SVGGlyphElement where
+  toGObject = GObject . unSVGGlyphElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGGlyphElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGGlyphElement :: IsGObject obj => obj -> SVGGlyphElement
+castToSVGGlyphElement = castTo gTypeSVGGlyphElement "SVGGlyphElement"
+
+foreign import javascript unsafe "window[\"SVGGlyphElement\"]" gTypeSVGGlyphElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGGlyphRefElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGGlyphRefElement Mozilla SVGGlyphRefElement documentation>
+newtype SVGGlyphRefElement = SVGGlyphRefElement { unSVGGlyphRefElement :: JSRef }
+
+instance Eq (SVGGlyphRefElement) where
+  (SVGGlyphRefElement a) == (SVGGlyphRefElement b) = js_eq a b
+
+instance PToJSRef SVGGlyphRefElement where
+  pToJSRef = unSVGGlyphRefElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGGlyphRefElement where
+  pFromJSRef = SVGGlyphRefElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGGlyphRefElement where
+  toJSRef = return . unSVGGlyphRefElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGGlyphRefElement where
+  fromJSRef = return . fmap SVGGlyphRefElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGElement SVGGlyphRefElement
+instance IsElement SVGGlyphRefElement
+instance IsNode SVGGlyphRefElement
+instance IsEventTarget SVGGlyphRefElement
+instance IsGObject SVGGlyphRefElement where
+  toGObject = GObject . unSVGGlyphRefElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGGlyphRefElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGGlyphRefElement :: IsGObject obj => obj -> SVGGlyphRefElement
+castToSVGGlyphRefElement = castTo gTypeSVGGlyphRefElement "SVGGlyphRefElement"
+
+foreign import javascript unsafe "window[\"SVGGlyphRefElement\"]" gTypeSVGGlyphRefElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGGradientElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGGradientElement Mozilla SVGGradientElement documentation>
+newtype SVGGradientElement = SVGGradientElement { unSVGGradientElement :: JSRef }
+
+instance Eq (SVGGradientElement) where
+  (SVGGradientElement a) == (SVGGradientElement b) = js_eq a b
+
+instance PToJSRef SVGGradientElement where
+  pToJSRef = unSVGGradientElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGGradientElement where
+  pFromJSRef = SVGGradientElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGGradientElement where
+  toJSRef = return . unSVGGradientElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGGradientElement where
+  fromJSRef = return . fmap SVGGradientElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsSVGElement o => IsSVGGradientElement o
+toSVGGradientElement :: IsSVGGradientElement o => o -> SVGGradientElement
+toSVGGradientElement = unsafeCastGObject . toGObject
+
+instance IsSVGGradientElement SVGGradientElement
+instance IsSVGElement SVGGradientElement
+instance IsElement SVGGradientElement
+instance IsNode SVGGradientElement
+instance IsEventTarget SVGGradientElement
+instance IsGObject SVGGradientElement where
+  toGObject = GObject . unSVGGradientElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGGradientElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGGradientElement :: IsGObject obj => obj -> SVGGradientElement
+castToSVGGradientElement = castTo gTypeSVGGradientElement "SVGGradientElement"
+
+foreign import javascript unsafe "window[\"SVGGradientElement\"]" gTypeSVGGradientElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGGraphicsElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGGraphicsElement Mozilla SVGGraphicsElement documentation>
+newtype SVGGraphicsElement = SVGGraphicsElement { unSVGGraphicsElement :: JSRef }
+
+instance Eq (SVGGraphicsElement) where
+  (SVGGraphicsElement a) == (SVGGraphicsElement b) = js_eq a b
+
+instance PToJSRef SVGGraphicsElement where
+  pToJSRef = unSVGGraphicsElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGGraphicsElement where
+  pFromJSRef = SVGGraphicsElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGGraphicsElement where
+  toJSRef = return . unSVGGraphicsElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGGraphicsElement where
+  fromJSRef = return . fmap SVGGraphicsElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsSVGElement o => IsSVGGraphicsElement o
+toSVGGraphicsElement :: IsSVGGraphicsElement o => o -> SVGGraphicsElement
+toSVGGraphicsElement = unsafeCastGObject . toGObject
+
+instance IsSVGGraphicsElement SVGGraphicsElement
+instance IsSVGElement SVGGraphicsElement
+instance IsElement SVGGraphicsElement
+instance IsNode SVGGraphicsElement
+instance IsEventTarget SVGGraphicsElement
+instance IsGObject SVGGraphicsElement where
+  toGObject = GObject . unSVGGraphicsElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGGraphicsElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGGraphicsElement :: IsGObject obj => obj -> SVGGraphicsElement
+castToSVGGraphicsElement = castTo gTypeSVGGraphicsElement "SVGGraphicsElement"
+
+foreign import javascript unsafe "window[\"SVGGraphicsElement\"]" gTypeSVGGraphicsElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGHKernElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGHKernElement Mozilla SVGHKernElement documentation>
+newtype SVGHKernElement = SVGHKernElement { unSVGHKernElement :: JSRef }
+
+instance Eq (SVGHKernElement) where
+  (SVGHKernElement a) == (SVGHKernElement b) = js_eq a b
+
+instance PToJSRef SVGHKernElement where
+  pToJSRef = unSVGHKernElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGHKernElement where
+  pFromJSRef = SVGHKernElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGHKernElement where
+  toJSRef = return . unSVGHKernElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGHKernElement where
+  fromJSRef = return . fmap SVGHKernElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGElement SVGHKernElement
+instance IsElement SVGHKernElement
+instance IsNode SVGHKernElement
+instance IsEventTarget SVGHKernElement
+instance IsGObject SVGHKernElement where
+  toGObject = GObject . unSVGHKernElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGHKernElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGHKernElement :: IsGObject obj => obj -> SVGHKernElement
+castToSVGHKernElement = castTo gTypeSVGHKernElement "SVGHKernElement"
+
+foreign import javascript unsafe "window[\"SVGHKernElement\"]" gTypeSVGHKernElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGImageElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGGraphicsElement"
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGImageElement Mozilla SVGImageElement documentation>
+newtype SVGImageElement = SVGImageElement { unSVGImageElement :: JSRef }
+
+instance Eq (SVGImageElement) where
+  (SVGImageElement a) == (SVGImageElement b) = js_eq a b
+
+instance PToJSRef SVGImageElement where
+  pToJSRef = unSVGImageElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGImageElement where
+  pFromJSRef = SVGImageElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGImageElement where
+  toJSRef = return . unSVGImageElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGImageElement where
+  fromJSRef = return . fmap SVGImageElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGGraphicsElement SVGImageElement
+instance IsSVGElement SVGImageElement
+instance IsElement SVGImageElement
+instance IsNode SVGImageElement
+instance IsEventTarget SVGImageElement
+instance IsGObject SVGImageElement where
+  toGObject = GObject . unSVGImageElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGImageElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGImageElement :: IsGObject obj => obj -> SVGImageElement
+castToSVGImageElement = castTo gTypeSVGImageElement "SVGImageElement"
+
+foreign import javascript unsafe "window[\"SVGImageElement\"]" gTypeSVGImageElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGLength".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGLength Mozilla SVGLength documentation>
+newtype SVGLength = SVGLength { unSVGLength :: JSRef }
+
+instance Eq (SVGLength) where
+  (SVGLength a) == (SVGLength b) = js_eq a b
+
+instance PToJSRef SVGLength where
+  pToJSRef = unSVGLength
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGLength where
+  pFromJSRef = SVGLength
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGLength where
+  toJSRef = return . unSVGLength
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGLength where
+  fromJSRef = return . fmap SVGLength . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject SVGLength where
+  toGObject = GObject . unSVGLength
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGLength . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGLength :: IsGObject obj => obj -> SVGLength
+castToSVGLength = castTo gTypeSVGLength "SVGLength"
+
+foreign import javascript unsafe "window[\"SVGLength\"]" gTypeSVGLength :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGLengthList".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGLengthList Mozilla SVGLengthList documentation>
+newtype SVGLengthList = SVGLengthList { unSVGLengthList :: JSRef }
+
+instance Eq (SVGLengthList) where
+  (SVGLengthList a) == (SVGLengthList b) = js_eq a b
+
+instance PToJSRef SVGLengthList where
+  pToJSRef = unSVGLengthList
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGLengthList where
+  pFromJSRef = SVGLengthList
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGLengthList where
+  toJSRef = return . unSVGLengthList
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGLengthList where
+  fromJSRef = return . fmap SVGLengthList . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject SVGLengthList where
+  toGObject = GObject . unSVGLengthList
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGLengthList . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGLengthList :: IsGObject obj => obj -> SVGLengthList
+castToSVGLengthList = castTo gTypeSVGLengthList "SVGLengthList"
+
+foreign import javascript unsafe "window[\"SVGLengthList\"]" gTypeSVGLengthList :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGLineElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGGraphicsElement"
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGLineElement Mozilla SVGLineElement documentation>
+newtype SVGLineElement = SVGLineElement { unSVGLineElement :: JSRef }
+
+instance Eq (SVGLineElement) where
+  (SVGLineElement a) == (SVGLineElement b) = js_eq a b
+
+instance PToJSRef SVGLineElement where
+  pToJSRef = unSVGLineElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGLineElement where
+  pFromJSRef = SVGLineElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGLineElement where
+  toJSRef = return . unSVGLineElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGLineElement where
+  fromJSRef = return . fmap SVGLineElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGGraphicsElement SVGLineElement
+instance IsSVGElement SVGLineElement
+instance IsElement SVGLineElement
+instance IsNode SVGLineElement
+instance IsEventTarget SVGLineElement
+instance IsGObject SVGLineElement where
+  toGObject = GObject . unSVGLineElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGLineElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGLineElement :: IsGObject obj => obj -> SVGLineElement
+castToSVGLineElement = castTo gTypeSVGLineElement "SVGLineElement"
+
+foreign import javascript unsafe "window[\"SVGLineElement\"]" gTypeSVGLineElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGLinearGradientElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGGradientElement"
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGLinearGradientElement Mozilla SVGLinearGradientElement documentation>
+newtype SVGLinearGradientElement = SVGLinearGradientElement { unSVGLinearGradientElement :: JSRef }
+
+instance Eq (SVGLinearGradientElement) where
+  (SVGLinearGradientElement a) == (SVGLinearGradientElement b) = js_eq a b
+
+instance PToJSRef SVGLinearGradientElement where
+  pToJSRef = unSVGLinearGradientElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGLinearGradientElement where
+  pFromJSRef = SVGLinearGradientElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGLinearGradientElement where
+  toJSRef = return . unSVGLinearGradientElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGLinearGradientElement where
+  fromJSRef = return . fmap SVGLinearGradientElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGGradientElement SVGLinearGradientElement
+instance IsSVGElement SVGLinearGradientElement
+instance IsElement SVGLinearGradientElement
+instance IsNode SVGLinearGradientElement
+instance IsEventTarget SVGLinearGradientElement
+instance IsGObject SVGLinearGradientElement where
+  toGObject = GObject . unSVGLinearGradientElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGLinearGradientElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGLinearGradientElement :: IsGObject obj => obj -> SVGLinearGradientElement
+castToSVGLinearGradientElement = castTo gTypeSVGLinearGradientElement "SVGLinearGradientElement"
+
+foreign import javascript unsafe "window[\"SVGLinearGradientElement\"]" gTypeSVGLinearGradientElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGMPathElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGMPathElement Mozilla SVGMPathElement documentation>
+newtype SVGMPathElement = SVGMPathElement { unSVGMPathElement :: JSRef }
+
+instance Eq (SVGMPathElement) where
+  (SVGMPathElement a) == (SVGMPathElement b) = js_eq a b
+
+instance PToJSRef SVGMPathElement where
+  pToJSRef = unSVGMPathElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGMPathElement where
+  pFromJSRef = SVGMPathElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGMPathElement where
+  toJSRef = return . unSVGMPathElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGMPathElement where
+  fromJSRef = return . fmap SVGMPathElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGElement SVGMPathElement
+instance IsElement SVGMPathElement
+instance IsNode SVGMPathElement
+instance IsEventTarget SVGMPathElement
+instance IsGObject SVGMPathElement where
+  toGObject = GObject . unSVGMPathElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGMPathElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGMPathElement :: IsGObject obj => obj -> SVGMPathElement
+castToSVGMPathElement = castTo gTypeSVGMPathElement "SVGMPathElement"
+
+foreign import javascript unsafe "window[\"SVGMPathElement\"]" gTypeSVGMPathElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGMarkerElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGMarkerElement Mozilla SVGMarkerElement documentation>
+newtype SVGMarkerElement = SVGMarkerElement { unSVGMarkerElement :: JSRef }
+
+instance Eq (SVGMarkerElement) where
+  (SVGMarkerElement a) == (SVGMarkerElement b) = js_eq a b
+
+instance PToJSRef SVGMarkerElement where
+  pToJSRef = unSVGMarkerElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGMarkerElement where
+  pFromJSRef = SVGMarkerElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGMarkerElement where
+  toJSRef = return . unSVGMarkerElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGMarkerElement where
+  fromJSRef = return . fmap SVGMarkerElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGElement SVGMarkerElement
+instance IsElement SVGMarkerElement
+instance IsNode SVGMarkerElement
+instance IsEventTarget SVGMarkerElement
+instance IsGObject SVGMarkerElement where
+  toGObject = GObject . unSVGMarkerElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGMarkerElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGMarkerElement :: IsGObject obj => obj -> SVGMarkerElement
+castToSVGMarkerElement = castTo gTypeSVGMarkerElement "SVGMarkerElement"
+
+foreign import javascript unsafe "window[\"SVGMarkerElement\"]" gTypeSVGMarkerElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGMaskElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGMaskElement Mozilla SVGMaskElement documentation>
+newtype SVGMaskElement = SVGMaskElement { unSVGMaskElement :: JSRef }
+
+instance Eq (SVGMaskElement) where
+  (SVGMaskElement a) == (SVGMaskElement b) = js_eq a b
+
+instance PToJSRef SVGMaskElement where
+  pToJSRef = unSVGMaskElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGMaskElement where
+  pFromJSRef = SVGMaskElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGMaskElement where
+  toJSRef = return . unSVGMaskElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGMaskElement where
+  fromJSRef = return . fmap SVGMaskElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGElement SVGMaskElement
+instance IsElement SVGMaskElement
+instance IsNode SVGMaskElement
+instance IsEventTarget SVGMaskElement
+instance IsGObject SVGMaskElement where
+  toGObject = GObject . unSVGMaskElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGMaskElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGMaskElement :: IsGObject obj => obj -> SVGMaskElement
+castToSVGMaskElement = castTo gTypeSVGMaskElement "SVGMaskElement"
+
+foreign import javascript unsafe "window[\"SVGMaskElement\"]" gTypeSVGMaskElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGMatrix".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGMatrix Mozilla SVGMatrix documentation>
+newtype SVGMatrix = SVGMatrix { unSVGMatrix :: JSRef }
+
+instance Eq (SVGMatrix) where
+  (SVGMatrix a) == (SVGMatrix b) = js_eq a b
+
+instance PToJSRef SVGMatrix where
+  pToJSRef = unSVGMatrix
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGMatrix where
+  pFromJSRef = SVGMatrix
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGMatrix where
+  toJSRef = return . unSVGMatrix
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGMatrix where
+  fromJSRef = return . fmap SVGMatrix . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject SVGMatrix where
+  toGObject = GObject . unSVGMatrix
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGMatrix . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGMatrix :: IsGObject obj => obj -> SVGMatrix
+castToSVGMatrix = castTo gTypeSVGMatrix "SVGMatrix"
+
+foreign import javascript unsafe "window[\"SVGMatrix\"]" gTypeSVGMatrix :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGMetadataElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGMetadataElement Mozilla SVGMetadataElement documentation>
+newtype SVGMetadataElement = SVGMetadataElement { unSVGMetadataElement :: JSRef }
+
+instance Eq (SVGMetadataElement) where
+  (SVGMetadataElement a) == (SVGMetadataElement b) = js_eq a b
+
+instance PToJSRef SVGMetadataElement where
+  pToJSRef = unSVGMetadataElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGMetadataElement where
+  pFromJSRef = SVGMetadataElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGMetadataElement where
+  toJSRef = return . unSVGMetadataElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGMetadataElement where
+  fromJSRef = return . fmap SVGMetadataElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGElement SVGMetadataElement
+instance IsElement SVGMetadataElement
+instance IsNode SVGMetadataElement
+instance IsEventTarget SVGMetadataElement
+instance IsGObject SVGMetadataElement where
+  toGObject = GObject . unSVGMetadataElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGMetadataElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGMetadataElement :: IsGObject obj => obj -> SVGMetadataElement
+castToSVGMetadataElement = castTo gTypeSVGMetadataElement "SVGMetadataElement"
+
+foreign import javascript unsafe "window[\"SVGMetadataElement\"]" gTypeSVGMetadataElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGMissingGlyphElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGMissingGlyphElement Mozilla SVGMissingGlyphElement documentation>
+newtype SVGMissingGlyphElement = SVGMissingGlyphElement { unSVGMissingGlyphElement :: JSRef }
+
+instance Eq (SVGMissingGlyphElement) where
+  (SVGMissingGlyphElement a) == (SVGMissingGlyphElement b) = js_eq a b
+
+instance PToJSRef SVGMissingGlyphElement where
+  pToJSRef = unSVGMissingGlyphElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGMissingGlyphElement where
+  pFromJSRef = SVGMissingGlyphElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGMissingGlyphElement where
+  toJSRef = return . unSVGMissingGlyphElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGMissingGlyphElement where
+  fromJSRef = return . fmap SVGMissingGlyphElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGElement SVGMissingGlyphElement
+instance IsElement SVGMissingGlyphElement
+instance IsNode SVGMissingGlyphElement
+instance IsEventTarget SVGMissingGlyphElement
+instance IsGObject SVGMissingGlyphElement where
+  toGObject = GObject . unSVGMissingGlyphElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGMissingGlyphElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGMissingGlyphElement :: IsGObject obj => obj -> SVGMissingGlyphElement
+castToSVGMissingGlyphElement = castTo gTypeSVGMissingGlyphElement "SVGMissingGlyphElement"
+
+foreign import javascript unsafe "window[\"SVGMissingGlyphElement\"]" gTypeSVGMissingGlyphElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGNumber".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGNumber Mozilla SVGNumber documentation>
+newtype SVGNumber = SVGNumber { unSVGNumber :: JSRef }
+
+instance Eq (SVGNumber) where
+  (SVGNumber a) == (SVGNumber b) = js_eq a b
+
+instance PToJSRef SVGNumber where
+  pToJSRef = unSVGNumber
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGNumber where
+  pFromJSRef = SVGNumber
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGNumber where
+  toJSRef = return . unSVGNumber
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGNumber where
+  fromJSRef = return . fmap SVGNumber . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject SVGNumber where
+  toGObject = GObject . unSVGNumber
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGNumber . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGNumber :: IsGObject obj => obj -> SVGNumber
+castToSVGNumber = castTo gTypeSVGNumber "SVGNumber"
+
+foreign import javascript unsafe "window[\"SVGNumber\"]" gTypeSVGNumber :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGNumberList".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGNumberList Mozilla SVGNumberList documentation>
+newtype SVGNumberList = SVGNumberList { unSVGNumberList :: JSRef }
+
+instance Eq (SVGNumberList) where
+  (SVGNumberList a) == (SVGNumberList b) = js_eq a b
+
+instance PToJSRef SVGNumberList where
+  pToJSRef = unSVGNumberList
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGNumberList where
+  pFromJSRef = SVGNumberList
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGNumberList where
+  toJSRef = return . unSVGNumberList
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGNumberList where
+  fromJSRef = return . fmap SVGNumberList . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject SVGNumberList where
+  toGObject = GObject . unSVGNumberList
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGNumberList . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGNumberList :: IsGObject obj => obj -> SVGNumberList
+castToSVGNumberList = castTo gTypeSVGNumberList "SVGNumberList"
+
+foreign import javascript unsafe "window[\"SVGNumberList\"]" gTypeSVGNumberList :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGPaint".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGColor"
+--     * "GHCJS.DOM.CSSValue"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGPaint Mozilla SVGPaint documentation>
+newtype SVGPaint = SVGPaint { unSVGPaint :: JSRef }
+
+instance Eq (SVGPaint) where
+  (SVGPaint a) == (SVGPaint b) = js_eq a b
+
+instance PToJSRef SVGPaint where
+  pToJSRef = unSVGPaint
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGPaint where
+  pFromJSRef = SVGPaint
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGPaint where
+  toJSRef = return . unSVGPaint
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGPaint where
+  fromJSRef = return . fmap SVGPaint . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGColor SVGPaint
+instance IsCSSValue SVGPaint
+instance IsGObject SVGPaint where
+  toGObject = GObject . unSVGPaint
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGPaint . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGPaint :: IsGObject obj => obj -> SVGPaint
+castToSVGPaint = castTo gTypeSVGPaint "SVGPaint"
+
+foreign import javascript unsafe "window[\"SVGPaint\"]" gTypeSVGPaint :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGPathElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGGraphicsElement"
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathElement Mozilla SVGPathElement documentation>
+newtype SVGPathElement = SVGPathElement { unSVGPathElement :: JSRef }
+
+instance Eq (SVGPathElement) where
+  (SVGPathElement a) == (SVGPathElement b) = js_eq a b
+
+instance PToJSRef SVGPathElement where
+  pToJSRef = unSVGPathElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGPathElement where
+  pFromJSRef = SVGPathElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGPathElement where
+  toJSRef = return . unSVGPathElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGPathElement where
+  fromJSRef = return . fmap SVGPathElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGGraphicsElement SVGPathElement
+instance IsSVGElement SVGPathElement
+instance IsElement SVGPathElement
+instance IsNode SVGPathElement
+instance IsEventTarget SVGPathElement
+instance IsGObject SVGPathElement where
+  toGObject = GObject . unSVGPathElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGPathElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGPathElement :: IsGObject obj => obj -> SVGPathElement
+castToSVGPathElement = castTo gTypeSVGPathElement "SVGPathElement"
+
+foreign import javascript unsafe "window[\"SVGPathElement\"]" gTypeSVGPathElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGPathSeg".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSeg Mozilla SVGPathSeg documentation>
+newtype SVGPathSeg = SVGPathSeg { unSVGPathSeg :: JSRef }
+
+instance Eq (SVGPathSeg) where
+  (SVGPathSeg a) == (SVGPathSeg b) = js_eq a b
+
+instance PToJSRef SVGPathSeg where
+  pToJSRef = unSVGPathSeg
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGPathSeg where
+  pFromJSRef = SVGPathSeg
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGPathSeg where
+  toJSRef = return . unSVGPathSeg
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGPathSeg where
+  fromJSRef = return . fmap SVGPathSeg . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsGObject o => IsSVGPathSeg o
+toSVGPathSeg :: IsSVGPathSeg o => o -> SVGPathSeg
+toSVGPathSeg = unsafeCastGObject . toGObject
+
+instance IsSVGPathSeg SVGPathSeg
+instance IsGObject SVGPathSeg where
+  toGObject = GObject . unSVGPathSeg
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGPathSeg . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGPathSeg :: IsGObject obj => obj -> SVGPathSeg
+castToSVGPathSeg = castTo gTypeSVGPathSeg "SVGPathSeg"
+
+foreign import javascript unsafe "window[\"SVGPathSeg\"]" gTypeSVGPathSeg :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGPathSegArcAbs".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGPathSeg"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegArcAbs Mozilla SVGPathSegArcAbs documentation>
+newtype SVGPathSegArcAbs = SVGPathSegArcAbs { unSVGPathSegArcAbs :: JSRef }
+
+instance Eq (SVGPathSegArcAbs) where
+  (SVGPathSegArcAbs a) == (SVGPathSegArcAbs b) = js_eq a b
+
+instance PToJSRef SVGPathSegArcAbs where
+  pToJSRef = unSVGPathSegArcAbs
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGPathSegArcAbs where
+  pFromJSRef = SVGPathSegArcAbs
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGPathSegArcAbs where
+  toJSRef = return . unSVGPathSegArcAbs
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGPathSegArcAbs where
+  fromJSRef = return . fmap SVGPathSegArcAbs . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGPathSeg SVGPathSegArcAbs
+instance IsGObject SVGPathSegArcAbs where
+  toGObject = GObject . unSVGPathSegArcAbs
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGPathSegArcAbs . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGPathSegArcAbs :: IsGObject obj => obj -> SVGPathSegArcAbs
+castToSVGPathSegArcAbs = castTo gTypeSVGPathSegArcAbs "SVGPathSegArcAbs"
+
+foreign import javascript unsafe "window[\"SVGPathSegArcAbs\"]" gTypeSVGPathSegArcAbs :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGPathSegArcRel".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGPathSeg"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegArcRel Mozilla SVGPathSegArcRel documentation>
+newtype SVGPathSegArcRel = SVGPathSegArcRel { unSVGPathSegArcRel :: JSRef }
+
+instance Eq (SVGPathSegArcRel) where
+  (SVGPathSegArcRel a) == (SVGPathSegArcRel b) = js_eq a b
+
+instance PToJSRef SVGPathSegArcRel where
+  pToJSRef = unSVGPathSegArcRel
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGPathSegArcRel where
+  pFromJSRef = SVGPathSegArcRel
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGPathSegArcRel where
+  toJSRef = return . unSVGPathSegArcRel
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGPathSegArcRel where
+  fromJSRef = return . fmap SVGPathSegArcRel . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGPathSeg SVGPathSegArcRel
+instance IsGObject SVGPathSegArcRel where
+  toGObject = GObject . unSVGPathSegArcRel
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGPathSegArcRel . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGPathSegArcRel :: IsGObject obj => obj -> SVGPathSegArcRel
+castToSVGPathSegArcRel = castTo gTypeSVGPathSegArcRel "SVGPathSegArcRel"
+
+foreign import javascript unsafe "window[\"SVGPathSegArcRel\"]" gTypeSVGPathSegArcRel :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGPathSegClosePath".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGPathSeg"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegClosePath Mozilla SVGPathSegClosePath documentation>
+newtype SVGPathSegClosePath = SVGPathSegClosePath { unSVGPathSegClosePath :: JSRef }
+
+instance Eq (SVGPathSegClosePath) where
+  (SVGPathSegClosePath a) == (SVGPathSegClosePath b) = js_eq a b
+
+instance PToJSRef SVGPathSegClosePath where
+  pToJSRef = unSVGPathSegClosePath
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGPathSegClosePath where
+  pFromJSRef = SVGPathSegClosePath
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGPathSegClosePath where
+  toJSRef = return . unSVGPathSegClosePath
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGPathSegClosePath where
+  fromJSRef = return . fmap SVGPathSegClosePath . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGPathSeg SVGPathSegClosePath
+instance IsGObject SVGPathSegClosePath where
+  toGObject = GObject . unSVGPathSegClosePath
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGPathSegClosePath . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGPathSegClosePath :: IsGObject obj => obj -> SVGPathSegClosePath
+castToSVGPathSegClosePath = castTo gTypeSVGPathSegClosePath "SVGPathSegClosePath"
+
+foreign import javascript unsafe "window[\"SVGPathSegClosePath\"]" gTypeSVGPathSegClosePath :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGPathSegCurvetoCubicAbs".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGPathSeg"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoCubicAbs Mozilla SVGPathSegCurvetoCubicAbs documentation>
+newtype SVGPathSegCurvetoCubicAbs = SVGPathSegCurvetoCubicAbs { unSVGPathSegCurvetoCubicAbs :: JSRef }
+
+instance Eq (SVGPathSegCurvetoCubicAbs) where
+  (SVGPathSegCurvetoCubicAbs a) == (SVGPathSegCurvetoCubicAbs b) = js_eq a b
+
+instance PToJSRef SVGPathSegCurvetoCubicAbs where
+  pToJSRef = unSVGPathSegCurvetoCubicAbs
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGPathSegCurvetoCubicAbs where
+  pFromJSRef = SVGPathSegCurvetoCubicAbs
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGPathSegCurvetoCubicAbs where
+  toJSRef = return . unSVGPathSegCurvetoCubicAbs
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGPathSegCurvetoCubicAbs where
+  fromJSRef = return . fmap SVGPathSegCurvetoCubicAbs . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGPathSeg SVGPathSegCurvetoCubicAbs
+instance IsGObject SVGPathSegCurvetoCubicAbs where
+  toGObject = GObject . unSVGPathSegCurvetoCubicAbs
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGPathSegCurvetoCubicAbs . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGPathSegCurvetoCubicAbs :: IsGObject obj => obj -> SVGPathSegCurvetoCubicAbs
+castToSVGPathSegCurvetoCubicAbs = castTo gTypeSVGPathSegCurvetoCubicAbs "SVGPathSegCurvetoCubicAbs"
+
+foreign import javascript unsafe "window[\"SVGPathSegCurvetoCubicAbs\"]" gTypeSVGPathSegCurvetoCubicAbs :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGPathSegCurvetoCubicRel".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGPathSeg"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoCubicRel Mozilla SVGPathSegCurvetoCubicRel documentation>
+newtype SVGPathSegCurvetoCubicRel = SVGPathSegCurvetoCubicRel { unSVGPathSegCurvetoCubicRel :: JSRef }
+
+instance Eq (SVGPathSegCurvetoCubicRel) where
+  (SVGPathSegCurvetoCubicRel a) == (SVGPathSegCurvetoCubicRel b) = js_eq a b
+
+instance PToJSRef SVGPathSegCurvetoCubicRel where
+  pToJSRef = unSVGPathSegCurvetoCubicRel
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGPathSegCurvetoCubicRel where
+  pFromJSRef = SVGPathSegCurvetoCubicRel
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGPathSegCurvetoCubicRel where
+  toJSRef = return . unSVGPathSegCurvetoCubicRel
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGPathSegCurvetoCubicRel where
+  fromJSRef = return . fmap SVGPathSegCurvetoCubicRel . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGPathSeg SVGPathSegCurvetoCubicRel
+instance IsGObject SVGPathSegCurvetoCubicRel where
+  toGObject = GObject . unSVGPathSegCurvetoCubicRel
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGPathSegCurvetoCubicRel . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGPathSegCurvetoCubicRel :: IsGObject obj => obj -> SVGPathSegCurvetoCubicRel
+castToSVGPathSegCurvetoCubicRel = castTo gTypeSVGPathSegCurvetoCubicRel "SVGPathSegCurvetoCubicRel"
+
+foreign import javascript unsafe "window[\"SVGPathSegCurvetoCubicRel\"]" gTypeSVGPathSegCurvetoCubicRel :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGPathSegCurvetoCubicSmoothAbs".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGPathSeg"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoCubicSmoothAbs Mozilla SVGPathSegCurvetoCubicSmoothAbs documentation>
+newtype SVGPathSegCurvetoCubicSmoothAbs = SVGPathSegCurvetoCubicSmoothAbs { unSVGPathSegCurvetoCubicSmoothAbs :: JSRef }
+
+instance Eq (SVGPathSegCurvetoCubicSmoothAbs) where
+  (SVGPathSegCurvetoCubicSmoothAbs a) == (SVGPathSegCurvetoCubicSmoothAbs b) = js_eq a b
+
+instance PToJSRef SVGPathSegCurvetoCubicSmoothAbs where
+  pToJSRef = unSVGPathSegCurvetoCubicSmoothAbs
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGPathSegCurvetoCubicSmoothAbs where
+  pFromJSRef = SVGPathSegCurvetoCubicSmoothAbs
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGPathSegCurvetoCubicSmoothAbs where
+  toJSRef = return . unSVGPathSegCurvetoCubicSmoothAbs
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGPathSegCurvetoCubicSmoothAbs where
+  fromJSRef = return . fmap SVGPathSegCurvetoCubicSmoothAbs . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGPathSeg SVGPathSegCurvetoCubicSmoothAbs
+instance IsGObject SVGPathSegCurvetoCubicSmoothAbs where
+  toGObject = GObject . unSVGPathSegCurvetoCubicSmoothAbs
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGPathSegCurvetoCubicSmoothAbs . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGPathSegCurvetoCubicSmoothAbs :: IsGObject obj => obj -> SVGPathSegCurvetoCubicSmoothAbs
+castToSVGPathSegCurvetoCubicSmoothAbs = castTo gTypeSVGPathSegCurvetoCubicSmoothAbs "SVGPathSegCurvetoCubicSmoothAbs"
+
+foreign import javascript unsafe "window[\"SVGPathSegCurvetoCubicSmoothAbs\"]" gTypeSVGPathSegCurvetoCubicSmoothAbs :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGPathSegCurvetoCubicSmoothRel".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGPathSeg"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoCubicSmoothRel Mozilla SVGPathSegCurvetoCubicSmoothRel documentation>
+newtype SVGPathSegCurvetoCubicSmoothRel = SVGPathSegCurvetoCubicSmoothRel { unSVGPathSegCurvetoCubicSmoothRel :: JSRef }
+
+instance Eq (SVGPathSegCurvetoCubicSmoothRel) where
+  (SVGPathSegCurvetoCubicSmoothRel a) == (SVGPathSegCurvetoCubicSmoothRel b) = js_eq a b
+
+instance PToJSRef SVGPathSegCurvetoCubicSmoothRel where
+  pToJSRef = unSVGPathSegCurvetoCubicSmoothRel
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGPathSegCurvetoCubicSmoothRel where
+  pFromJSRef = SVGPathSegCurvetoCubicSmoothRel
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGPathSegCurvetoCubicSmoothRel where
+  toJSRef = return . unSVGPathSegCurvetoCubicSmoothRel
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGPathSegCurvetoCubicSmoothRel where
+  fromJSRef = return . fmap SVGPathSegCurvetoCubicSmoothRel . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGPathSeg SVGPathSegCurvetoCubicSmoothRel
+instance IsGObject SVGPathSegCurvetoCubicSmoothRel where
+  toGObject = GObject . unSVGPathSegCurvetoCubicSmoothRel
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGPathSegCurvetoCubicSmoothRel . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGPathSegCurvetoCubicSmoothRel :: IsGObject obj => obj -> SVGPathSegCurvetoCubicSmoothRel
+castToSVGPathSegCurvetoCubicSmoothRel = castTo gTypeSVGPathSegCurvetoCubicSmoothRel "SVGPathSegCurvetoCubicSmoothRel"
+
+foreign import javascript unsafe "window[\"SVGPathSegCurvetoCubicSmoothRel\"]" gTypeSVGPathSegCurvetoCubicSmoothRel :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGPathSegCurvetoQuadraticAbs".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGPathSeg"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoQuadraticAbs Mozilla SVGPathSegCurvetoQuadraticAbs documentation>
+newtype SVGPathSegCurvetoQuadraticAbs = SVGPathSegCurvetoQuadraticAbs { unSVGPathSegCurvetoQuadraticAbs :: JSRef }
+
+instance Eq (SVGPathSegCurvetoQuadraticAbs) where
+  (SVGPathSegCurvetoQuadraticAbs a) == (SVGPathSegCurvetoQuadraticAbs b) = js_eq a b
+
+instance PToJSRef SVGPathSegCurvetoQuadraticAbs where
+  pToJSRef = unSVGPathSegCurvetoQuadraticAbs
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGPathSegCurvetoQuadraticAbs where
+  pFromJSRef = SVGPathSegCurvetoQuadraticAbs
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGPathSegCurvetoQuadraticAbs where
+  toJSRef = return . unSVGPathSegCurvetoQuadraticAbs
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGPathSegCurvetoQuadraticAbs where
+  fromJSRef = return . fmap SVGPathSegCurvetoQuadraticAbs . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGPathSeg SVGPathSegCurvetoQuadraticAbs
+instance IsGObject SVGPathSegCurvetoQuadraticAbs where
+  toGObject = GObject . unSVGPathSegCurvetoQuadraticAbs
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGPathSegCurvetoQuadraticAbs . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGPathSegCurvetoQuadraticAbs :: IsGObject obj => obj -> SVGPathSegCurvetoQuadraticAbs
+castToSVGPathSegCurvetoQuadraticAbs = castTo gTypeSVGPathSegCurvetoQuadraticAbs "SVGPathSegCurvetoQuadraticAbs"
+
+foreign import javascript unsafe "window[\"SVGPathSegCurvetoQuadraticAbs\"]" gTypeSVGPathSegCurvetoQuadraticAbs :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGPathSegCurvetoQuadraticRel".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGPathSeg"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoQuadraticRel Mozilla SVGPathSegCurvetoQuadraticRel documentation>
+newtype SVGPathSegCurvetoQuadraticRel = SVGPathSegCurvetoQuadraticRel { unSVGPathSegCurvetoQuadraticRel :: JSRef }
+
+instance Eq (SVGPathSegCurvetoQuadraticRel) where
+  (SVGPathSegCurvetoQuadraticRel a) == (SVGPathSegCurvetoQuadraticRel b) = js_eq a b
+
+instance PToJSRef SVGPathSegCurvetoQuadraticRel where
+  pToJSRef = unSVGPathSegCurvetoQuadraticRel
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGPathSegCurvetoQuadraticRel where
+  pFromJSRef = SVGPathSegCurvetoQuadraticRel
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGPathSegCurvetoQuadraticRel where
+  toJSRef = return . unSVGPathSegCurvetoQuadraticRel
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGPathSegCurvetoQuadraticRel where
+  fromJSRef = return . fmap SVGPathSegCurvetoQuadraticRel . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGPathSeg SVGPathSegCurvetoQuadraticRel
+instance IsGObject SVGPathSegCurvetoQuadraticRel where
+  toGObject = GObject . unSVGPathSegCurvetoQuadraticRel
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGPathSegCurvetoQuadraticRel . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGPathSegCurvetoQuadraticRel :: IsGObject obj => obj -> SVGPathSegCurvetoQuadraticRel
+castToSVGPathSegCurvetoQuadraticRel = castTo gTypeSVGPathSegCurvetoQuadraticRel "SVGPathSegCurvetoQuadraticRel"
+
+foreign import javascript unsafe "window[\"SVGPathSegCurvetoQuadraticRel\"]" gTypeSVGPathSegCurvetoQuadraticRel :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGPathSegCurvetoQuadraticSmoothAbs".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGPathSeg"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoQuadraticSmoothAbs Mozilla SVGPathSegCurvetoQuadraticSmoothAbs documentation>
+newtype SVGPathSegCurvetoQuadraticSmoothAbs = SVGPathSegCurvetoQuadraticSmoothAbs { unSVGPathSegCurvetoQuadraticSmoothAbs :: JSRef }
+
+instance Eq (SVGPathSegCurvetoQuadraticSmoothAbs) where
+  (SVGPathSegCurvetoQuadraticSmoothAbs a) == (SVGPathSegCurvetoQuadraticSmoothAbs b) = js_eq a b
+
+instance PToJSRef SVGPathSegCurvetoQuadraticSmoothAbs where
+  pToJSRef = unSVGPathSegCurvetoQuadraticSmoothAbs
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGPathSegCurvetoQuadraticSmoothAbs where
+  pFromJSRef = SVGPathSegCurvetoQuadraticSmoothAbs
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGPathSegCurvetoQuadraticSmoothAbs where
+  toJSRef = return . unSVGPathSegCurvetoQuadraticSmoothAbs
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGPathSegCurvetoQuadraticSmoothAbs where
+  fromJSRef = return . fmap SVGPathSegCurvetoQuadraticSmoothAbs . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGPathSeg SVGPathSegCurvetoQuadraticSmoothAbs
+instance IsGObject SVGPathSegCurvetoQuadraticSmoothAbs where
+  toGObject = GObject . unSVGPathSegCurvetoQuadraticSmoothAbs
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGPathSegCurvetoQuadraticSmoothAbs . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGPathSegCurvetoQuadraticSmoothAbs :: IsGObject obj => obj -> SVGPathSegCurvetoQuadraticSmoothAbs
+castToSVGPathSegCurvetoQuadraticSmoothAbs = castTo gTypeSVGPathSegCurvetoQuadraticSmoothAbs "SVGPathSegCurvetoQuadraticSmoothAbs"
+
+foreign import javascript unsafe "window[\"SVGPathSegCurvetoQuadraticSmoothAbs\"]" gTypeSVGPathSegCurvetoQuadraticSmoothAbs :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGPathSegCurvetoQuadraticSmoothRel".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGPathSeg"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegCurvetoQuadraticSmoothRel Mozilla SVGPathSegCurvetoQuadraticSmoothRel documentation>
+newtype SVGPathSegCurvetoQuadraticSmoothRel = SVGPathSegCurvetoQuadraticSmoothRel { unSVGPathSegCurvetoQuadraticSmoothRel :: JSRef }
+
+instance Eq (SVGPathSegCurvetoQuadraticSmoothRel) where
+  (SVGPathSegCurvetoQuadraticSmoothRel a) == (SVGPathSegCurvetoQuadraticSmoothRel b) = js_eq a b
+
+instance PToJSRef SVGPathSegCurvetoQuadraticSmoothRel where
+  pToJSRef = unSVGPathSegCurvetoQuadraticSmoothRel
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGPathSegCurvetoQuadraticSmoothRel where
+  pFromJSRef = SVGPathSegCurvetoQuadraticSmoothRel
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGPathSegCurvetoQuadraticSmoothRel where
+  toJSRef = return . unSVGPathSegCurvetoQuadraticSmoothRel
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGPathSegCurvetoQuadraticSmoothRel where
+  fromJSRef = return . fmap SVGPathSegCurvetoQuadraticSmoothRel . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGPathSeg SVGPathSegCurvetoQuadraticSmoothRel
+instance IsGObject SVGPathSegCurvetoQuadraticSmoothRel where
+  toGObject = GObject . unSVGPathSegCurvetoQuadraticSmoothRel
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGPathSegCurvetoQuadraticSmoothRel . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGPathSegCurvetoQuadraticSmoothRel :: IsGObject obj => obj -> SVGPathSegCurvetoQuadraticSmoothRel
+castToSVGPathSegCurvetoQuadraticSmoothRel = castTo gTypeSVGPathSegCurvetoQuadraticSmoothRel "SVGPathSegCurvetoQuadraticSmoothRel"
+
+foreign import javascript unsafe "window[\"SVGPathSegCurvetoQuadraticSmoothRel\"]" gTypeSVGPathSegCurvetoQuadraticSmoothRel :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGPathSegLinetoAbs".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGPathSeg"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegLinetoAbs Mozilla SVGPathSegLinetoAbs documentation>
+newtype SVGPathSegLinetoAbs = SVGPathSegLinetoAbs { unSVGPathSegLinetoAbs :: JSRef }
+
+instance Eq (SVGPathSegLinetoAbs) where
+  (SVGPathSegLinetoAbs a) == (SVGPathSegLinetoAbs b) = js_eq a b
+
+instance PToJSRef SVGPathSegLinetoAbs where
+  pToJSRef = unSVGPathSegLinetoAbs
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGPathSegLinetoAbs where
+  pFromJSRef = SVGPathSegLinetoAbs
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGPathSegLinetoAbs where
+  toJSRef = return . unSVGPathSegLinetoAbs
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGPathSegLinetoAbs where
+  fromJSRef = return . fmap SVGPathSegLinetoAbs . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGPathSeg SVGPathSegLinetoAbs
+instance IsGObject SVGPathSegLinetoAbs where
+  toGObject = GObject . unSVGPathSegLinetoAbs
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGPathSegLinetoAbs . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGPathSegLinetoAbs :: IsGObject obj => obj -> SVGPathSegLinetoAbs
+castToSVGPathSegLinetoAbs = castTo gTypeSVGPathSegLinetoAbs "SVGPathSegLinetoAbs"
+
+foreign import javascript unsafe "window[\"SVGPathSegLinetoAbs\"]" gTypeSVGPathSegLinetoAbs :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGPathSegLinetoHorizontalAbs".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGPathSeg"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegLinetoHorizontalAbs Mozilla SVGPathSegLinetoHorizontalAbs documentation>
+newtype SVGPathSegLinetoHorizontalAbs = SVGPathSegLinetoHorizontalAbs { unSVGPathSegLinetoHorizontalAbs :: JSRef }
+
+instance Eq (SVGPathSegLinetoHorizontalAbs) where
+  (SVGPathSegLinetoHorizontalAbs a) == (SVGPathSegLinetoHorizontalAbs b) = js_eq a b
+
+instance PToJSRef SVGPathSegLinetoHorizontalAbs where
+  pToJSRef = unSVGPathSegLinetoHorizontalAbs
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGPathSegLinetoHorizontalAbs where
+  pFromJSRef = SVGPathSegLinetoHorizontalAbs
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGPathSegLinetoHorizontalAbs where
+  toJSRef = return . unSVGPathSegLinetoHorizontalAbs
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGPathSegLinetoHorizontalAbs where
+  fromJSRef = return . fmap SVGPathSegLinetoHorizontalAbs . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGPathSeg SVGPathSegLinetoHorizontalAbs
+instance IsGObject SVGPathSegLinetoHorizontalAbs where
+  toGObject = GObject . unSVGPathSegLinetoHorizontalAbs
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGPathSegLinetoHorizontalAbs . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGPathSegLinetoHorizontalAbs :: IsGObject obj => obj -> SVGPathSegLinetoHorizontalAbs
+castToSVGPathSegLinetoHorizontalAbs = castTo gTypeSVGPathSegLinetoHorizontalAbs "SVGPathSegLinetoHorizontalAbs"
+
+foreign import javascript unsafe "window[\"SVGPathSegLinetoHorizontalAbs\"]" gTypeSVGPathSegLinetoHorizontalAbs :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGPathSegLinetoHorizontalRel".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGPathSeg"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegLinetoHorizontalRel Mozilla SVGPathSegLinetoHorizontalRel documentation>
+newtype SVGPathSegLinetoHorizontalRel = SVGPathSegLinetoHorizontalRel { unSVGPathSegLinetoHorizontalRel :: JSRef }
+
+instance Eq (SVGPathSegLinetoHorizontalRel) where
+  (SVGPathSegLinetoHorizontalRel a) == (SVGPathSegLinetoHorizontalRel b) = js_eq a b
+
+instance PToJSRef SVGPathSegLinetoHorizontalRel where
+  pToJSRef = unSVGPathSegLinetoHorizontalRel
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGPathSegLinetoHorizontalRel where
+  pFromJSRef = SVGPathSegLinetoHorizontalRel
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGPathSegLinetoHorizontalRel where
+  toJSRef = return . unSVGPathSegLinetoHorizontalRel
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGPathSegLinetoHorizontalRel where
+  fromJSRef = return . fmap SVGPathSegLinetoHorizontalRel . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGPathSeg SVGPathSegLinetoHorizontalRel
+instance IsGObject SVGPathSegLinetoHorizontalRel where
+  toGObject = GObject . unSVGPathSegLinetoHorizontalRel
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGPathSegLinetoHorizontalRel . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGPathSegLinetoHorizontalRel :: IsGObject obj => obj -> SVGPathSegLinetoHorizontalRel
+castToSVGPathSegLinetoHorizontalRel = castTo gTypeSVGPathSegLinetoHorizontalRel "SVGPathSegLinetoHorizontalRel"
+
+foreign import javascript unsafe "window[\"SVGPathSegLinetoHorizontalRel\"]" gTypeSVGPathSegLinetoHorizontalRel :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGPathSegLinetoRel".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGPathSeg"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegLinetoRel Mozilla SVGPathSegLinetoRel documentation>
+newtype SVGPathSegLinetoRel = SVGPathSegLinetoRel { unSVGPathSegLinetoRel :: JSRef }
+
+instance Eq (SVGPathSegLinetoRel) where
+  (SVGPathSegLinetoRel a) == (SVGPathSegLinetoRel b) = js_eq a b
+
+instance PToJSRef SVGPathSegLinetoRel where
+  pToJSRef = unSVGPathSegLinetoRel
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGPathSegLinetoRel where
+  pFromJSRef = SVGPathSegLinetoRel
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGPathSegLinetoRel where
+  toJSRef = return . unSVGPathSegLinetoRel
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGPathSegLinetoRel where
+  fromJSRef = return . fmap SVGPathSegLinetoRel . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGPathSeg SVGPathSegLinetoRel
+instance IsGObject SVGPathSegLinetoRel where
+  toGObject = GObject . unSVGPathSegLinetoRel
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGPathSegLinetoRel . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGPathSegLinetoRel :: IsGObject obj => obj -> SVGPathSegLinetoRel
+castToSVGPathSegLinetoRel = castTo gTypeSVGPathSegLinetoRel "SVGPathSegLinetoRel"
+
+foreign import javascript unsafe "window[\"SVGPathSegLinetoRel\"]" gTypeSVGPathSegLinetoRel :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGPathSegLinetoVerticalAbs".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGPathSeg"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegLinetoVerticalAbs Mozilla SVGPathSegLinetoVerticalAbs documentation>
+newtype SVGPathSegLinetoVerticalAbs = SVGPathSegLinetoVerticalAbs { unSVGPathSegLinetoVerticalAbs :: JSRef }
+
+instance Eq (SVGPathSegLinetoVerticalAbs) where
+  (SVGPathSegLinetoVerticalAbs a) == (SVGPathSegLinetoVerticalAbs b) = js_eq a b
+
+instance PToJSRef SVGPathSegLinetoVerticalAbs where
+  pToJSRef = unSVGPathSegLinetoVerticalAbs
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGPathSegLinetoVerticalAbs where
+  pFromJSRef = SVGPathSegLinetoVerticalAbs
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGPathSegLinetoVerticalAbs where
+  toJSRef = return . unSVGPathSegLinetoVerticalAbs
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGPathSegLinetoVerticalAbs where
+  fromJSRef = return . fmap SVGPathSegLinetoVerticalAbs . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGPathSeg SVGPathSegLinetoVerticalAbs
+instance IsGObject SVGPathSegLinetoVerticalAbs where
+  toGObject = GObject . unSVGPathSegLinetoVerticalAbs
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGPathSegLinetoVerticalAbs . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGPathSegLinetoVerticalAbs :: IsGObject obj => obj -> SVGPathSegLinetoVerticalAbs
+castToSVGPathSegLinetoVerticalAbs = castTo gTypeSVGPathSegLinetoVerticalAbs "SVGPathSegLinetoVerticalAbs"
+
+foreign import javascript unsafe "window[\"SVGPathSegLinetoVerticalAbs\"]" gTypeSVGPathSegLinetoVerticalAbs :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGPathSegLinetoVerticalRel".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGPathSeg"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegLinetoVerticalRel Mozilla SVGPathSegLinetoVerticalRel documentation>
+newtype SVGPathSegLinetoVerticalRel = SVGPathSegLinetoVerticalRel { unSVGPathSegLinetoVerticalRel :: JSRef }
+
+instance Eq (SVGPathSegLinetoVerticalRel) where
+  (SVGPathSegLinetoVerticalRel a) == (SVGPathSegLinetoVerticalRel b) = js_eq a b
+
+instance PToJSRef SVGPathSegLinetoVerticalRel where
+  pToJSRef = unSVGPathSegLinetoVerticalRel
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGPathSegLinetoVerticalRel where
+  pFromJSRef = SVGPathSegLinetoVerticalRel
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGPathSegLinetoVerticalRel where
+  toJSRef = return . unSVGPathSegLinetoVerticalRel
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGPathSegLinetoVerticalRel where
+  fromJSRef = return . fmap SVGPathSegLinetoVerticalRel . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGPathSeg SVGPathSegLinetoVerticalRel
+instance IsGObject SVGPathSegLinetoVerticalRel where
+  toGObject = GObject . unSVGPathSegLinetoVerticalRel
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGPathSegLinetoVerticalRel . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGPathSegLinetoVerticalRel :: IsGObject obj => obj -> SVGPathSegLinetoVerticalRel
+castToSVGPathSegLinetoVerticalRel = castTo gTypeSVGPathSegLinetoVerticalRel "SVGPathSegLinetoVerticalRel"
+
+foreign import javascript unsafe "window[\"SVGPathSegLinetoVerticalRel\"]" gTypeSVGPathSegLinetoVerticalRel :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGPathSegList".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegList Mozilla SVGPathSegList documentation>
+newtype SVGPathSegList = SVGPathSegList { unSVGPathSegList :: JSRef }
+
+instance Eq (SVGPathSegList) where
+  (SVGPathSegList a) == (SVGPathSegList b) = js_eq a b
+
+instance PToJSRef SVGPathSegList where
+  pToJSRef = unSVGPathSegList
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGPathSegList where
+  pFromJSRef = SVGPathSegList
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGPathSegList where
+  toJSRef = return . unSVGPathSegList
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGPathSegList where
+  fromJSRef = return . fmap SVGPathSegList . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject SVGPathSegList where
+  toGObject = GObject . unSVGPathSegList
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGPathSegList . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGPathSegList :: IsGObject obj => obj -> SVGPathSegList
+castToSVGPathSegList = castTo gTypeSVGPathSegList "SVGPathSegList"
+
+foreign import javascript unsafe "window[\"SVGPathSegList\"]" gTypeSVGPathSegList :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGPathSegMovetoAbs".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGPathSeg"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegMovetoAbs Mozilla SVGPathSegMovetoAbs documentation>
+newtype SVGPathSegMovetoAbs = SVGPathSegMovetoAbs { unSVGPathSegMovetoAbs :: JSRef }
+
+instance Eq (SVGPathSegMovetoAbs) where
+  (SVGPathSegMovetoAbs a) == (SVGPathSegMovetoAbs b) = js_eq a b
+
+instance PToJSRef SVGPathSegMovetoAbs where
+  pToJSRef = unSVGPathSegMovetoAbs
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGPathSegMovetoAbs where
+  pFromJSRef = SVGPathSegMovetoAbs
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGPathSegMovetoAbs where
+  toJSRef = return . unSVGPathSegMovetoAbs
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGPathSegMovetoAbs where
+  fromJSRef = return . fmap SVGPathSegMovetoAbs . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGPathSeg SVGPathSegMovetoAbs
+instance IsGObject SVGPathSegMovetoAbs where
+  toGObject = GObject . unSVGPathSegMovetoAbs
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGPathSegMovetoAbs . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGPathSegMovetoAbs :: IsGObject obj => obj -> SVGPathSegMovetoAbs
+castToSVGPathSegMovetoAbs = castTo gTypeSVGPathSegMovetoAbs "SVGPathSegMovetoAbs"
+
+foreign import javascript unsafe "window[\"SVGPathSegMovetoAbs\"]" gTypeSVGPathSegMovetoAbs :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGPathSegMovetoRel".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGPathSeg"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGPathSegMovetoRel Mozilla SVGPathSegMovetoRel documentation>
+newtype SVGPathSegMovetoRel = SVGPathSegMovetoRel { unSVGPathSegMovetoRel :: JSRef }
+
+instance Eq (SVGPathSegMovetoRel) where
+  (SVGPathSegMovetoRel a) == (SVGPathSegMovetoRel b) = js_eq a b
+
+instance PToJSRef SVGPathSegMovetoRel where
+  pToJSRef = unSVGPathSegMovetoRel
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGPathSegMovetoRel where
+  pFromJSRef = SVGPathSegMovetoRel
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGPathSegMovetoRel where
+  toJSRef = return . unSVGPathSegMovetoRel
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGPathSegMovetoRel where
+  fromJSRef = return . fmap SVGPathSegMovetoRel . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGPathSeg SVGPathSegMovetoRel
+instance IsGObject SVGPathSegMovetoRel where
+  toGObject = GObject . unSVGPathSegMovetoRel
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGPathSegMovetoRel . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGPathSegMovetoRel :: IsGObject obj => obj -> SVGPathSegMovetoRel
+castToSVGPathSegMovetoRel = castTo gTypeSVGPathSegMovetoRel "SVGPathSegMovetoRel"
+
+foreign import javascript unsafe "window[\"SVGPathSegMovetoRel\"]" gTypeSVGPathSegMovetoRel :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGPatternElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGPatternElement Mozilla SVGPatternElement documentation>
+newtype SVGPatternElement = SVGPatternElement { unSVGPatternElement :: JSRef }
+
+instance Eq (SVGPatternElement) where
+  (SVGPatternElement a) == (SVGPatternElement b) = js_eq a b
+
+instance PToJSRef SVGPatternElement where
+  pToJSRef = unSVGPatternElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGPatternElement where
+  pFromJSRef = SVGPatternElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGPatternElement where
+  toJSRef = return . unSVGPatternElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGPatternElement where
+  fromJSRef = return . fmap SVGPatternElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGElement SVGPatternElement
+instance IsElement SVGPatternElement
+instance IsNode SVGPatternElement
+instance IsEventTarget SVGPatternElement
+instance IsGObject SVGPatternElement where
+  toGObject = GObject . unSVGPatternElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGPatternElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGPatternElement :: IsGObject obj => obj -> SVGPatternElement
+castToSVGPatternElement = castTo gTypeSVGPatternElement "SVGPatternElement"
+
+foreign import javascript unsafe "window[\"SVGPatternElement\"]" gTypeSVGPatternElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGPoint".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGPoint Mozilla SVGPoint documentation>
+newtype SVGPoint = SVGPoint { unSVGPoint :: JSRef }
+
+instance Eq (SVGPoint) where
+  (SVGPoint a) == (SVGPoint b) = js_eq a b
+
+instance PToJSRef SVGPoint where
+  pToJSRef = unSVGPoint
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGPoint where
+  pFromJSRef = SVGPoint
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGPoint where
+  toJSRef = return . unSVGPoint
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGPoint where
+  fromJSRef = return . fmap SVGPoint . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject SVGPoint where
+  toGObject = GObject . unSVGPoint
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGPoint . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGPoint :: IsGObject obj => obj -> SVGPoint
+castToSVGPoint = castTo gTypeSVGPoint "SVGPoint"
+
+foreign import javascript unsafe "window[\"SVGPoint\"]" gTypeSVGPoint :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGPointList".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGPointList Mozilla SVGPointList documentation>
+newtype SVGPointList = SVGPointList { unSVGPointList :: JSRef }
+
+instance Eq (SVGPointList) where
+  (SVGPointList a) == (SVGPointList b) = js_eq a b
+
+instance PToJSRef SVGPointList where
+  pToJSRef = unSVGPointList
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGPointList where
+  pFromJSRef = SVGPointList
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGPointList where
+  toJSRef = return . unSVGPointList
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGPointList where
+  fromJSRef = return . fmap SVGPointList . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject SVGPointList where
+  toGObject = GObject . unSVGPointList
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGPointList . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGPointList :: IsGObject obj => obj -> SVGPointList
+castToSVGPointList = castTo gTypeSVGPointList "SVGPointList"
+
+foreign import javascript unsafe "window[\"SVGPointList\"]" gTypeSVGPointList :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGPolygonElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGGraphicsElement"
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGPolygonElement Mozilla SVGPolygonElement documentation>
+newtype SVGPolygonElement = SVGPolygonElement { unSVGPolygonElement :: JSRef }
+
+instance Eq (SVGPolygonElement) where
+  (SVGPolygonElement a) == (SVGPolygonElement b) = js_eq a b
+
+instance PToJSRef SVGPolygonElement where
+  pToJSRef = unSVGPolygonElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGPolygonElement where
+  pFromJSRef = SVGPolygonElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGPolygonElement where
+  toJSRef = return . unSVGPolygonElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGPolygonElement where
+  fromJSRef = return . fmap SVGPolygonElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGGraphicsElement SVGPolygonElement
+instance IsSVGElement SVGPolygonElement
+instance IsElement SVGPolygonElement
+instance IsNode SVGPolygonElement
+instance IsEventTarget SVGPolygonElement
+instance IsGObject SVGPolygonElement where
+  toGObject = GObject . unSVGPolygonElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGPolygonElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGPolygonElement :: IsGObject obj => obj -> SVGPolygonElement
+castToSVGPolygonElement = castTo gTypeSVGPolygonElement "SVGPolygonElement"
+
+foreign import javascript unsafe "window[\"SVGPolygonElement\"]" gTypeSVGPolygonElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGPolylineElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGGraphicsElement"
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGPolylineElement Mozilla SVGPolylineElement documentation>
+newtype SVGPolylineElement = SVGPolylineElement { unSVGPolylineElement :: JSRef }
+
+instance Eq (SVGPolylineElement) where
+  (SVGPolylineElement a) == (SVGPolylineElement b) = js_eq a b
+
+instance PToJSRef SVGPolylineElement where
+  pToJSRef = unSVGPolylineElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGPolylineElement where
+  pFromJSRef = SVGPolylineElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGPolylineElement where
+  toJSRef = return . unSVGPolylineElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGPolylineElement where
+  fromJSRef = return . fmap SVGPolylineElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGGraphicsElement SVGPolylineElement
+instance IsSVGElement SVGPolylineElement
+instance IsElement SVGPolylineElement
+instance IsNode SVGPolylineElement
+instance IsEventTarget SVGPolylineElement
+instance IsGObject SVGPolylineElement where
+  toGObject = GObject . unSVGPolylineElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGPolylineElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGPolylineElement :: IsGObject obj => obj -> SVGPolylineElement
+castToSVGPolylineElement = castTo gTypeSVGPolylineElement "SVGPolylineElement"
+
+foreign import javascript unsafe "window[\"SVGPolylineElement\"]" gTypeSVGPolylineElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGPreserveAspectRatio".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGPreserveAspectRatio Mozilla SVGPreserveAspectRatio documentation>
+newtype SVGPreserveAspectRatio = SVGPreserveAspectRatio { unSVGPreserveAspectRatio :: JSRef }
+
+instance Eq (SVGPreserveAspectRatio) where
+  (SVGPreserveAspectRatio a) == (SVGPreserveAspectRatio b) = js_eq a b
+
+instance PToJSRef SVGPreserveAspectRatio where
+  pToJSRef = unSVGPreserveAspectRatio
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGPreserveAspectRatio where
+  pFromJSRef = SVGPreserveAspectRatio
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGPreserveAspectRatio where
+  toJSRef = return . unSVGPreserveAspectRatio
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGPreserveAspectRatio where
+  fromJSRef = return . fmap SVGPreserveAspectRatio . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject SVGPreserveAspectRatio where
+  toGObject = GObject . unSVGPreserveAspectRatio
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGPreserveAspectRatio . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGPreserveAspectRatio :: IsGObject obj => obj -> SVGPreserveAspectRatio
+castToSVGPreserveAspectRatio = castTo gTypeSVGPreserveAspectRatio "SVGPreserveAspectRatio"
+
+foreign import javascript unsafe "window[\"SVGPreserveAspectRatio\"]" gTypeSVGPreserveAspectRatio :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGRadialGradientElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGGradientElement"
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGRadialGradientElement Mozilla SVGRadialGradientElement documentation>
+newtype SVGRadialGradientElement = SVGRadialGradientElement { unSVGRadialGradientElement :: JSRef }
+
+instance Eq (SVGRadialGradientElement) where
+  (SVGRadialGradientElement a) == (SVGRadialGradientElement b) = js_eq a b
+
+instance PToJSRef SVGRadialGradientElement where
+  pToJSRef = unSVGRadialGradientElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGRadialGradientElement where
+  pFromJSRef = SVGRadialGradientElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGRadialGradientElement where
+  toJSRef = return . unSVGRadialGradientElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGRadialGradientElement where
+  fromJSRef = return . fmap SVGRadialGradientElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGGradientElement SVGRadialGradientElement
+instance IsSVGElement SVGRadialGradientElement
+instance IsElement SVGRadialGradientElement
+instance IsNode SVGRadialGradientElement
+instance IsEventTarget SVGRadialGradientElement
+instance IsGObject SVGRadialGradientElement where
+  toGObject = GObject . unSVGRadialGradientElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGRadialGradientElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGRadialGradientElement :: IsGObject obj => obj -> SVGRadialGradientElement
+castToSVGRadialGradientElement = castTo gTypeSVGRadialGradientElement "SVGRadialGradientElement"
+
+foreign import javascript unsafe "window[\"SVGRadialGradientElement\"]" gTypeSVGRadialGradientElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGRect".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGRect Mozilla SVGRect documentation>
+newtype SVGRect = SVGRect { unSVGRect :: JSRef }
+
+instance Eq (SVGRect) where
+  (SVGRect a) == (SVGRect b) = js_eq a b
+
+instance PToJSRef SVGRect where
+  pToJSRef = unSVGRect
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGRect where
+  pFromJSRef = SVGRect
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGRect where
+  toJSRef = return . unSVGRect
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGRect where
+  fromJSRef = return . fmap SVGRect . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject SVGRect where
+  toGObject = GObject . unSVGRect
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGRect . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGRect :: IsGObject obj => obj -> SVGRect
+castToSVGRect = castTo gTypeSVGRect "SVGRect"
+
+foreign import javascript unsafe "window[\"SVGRect\"]" gTypeSVGRect :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGRectElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGGraphicsElement"
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGRectElement Mozilla SVGRectElement documentation>
+newtype SVGRectElement = SVGRectElement { unSVGRectElement :: JSRef }
+
+instance Eq (SVGRectElement) where
+  (SVGRectElement a) == (SVGRectElement b) = js_eq a b
+
+instance PToJSRef SVGRectElement where
+  pToJSRef = unSVGRectElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGRectElement where
+  pFromJSRef = SVGRectElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGRectElement where
+  toJSRef = return . unSVGRectElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGRectElement where
+  fromJSRef = return . fmap SVGRectElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGGraphicsElement SVGRectElement
+instance IsSVGElement SVGRectElement
+instance IsElement SVGRectElement
+instance IsNode SVGRectElement
+instance IsEventTarget SVGRectElement
+instance IsGObject SVGRectElement where
+  toGObject = GObject . unSVGRectElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGRectElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGRectElement :: IsGObject obj => obj -> SVGRectElement
+castToSVGRectElement = castTo gTypeSVGRectElement "SVGRectElement"
+
+foreign import javascript unsafe "window[\"SVGRectElement\"]" gTypeSVGRectElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGRenderingIntent".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGRenderingIntent Mozilla SVGRenderingIntent documentation>
+newtype SVGRenderingIntent = SVGRenderingIntent { unSVGRenderingIntent :: JSRef }
+
+instance Eq (SVGRenderingIntent) where
+  (SVGRenderingIntent a) == (SVGRenderingIntent b) = js_eq a b
+
+instance PToJSRef SVGRenderingIntent where
+  pToJSRef = unSVGRenderingIntent
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGRenderingIntent where
+  pFromJSRef = SVGRenderingIntent
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGRenderingIntent where
+  toJSRef = return . unSVGRenderingIntent
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGRenderingIntent where
+  fromJSRef = return . fmap SVGRenderingIntent . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject SVGRenderingIntent where
+  toGObject = GObject . unSVGRenderingIntent
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGRenderingIntent . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGRenderingIntent :: IsGObject obj => obj -> SVGRenderingIntent
+castToSVGRenderingIntent = castTo gTypeSVGRenderingIntent "SVGRenderingIntent"
+
+foreign import javascript unsafe "window[\"SVGRenderingIntent\"]" gTypeSVGRenderingIntent :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGSVGElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGGraphicsElement"
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGSVGElement Mozilla SVGSVGElement documentation>
+newtype SVGSVGElement = SVGSVGElement { unSVGSVGElement :: JSRef }
+
+instance Eq (SVGSVGElement) where
+  (SVGSVGElement a) == (SVGSVGElement b) = js_eq a b
+
+instance PToJSRef SVGSVGElement where
+  pToJSRef = unSVGSVGElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGSVGElement where
+  pFromJSRef = SVGSVGElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGSVGElement where
+  toJSRef = return . unSVGSVGElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGSVGElement where
+  fromJSRef = return . fmap SVGSVGElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGGraphicsElement SVGSVGElement
+instance IsSVGElement SVGSVGElement
+instance IsElement SVGSVGElement
+instance IsNode SVGSVGElement
+instance IsEventTarget SVGSVGElement
+instance IsGObject SVGSVGElement where
+  toGObject = GObject . unSVGSVGElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGSVGElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGSVGElement :: IsGObject obj => obj -> SVGSVGElement
+castToSVGSVGElement = castTo gTypeSVGSVGElement "SVGSVGElement"
+
+foreign import javascript unsafe "window[\"SVGSVGElement\"]" gTypeSVGSVGElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGScriptElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGScriptElement Mozilla SVGScriptElement documentation>
+newtype SVGScriptElement = SVGScriptElement { unSVGScriptElement :: JSRef }
+
+instance Eq (SVGScriptElement) where
+  (SVGScriptElement a) == (SVGScriptElement b) = js_eq a b
+
+instance PToJSRef SVGScriptElement where
+  pToJSRef = unSVGScriptElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGScriptElement where
+  pFromJSRef = SVGScriptElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGScriptElement where
+  toJSRef = return . unSVGScriptElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGScriptElement where
+  fromJSRef = return . fmap SVGScriptElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGElement SVGScriptElement
+instance IsElement SVGScriptElement
+instance IsNode SVGScriptElement
+instance IsEventTarget SVGScriptElement
+instance IsGObject SVGScriptElement where
+  toGObject = GObject . unSVGScriptElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGScriptElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGScriptElement :: IsGObject obj => obj -> SVGScriptElement
+castToSVGScriptElement = castTo gTypeSVGScriptElement "SVGScriptElement"
+
+foreign import javascript unsafe "window[\"SVGScriptElement\"]" gTypeSVGScriptElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGSetElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGAnimationElement"
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGSetElement Mozilla SVGSetElement documentation>
+newtype SVGSetElement = SVGSetElement { unSVGSetElement :: JSRef }
+
+instance Eq (SVGSetElement) where
+  (SVGSetElement a) == (SVGSetElement b) = js_eq a b
+
+instance PToJSRef SVGSetElement where
+  pToJSRef = unSVGSetElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGSetElement where
+  pFromJSRef = SVGSetElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGSetElement where
+  toJSRef = return . unSVGSetElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGSetElement where
+  fromJSRef = return . fmap SVGSetElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGAnimationElement SVGSetElement
+instance IsSVGElement SVGSetElement
+instance IsElement SVGSetElement
+instance IsNode SVGSetElement
+instance IsEventTarget SVGSetElement
+instance IsGObject SVGSetElement where
+  toGObject = GObject . unSVGSetElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGSetElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGSetElement :: IsGObject obj => obj -> SVGSetElement
+castToSVGSetElement = castTo gTypeSVGSetElement "SVGSetElement"
+
+foreign import javascript unsafe "window[\"SVGSetElement\"]" gTypeSVGSetElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGStopElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGStopElement Mozilla SVGStopElement documentation>
+newtype SVGStopElement = SVGStopElement { unSVGStopElement :: JSRef }
+
+instance Eq (SVGStopElement) where
+  (SVGStopElement a) == (SVGStopElement b) = js_eq a b
+
+instance PToJSRef SVGStopElement where
+  pToJSRef = unSVGStopElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGStopElement where
+  pFromJSRef = SVGStopElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGStopElement where
+  toJSRef = return . unSVGStopElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGStopElement where
+  fromJSRef = return . fmap SVGStopElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGElement SVGStopElement
+instance IsElement SVGStopElement
+instance IsNode SVGStopElement
+instance IsEventTarget SVGStopElement
+instance IsGObject SVGStopElement where
+  toGObject = GObject . unSVGStopElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGStopElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGStopElement :: IsGObject obj => obj -> SVGStopElement
+castToSVGStopElement = castTo gTypeSVGStopElement "SVGStopElement"
+
+foreign import javascript unsafe "window[\"SVGStopElement\"]" gTypeSVGStopElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGStringList".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGStringList Mozilla SVGStringList documentation>
+newtype SVGStringList = SVGStringList { unSVGStringList :: JSRef }
+
+instance Eq (SVGStringList) where
+  (SVGStringList a) == (SVGStringList b) = js_eq a b
+
+instance PToJSRef SVGStringList where
+  pToJSRef = unSVGStringList
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGStringList where
+  pFromJSRef = SVGStringList
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGStringList where
+  toJSRef = return . unSVGStringList
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGStringList where
+  fromJSRef = return . fmap SVGStringList . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject SVGStringList where
+  toGObject = GObject . unSVGStringList
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGStringList . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGStringList :: IsGObject obj => obj -> SVGStringList
+castToSVGStringList = castTo gTypeSVGStringList "SVGStringList"
+
+foreign import javascript unsafe "window[\"SVGStringList\"]" gTypeSVGStringList :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGStyleElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGStyleElement Mozilla SVGStyleElement documentation>
+newtype SVGStyleElement = SVGStyleElement { unSVGStyleElement :: JSRef }
+
+instance Eq (SVGStyleElement) where
+  (SVGStyleElement a) == (SVGStyleElement b) = js_eq a b
+
+instance PToJSRef SVGStyleElement where
+  pToJSRef = unSVGStyleElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGStyleElement where
+  pFromJSRef = SVGStyleElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGStyleElement where
+  toJSRef = return . unSVGStyleElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGStyleElement where
+  fromJSRef = return . fmap SVGStyleElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGElement SVGStyleElement
+instance IsElement SVGStyleElement
+instance IsNode SVGStyleElement
+instance IsEventTarget SVGStyleElement
+instance IsGObject SVGStyleElement where
+  toGObject = GObject . unSVGStyleElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGStyleElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGStyleElement :: IsGObject obj => obj -> SVGStyleElement
+castToSVGStyleElement = castTo gTypeSVGStyleElement "SVGStyleElement"
+
+foreign import javascript unsafe "window[\"SVGStyleElement\"]" gTypeSVGStyleElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGSwitchElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGGraphicsElement"
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGSwitchElement Mozilla SVGSwitchElement documentation>
+newtype SVGSwitchElement = SVGSwitchElement { unSVGSwitchElement :: JSRef }
+
+instance Eq (SVGSwitchElement) where
+  (SVGSwitchElement a) == (SVGSwitchElement b) = js_eq a b
+
+instance PToJSRef SVGSwitchElement where
+  pToJSRef = unSVGSwitchElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGSwitchElement where
+  pFromJSRef = SVGSwitchElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGSwitchElement where
+  toJSRef = return . unSVGSwitchElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGSwitchElement where
+  fromJSRef = return . fmap SVGSwitchElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGGraphicsElement SVGSwitchElement
+instance IsSVGElement SVGSwitchElement
+instance IsElement SVGSwitchElement
+instance IsNode SVGSwitchElement
+instance IsEventTarget SVGSwitchElement
+instance IsGObject SVGSwitchElement where
+  toGObject = GObject . unSVGSwitchElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGSwitchElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGSwitchElement :: IsGObject obj => obj -> SVGSwitchElement
+castToSVGSwitchElement = castTo gTypeSVGSwitchElement "SVGSwitchElement"
+
+foreign import javascript unsafe "window[\"SVGSwitchElement\"]" gTypeSVGSwitchElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGSymbolElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGSymbolElement Mozilla SVGSymbolElement documentation>
+newtype SVGSymbolElement = SVGSymbolElement { unSVGSymbolElement :: JSRef }
+
+instance Eq (SVGSymbolElement) where
+  (SVGSymbolElement a) == (SVGSymbolElement b) = js_eq a b
+
+instance PToJSRef SVGSymbolElement where
+  pToJSRef = unSVGSymbolElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGSymbolElement where
+  pFromJSRef = SVGSymbolElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGSymbolElement where
+  toJSRef = return . unSVGSymbolElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGSymbolElement where
+  fromJSRef = return . fmap SVGSymbolElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGElement SVGSymbolElement
+instance IsElement SVGSymbolElement
+instance IsNode SVGSymbolElement
+instance IsEventTarget SVGSymbolElement
+instance IsGObject SVGSymbolElement where
+  toGObject = GObject . unSVGSymbolElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGSymbolElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGSymbolElement :: IsGObject obj => obj -> SVGSymbolElement
+castToSVGSymbolElement = castTo gTypeSVGSymbolElement "SVGSymbolElement"
+
+foreign import javascript unsafe "window[\"SVGSymbolElement\"]" gTypeSVGSymbolElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGTRefElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGTextPositioningElement"
+--     * "GHCJS.DOM.SVGTextContentElement"
+--     * "GHCJS.DOM.SVGGraphicsElement"
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGTRefElement Mozilla SVGTRefElement documentation>
+newtype SVGTRefElement = SVGTRefElement { unSVGTRefElement :: JSRef }
+
+instance Eq (SVGTRefElement) where
+  (SVGTRefElement a) == (SVGTRefElement b) = js_eq a b
+
+instance PToJSRef SVGTRefElement where
+  pToJSRef = unSVGTRefElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGTRefElement where
+  pFromJSRef = SVGTRefElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGTRefElement where
+  toJSRef = return . unSVGTRefElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGTRefElement where
+  fromJSRef = return . fmap SVGTRefElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGTextPositioningElement SVGTRefElement
+instance IsSVGTextContentElement SVGTRefElement
+instance IsSVGGraphicsElement SVGTRefElement
+instance IsSVGElement SVGTRefElement
+instance IsElement SVGTRefElement
+instance IsNode SVGTRefElement
+instance IsEventTarget SVGTRefElement
+instance IsGObject SVGTRefElement where
+  toGObject = GObject . unSVGTRefElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGTRefElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGTRefElement :: IsGObject obj => obj -> SVGTRefElement
+castToSVGTRefElement = castTo gTypeSVGTRefElement "SVGTRefElement"
+
+foreign import javascript unsafe "window[\"SVGTRefElement\"]" gTypeSVGTRefElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGTSpanElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGTextPositioningElement"
+--     * "GHCJS.DOM.SVGTextContentElement"
+--     * "GHCJS.DOM.SVGGraphicsElement"
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGTSpanElement Mozilla SVGTSpanElement documentation>
+newtype SVGTSpanElement = SVGTSpanElement { unSVGTSpanElement :: JSRef }
+
+instance Eq (SVGTSpanElement) where
+  (SVGTSpanElement a) == (SVGTSpanElement b) = js_eq a b
+
+instance PToJSRef SVGTSpanElement where
+  pToJSRef = unSVGTSpanElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGTSpanElement where
+  pFromJSRef = SVGTSpanElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGTSpanElement where
+  toJSRef = return . unSVGTSpanElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGTSpanElement where
+  fromJSRef = return . fmap SVGTSpanElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGTextPositioningElement SVGTSpanElement
+instance IsSVGTextContentElement SVGTSpanElement
+instance IsSVGGraphicsElement SVGTSpanElement
+instance IsSVGElement SVGTSpanElement
+instance IsElement SVGTSpanElement
+instance IsNode SVGTSpanElement
+instance IsEventTarget SVGTSpanElement
+instance IsGObject SVGTSpanElement where
+  toGObject = GObject . unSVGTSpanElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGTSpanElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGTSpanElement :: IsGObject obj => obj -> SVGTSpanElement
+castToSVGTSpanElement = castTo gTypeSVGTSpanElement "SVGTSpanElement"
+
+foreign import javascript unsafe "window[\"SVGTSpanElement\"]" gTypeSVGTSpanElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGTests".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGTests Mozilla SVGTests documentation>
+newtype SVGTests = SVGTests { unSVGTests :: JSRef }
+
+instance Eq (SVGTests) where
+  (SVGTests a) == (SVGTests b) = js_eq a b
+
+instance PToJSRef SVGTests where
+  pToJSRef = unSVGTests
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGTests where
+  pFromJSRef = SVGTests
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGTests where
+  toJSRef = return . unSVGTests
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGTests where
+  fromJSRef = return . fmap SVGTests . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject SVGTests where
+  toGObject = GObject . unSVGTests
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGTests . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGTests :: IsGObject obj => obj -> SVGTests
+castToSVGTests = castTo gTypeSVGTests "SVGTests"
+
+foreign import javascript unsafe "window[\"SVGTests\"]" gTypeSVGTests :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGTextContentElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGGraphicsElement"
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGTextContentElement Mozilla SVGTextContentElement documentation>
+newtype SVGTextContentElement = SVGTextContentElement { unSVGTextContentElement :: JSRef }
+
+instance Eq (SVGTextContentElement) where
+  (SVGTextContentElement a) == (SVGTextContentElement b) = js_eq a b
+
+instance PToJSRef SVGTextContentElement where
+  pToJSRef = unSVGTextContentElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGTextContentElement where
+  pFromJSRef = SVGTextContentElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGTextContentElement where
+  toJSRef = return . unSVGTextContentElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGTextContentElement where
+  fromJSRef = return . fmap SVGTextContentElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsSVGGraphicsElement o => IsSVGTextContentElement o
+toSVGTextContentElement :: IsSVGTextContentElement o => o -> SVGTextContentElement
+toSVGTextContentElement = unsafeCastGObject . toGObject
+
+instance IsSVGTextContentElement SVGTextContentElement
+instance IsSVGGraphicsElement SVGTextContentElement
+instance IsSVGElement SVGTextContentElement
+instance IsElement SVGTextContentElement
+instance IsNode SVGTextContentElement
+instance IsEventTarget SVGTextContentElement
+instance IsGObject SVGTextContentElement where
+  toGObject = GObject . unSVGTextContentElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGTextContentElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGTextContentElement :: IsGObject obj => obj -> SVGTextContentElement
+castToSVGTextContentElement = castTo gTypeSVGTextContentElement "SVGTextContentElement"
+
+foreign import javascript unsafe "window[\"SVGTextContentElement\"]" gTypeSVGTextContentElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGTextElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGTextPositioningElement"
+--     * "GHCJS.DOM.SVGTextContentElement"
+--     * "GHCJS.DOM.SVGGraphicsElement"
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGTextElement Mozilla SVGTextElement documentation>
+newtype SVGTextElement = SVGTextElement { unSVGTextElement :: JSRef }
+
+instance Eq (SVGTextElement) where
+  (SVGTextElement a) == (SVGTextElement b) = js_eq a b
+
+instance PToJSRef SVGTextElement where
+  pToJSRef = unSVGTextElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGTextElement where
+  pFromJSRef = SVGTextElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGTextElement where
+  toJSRef = return . unSVGTextElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGTextElement where
+  fromJSRef = return . fmap SVGTextElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGTextPositioningElement SVGTextElement
+instance IsSVGTextContentElement SVGTextElement
+instance IsSVGGraphicsElement SVGTextElement
+instance IsSVGElement SVGTextElement
+instance IsElement SVGTextElement
+instance IsNode SVGTextElement
+instance IsEventTarget SVGTextElement
+instance IsGObject SVGTextElement where
+  toGObject = GObject . unSVGTextElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGTextElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGTextElement :: IsGObject obj => obj -> SVGTextElement
+castToSVGTextElement = castTo gTypeSVGTextElement "SVGTextElement"
+
+foreign import javascript unsafe "window[\"SVGTextElement\"]" gTypeSVGTextElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGTextPathElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGTextContentElement"
+--     * "GHCJS.DOM.SVGGraphicsElement"
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGTextPathElement Mozilla SVGTextPathElement documentation>
+newtype SVGTextPathElement = SVGTextPathElement { unSVGTextPathElement :: JSRef }
+
+instance Eq (SVGTextPathElement) where
+  (SVGTextPathElement a) == (SVGTextPathElement b) = js_eq a b
+
+instance PToJSRef SVGTextPathElement where
+  pToJSRef = unSVGTextPathElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGTextPathElement where
+  pFromJSRef = SVGTextPathElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGTextPathElement where
+  toJSRef = return . unSVGTextPathElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGTextPathElement where
+  fromJSRef = return . fmap SVGTextPathElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGTextContentElement SVGTextPathElement
+instance IsSVGGraphicsElement SVGTextPathElement
+instance IsSVGElement SVGTextPathElement
+instance IsElement SVGTextPathElement
+instance IsNode SVGTextPathElement
+instance IsEventTarget SVGTextPathElement
+instance IsGObject SVGTextPathElement where
+  toGObject = GObject . unSVGTextPathElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGTextPathElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGTextPathElement :: IsGObject obj => obj -> SVGTextPathElement
+castToSVGTextPathElement = castTo gTypeSVGTextPathElement "SVGTextPathElement"
+
+foreign import javascript unsafe "window[\"SVGTextPathElement\"]" gTypeSVGTextPathElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGTextPositioningElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGTextContentElement"
+--     * "GHCJS.DOM.SVGGraphicsElement"
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGTextPositioningElement Mozilla SVGTextPositioningElement documentation>
+newtype SVGTextPositioningElement = SVGTextPositioningElement { unSVGTextPositioningElement :: JSRef }
+
+instance Eq (SVGTextPositioningElement) where
+  (SVGTextPositioningElement a) == (SVGTextPositioningElement b) = js_eq a b
+
+instance PToJSRef SVGTextPositioningElement where
+  pToJSRef = unSVGTextPositioningElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGTextPositioningElement where
+  pFromJSRef = SVGTextPositioningElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGTextPositioningElement where
+  toJSRef = return . unSVGTextPositioningElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGTextPositioningElement where
+  fromJSRef = return . fmap SVGTextPositioningElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsSVGTextContentElement o => IsSVGTextPositioningElement o
+toSVGTextPositioningElement :: IsSVGTextPositioningElement o => o -> SVGTextPositioningElement
+toSVGTextPositioningElement = unsafeCastGObject . toGObject
+
+instance IsSVGTextPositioningElement SVGTextPositioningElement
+instance IsSVGTextContentElement SVGTextPositioningElement
+instance IsSVGGraphicsElement SVGTextPositioningElement
+instance IsSVGElement SVGTextPositioningElement
+instance IsElement SVGTextPositioningElement
+instance IsNode SVGTextPositioningElement
+instance IsEventTarget SVGTextPositioningElement
+instance IsGObject SVGTextPositioningElement where
+  toGObject = GObject . unSVGTextPositioningElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGTextPositioningElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGTextPositioningElement :: IsGObject obj => obj -> SVGTextPositioningElement
+castToSVGTextPositioningElement = castTo gTypeSVGTextPositioningElement "SVGTextPositioningElement"
+
+foreign import javascript unsafe "window[\"SVGTextPositioningElement\"]" gTypeSVGTextPositioningElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGTitleElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGTitleElement Mozilla SVGTitleElement documentation>
+newtype SVGTitleElement = SVGTitleElement { unSVGTitleElement :: JSRef }
+
+instance Eq (SVGTitleElement) where
+  (SVGTitleElement a) == (SVGTitleElement b) = js_eq a b
+
+instance PToJSRef SVGTitleElement where
+  pToJSRef = unSVGTitleElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGTitleElement where
+  pFromJSRef = SVGTitleElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGTitleElement where
+  toJSRef = return . unSVGTitleElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGTitleElement where
+  fromJSRef = return . fmap SVGTitleElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGElement SVGTitleElement
+instance IsElement SVGTitleElement
+instance IsNode SVGTitleElement
+instance IsEventTarget SVGTitleElement
+instance IsGObject SVGTitleElement where
+  toGObject = GObject . unSVGTitleElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGTitleElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGTitleElement :: IsGObject obj => obj -> SVGTitleElement
+castToSVGTitleElement = castTo gTypeSVGTitleElement "SVGTitleElement"
+
+foreign import javascript unsafe "window[\"SVGTitleElement\"]" gTypeSVGTitleElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGTransform".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGTransform Mozilla SVGTransform documentation>
+newtype SVGTransform = SVGTransform { unSVGTransform :: JSRef }
+
+instance Eq (SVGTransform) where
+  (SVGTransform a) == (SVGTransform b) = js_eq a b
+
+instance PToJSRef SVGTransform where
+  pToJSRef = unSVGTransform
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGTransform where
+  pFromJSRef = SVGTransform
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGTransform where
+  toJSRef = return . unSVGTransform
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGTransform where
+  fromJSRef = return . fmap SVGTransform . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject SVGTransform where
+  toGObject = GObject . unSVGTransform
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGTransform . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGTransform :: IsGObject obj => obj -> SVGTransform
+castToSVGTransform = castTo gTypeSVGTransform "SVGTransform"
+
+foreign import javascript unsafe "window[\"SVGTransform\"]" gTypeSVGTransform :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGTransformList".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGTransformList Mozilla SVGTransformList documentation>
+newtype SVGTransformList = SVGTransformList { unSVGTransformList :: JSRef }
+
+instance Eq (SVGTransformList) where
+  (SVGTransformList a) == (SVGTransformList b) = js_eq a b
+
+instance PToJSRef SVGTransformList where
+  pToJSRef = unSVGTransformList
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGTransformList where
+  pFromJSRef = SVGTransformList
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGTransformList where
+  toJSRef = return . unSVGTransformList
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGTransformList where
+  fromJSRef = return . fmap SVGTransformList . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject SVGTransformList where
+  toGObject = GObject . unSVGTransformList
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGTransformList . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGTransformList :: IsGObject obj => obj -> SVGTransformList
+castToSVGTransformList = castTo gTypeSVGTransformList "SVGTransformList"
+
+foreign import javascript unsafe "window[\"SVGTransformList\"]" gTypeSVGTransformList :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGURIReference".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGURIReference Mozilla SVGURIReference documentation>
+newtype SVGURIReference = SVGURIReference { unSVGURIReference :: JSRef }
+
+instance Eq (SVGURIReference) where
+  (SVGURIReference a) == (SVGURIReference b) = js_eq a b
+
+instance PToJSRef SVGURIReference where
+  pToJSRef = unSVGURIReference
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGURIReference where
+  pFromJSRef = SVGURIReference
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGURIReference where
+  toJSRef = return . unSVGURIReference
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGURIReference where
+  fromJSRef = return . fmap SVGURIReference . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject SVGURIReference where
+  toGObject = GObject . unSVGURIReference
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGURIReference . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGURIReference :: IsGObject obj => obj -> SVGURIReference
+castToSVGURIReference = castTo gTypeSVGURIReference "SVGURIReference"
+
+foreign import javascript unsafe "window[\"SVGURIReference\"]" gTypeSVGURIReference :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGUnitTypes".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGUnitTypes Mozilla SVGUnitTypes documentation>
+newtype SVGUnitTypes = SVGUnitTypes { unSVGUnitTypes :: JSRef }
+
+instance Eq (SVGUnitTypes) where
+  (SVGUnitTypes a) == (SVGUnitTypes b) = js_eq a b
+
+instance PToJSRef SVGUnitTypes where
+  pToJSRef = unSVGUnitTypes
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGUnitTypes where
+  pFromJSRef = SVGUnitTypes
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGUnitTypes where
+  toJSRef = return . unSVGUnitTypes
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGUnitTypes where
+  fromJSRef = return . fmap SVGUnitTypes . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject SVGUnitTypes where
+  toGObject = GObject . unSVGUnitTypes
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGUnitTypes . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGUnitTypes :: IsGObject obj => obj -> SVGUnitTypes
+castToSVGUnitTypes = castTo gTypeSVGUnitTypes "SVGUnitTypes"
+
+foreign import javascript unsafe "window[\"SVGUnitTypes\"]" gTypeSVGUnitTypes :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGUseElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGGraphicsElement"
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGUseElement Mozilla SVGUseElement documentation>
+newtype SVGUseElement = SVGUseElement { unSVGUseElement :: JSRef }
+
+instance Eq (SVGUseElement) where
+  (SVGUseElement a) == (SVGUseElement b) = js_eq a b
+
+instance PToJSRef SVGUseElement where
+  pToJSRef = unSVGUseElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGUseElement where
+  pFromJSRef = SVGUseElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGUseElement where
+  toJSRef = return . unSVGUseElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGUseElement where
+  fromJSRef = return . fmap SVGUseElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGGraphicsElement SVGUseElement
+instance IsSVGElement SVGUseElement
+instance IsElement SVGUseElement
+instance IsNode SVGUseElement
+instance IsEventTarget SVGUseElement
+instance IsGObject SVGUseElement where
+  toGObject = GObject . unSVGUseElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGUseElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGUseElement :: IsGObject obj => obj -> SVGUseElement
+castToSVGUseElement = castTo gTypeSVGUseElement "SVGUseElement"
+
+foreign import javascript unsafe "window[\"SVGUseElement\"]" gTypeSVGUseElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGVKernElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGVKernElement Mozilla SVGVKernElement documentation>
+newtype SVGVKernElement = SVGVKernElement { unSVGVKernElement :: JSRef }
+
+instance Eq (SVGVKernElement) where
+  (SVGVKernElement a) == (SVGVKernElement b) = js_eq a b
+
+instance PToJSRef SVGVKernElement where
+  pToJSRef = unSVGVKernElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGVKernElement where
+  pFromJSRef = SVGVKernElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGVKernElement where
+  toJSRef = return . unSVGVKernElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGVKernElement where
+  fromJSRef = return . fmap SVGVKernElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGElement SVGVKernElement
+instance IsElement SVGVKernElement
+instance IsNode SVGVKernElement
+instance IsEventTarget SVGVKernElement
+instance IsGObject SVGVKernElement where
+  toGObject = GObject . unSVGVKernElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGVKernElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGVKernElement :: IsGObject obj => obj -> SVGVKernElement
+castToSVGVKernElement = castTo gTypeSVGVKernElement "SVGVKernElement"
+
+foreign import javascript unsafe "window[\"SVGVKernElement\"]" gTypeSVGVKernElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGViewElement".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.SVGElement"
+--     * "GHCJS.DOM.Element"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGViewElement Mozilla SVGViewElement documentation>
+newtype SVGViewElement = SVGViewElement { unSVGViewElement :: JSRef }
+
+instance Eq (SVGViewElement) where
+  (SVGViewElement a) == (SVGViewElement b) = js_eq a b
+
+instance PToJSRef SVGViewElement where
+  pToJSRef = unSVGViewElement
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGViewElement where
+  pFromJSRef = SVGViewElement
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGViewElement where
+  toJSRef = return . unSVGViewElement
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGViewElement where
+  fromJSRef = return . fmap SVGViewElement . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsSVGElement SVGViewElement
+instance IsElement SVGViewElement
+instance IsNode SVGViewElement
+instance IsEventTarget SVGViewElement
+instance IsGObject SVGViewElement where
+  toGObject = GObject . unSVGViewElement
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGViewElement . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGViewElement :: IsGObject obj => obj -> SVGViewElement
+castToSVGViewElement = castTo gTypeSVGViewElement "SVGViewElement"
+
+foreign import javascript unsafe "window[\"SVGViewElement\"]" gTypeSVGViewElement :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGViewSpec".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGViewSpec Mozilla SVGViewSpec documentation>
+newtype SVGViewSpec = SVGViewSpec { unSVGViewSpec :: JSRef }
+
+instance Eq (SVGViewSpec) where
+  (SVGViewSpec a) == (SVGViewSpec b) = js_eq a b
+
+instance PToJSRef SVGViewSpec where
+  pToJSRef = unSVGViewSpec
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGViewSpec where
+  pFromJSRef = SVGViewSpec
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGViewSpec where
+  toJSRef = return . unSVGViewSpec
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGViewSpec where
+  fromJSRef = return . fmap SVGViewSpec . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject SVGViewSpec where
+  toGObject = GObject . unSVGViewSpec
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGViewSpec . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGViewSpec :: IsGObject obj => obj -> SVGViewSpec
+castToSVGViewSpec = castTo gTypeSVGViewSpec "SVGViewSpec"
+
+foreign import javascript unsafe "window[\"SVGViewSpec\"]" gTypeSVGViewSpec :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGZoomAndPan".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGZoomAndPan Mozilla SVGZoomAndPan documentation>
+newtype SVGZoomAndPan = SVGZoomAndPan { unSVGZoomAndPan :: JSRef }
+
+instance Eq (SVGZoomAndPan) where
+  (SVGZoomAndPan a) == (SVGZoomAndPan b) = js_eq a b
+
+instance PToJSRef SVGZoomAndPan where
+  pToJSRef = unSVGZoomAndPan
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGZoomAndPan where
+  pFromJSRef = SVGZoomAndPan
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGZoomAndPan where
+  toJSRef = return . unSVGZoomAndPan
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGZoomAndPan where
+  fromJSRef = return . fmap SVGZoomAndPan . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject SVGZoomAndPan where
+  toGObject = GObject . unSVGZoomAndPan
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGZoomAndPan . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGZoomAndPan :: IsGObject obj => obj -> SVGZoomAndPan
+castToSVGZoomAndPan = castTo gTypeSVGZoomAndPan "SVGZoomAndPan"
+
+foreign import javascript unsafe "window[\"SVGZoomAndPan\"]" gTypeSVGZoomAndPan :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SVGZoomEvent".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.UIEvent"
+--     * "GHCJS.DOM.Event"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SVGZoomEvent Mozilla SVGZoomEvent documentation>
+newtype SVGZoomEvent = SVGZoomEvent { unSVGZoomEvent :: JSRef }
+
+instance Eq (SVGZoomEvent) where
+  (SVGZoomEvent a) == (SVGZoomEvent b) = js_eq a b
+
+instance PToJSRef SVGZoomEvent where
+  pToJSRef = unSVGZoomEvent
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SVGZoomEvent where
+  pFromJSRef = SVGZoomEvent
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SVGZoomEvent where
+  toJSRef = return . unSVGZoomEvent
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SVGZoomEvent where
+  fromJSRef = return . fmap SVGZoomEvent . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsUIEvent SVGZoomEvent
+instance IsEvent SVGZoomEvent
+instance IsGObject SVGZoomEvent where
+  toGObject = GObject . unSVGZoomEvent
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SVGZoomEvent . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSVGZoomEvent :: IsGObject obj => obj -> SVGZoomEvent
+castToSVGZoomEvent = castTo gTypeSVGZoomEvent "SVGZoomEvent"
+
+foreign import javascript unsafe "window[\"SVGZoomEvent\"]" gTypeSVGZoomEvent :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.Screen".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/Screen Mozilla Screen documentation>
+newtype Screen = Screen { unScreen :: JSRef }
+
+instance Eq (Screen) where
+  (Screen a) == (Screen b) = js_eq a b
+
+instance PToJSRef Screen where
+  pToJSRef = unScreen
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef Screen where
+  pFromJSRef = Screen
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef Screen where
+  toJSRef = return . unScreen
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef Screen where
+  fromJSRef = return . fmap Screen . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject Screen where
+  toGObject = GObject . unScreen
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = Screen . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToScreen :: IsGObject obj => obj -> Screen
+castToScreen = castTo gTypeScreen "Screen"
+
+foreign import javascript unsafe "window[\"Screen\"]" gTypeScreen :: GType
+#else
+type IsScreen o = ScreenClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.ScriptProcessorNode".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.AudioNode"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/ScriptProcessorNode Mozilla ScriptProcessorNode documentation>
+newtype ScriptProcessorNode = ScriptProcessorNode { unScriptProcessorNode :: JSRef }
+
+instance Eq (ScriptProcessorNode) where
+  (ScriptProcessorNode a) == (ScriptProcessorNode b) = js_eq a b
+
+instance PToJSRef ScriptProcessorNode where
+  pToJSRef = unScriptProcessorNode
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef ScriptProcessorNode where
+  pFromJSRef = ScriptProcessorNode
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef ScriptProcessorNode where
+  toJSRef = return . unScriptProcessorNode
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef ScriptProcessorNode where
+  fromJSRef = return . fmap ScriptProcessorNode . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsAudioNode ScriptProcessorNode
+instance IsEventTarget ScriptProcessorNode
+instance IsGObject ScriptProcessorNode where
+  toGObject = GObject . unScriptProcessorNode
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = ScriptProcessorNode . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToScriptProcessorNode :: IsGObject obj => obj -> ScriptProcessorNode
+castToScriptProcessorNode = castTo gTypeScriptProcessorNode "ScriptProcessorNode"
+
+foreign import javascript unsafe "window[\"ScriptProcessorNode\"]" gTypeScriptProcessorNode :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.ScriptProfile".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/ScriptProfile Mozilla ScriptProfile documentation>
+newtype ScriptProfile = ScriptProfile { unScriptProfile :: JSRef }
+
+instance Eq (ScriptProfile) where
+  (ScriptProfile a) == (ScriptProfile b) = js_eq a b
+
+instance PToJSRef ScriptProfile where
+  pToJSRef = unScriptProfile
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef ScriptProfile where
+  pFromJSRef = ScriptProfile
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef ScriptProfile where
+  toJSRef = return . unScriptProfile
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef ScriptProfile where
+  fromJSRef = return . fmap ScriptProfile . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject ScriptProfile where
+  toGObject = GObject . unScriptProfile
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = ScriptProfile . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToScriptProfile :: IsGObject obj => obj -> ScriptProfile
+castToScriptProfile = castTo gTypeScriptProfile "ScriptProfile"
+
+foreign import javascript unsafe "window[\"ScriptProfile\"]" gTypeScriptProfile :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.ScriptProfileNode".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/ScriptProfileNode Mozilla ScriptProfileNode documentation>
+newtype ScriptProfileNode = ScriptProfileNode { unScriptProfileNode :: JSRef }
+
+instance Eq (ScriptProfileNode) where
+  (ScriptProfileNode a) == (ScriptProfileNode b) = js_eq a b
+
+instance PToJSRef ScriptProfileNode where
+  pToJSRef = unScriptProfileNode
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef ScriptProfileNode where
+  pFromJSRef = ScriptProfileNode
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef ScriptProfileNode where
+  toJSRef = return . unScriptProfileNode
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef ScriptProfileNode where
+  fromJSRef = return . fmap ScriptProfileNode . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject ScriptProfileNode where
+  toGObject = GObject . unScriptProfileNode
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = ScriptProfileNode . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToScriptProfileNode :: IsGObject obj => obj -> ScriptProfileNode
+castToScriptProfileNode = castTo gTypeScriptProfileNode "ScriptProfileNode"
+
+foreign import javascript unsafe "window[\"ScriptProfileNode\"]" gTypeScriptProfileNode :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SecurityPolicy".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SecurityPolicy Mozilla SecurityPolicy documentation>
+newtype SecurityPolicy = SecurityPolicy { unSecurityPolicy :: JSRef }
+
+instance Eq (SecurityPolicy) where
+  (SecurityPolicy a) == (SecurityPolicy b) = js_eq a b
+
+instance PToJSRef SecurityPolicy where
+  pToJSRef = unSecurityPolicy
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SecurityPolicy where
+  pFromJSRef = SecurityPolicy
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SecurityPolicy where
+  toJSRef = return . unSecurityPolicy
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SecurityPolicy where
+  fromJSRef = return . fmap SecurityPolicy . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject SecurityPolicy where
+  toGObject = GObject . unSecurityPolicy
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SecurityPolicy . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSecurityPolicy :: IsGObject obj => obj -> SecurityPolicy
+castToSecurityPolicy = castTo gTypeSecurityPolicy "SecurityPolicy"
+
+foreign import javascript unsafe "window[\"SecurityPolicy\"]" gTypeSecurityPolicy :: GType
+#else
+#ifndef USE_OLD_WEBKIT
+type IsSecurityPolicy o = SecurityPolicyClass o
+#endif
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SecurityPolicyViolationEvent".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.Event"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SecurityPolicyViolationEvent Mozilla SecurityPolicyViolationEvent documentation>
+newtype SecurityPolicyViolationEvent = SecurityPolicyViolationEvent { unSecurityPolicyViolationEvent :: JSRef }
+
+instance Eq (SecurityPolicyViolationEvent) where
+  (SecurityPolicyViolationEvent a) == (SecurityPolicyViolationEvent b) = js_eq a b
+
+instance PToJSRef SecurityPolicyViolationEvent where
+  pToJSRef = unSecurityPolicyViolationEvent
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SecurityPolicyViolationEvent where
+  pFromJSRef = SecurityPolicyViolationEvent
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SecurityPolicyViolationEvent where
+  toJSRef = return . unSecurityPolicyViolationEvent
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SecurityPolicyViolationEvent where
+  fromJSRef = return . fmap SecurityPolicyViolationEvent . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEvent SecurityPolicyViolationEvent
+instance IsGObject SecurityPolicyViolationEvent where
+  toGObject = GObject . unSecurityPolicyViolationEvent
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SecurityPolicyViolationEvent . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSecurityPolicyViolationEvent :: IsGObject obj => obj -> SecurityPolicyViolationEvent
+castToSecurityPolicyViolationEvent = castTo gTypeSecurityPolicyViolationEvent "SecurityPolicyViolationEvent"
+
+foreign import javascript unsafe "window[\"SecurityPolicyViolationEvent\"]" gTypeSecurityPolicyViolationEvent :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.Selection".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/Selection Mozilla Selection documentation>
+newtype Selection = Selection { unSelection :: JSRef }
+
+instance Eq (Selection) where
+  (Selection a) == (Selection b) = js_eq a b
+
+instance PToJSRef Selection where
+  pToJSRef = unSelection
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef Selection where
+  pFromJSRef = Selection
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef Selection where
+  toJSRef = return . unSelection
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef Selection where
+  fromJSRef = return . fmap Selection . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject Selection where
+  toGObject = GObject . unSelection
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = Selection . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSelection :: IsGObject obj => obj -> Selection
+castToSelection = castTo gTypeSelection "Selection"
+
+foreign import javascript unsafe "window[\"Selection\"]" gTypeSelection :: GType
+#else
+type IsSelection o = SelectionClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SourceBuffer".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SourceBuffer Mozilla SourceBuffer documentation>
+newtype SourceBuffer = SourceBuffer { unSourceBuffer :: JSRef }
+
+instance Eq (SourceBuffer) where
+  (SourceBuffer a) == (SourceBuffer b) = js_eq a b
+
+instance PToJSRef SourceBuffer where
+  pToJSRef = unSourceBuffer
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SourceBuffer where
+  pFromJSRef = SourceBuffer
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SourceBuffer where
+  toJSRef = return . unSourceBuffer
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SourceBuffer where
+  fromJSRef = return . fmap SourceBuffer . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEventTarget SourceBuffer
+instance IsGObject SourceBuffer where
+  toGObject = GObject . unSourceBuffer
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SourceBuffer . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSourceBuffer :: IsGObject obj => obj -> SourceBuffer
+castToSourceBuffer = castTo gTypeSourceBuffer "SourceBuffer"
+
+foreign import javascript unsafe "window[\"SourceBuffer\"]" gTypeSourceBuffer :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SourceBufferList".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SourceBufferList Mozilla SourceBufferList documentation>
+newtype SourceBufferList = SourceBufferList { unSourceBufferList :: JSRef }
+
+instance Eq (SourceBufferList) where
+  (SourceBufferList a) == (SourceBufferList b) = js_eq a b
+
+instance PToJSRef SourceBufferList where
+  pToJSRef = unSourceBufferList
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SourceBufferList where
+  pFromJSRef = SourceBufferList
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SourceBufferList where
+  toJSRef = return . unSourceBufferList
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SourceBufferList where
+  fromJSRef = return . fmap SourceBufferList . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEventTarget SourceBufferList
+instance IsGObject SourceBufferList where
+  toGObject = GObject . unSourceBufferList
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SourceBufferList . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSourceBufferList :: IsGObject obj => obj -> SourceBufferList
+castToSourceBufferList = castTo gTypeSourceBufferList "SourceBufferList"
+
+foreign import javascript unsafe "window[\"SourceBufferList\"]" gTypeSourceBufferList :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SourceInfo".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SourceInfo Mozilla SourceInfo documentation>
+newtype SourceInfo = SourceInfo { unSourceInfo :: JSRef }
+
+instance Eq (SourceInfo) where
+  (SourceInfo a) == (SourceInfo b) = js_eq a b
+
+instance PToJSRef SourceInfo where
+  pToJSRef = unSourceInfo
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SourceInfo where
+  pFromJSRef = SourceInfo
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SourceInfo where
+  toJSRef = return . unSourceInfo
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SourceInfo where
+  fromJSRef = return . fmap SourceInfo . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject SourceInfo where
+  toGObject = GObject . unSourceInfo
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SourceInfo . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSourceInfo :: IsGObject obj => obj -> SourceInfo
+castToSourceInfo = castTo gTypeSourceInfo "SourceInfo"
+
+foreign import javascript unsafe "window[\"SourceInfo\"]" gTypeSourceInfo :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SpeechSynthesis".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesis Mozilla SpeechSynthesis documentation>
+newtype SpeechSynthesis = SpeechSynthesis { unSpeechSynthesis :: JSRef }
+
+instance Eq (SpeechSynthesis) where
+  (SpeechSynthesis a) == (SpeechSynthesis b) = js_eq a b
+
+instance PToJSRef SpeechSynthesis where
+  pToJSRef = unSpeechSynthesis
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SpeechSynthesis where
+  pFromJSRef = SpeechSynthesis
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SpeechSynthesis where
+  toJSRef = return . unSpeechSynthesis
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SpeechSynthesis where
+  fromJSRef = return . fmap SpeechSynthesis . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject SpeechSynthesis where
+  toGObject = GObject . unSpeechSynthesis
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SpeechSynthesis . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSpeechSynthesis :: IsGObject obj => obj -> SpeechSynthesis
+castToSpeechSynthesis = castTo gTypeSpeechSynthesis "SpeechSynthesis"
+
+foreign import javascript unsafe "window[\"SpeechSynthesis\"]" gTypeSpeechSynthesis :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SpeechSynthesisEvent".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.Event"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesisEvent Mozilla SpeechSynthesisEvent documentation>
+newtype SpeechSynthesisEvent = SpeechSynthesisEvent { unSpeechSynthesisEvent :: JSRef }
+
+instance Eq (SpeechSynthesisEvent) where
+  (SpeechSynthesisEvent a) == (SpeechSynthesisEvent b) = js_eq a b
+
+instance PToJSRef SpeechSynthesisEvent where
+  pToJSRef = unSpeechSynthesisEvent
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SpeechSynthesisEvent where
+  pFromJSRef = SpeechSynthesisEvent
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SpeechSynthesisEvent where
+  toJSRef = return . unSpeechSynthesisEvent
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SpeechSynthesisEvent where
+  fromJSRef = return . fmap SpeechSynthesisEvent . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEvent SpeechSynthesisEvent
+instance IsGObject SpeechSynthesisEvent where
+  toGObject = GObject . unSpeechSynthesisEvent
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SpeechSynthesisEvent . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSpeechSynthesisEvent :: IsGObject obj => obj -> SpeechSynthesisEvent
+castToSpeechSynthesisEvent = castTo gTypeSpeechSynthesisEvent "SpeechSynthesisEvent"
+
+foreign import javascript unsafe "window[\"SpeechSynthesisEvent\"]" gTypeSpeechSynthesisEvent :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SpeechSynthesisUtterance".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesisUtterance Mozilla SpeechSynthesisUtterance documentation>
+newtype SpeechSynthesisUtterance = SpeechSynthesisUtterance { unSpeechSynthesisUtterance :: JSRef }
+
+instance Eq (SpeechSynthesisUtterance) where
+  (SpeechSynthesisUtterance a) == (SpeechSynthesisUtterance b) = js_eq a b
+
+instance PToJSRef SpeechSynthesisUtterance where
+  pToJSRef = unSpeechSynthesisUtterance
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SpeechSynthesisUtterance where
+  pFromJSRef = SpeechSynthesisUtterance
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SpeechSynthesisUtterance where
+  toJSRef = return . unSpeechSynthesisUtterance
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SpeechSynthesisUtterance where
+  fromJSRef = return . fmap SpeechSynthesisUtterance . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEventTarget SpeechSynthesisUtterance
+instance IsGObject SpeechSynthesisUtterance where
+  toGObject = GObject . unSpeechSynthesisUtterance
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SpeechSynthesisUtterance . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSpeechSynthesisUtterance :: IsGObject obj => obj -> SpeechSynthesisUtterance
+castToSpeechSynthesisUtterance = castTo gTypeSpeechSynthesisUtterance "SpeechSynthesisUtterance"
+
+foreign import javascript unsafe "window[\"SpeechSynthesisUtterance\"]" gTypeSpeechSynthesisUtterance :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SpeechSynthesisVoice".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesisVoice Mozilla SpeechSynthesisVoice documentation>
+newtype SpeechSynthesisVoice = SpeechSynthesisVoice { unSpeechSynthesisVoice :: JSRef }
+
+instance Eq (SpeechSynthesisVoice) where
+  (SpeechSynthesisVoice a) == (SpeechSynthesisVoice b) = js_eq a b
+
+instance PToJSRef SpeechSynthesisVoice where
+  pToJSRef = unSpeechSynthesisVoice
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SpeechSynthesisVoice where
+  pFromJSRef = SpeechSynthesisVoice
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SpeechSynthesisVoice where
+  toJSRef = return . unSpeechSynthesisVoice
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SpeechSynthesisVoice where
+  fromJSRef = return . fmap SpeechSynthesisVoice . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject SpeechSynthesisVoice where
+  toGObject = GObject . unSpeechSynthesisVoice
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SpeechSynthesisVoice . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSpeechSynthesisVoice :: IsGObject obj => obj -> SpeechSynthesisVoice
+castToSpeechSynthesisVoice = castTo gTypeSpeechSynthesisVoice "SpeechSynthesisVoice"
+
+foreign import javascript unsafe "window[\"SpeechSynthesisVoice\"]" gTypeSpeechSynthesisVoice :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.Storage".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/Storage Mozilla Storage documentation>
+newtype Storage = Storage { unStorage :: JSRef }
+
+instance Eq (Storage) where
+  (Storage a) == (Storage b) = js_eq a b
+
+instance PToJSRef Storage where
+  pToJSRef = unStorage
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef Storage where
+  pFromJSRef = Storage
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef Storage where
+  toJSRef = return . unStorage
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef Storage where
+  fromJSRef = return . fmap Storage . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject Storage where
+  toGObject = GObject . unStorage
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = Storage . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToStorage :: IsGObject obj => obj -> Storage
+castToStorage = castTo gTypeStorage "Storage"
+
+foreign import javascript unsafe "window[\"Storage\"]" gTypeStorage :: GType
+#else
+type IsStorage o = StorageClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.StorageEvent".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.Event"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/StorageEvent Mozilla StorageEvent documentation>
+newtype StorageEvent = StorageEvent { unStorageEvent :: JSRef }
+
+instance Eq (StorageEvent) where
+  (StorageEvent a) == (StorageEvent b) = js_eq a b
+
+instance PToJSRef StorageEvent where
+  pToJSRef = unStorageEvent
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef StorageEvent where
+  pFromJSRef = StorageEvent
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef StorageEvent where
+  toJSRef = return . unStorageEvent
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef StorageEvent where
+  fromJSRef = return . fmap StorageEvent . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEvent StorageEvent
+instance IsGObject StorageEvent where
+  toGObject = GObject . unStorageEvent
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = StorageEvent . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToStorageEvent :: IsGObject obj => obj -> StorageEvent
+castToStorageEvent = castTo gTypeStorageEvent "StorageEvent"
+
+foreign import javascript unsafe "window[\"StorageEvent\"]" gTypeStorageEvent :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.StorageInfo".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/StorageInfo Mozilla StorageInfo documentation>
+newtype StorageInfo = StorageInfo { unStorageInfo :: JSRef }
+
+instance Eq (StorageInfo) where
+  (StorageInfo a) == (StorageInfo b) = js_eq a b
+
+instance PToJSRef StorageInfo where
+  pToJSRef = unStorageInfo
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef StorageInfo where
+  pFromJSRef = StorageInfo
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef StorageInfo where
+  toJSRef = return . unStorageInfo
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef StorageInfo where
+  fromJSRef = return . fmap StorageInfo . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject StorageInfo where
+  toGObject = GObject . unStorageInfo
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = StorageInfo . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToStorageInfo :: IsGObject obj => obj -> StorageInfo
+castToStorageInfo = castTo gTypeStorageInfo "StorageInfo"
+
+foreign import javascript unsafe "window[\"StorageInfo\"]" gTypeStorageInfo :: GType
+#else
+#ifndef USE_OLD_WEBKIT
+type IsStorageInfo o = StorageInfoClass o
+#endif
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.StorageQuota".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/StorageQuota Mozilla StorageQuota documentation>
+newtype StorageQuota = StorageQuota { unStorageQuota :: JSRef }
+
+instance Eq (StorageQuota) where
+  (StorageQuota a) == (StorageQuota b) = js_eq a b
+
+instance PToJSRef StorageQuota where
+  pToJSRef = unStorageQuota
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef StorageQuota where
+  pFromJSRef = StorageQuota
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef StorageQuota where
+  toJSRef = return . unStorageQuota
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef StorageQuota where
+  fromJSRef = return . fmap StorageQuota . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject StorageQuota where
+  toGObject = GObject . unStorageQuota
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = StorageQuota . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToStorageQuota :: IsGObject obj => obj -> StorageQuota
+castToStorageQuota = castTo gTypeStorageQuota "StorageQuota"
+
+foreign import javascript unsafe "window[\"StorageQuota\"]" gTypeStorageQuota :: GType
+#else
+#ifndef USE_OLD_WEBKIT
+type IsStorageQuota o = StorageQuotaClass o
+#endif
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.StyleMedia".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/StyleMedia Mozilla StyleMedia documentation>
+newtype StyleMedia = StyleMedia { unStyleMedia :: JSRef }
+
+instance Eq (StyleMedia) where
+  (StyleMedia a) == (StyleMedia b) = js_eq a b
+
+instance PToJSRef StyleMedia where
+  pToJSRef = unStyleMedia
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef StyleMedia where
+  pFromJSRef = StyleMedia
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef StyleMedia where
+  toJSRef = return . unStyleMedia
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef StyleMedia where
+  fromJSRef = return . fmap StyleMedia . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject StyleMedia where
+  toGObject = GObject . unStyleMedia
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = StyleMedia . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToStyleMedia :: IsGObject obj => obj -> StyleMedia
+castToStyleMedia = castTo gTypeStyleMedia "StyleMedia"
+
+foreign import javascript unsafe "window[\"StyleMedia\"]" gTypeStyleMedia :: GType
+#else
+type IsStyleMedia o = StyleMediaClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.StyleSheet".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/StyleSheet Mozilla StyleSheet documentation>
+newtype StyleSheet = StyleSheet { unStyleSheet :: JSRef }
+
+instance Eq (StyleSheet) where
+  (StyleSheet a) == (StyleSheet b) = js_eq a b
+
+instance PToJSRef StyleSheet where
+  pToJSRef = unStyleSheet
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef StyleSheet where
+  pFromJSRef = StyleSheet
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef StyleSheet where
+  toJSRef = return . unStyleSheet
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef StyleSheet where
+  fromJSRef = return . fmap StyleSheet . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsGObject o => IsStyleSheet o
+toStyleSheet :: IsStyleSheet o => o -> StyleSheet
+toStyleSheet = unsafeCastGObject . toGObject
+
+instance IsStyleSheet StyleSheet
+instance IsGObject StyleSheet where
+  toGObject = GObject . unStyleSheet
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = StyleSheet . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToStyleSheet :: IsGObject obj => obj -> StyleSheet
+castToStyleSheet = castTo gTypeStyleSheet "StyleSheet"
+
+foreign import javascript unsafe "window[\"StyleSheet\"]" gTypeStyleSheet :: GType
+#else
+type IsStyleSheet o = StyleSheetClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.StyleSheetList".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/StyleSheetList Mozilla StyleSheetList documentation>
+newtype StyleSheetList = StyleSheetList { unStyleSheetList :: JSRef }
+
+instance Eq (StyleSheetList) where
+  (StyleSheetList a) == (StyleSheetList b) = js_eq a b
+
+instance PToJSRef StyleSheetList where
+  pToJSRef = unStyleSheetList
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef StyleSheetList where
+  pFromJSRef = StyleSheetList
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef StyleSheetList where
+  toJSRef = return . unStyleSheetList
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef StyleSheetList where
+  fromJSRef = return . fmap StyleSheetList . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject StyleSheetList where
+  toGObject = GObject . unStyleSheetList
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = StyleSheetList . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToStyleSheetList :: IsGObject obj => obj -> StyleSheetList
+castToStyleSheetList = castTo gTypeStyleSheetList "StyleSheetList"
+
+foreign import javascript unsafe "window[\"StyleSheetList\"]" gTypeStyleSheetList :: GType
+#else
+type IsStyleSheetList o = StyleSheetListClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.SubtleCrypto".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/WebKitSubtleCrypto Mozilla WebKitSubtleCrypto documentation>
+newtype SubtleCrypto = SubtleCrypto { unSubtleCrypto :: JSRef }
+
+instance Eq (SubtleCrypto) where
+  (SubtleCrypto a) == (SubtleCrypto b) = js_eq a b
+
+instance PToJSRef SubtleCrypto where
+  pToJSRef = unSubtleCrypto
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef SubtleCrypto where
+  pFromJSRef = SubtleCrypto
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef SubtleCrypto where
+  toJSRef = return . unSubtleCrypto
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef SubtleCrypto where
+  fromJSRef = return . fmap SubtleCrypto . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject SubtleCrypto where
+  toGObject = GObject . unSubtleCrypto
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = SubtleCrypto . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToSubtleCrypto :: IsGObject obj => obj -> SubtleCrypto
+castToSubtleCrypto = castTo gTypeSubtleCrypto "SubtleCrypto"
+
+foreign import javascript unsafe "window[\"WebKitSubtleCrypto\"]" gTypeSubtleCrypto :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.Text".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.CharacterData"
+--     * "GHCJS.DOM.Node"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/Text Mozilla Text documentation>
+newtype Text = Text { unText :: JSRef }
+
+instance Eq (Text) where
+  (Text a) == (Text b) = js_eq a b
+
+instance PToJSRef Text where
+  pToJSRef = unText
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef Text where
+  pFromJSRef = Text
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef Text where
+  toJSRef = return . unText
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef Text where
+  fromJSRef = return . fmap Text . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsCharacterData o => IsText o
+toText :: IsText o => o -> Text
+toText = unsafeCastGObject . toGObject
+
+instance IsText Text
+instance IsCharacterData Text
+instance IsNode Text
+instance IsEventTarget Text
+instance IsGObject Text where
+  toGObject = GObject . unText
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = Text . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToText :: IsGObject obj => obj -> Text
+castToText = castTo gTypeText "Text"
+
+foreign import javascript unsafe "window[\"Text\"]" gTypeText :: GType
+#else
+type IsText o = TextClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.TextEvent".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.UIEvent"
+--     * "GHCJS.DOM.Event"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/TextEvent Mozilla TextEvent documentation>
+newtype TextEvent = TextEvent { unTextEvent :: JSRef }
+
+instance Eq (TextEvent) where
+  (TextEvent a) == (TextEvent b) = js_eq a b
+
+instance PToJSRef TextEvent where
+  pToJSRef = unTextEvent
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef TextEvent where
+  pFromJSRef = TextEvent
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef TextEvent where
+  toJSRef = return . unTextEvent
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef TextEvent where
+  fromJSRef = return . fmap TextEvent . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsUIEvent TextEvent
+instance IsEvent TextEvent
+instance IsGObject TextEvent where
+  toGObject = GObject . unTextEvent
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = TextEvent . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToTextEvent :: IsGObject obj => obj -> TextEvent
+castToTextEvent = castTo gTypeTextEvent "TextEvent"
+
+foreign import javascript unsafe "window[\"TextEvent\"]" gTypeTextEvent :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.TextMetrics".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/TextMetrics Mozilla TextMetrics documentation>
+newtype TextMetrics = TextMetrics { unTextMetrics :: JSRef }
+
+instance Eq (TextMetrics) where
+  (TextMetrics a) == (TextMetrics b) = js_eq a b
+
+instance PToJSRef TextMetrics where
+  pToJSRef = unTextMetrics
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef TextMetrics where
+  pFromJSRef = TextMetrics
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef TextMetrics where
+  toJSRef = return . unTextMetrics
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef TextMetrics where
+  fromJSRef = return . fmap TextMetrics . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject TextMetrics where
+  toGObject = GObject . unTextMetrics
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = TextMetrics . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToTextMetrics :: IsGObject obj => obj -> TextMetrics
+castToTextMetrics = castTo gTypeTextMetrics "TextMetrics"
+
+foreign import javascript unsafe "window[\"TextMetrics\"]" gTypeTextMetrics :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.TextTrack".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/TextTrack Mozilla TextTrack documentation>
+newtype TextTrack = TextTrack { unTextTrack :: JSRef }
+
+instance Eq (TextTrack) where
+  (TextTrack a) == (TextTrack b) = js_eq a b
+
+instance PToJSRef TextTrack where
+  pToJSRef = unTextTrack
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef TextTrack where
+  pFromJSRef = TextTrack
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef TextTrack where
+  toJSRef = return . unTextTrack
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef TextTrack where
+  fromJSRef = return . fmap TextTrack . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEventTarget TextTrack
+instance IsGObject TextTrack where
+  toGObject = GObject . unTextTrack
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = TextTrack . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToTextTrack :: IsGObject obj => obj -> TextTrack
+castToTextTrack = castTo gTypeTextTrack "TextTrack"
+
+foreign import javascript unsafe "window[\"TextTrack\"]" gTypeTextTrack :: GType
+#else
+#ifndef USE_OLD_WEBKIT
+type IsTextTrack o = TextTrackClass o
+#endif
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.TextTrackCue".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/TextTrackCue Mozilla TextTrackCue documentation>
+newtype TextTrackCue = TextTrackCue { unTextTrackCue :: JSRef }
+
+instance Eq (TextTrackCue) where
+  (TextTrackCue a) == (TextTrackCue b) = js_eq a b
+
+instance PToJSRef TextTrackCue where
+  pToJSRef = unTextTrackCue
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef TextTrackCue where
+  pFromJSRef = TextTrackCue
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef TextTrackCue where
+  toJSRef = return . unTextTrackCue
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef TextTrackCue where
+  fromJSRef = return . fmap TextTrackCue . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsEventTarget o => IsTextTrackCue o
+toTextTrackCue :: IsTextTrackCue o => o -> TextTrackCue
+toTextTrackCue = unsafeCastGObject . toGObject
+
+instance IsTextTrackCue TextTrackCue
+instance IsEventTarget TextTrackCue
+instance IsGObject TextTrackCue where
+  toGObject = GObject . unTextTrackCue
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = TextTrackCue . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToTextTrackCue :: IsGObject obj => obj -> TextTrackCue
+castToTextTrackCue = castTo gTypeTextTrackCue "TextTrackCue"
+
+foreign import javascript unsafe "window[\"TextTrackCue\"]" gTypeTextTrackCue :: GType
+#else
+#ifndef USE_OLD_WEBKIT
+type IsTextTrackCue o = TextTrackCueClass o
+#endif
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.TextTrackCueList".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/TextTrackCueList Mozilla TextTrackCueList documentation>
+newtype TextTrackCueList = TextTrackCueList { unTextTrackCueList :: JSRef }
+
+instance Eq (TextTrackCueList) where
+  (TextTrackCueList a) == (TextTrackCueList b) = js_eq a b
+
+instance PToJSRef TextTrackCueList where
+  pToJSRef = unTextTrackCueList
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef TextTrackCueList where
+  pFromJSRef = TextTrackCueList
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef TextTrackCueList where
+  toJSRef = return . unTextTrackCueList
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef TextTrackCueList where
+  fromJSRef = return . fmap TextTrackCueList . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject TextTrackCueList where
+  toGObject = GObject . unTextTrackCueList
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = TextTrackCueList . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToTextTrackCueList :: IsGObject obj => obj -> TextTrackCueList
+castToTextTrackCueList = castTo gTypeTextTrackCueList "TextTrackCueList"
+
+foreign import javascript unsafe "window[\"TextTrackCueList\"]" gTypeTextTrackCueList :: GType
+#else
+#ifndef USE_OLD_WEBKIT
+type IsTextTrackCueList o = TextTrackCueListClass o
+#endif
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.TextTrackList".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/TextTrackList Mozilla TextTrackList documentation>
+newtype TextTrackList = TextTrackList { unTextTrackList :: JSRef }
+
+instance Eq (TextTrackList) where
+  (TextTrackList a) == (TextTrackList b) = js_eq a b
+
+instance PToJSRef TextTrackList where
+  pToJSRef = unTextTrackList
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef TextTrackList where
+  pFromJSRef = TextTrackList
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef TextTrackList where
+  toJSRef = return . unTextTrackList
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef TextTrackList where
+  fromJSRef = return . fmap TextTrackList . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEventTarget TextTrackList
+instance IsGObject TextTrackList where
+  toGObject = GObject . unTextTrackList
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = TextTrackList . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToTextTrackList :: IsGObject obj => obj -> TextTrackList
+castToTextTrackList = castTo gTypeTextTrackList "TextTrackList"
+
+foreign import javascript unsafe "window[\"TextTrackList\"]" gTypeTextTrackList :: GType
+#else
+#ifndef USE_OLD_WEBKIT
+type IsTextTrackList o = TextTrackListClass o
+#endif
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.TimeRanges".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/TimeRanges Mozilla TimeRanges documentation>
+newtype TimeRanges = TimeRanges { unTimeRanges :: JSRef }
+
+instance Eq (TimeRanges) where
+  (TimeRanges a) == (TimeRanges b) = js_eq a b
+
+instance PToJSRef TimeRanges where
+  pToJSRef = unTimeRanges
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef TimeRanges where
+  pFromJSRef = TimeRanges
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef TimeRanges where
+  toJSRef = return . unTimeRanges
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef TimeRanges where
+  fromJSRef = return . fmap TimeRanges . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject TimeRanges where
+  toGObject = GObject . unTimeRanges
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = TimeRanges . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToTimeRanges :: IsGObject obj => obj -> TimeRanges
+castToTimeRanges = castTo gTypeTimeRanges "TimeRanges"
+
+foreign import javascript unsafe "window[\"TimeRanges\"]" gTypeTimeRanges :: GType
+#else
+type IsTimeRanges o = TimeRangesClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.Touch".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/Touch Mozilla Touch documentation>
+newtype Touch = Touch { unTouch :: JSRef }
+
+instance Eq (Touch) where
+  (Touch a) == (Touch b) = js_eq a b
+
+instance PToJSRef Touch where
+  pToJSRef = unTouch
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef Touch where
+  pFromJSRef = Touch
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef Touch where
+  toJSRef = return . unTouch
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef Touch where
+  fromJSRef = return . fmap Touch . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject Touch where
+  toGObject = GObject . unTouch
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = Touch . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToTouch :: IsGObject obj => obj -> Touch
+castToTouch = castTo gTypeTouch "Touch"
+
+foreign import javascript unsafe "window[\"Touch\"]" gTypeTouch :: GType
+#else
+#ifndef USE_OLD_WEBKIT
+type IsTouch o = TouchClass o
+#endif
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.TouchEvent".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.UIEvent"
+--     * "GHCJS.DOM.Event"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/TouchEvent Mozilla TouchEvent documentation>
+newtype TouchEvent = TouchEvent { unTouchEvent :: JSRef }
+
+instance Eq (TouchEvent) where
+  (TouchEvent a) == (TouchEvent b) = js_eq a b
+
+instance PToJSRef TouchEvent where
+  pToJSRef = unTouchEvent
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef TouchEvent where
+  pFromJSRef = TouchEvent
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef TouchEvent where
+  toJSRef = return . unTouchEvent
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef TouchEvent where
+  fromJSRef = return . fmap TouchEvent . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsUIEvent TouchEvent
+instance IsEvent TouchEvent
+instance IsGObject TouchEvent where
+  toGObject = GObject . unTouchEvent
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = TouchEvent . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToTouchEvent :: IsGObject obj => obj -> TouchEvent
+castToTouchEvent = castTo gTypeTouchEvent "TouchEvent"
+
+foreign import javascript unsafe "window[\"TouchEvent\"]" gTypeTouchEvent :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.TouchList".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/TouchList Mozilla TouchList documentation>
+newtype TouchList = TouchList { unTouchList :: JSRef }
+
+instance Eq (TouchList) where
+  (TouchList a) == (TouchList b) = js_eq a b
+
+instance PToJSRef TouchList where
+  pToJSRef = unTouchList
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef TouchList where
+  pFromJSRef = TouchList
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef TouchList where
+  toJSRef = return . unTouchList
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef TouchList where
+  fromJSRef = return . fmap TouchList . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject TouchList where
+  toGObject = GObject . unTouchList
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = TouchList . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToTouchList :: IsGObject obj => obj -> TouchList
+castToTouchList = castTo gTypeTouchList "TouchList"
+
+foreign import javascript unsafe "window[\"TouchList\"]" gTypeTouchList :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.TrackEvent".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.Event"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/TrackEvent Mozilla TrackEvent documentation>
+newtype TrackEvent = TrackEvent { unTrackEvent :: JSRef }
+
+instance Eq (TrackEvent) where
+  (TrackEvent a) == (TrackEvent b) = js_eq a b
+
+instance PToJSRef TrackEvent where
+  pToJSRef = unTrackEvent
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef TrackEvent where
+  pFromJSRef = TrackEvent
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef TrackEvent where
+  toJSRef = return . unTrackEvent
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef TrackEvent where
+  fromJSRef = return . fmap TrackEvent . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEvent TrackEvent
+instance IsGObject TrackEvent where
+  toGObject = GObject . unTrackEvent
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = TrackEvent . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToTrackEvent :: IsGObject obj => obj -> TrackEvent
+castToTrackEvent = castTo gTypeTrackEvent "TrackEvent"
+
+foreign import javascript unsafe "window[\"TrackEvent\"]" gTypeTrackEvent :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.TransitionEvent".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.Event"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/TransitionEvent Mozilla TransitionEvent documentation>
+newtype TransitionEvent = TransitionEvent { unTransitionEvent :: JSRef }
+
+instance Eq (TransitionEvent) where
+  (TransitionEvent a) == (TransitionEvent b) = js_eq a b
+
+instance PToJSRef TransitionEvent where
+  pToJSRef = unTransitionEvent
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef TransitionEvent where
+  pFromJSRef = TransitionEvent
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef TransitionEvent where
+  toJSRef = return . unTransitionEvent
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef TransitionEvent where
+  fromJSRef = return . fmap TransitionEvent . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEvent TransitionEvent
+instance IsGObject TransitionEvent where
+  toGObject = GObject . unTransitionEvent
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = TransitionEvent . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToTransitionEvent :: IsGObject obj => obj -> TransitionEvent
+castToTransitionEvent = castTo gTypeTransitionEvent "TransitionEvent"
+
+foreign import javascript unsafe "window[\"TransitionEvent\"]" gTypeTransitionEvent :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.TreeWalker".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker Mozilla TreeWalker documentation>
+newtype TreeWalker = TreeWalker { unTreeWalker :: JSRef }
+
+instance Eq (TreeWalker) where
+  (TreeWalker a) == (TreeWalker b) = js_eq a b
+
+instance PToJSRef TreeWalker where
+  pToJSRef = unTreeWalker
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef TreeWalker where
+  pFromJSRef = TreeWalker
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef TreeWalker where
+  toJSRef = return . unTreeWalker
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef TreeWalker where
+  fromJSRef = return . fmap TreeWalker . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject TreeWalker where
+  toGObject = GObject . unTreeWalker
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = TreeWalker . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToTreeWalker :: IsGObject obj => obj -> TreeWalker
+castToTreeWalker = castTo gTypeTreeWalker "TreeWalker"
+
+foreign import javascript unsafe "window[\"TreeWalker\"]" gTypeTreeWalker :: GType
+#else
+type IsTreeWalker o = TreeWalkerClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.TypeConversions".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/TypeConversions Mozilla TypeConversions documentation>
+newtype TypeConversions = TypeConversions { unTypeConversions :: JSRef }
+
+instance Eq (TypeConversions) where
+  (TypeConversions a) == (TypeConversions b) = js_eq a b
+
+instance PToJSRef TypeConversions where
+  pToJSRef = unTypeConversions
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef TypeConversions where
+  pFromJSRef = TypeConversions
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef TypeConversions where
+  toJSRef = return . unTypeConversions
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef TypeConversions where
+  fromJSRef = return . fmap TypeConversions . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject TypeConversions where
+  toGObject = GObject . unTypeConversions
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = TypeConversions . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToTypeConversions :: IsGObject obj => obj -> TypeConversions
+castToTypeConversions = castTo gTypeTypeConversions "TypeConversions"
+
+foreign import javascript unsafe "window[\"TypeConversions\"]" gTypeTypeConversions :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.UIEvent".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.Event"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/UIEvent Mozilla UIEvent documentation>
+newtype UIEvent = UIEvent { unUIEvent :: JSRef }
+
+instance Eq (UIEvent) where
+  (UIEvent a) == (UIEvent b) = js_eq a b
+
+instance PToJSRef UIEvent where
+  pToJSRef = unUIEvent
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef UIEvent where
+  pFromJSRef = UIEvent
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef UIEvent where
+  toJSRef = return . unUIEvent
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef UIEvent where
+  fromJSRef = return . fmap UIEvent . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsEvent o => IsUIEvent o
+toUIEvent :: IsUIEvent o => o -> UIEvent
+toUIEvent = unsafeCastGObject . toGObject
+
+instance IsUIEvent UIEvent
+instance IsEvent UIEvent
+instance IsGObject UIEvent where
+  toGObject = GObject . unUIEvent
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = UIEvent . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToUIEvent :: IsGObject obj => obj -> UIEvent
+castToUIEvent = castTo gTypeUIEvent "UIEvent"
+
+foreign import javascript unsafe "window[\"UIEvent\"]" gTypeUIEvent :: GType
+#else
+type IsUIEvent o = UIEventClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.UIRequestEvent".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.UIEvent"
+--     * "GHCJS.DOM.Event"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/UIRequestEvent Mozilla UIRequestEvent documentation>
+newtype UIRequestEvent = UIRequestEvent { unUIRequestEvent :: JSRef }
+
+instance Eq (UIRequestEvent) where
+  (UIRequestEvent a) == (UIRequestEvent b) = js_eq a b
+
+instance PToJSRef UIRequestEvent where
+  pToJSRef = unUIRequestEvent
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef UIRequestEvent where
+  pFromJSRef = UIRequestEvent
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef UIRequestEvent where
+  toJSRef = return . unUIRequestEvent
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef UIRequestEvent where
+  fromJSRef = return . fmap UIRequestEvent . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsUIEvent UIRequestEvent
+instance IsEvent UIRequestEvent
+instance IsGObject UIRequestEvent where
+  toGObject = GObject . unUIRequestEvent
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = UIRequestEvent . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToUIRequestEvent :: IsGObject obj => obj -> UIRequestEvent
+castToUIRequestEvent = castTo gTypeUIRequestEvent "UIRequestEvent"
+
+foreign import javascript unsafe "window[\"UIRequestEvent\"]" gTypeUIRequestEvent :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.URL".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/URL Mozilla URL documentation>
+newtype URL = URL { unURL :: JSRef }
+
+instance Eq (URL) where
+  (URL a) == (URL b) = js_eq a b
+
+instance PToJSRef URL where
+  pToJSRef = unURL
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef URL where
+  pFromJSRef = URL
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef URL where
+  toJSRef = return . unURL
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef URL where
+  fromJSRef = return . fmap URL . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject URL where
+  toGObject = GObject . unURL
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = URL . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToURL :: IsGObject obj => obj -> URL
+castToURL = castTo gTypeURL "URL"
+
+foreign import javascript unsafe "window[\"URL\"]" gTypeURL :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.URLUtils".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/URLUtils Mozilla URLUtils documentation>
+newtype URLUtils = URLUtils { unURLUtils :: JSRef }
+
+instance Eq (URLUtils) where
+  (URLUtils a) == (URLUtils b) = js_eq a b
+
+instance PToJSRef URLUtils where
+  pToJSRef = unURLUtils
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef URLUtils where
+  pFromJSRef = URLUtils
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef URLUtils where
+  toJSRef = return . unURLUtils
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef URLUtils where
+  fromJSRef = return . fmap URLUtils . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject URLUtils where
+  toGObject = GObject . unURLUtils
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = URLUtils . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToURLUtils :: IsGObject obj => obj -> URLUtils
+castToURLUtils = castTo gTypeURLUtils "URLUtils"
+
+foreign import javascript unsafe "window[\"URLUtils\"]" gTypeURLUtils :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.UserMessageHandler".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/UserMessageHandler Mozilla UserMessageHandler documentation>
+newtype UserMessageHandler = UserMessageHandler { unUserMessageHandler :: JSRef }
+
+instance Eq (UserMessageHandler) where
+  (UserMessageHandler a) == (UserMessageHandler b) = js_eq a b
+
+instance PToJSRef UserMessageHandler where
+  pToJSRef = unUserMessageHandler
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef UserMessageHandler where
+  pFromJSRef = UserMessageHandler
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef UserMessageHandler where
+  toJSRef = return . unUserMessageHandler
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef UserMessageHandler where
+  fromJSRef = return . fmap UserMessageHandler . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject UserMessageHandler where
+  toGObject = GObject . unUserMessageHandler
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = UserMessageHandler . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToUserMessageHandler :: IsGObject obj => obj -> UserMessageHandler
+castToUserMessageHandler = castTo gTypeUserMessageHandler "UserMessageHandler"
+
+foreign import javascript unsafe "window[\"UserMessageHandler\"]" gTypeUserMessageHandler :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.UserMessageHandlersNamespace".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/UserMessageHandlersNamespace Mozilla UserMessageHandlersNamespace documentation>
+newtype UserMessageHandlersNamespace = UserMessageHandlersNamespace { unUserMessageHandlersNamespace :: JSRef }
+
+instance Eq (UserMessageHandlersNamespace) where
+  (UserMessageHandlersNamespace a) == (UserMessageHandlersNamespace b) = js_eq a b
+
+instance PToJSRef UserMessageHandlersNamespace where
+  pToJSRef = unUserMessageHandlersNamespace
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef UserMessageHandlersNamespace where
+  pFromJSRef = UserMessageHandlersNamespace
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef UserMessageHandlersNamespace where
+  toJSRef = return . unUserMessageHandlersNamespace
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef UserMessageHandlersNamespace where
+  fromJSRef = return . fmap UserMessageHandlersNamespace . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject UserMessageHandlersNamespace where
+  toGObject = GObject . unUserMessageHandlersNamespace
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = UserMessageHandlersNamespace . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToUserMessageHandlersNamespace :: IsGObject obj => obj -> UserMessageHandlersNamespace
+castToUserMessageHandlersNamespace = castTo gTypeUserMessageHandlersNamespace "UserMessageHandlersNamespace"
+
+foreign import javascript unsafe "window[\"UserMessageHandlersNamespace\"]" gTypeUserMessageHandlersNamespace :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.VTTCue".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.TextTrackCue"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/VTTCue Mozilla VTTCue documentation>
+newtype VTTCue = VTTCue { unVTTCue :: JSRef }
+
+instance Eq (VTTCue) where
+  (VTTCue a) == (VTTCue b) = js_eq a b
+
+instance PToJSRef VTTCue where
+  pToJSRef = unVTTCue
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef VTTCue where
+  pFromJSRef = VTTCue
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef VTTCue where
+  toJSRef = return . unVTTCue
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef VTTCue where
+  fromJSRef = return . fmap VTTCue . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsTextTrackCue VTTCue
+instance IsEventTarget VTTCue
+instance IsGObject VTTCue where
+  toGObject = GObject . unVTTCue
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = VTTCue . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToVTTCue :: IsGObject obj => obj -> VTTCue
+castToVTTCue = castTo gTypeVTTCue "VTTCue"
+
+foreign import javascript unsafe "window[\"VTTCue\"]" gTypeVTTCue :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.VTTRegion".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/VTTRegion Mozilla VTTRegion documentation>
+newtype VTTRegion = VTTRegion { unVTTRegion :: JSRef }
+
+instance Eq (VTTRegion) where
+  (VTTRegion a) == (VTTRegion b) = js_eq a b
+
+instance PToJSRef VTTRegion where
+  pToJSRef = unVTTRegion
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef VTTRegion where
+  pFromJSRef = VTTRegion
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef VTTRegion where
+  toJSRef = return . unVTTRegion
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef VTTRegion where
+  fromJSRef = return . fmap VTTRegion . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject VTTRegion where
+  toGObject = GObject . unVTTRegion
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = VTTRegion . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToVTTRegion :: IsGObject obj => obj -> VTTRegion
+castToVTTRegion = castTo gTypeVTTRegion "VTTRegion"
+
+foreign import javascript unsafe "window[\"VTTRegion\"]" gTypeVTTRegion :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.VTTRegionList".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/VTTRegionList Mozilla VTTRegionList documentation>
+newtype VTTRegionList = VTTRegionList { unVTTRegionList :: JSRef }
+
+instance Eq (VTTRegionList) where
+  (VTTRegionList a) == (VTTRegionList b) = js_eq a b
+
+instance PToJSRef VTTRegionList where
+  pToJSRef = unVTTRegionList
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef VTTRegionList where
+  pFromJSRef = VTTRegionList
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef VTTRegionList where
+  toJSRef = return . unVTTRegionList
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef VTTRegionList where
+  fromJSRef = return . fmap VTTRegionList . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject VTTRegionList where
+  toGObject = GObject . unVTTRegionList
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = VTTRegionList . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToVTTRegionList :: IsGObject obj => obj -> VTTRegionList
+castToVTTRegionList = castTo gTypeVTTRegionList "VTTRegionList"
+
+foreign import javascript unsafe "window[\"VTTRegionList\"]" gTypeVTTRegionList :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.ValidityState".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/ValidityState Mozilla ValidityState documentation>
+newtype ValidityState = ValidityState { unValidityState :: JSRef }
+
+instance Eq (ValidityState) where
+  (ValidityState a) == (ValidityState b) = js_eq a b
+
+instance PToJSRef ValidityState where
+  pToJSRef = unValidityState
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef ValidityState where
+  pFromJSRef = ValidityState
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef ValidityState where
+  toJSRef = return . unValidityState
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef ValidityState where
+  fromJSRef = return . fmap ValidityState . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject ValidityState where
+  toGObject = GObject . unValidityState
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = ValidityState . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToValidityState :: IsGObject obj => obj -> ValidityState
+castToValidityState = castTo gTypeValidityState "ValidityState"
+
+foreign import javascript unsafe "window[\"ValidityState\"]" gTypeValidityState :: GType
+#else
+type IsValidityState o = ValidityStateClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.VideoPlaybackQuality".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/VideoPlaybackQuality Mozilla VideoPlaybackQuality documentation>
+newtype VideoPlaybackQuality = VideoPlaybackQuality { unVideoPlaybackQuality :: JSRef }
+
+instance Eq (VideoPlaybackQuality) where
+  (VideoPlaybackQuality a) == (VideoPlaybackQuality b) = js_eq a b
+
+instance PToJSRef VideoPlaybackQuality where
+  pToJSRef = unVideoPlaybackQuality
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef VideoPlaybackQuality where
+  pFromJSRef = VideoPlaybackQuality
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef VideoPlaybackQuality where
+  toJSRef = return . unVideoPlaybackQuality
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef VideoPlaybackQuality where
+  fromJSRef = return . fmap VideoPlaybackQuality . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject VideoPlaybackQuality where
+  toGObject = GObject . unVideoPlaybackQuality
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = VideoPlaybackQuality . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToVideoPlaybackQuality :: IsGObject obj => obj -> VideoPlaybackQuality
+castToVideoPlaybackQuality = castTo gTypeVideoPlaybackQuality "VideoPlaybackQuality"
+
+foreign import javascript unsafe "window[\"VideoPlaybackQuality\"]" gTypeVideoPlaybackQuality :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.VideoStreamTrack".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.MediaStreamTrack"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/VideoStreamTrack Mozilla VideoStreamTrack documentation>
+newtype VideoStreamTrack = VideoStreamTrack { unVideoStreamTrack :: JSRef }
+
+instance Eq (VideoStreamTrack) where
+  (VideoStreamTrack a) == (VideoStreamTrack b) = js_eq a b
+
+instance PToJSRef VideoStreamTrack where
+  pToJSRef = unVideoStreamTrack
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef VideoStreamTrack where
+  pFromJSRef = VideoStreamTrack
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef VideoStreamTrack where
+  toJSRef = return . unVideoStreamTrack
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef VideoStreamTrack where
+  fromJSRef = return . fmap VideoStreamTrack . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsMediaStreamTrack VideoStreamTrack
+instance IsEventTarget VideoStreamTrack
+instance IsGObject VideoStreamTrack where
+  toGObject = GObject . unVideoStreamTrack
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = VideoStreamTrack . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToVideoStreamTrack :: IsGObject obj => obj -> VideoStreamTrack
+castToVideoStreamTrack = castTo gTypeVideoStreamTrack "VideoStreamTrack"
+
+foreign import javascript unsafe "window[\"VideoStreamTrack\"]" gTypeVideoStreamTrack :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.VideoTrack".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/VideoTrack Mozilla VideoTrack documentation>
+newtype VideoTrack = VideoTrack { unVideoTrack :: JSRef }
+
+instance Eq (VideoTrack) where
+  (VideoTrack a) == (VideoTrack b) = js_eq a b
+
+instance PToJSRef VideoTrack where
+  pToJSRef = unVideoTrack
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef VideoTrack where
+  pFromJSRef = VideoTrack
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef VideoTrack where
+  toJSRef = return . unVideoTrack
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef VideoTrack where
+  fromJSRef = return . fmap VideoTrack . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject VideoTrack where
+  toGObject = GObject . unVideoTrack
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = VideoTrack . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToVideoTrack :: IsGObject obj => obj -> VideoTrack
+castToVideoTrack = castTo gTypeVideoTrack "VideoTrack"
+
+foreign import javascript unsafe "window[\"VideoTrack\"]" gTypeVideoTrack :: GType
+#else
+#ifndef USE_OLD_WEBKIT
+type IsVideoTrack o = VideoTrackClass o
+#endif
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.VideoTrackList".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/VideoTrackList Mozilla VideoTrackList documentation>
+newtype VideoTrackList = VideoTrackList { unVideoTrackList :: JSRef }
+
+instance Eq (VideoTrackList) where
+  (VideoTrackList a) == (VideoTrackList b) = js_eq a b
+
+instance PToJSRef VideoTrackList where
+  pToJSRef = unVideoTrackList
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef VideoTrackList where
+  pFromJSRef = VideoTrackList
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef VideoTrackList where
+  toJSRef = return . unVideoTrackList
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef VideoTrackList where
+  fromJSRef = return . fmap VideoTrackList . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEventTarget VideoTrackList
+instance IsGObject VideoTrackList where
+  toGObject = GObject . unVideoTrackList
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = VideoTrackList . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToVideoTrackList :: IsGObject obj => obj -> VideoTrackList
+castToVideoTrackList = castTo gTypeVideoTrackList "VideoTrackList"
+
+foreign import javascript unsafe "window[\"VideoTrackList\"]" gTypeVideoTrackList :: GType
+#else
+#ifndef USE_OLD_WEBKIT
+type IsVideoTrackList o = VideoTrackListClass o
+#endif
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.WaveShaperNode".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.AudioNode"
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/WaveShaperNode Mozilla WaveShaperNode documentation>
+newtype WaveShaperNode = WaveShaperNode { unWaveShaperNode :: JSRef }
+
+instance Eq (WaveShaperNode) where
+  (WaveShaperNode a) == (WaveShaperNode b) = js_eq a b
+
+instance PToJSRef WaveShaperNode where
+  pToJSRef = unWaveShaperNode
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef WaveShaperNode where
+  pFromJSRef = WaveShaperNode
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef WaveShaperNode where
+  toJSRef = return . unWaveShaperNode
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef WaveShaperNode where
+  fromJSRef = return . fmap WaveShaperNode . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsAudioNode WaveShaperNode
+instance IsEventTarget WaveShaperNode
+instance IsGObject WaveShaperNode where
+  toGObject = GObject . unWaveShaperNode
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = WaveShaperNode . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToWaveShaperNode :: IsGObject obj => obj -> WaveShaperNode
+castToWaveShaperNode = castTo gTypeWaveShaperNode "WaveShaperNode"
+
+foreign import javascript unsafe "window[\"WaveShaperNode\"]" gTypeWaveShaperNode :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.WebGL2RenderingContext".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.WebGLRenderingContextBase"
+--     * "GHCJS.DOM.CanvasRenderingContext"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext Mozilla WebGL2RenderingContext documentation>
+newtype WebGL2RenderingContext = WebGL2RenderingContext { unWebGL2RenderingContext :: JSRef }
+
+instance Eq (WebGL2RenderingContext) where
+  (WebGL2RenderingContext a) == (WebGL2RenderingContext b) = js_eq a b
+
+instance PToJSRef WebGL2RenderingContext where
+  pToJSRef = unWebGL2RenderingContext
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef WebGL2RenderingContext where
+  pFromJSRef = WebGL2RenderingContext
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef WebGL2RenderingContext where
+  toJSRef = return . unWebGL2RenderingContext
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef WebGL2RenderingContext where
+  fromJSRef = return . fmap WebGL2RenderingContext . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsWebGLRenderingContextBase WebGL2RenderingContext
+instance IsCanvasRenderingContext WebGL2RenderingContext
+instance IsGObject WebGL2RenderingContext where
+  toGObject = GObject . unWebGL2RenderingContext
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = WebGL2RenderingContext . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToWebGL2RenderingContext :: IsGObject obj => obj -> WebGL2RenderingContext
+castToWebGL2RenderingContext = castTo gTypeWebGL2RenderingContext "WebGL2RenderingContext"
+
+foreign import javascript unsafe "window[\"WebGL2RenderingContext\"]" gTypeWebGL2RenderingContext :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.WebGLActiveInfo".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/WebGLActiveInfo Mozilla WebGLActiveInfo documentation>
+newtype WebGLActiveInfo = WebGLActiveInfo { unWebGLActiveInfo :: JSRef }
+
+instance Eq (WebGLActiveInfo) where
+  (WebGLActiveInfo a) == (WebGLActiveInfo b) = js_eq a b
+
+instance PToJSRef WebGLActiveInfo where
+  pToJSRef = unWebGLActiveInfo
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef WebGLActiveInfo where
+  pFromJSRef = WebGLActiveInfo
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef WebGLActiveInfo where
+  toJSRef = return . unWebGLActiveInfo
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef WebGLActiveInfo where
+  fromJSRef = return . fmap WebGLActiveInfo . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject WebGLActiveInfo where
+  toGObject = GObject . unWebGLActiveInfo
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = WebGLActiveInfo . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToWebGLActiveInfo :: IsGObject obj => obj -> WebGLActiveInfo
+castToWebGLActiveInfo = castTo gTypeWebGLActiveInfo "WebGLActiveInfo"
+
+foreign import javascript unsafe "window[\"WebGLActiveInfo\"]" gTypeWebGLActiveInfo :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.WebGLBuffer".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/WebGLBuffer Mozilla WebGLBuffer documentation>
+newtype WebGLBuffer = WebGLBuffer { unWebGLBuffer :: JSRef }
+
+instance Eq (WebGLBuffer) where
+  (WebGLBuffer a) == (WebGLBuffer b) = js_eq a b
+
+instance PToJSRef WebGLBuffer where
+  pToJSRef = unWebGLBuffer
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef WebGLBuffer where
+  pFromJSRef = WebGLBuffer
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef WebGLBuffer where
+  toJSRef = return . unWebGLBuffer
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef WebGLBuffer where
+  fromJSRef = return . fmap WebGLBuffer . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject WebGLBuffer where
+  toGObject = GObject . unWebGLBuffer
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = WebGLBuffer . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToWebGLBuffer :: IsGObject obj => obj -> WebGLBuffer
+castToWebGLBuffer = castTo gTypeWebGLBuffer "WebGLBuffer"
+
+foreign import javascript unsafe "window[\"WebGLBuffer\"]" gTypeWebGLBuffer :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.WebGLCompressedTextureATC".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/WebGLCompressedTextureATC Mozilla WebGLCompressedTextureATC documentation>
+newtype WebGLCompressedTextureATC = WebGLCompressedTextureATC { unWebGLCompressedTextureATC :: JSRef }
+
+instance Eq (WebGLCompressedTextureATC) where
+  (WebGLCompressedTextureATC a) == (WebGLCompressedTextureATC b) = js_eq a b
+
+instance PToJSRef WebGLCompressedTextureATC where
+  pToJSRef = unWebGLCompressedTextureATC
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef WebGLCompressedTextureATC where
+  pFromJSRef = WebGLCompressedTextureATC
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef WebGLCompressedTextureATC where
+  toJSRef = return . unWebGLCompressedTextureATC
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef WebGLCompressedTextureATC where
+  fromJSRef = return . fmap WebGLCompressedTextureATC . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject WebGLCompressedTextureATC where
+  toGObject = GObject . unWebGLCompressedTextureATC
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = WebGLCompressedTextureATC . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToWebGLCompressedTextureATC :: IsGObject obj => obj -> WebGLCompressedTextureATC
+castToWebGLCompressedTextureATC = castTo gTypeWebGLCompressedTextureATC "WebGLCompressedTextureATC"
+
+foreign import javascript unsafe "window[\"WebGLCompressedTextureATC\"]" gTypeWebGLCompressedTextureATC :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.WebGLCompressedTexturePVRTC".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/WebGLCompressedTexturePVRTC Mozilla WebGLCompressedTexturePVRTC documentation>
+newtype WebGLCompressedTexturePVRTC = WebGLCompressedTexturePVRTC { unWebGLCompressedTexturePVRTC :: JSRef }
+
+instance Eq (WebGLCompressedTexturePVRTC) where
+  (WebGLCompressedTexturePVRTC a) == (WebGLCompressedTexturePVRTC b) = js_eq a b
+
+instance PToJSRef WebGLCompressedTexturePVRTC where
+  pToJSRef = unWebGLCompressedTexturePVRTC
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef WebGLCompressedTexturePVRTC where
+  pFromJSRef = WebGLCompressedTexturePVRTC
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef WebGLCompressedTexturePVRTC where
+  toJSRef = return . unWebGLCompressedTexturePVRTC
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef WebGLCompressedTexturePVRTC where
+  fromJSRef = return . fmap WebGLCompressedTexturePVRTC . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject WebGLCompressedTexturePVRTC where
+  toGObject = GObject . unWebGLCompressedTexturePVRTC
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = WebGLCompressedTexturePVRTC . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToWebGLCompressedTexturePVRTC :: IsGObject obj => obj -> WebGLCompressedTexturePVRTC
+castToWebGLCompressedTexturePVRTC = castTo gTypeWebGLCompressedTexturePVRTC "WebGLCompressedTexturePVRTC"
+
+foreign import javascript unsafe "window[\"WebGLCompressedTexturePVRTC\"]" gTypeWebGLCompressedTexturePVRTC :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.WebGLCompressedTextureS3TC".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/WebGLCompressedTextureS3TC Mozilla WebGLCompressedTextureS3TC documentation>
+newtype WebGLCompressedTextureS3TC = WebGLCompressedTextureS3TC { unWebGLCompressedTextureS3TC :: JSRef }
+
+instance Eq (WebGLCompressedTextureS3TC) where
+  (WebGLCompressedTextureS3TC a) == (WebGLCompressedTextureS3TC b) = js_eq a b
+
+instance PToJSRef WebGLCompressedTextureS3TC where
+  pToJSRef = unWebGLCompressedTextureS3TC
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef WebGLCompressedTextureS3TC where
+  pFromJSRef = WebGLCompressedTextureS3TC
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef WebGLCompressedTextureS3TC where
+  toJSRef = return . unWebGLCompressedTextureS3TC
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef WebGLCompressedTextureS3TC where
+  fromJSRef = return . fmap WebGLCompressedTextureS3TC . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject WebGLCompressedTextureS3TC where
+  toGObject = GObject . unWebGLCompressedTextureS3TC
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = WebGLCompressedTextureS3TC . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToWebGLCompressedTextureS3TC :: IsGObject obj => obj -> WebGLCompressedTextureS3TC
+castToWebGLCompressedTextureS3TC = castTo gTypeWebGLCompressedTextureS3TC "WebGLCompressedTextureS3TC"
+
+foreign import javascript unsafe "window[\"WebGLCompressedTextureS3TC\"]" gTypeWebGLCompressedTextureS3TC :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.WebGLContextAttributes".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/WebGLContextAttributes Mozilla WebGLContextAttributes documentation>
+newtype WebGLContextAttributes = WebGLContextAttributes { unWebGLContextAttributes :: JSRef }
+
+instance Eq (WebGLContextAttributes) where
+  (WebGLContextAttributes a) == (WebGLContextAttributes b) = js_eq a b
+
+instance PToJSRef WebGLContextAttributes where
+  pToJSRef = unWebGLContextAttributes
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef WebGLContextAttributes where
+  pFromJSRef = WebGLContextAttributes
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef WebGLContextAttributes where
+  toJSRef = return . unWebGLContextAttributes
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef WebGLContextAttributes where
+  fromJSRef = return . fmap WebGLContextAttributes . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject WebGLContextAttributes where
+  toGObject = GObject . unWebGLContextAttributes
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = WebGLContextAttributes . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToWebGLContextAttributes :: IsGObject obj => obj -> WebGLContextAttributes
+castToWebGLContextAttributes = castTo gTypeWebGLContextAttributes "WebGLContextAttributes"
+
+foreign import javascript unsafe "window[\"WebGLContextAttributes\"]" gTypeWebGLContextAttributes :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.WebGLContextEvent".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.Event"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/WebGLContextEvent Mozilla WebGLContextEvent documentation>
+newtype WebGLContextEvent = WebGLContextEvent { unWebGLContextEvent :: JSRef }
+
+instance Eq (WebGLContextEvent) where
+  (WebGLContextEvent a) == (WebGLContextEvent b) = js_eq a b
+
+instance PToJSRef WebGLContextEvent where
+  pToJSRef = unWebGLContextEvent
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef WebGLContextEvent where
+  pFromJSRef = WebGLContextEvent
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef WebGLContextEvent where
+  toJSRef = return . unWebGLContextEvent
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef WebGLContextEvent where
+  fromJSRef = return . fmap WebGLContextEvent . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEvent WebGLContextEvent
+instance IsGObject WebGLContextEvent where
+  toGObject = GObject . unWebGLContextEvent
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = WebGLContextEvent . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToWebGLContextEvent :: IsGObject obj => obj -> WebGLContextEvent
+castToWebGLContextEvent = castTo gTypeWebGLContextEvent "WebGLContextEvent"
+
+foreign import javascript unsafe "window[\"WebGLContextEvent\"]" gTypeWebGLContextEvent :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.WebGLDebugRendererInfo".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/WebGLDebugRendererInfo Mozilla WebGLDebugRendererInfo documentation>
+newtype WebGLDebugRendererInfo = WebGLDebugRendererInfo { unWebGLDebugRendererInfo :: JSRef }
+
+instance Eq (WebGLDebugRendererInfo) where
+  (WebGLDebugRendererInfo a) == (WebGLDebugRendererInfo b) = js_eq a b
+
+instance PToJSRef WebGLDebugRendererInfo where
+  pToJSRef = unWebGLDebugRendererInfo
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef WebGLDebugRendererInfo where
+  pFromJSRef = WebGLDebugRendererInfo
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef WebGLDebugRendererInfo where
+  toJSRef = return . unWebGLDebugRendererInfo
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef WebGLDebugRendererInfo where
+  fromJSRef = return . fmap WebGLDebugRendererInfo . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject WebGLDebugRendererInfo where
+  toGObject = GObject . unWebGLDebugRendererInfo
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = WebGLDebugRendererInfo . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToWebGLDebugRendererInfo :: IsGObject obj => obj -> WebGLDebugRendererInfo
+castToWebGLDebugRendererInfo = castTo gTypeWebGLDebugRendererInfo "WebGLDebugRendererInfo"
+
+foreign import javascript unsafe "window[\"WebGLDebugRendererInfo\"]" gTypeWebGLDebugRendererInfo :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.WebGLDebugShaders".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/WebGLDebugShaders Mozilla WebGLDebugShaders documentation>
+newtype WebGLDebugShaders = WebGLDebugShaders { unWebGLDebugShaders :: JSRef }
+
+instance Eq (WebGLDebugShaders) where
+  (WebGLDebugShaders a) == (WebGLDebugShaders b) = js_eq a b
+
+instance PToJSRef WebGLDebugShaders where
+  pToJSRef = unWebGLDebugShaders
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef WebGLDebugShaders where
+  pFromJSRef = WebGLDebugShaders
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef WebGLDebugShaders where
+  toJSRef = return . unWebGLDebugShaders
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef WebGLDebugShaders where
+  fromJSRef = return . fmap WebGLDebugShaders . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject WebGLDebugShaders where
+  toGObject = GObject . unWebGLDebugShaders
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = WebGLDebugShaders . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToWebGLDebugShaders :: IsGObject obj => obj -> WebGLDebugShaders
+castToWebGLDebugShaders = castTo gTypeWebGLDebugShaders "WebGLDebugShaders"
+
+foreign import javascript unsafe "window[\"WebGLDebugShaders\"]" gTypeWebGLDebugShaders :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.WebGLDepthTexture".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/WebGLDepthTexture Mozilla WebGLDepthTexture documentation>
+newtype WebGLDepthTexture = WebGLDepthTexture { unWebGLDepthTexture :: JSRef }
+
+instance Eq (WebGLDepthTexture) where
+  (WebGLDepthTexture a) == (WebGLDepthTexture b) = js_eq a b
+
+instance PToJSRef WebGLDepthTexture where
+  pToJSRef = unWebGLDepthTexture
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef WebGLDepthTexture where
+  pFromJSRef = WebGLDepthTexture
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef WebGLDepthTexture where
+  toJSRef = return . unWebGLDepthTexture
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef WebGLDepthTexture where
+  fromJSRef = return . fmap WebGLDepthTexture . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject WebGLDepthTexture where
+  toGObject = GObject . unWebGLDepthTexture
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = WebGLDepthTexture . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToWebGLDepthTexture :: IsGObject obj => obj -> WebGLDepthTexture
+castToWebGLDepthTexture = castTo gTypeWebGLDepthTexture "WebGLDepthTexture"
+
+foreign import javascript unsafe "window[\"WebGLDepthTexture\"]" gTypeWebGLDepthTexture :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.WebGLDrawBuffers".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/WebGLDrawBuffers Mozilla WebGLDrawBuffers documentation>
+newtype WebGLDrawBuffers = WebGLDrawBuffers { unWebGLDrawBuffers :: JSRef }
+
+instance Eq (WebGLDrawBuffers) where
+  (WebGLDrawBuffers a) == (WebGLDrawBuffers b) = js_eq a b
+
+instance PToJSRef WebGLDrawBuffers where
+  pToJSRef = unWebGLDrawBuffers
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef WebGLDrawBuffers where
+  pFromJSRef = WebGLDrawBuffers
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef WebGLDrawBuffers where
+  toJSRef = return . unWebGLDrawBuffers
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef WebGLDrawBuffers where
+  fromJSRef = return . fmap WebGLDrawBuffers . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject WebGLDrawBuffers where
+  toGObject = GObject . unWebGLDrawBuffers
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = WebGLDrawBuffers . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToWebGLDrawBuffers :: IsGObject obj => obj -> WebGLDrawBuffers
+castToWebGLDrawBuffers = castTo gTypeWebGLDrawBuffers "WebGLDrawBuffers"
+
+foreign import javascript unsafe "window[\"WebGLDrawBuffers\"]" gTypeWebGLDrawBuffers :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.WebGLFramebuffer".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/WebGLFramebuffer Mozilla WebGLFramebuffer documentation>
+newtype WebGLFramebuffer = WebGLFramebuffer { unWebGLFramebuffer :: JSRef }
+
+instance Eq (WebGLFramebuffer) where
+  (WebGLFramebuffer a) == (WebGLFramebuffer b) = js_eq a b
+
+instance PToJSRef WebGLFramebuffer where
+  pToJSRef = unWebGLFramebuffer
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef WebGLFramebuffer where
+  pFromJSRef = WebGLFramebuffer
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef WebGLFramebuffer where
+  toJSRef = return . unWebGLFramebuffer
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef WebGLFramebuffer where
+  fromJSRef = return . fmap WebGLFramebuffer . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject WebGLFramebuffer where
+  toGObject = GObject . unWebGLFramebuffer
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = WebGLFramebuffer . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToWebGLFramebuffer :: IsGObject obj => obj -> WebGLFramebuffer
+castToWebGLFramebuffer = castTo gTypeWebGLFramebuffer "WebGLFramebuffer"
+
+foreign import javascript unsafe "window[\"WebGLFramebuffer\"]" gTypeWebGLFramebuffer :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.WebGLLoseContext".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/WebGLLoseContext Mozilla WebGLLoseContext documentation>
+newtype WebGLLoseContext = WebGLLoseContext { unWebGLLoseContext :: JSRef }
+
+instance Eq (WebGLLoseContext) where
+  (WebGLLoseContext a) == (WebGLLoseContext b) = js_eq a b
+
+instance PToJSRef WebGLLoseContext where
+  pToJSRef = unWebGLLoseContext
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef WebGLLoseContext where
+  pFromJSRef = WebGLLoseContext
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef WebGLLoseContext where
+  toJSRef = return . unWebGLLoseContext
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef WebGLLoseContext where
+  fromJSRef = return . fmap WebGLLoseContext . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject WebGLLoseContext where
+  toGObject = GObject . unWebGLLoseContext
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = WebGLLoseContext . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToWebGLLoseContext :: IsGObject obj => obj -> WebGLLoseContext
+castToWebGLLoseContext = castTo gTypeWebGLLoseContext "WebGLLoseContext"
+
+foreign import javascript unsafe "window[\"WebGLLoseContext\"]" gTypeWebGLLoseContext :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.WebGLProgram".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/WebGLProgram Mozilla WebGLProgram documentation>
+newtype WebGLProgram = WebGLProgram { unWebGLProgram :: JSRef }
+
+instance Eq (WebGLProgram) where
+  (WebGLProgram a) == (WebGLProgram b) = js_eq a b
+
+instance PToJSRef WebGLProgram where
+  pToJSRef = unWebGLProgram
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef WebGLProgram where
+  pFromJSRef = WebGLProgram
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef WebGLProgram where
+  toJSRef = return . unWebGLProgram
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef WebGLProgram where
+  fromJSRef = return . fmap WebGLProgram . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject WebGLProgram where
+  toGObject = GObject . unWebGLProgram
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = WebGLProgram . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToWebGLProgram :: IsGObject obj => obj -> WebGLProgram
+castToWebGLProgram = castTo gTypeWebGLProgram "WebGLProgram"
+
+foreign import javascript unsafe "window[\"WebGLProgram\"]" gTypeWebGLProgram :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.WebGLQuery".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/WebGLQuery Mozilla WebGLQuery documentation>
+newtype WebGLQuery = WebGLQuery { unWebGLQuery :: JSRef }
+
+instance Eq (WebGLQuery) where
+  (WebGLQuery a) == (WebGLQuery b) = js_eq a b
+
+instance PToJSRef WebGLQuery where
+  pToJSRef = unWebGLQuery
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef WebGLQuery where
+  pFromJSRef = WebGLQuery
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef WebGLQuery where
+  toJSRef = return . unWebGLQuery
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef WebGLQuery where
+  fromJSRef = return . fmap WebGLQuery . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject WebGLQuery where
+  toGObject = GObject . unWebGLQuery
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = WebGLQuery . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToWebGLQuery :: IsGObject obj => obj -> WebGLQuery
+castToWebGLQuery = castTo gTypeWebGLQuery "WebGLQuery"
+
+foreign import javascript unsafe "window[\"WebGLQuery\"]" gTypeWebGLQuery :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.WebGLRenderbuffer".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderbuffer Mozilla WebGLRenderbuffer documentation>
+newtype WebGLRenderbuffer = WebGLRenderbuffer { unWebGLRenderbuffer :: JSRef }
+
+instance Eq (WebGLRenderbuffer) where
+  (WebGLRenderbuffer a) == (WebGLRenderbuffer b) = js_eq a b
+
+instance PToJSRef WebGLRenderbuffer where
+  pToJSRef = unWebGLRenderbuffer
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef WebGLRenderbuffer where
+  pFromJSRef = WebGLRenderbuffer
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef WebGLRenderbuffer where
+  toJSRef = return . unWebGLRenderbuffer
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef WebGLRenderbuffer where
+  fromJSRef = return . fmap WebGLRenderbuffer . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject WebGLRenderbuffer where
+  toGObject = GObject . unWebGLRenderbuffer
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = WebGLRenderbuffer . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToWebGLRenderbuffer :: IsGObject obj => obj -> WebGLRenderbuffer
+castToWebGLRenderbuffer = castTo gTypeWebGLRenderbuffer "WebGLRenderbuffer"
+
+foreign import javascript unsafe "window[\"WebGLRenderbuffer\"]" gTypeWebGLRenderbuffer :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.WebGLRenderingContext".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.WebGLRenderingContextBase"
+--     * "GHCJS.DOM.CanvasRenderingContext"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext Mozilla WebGLRenderingContext documentation>
+newtype WebGLRenderingContext = WebGLRenderingContext { unWebGLRenderingContext :: JSRef }
+
+instance Eq (WebGLRenderingContext) where
+  (WebGLRenderingContext a) == (WebGLRenderingContext b) = js_eq a b
+
+instance PToJSRef WebGLRenderingContext where
+  pToJSRef = unWebGLRenderingContext
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef WebGLRenderingContext where
+  pFromJSRef = WebGLRenderingContext
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef WebGLRenderingContext where
+  toJSRef = return . unWebGLRenderingContext
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef WebGLRenderingContext where
+  fromJSRef = return . fmap WebGLRenderingContext . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsWebGLRenderingContextBase WebGLRenderingContext
+instance IsCanvasRenderingContext WebGLRenderingContext
+instance IsGObject WebGLRenderingContext where
+  toGObject = GObject . unWebGLRenderingContext
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = WebGLRenderingContext . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToWebGLRenderingContext :: IsGObject obj => obj -> WebGLRenderingContext
+castToWebGLRenderingContext = castTo gTypeWebGLRenderingContext "WebGLRenderingContext"
+
+foreign import javascript unsafe "window[\"WebGLRenderingContext\"]" gTypeWebGLRenderingContext :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.WebGLRenderingContextBase".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.CanvasRenderingContext"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContextBase Mozilla WebGLRenderingContextBase documentation>
+newtype WebGLRenderingContextBase = WebGLRenderingContextBase { unWebGLRenderingContextBase :: JSRef }
+
+instance Eq (WebGLRenderingContextBase) where
+  (WebGLRenderingContextBase a) == (WebGLRenderingContextBase b) = js_eq a b
+
+instance PToJSRef WebGLRenderingContextBase where
+  pToJSRef = unWebGLRenderingContextBase
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef WebGLRenderingContextBase where
+  pFromJSRef = WebGLRenderingContextBase
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef WebGLRenderingContextBase where
+  toJSRef = return . unWebGLRenderingContextBase
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef WebGLRenderingContextBase where
+  fromJSRef = return . fmap WebGLRenderingContextBase . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsCanvasRenderingContext o => IsWebGLRenderingContextBase o
+toWebGLRenderingContextBase :: IsWebGLRenderingContextBase o => o -> WebGLRenderingContextBase
+toWebGLRenderingContextBase = unsafeCastGObject . toGObject
+
+instance IsWebGLRenderingContextBase WebGLRenderingContextBase
+instance IsCanvasRenderingContext WebGLRenderingContextBase
+instance IsGObject WebGLRenderingContextBase where
+  toGObject = GObject . unWebGLRenderingContextBase
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = WebGLRenderingContextBase . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToWebGLRenderingContextBase :: IsGObject obj => obj -> WebGLRenderingContextBase
+castToWebGLRenderingContextBase = castTo gTypeWebGLRenderingContextBase "WebGLRenderingContextBase"
+
+foreign import javascript unsafe "window[\"WebGLRenderingContextBase\"]" gTypeWebGLRenderingContextBase :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.WebGLSampler".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/WebGLSampler Mozilla WebGLSampler documentation>
+newtype WebGLSampler = WebGLSampler { unWebGLSampler :: JSRef }
+
+instance Eq (WebGLSampler) where
+  (WebGLSampler a) == (WebGLSampler b) = js_eq a b
+
+instance PToJSRef WebGLSampler where
+  pToJSRef = unWebGLSampler
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef WebGLSampler where
+  pFromJSRef = WebGLSampler
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef WebGLSampler where
+  toJSRef = return . unWebGLSampler
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef WebGLSampler where
+  fromJSRef = return . fmap WebGLSampler . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject WebGLSampler where
+  toGObject = GObject . unWebGLSampler
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = WebGLSampler . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToWebGLSampler :: IsGObject obj => obj -> WebGLSampler
+castToWebGLSampler = castTo gTypeWebGLSampler "WebGLSampler"
+
+foreign import javascript unsafe "window[\"WebGLSampler\"]" gTypeWebGLSampler :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.WebGLShader".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/WebGLShader Mozilla WebGLShader documentation>
+newtype WebGLShader = WebGLShader { unWebGLShader :: JSRef }
+
+instance Eq (WebGLShader) where
+  (WebGLShader a) == (WebGLShader b) = js_eq a b
+
+instance PToJSRef WebGLShader where
+  pToJSRef = unWebGLShader
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef WebGLShader where
+  pFromJSRef = WebGLShader
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef WebGLShader where
+  toJSRef = return . unWebGLShader
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef WebGLShader where
+  fromJSRef = return . fmap WebGLShader . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject WebGLShader where
+  toGObject = GObject . unWebGLShader
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = WebGLShader . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToWebGLShader :: IsGObject obj => obj -> WebGLShader
+castToWebGLShader = castTo gTypeWebGLShader "WebGLShader"
+
+foreign import javascript unsafe "window[\"WebGLShader\"]" gTypeWebGLShader :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.WebGLShaderPrecisionFormat".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/WebGLShaderPrecisionFormat Mozilla WebGLShaderPrecisionFormat documentation>
+newtype WebGLShaderPrecisionFormat = WebGLShaderPrecisionFormat { unWebGLShaderPrecisionFormat :: JSRef }
+
+instance Eq (WebGLShaderPrecisionFormat) where
+  (WebGLShaderPrecisionFormat a) == (WebGLShaderPrecisionFormat b) = js_eq a b
+
+instance PToJSRef WebGLShaderPrecisionFormat where
+  pToJSRef = unWebGLShaderPrecisionFormat
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef WebGLShaderPrecisionFormat where
+  pFromJSRef = WebGLShaderPrecisionFormat
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef WebGLShaderPrecisionFormat where
+  toJSRef = return . unWebGLShaderPrecisionFormat
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef WebGLShaderPrecisionFormat where
+  fromJSRef = return . fmap WebGLShaderPrecisionFormat . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject WebGLShaderPrecisionFormat where
+  toGObject = GObject . unWebGLShaderPrecisionFormat
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = WebGLShaderPrecisionFormat . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToWebGLShaderPrecisionFormat :: IsGObject obj => obj -> WebGLShaderPrecisionFormat
+castToWebGLShaderPrecisionFormat = castTo gTypeWebGLShaderPrecisionFormat "WebGLShaderPrecisionFormat"
+
+foreign import javascript unsafe "window[\"WebGLShaderPrecisionFormat\"]" gTypeWebGLShaderPrecisionFormat :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.WebGLSync".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/WebGLSync Mozilla WebGLSync documentation>
+newtype WebGLSync = WebGLSync { unWebGLSync :: JSRef }
+
+instance Eq (WebGLSync) where
+  (WebGLSync a) == (WebGLSync b) = js_eq a b
+
+instance PToJSRef WebGLSync where
+  pToJSRef = unWebGLSync
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef WebGLSync where
+  pFromJSRef = WebGLSync
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef WebGLSync where
+  toJSRef = return . unWebGLSync
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef WebGLSync where
+  fromJSRef = return . fmap WebGLSync . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject WebGLSync where
+  toGObject = GObject . unWebGLSync
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = WebGLSync . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToWebGLSync :: IsGObject obj => obj -> WebGLSync
+castToWebGLSync = castTo gTypeWebGLSync "WebGLSync"
+
+foreign import javascript unsafe "window[\"WebGLSync\"]" gTypeWebGLSync :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.WebGLTexture".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/WebGLTexture Mozilla WebGLTexture documentation>
+newtype WebGLTexture = WebGLTexture { unWebGLTexture :: JSRef }
+
+instance Eq (WebGLTexture) where
+  (WebGLTexture a) == (WebGLTexture b) = js_eq a b
+
+instance PToJSRef WebGLTexture where
+  pToJSRef = unWebGLTexture
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef WebGLTexture where
+  pFromJSRef = WebGLTexture
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef WebGLTexture where
+  toJSRef = return . unWebGLTexture
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef WebGLTexture where
+  fromJSRef = return . fmap WebGLTexture . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject WebGLTexture where
+  toGObject = GObject . unWebGLTexture
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = WebGLTexture . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToWebGLTexture :: IsGObject obj => obj -> WebGLTexture
+castToWebGLTexture = castTo gTypeWebGLTexture "WebGLTexture"
+
+foreign import javascript unsafe "window[\"WebGLTexture\"]" gTypeWebGLTexture :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.WebGLTransformFeedback".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/WebGLTransformFeedback Mozilla WebGLTransformFeedback documentation>
+newtype WebGLTransformFeedback = WebGLTransformFeedback { unWebGLTransformFeedback :: JSRef }
+
+instance Eq (WebGLTransformFeedback) where
+  (WebGLTransformFeedback a) == (WebGLTransformFeedback b) = js_eq a b
+
+instance PToJSRef WebGLTransformFeedback where
+  pToJSRef = unWebGLTransformFeedback
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef WebGLTransformFeedback where
+  pFromJSRef = WebGLTransformFeedback
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef WebGLTransformFeedback where
+  toJSRef = return . unWebGLTransformFeedback
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef WebGLTransformFeedback where
+  fromJSRef = return . fmap WebGLTransformFeedback . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject WebGLTransformFeedback where
+  toGObject = GObject . unWebGLTransformFeedback
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = WebGLTransformFeedback . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToWebGLTransformFeedback :: IsGObject obj => obj -> WebGLTransformFeedback
+castToWebGLTransformFeedback = castTo gTypeWebGLTransformFeedback "WebGLTransformFeedback"
+
+foreign import javascript unsafe "window[\"WebGLTransformFeedback\"]" gTypeWebGLTransformFeedback :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.WebGLUniformLocation".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/WebGLUniformLocation Mozilla WebGLUniformLocation documentation>
+newtype WebGLUniformLocation = WebGLUniformLocation { unWebGLUniformLocation :: JSRef }
+
+instance Eq (WebGLUniformLocation) where
+  (WebGLUniformLocation a) == (WebGLUniformLocation b) = js_eq a b
+
+instance PToJSRef WebGLUniformLocation where
+  pToJSRef = unWebGLUniformLocation
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef WebGLUniformLocation where
+  pFromJSRef = WebGLUniformLocation
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef WebGLUniformLocation where
+  toJSRef = return . unWebGLUniformLocation
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef WebGLUniformLocation where
+  fromJSRef = return . fmap WebGLUniformLocation . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject WebGLUniformLocation where
+  toGObject = GObject . unWebGLUniformLocation
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = WebGLUniformLocation . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToWebGLUniformLocation :: IsGObject obj => obj -> WebGLUniformLocation
+castToWebGLUniformLocation = castTo gTypeWebGLUniformLocation "WebGLUniformLocation"
+
+foreign import javascript unsafe "window[\"WebGLUniformLocation\"]" gTypeWebGLUniformLocation :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.WebGLVertexArrayObject".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/WebGLVertexArrayObject Mozilla WebGLVertexArrayObject documentation>
+newtype WebGLVertexArrayObject = WebGLVertexArrayObject { unWebGLVertexArrayObject :: JSRef }
+
+instance Eq (WebGLVertexArrayObject) where
+  (WebGLVertexArrayObject a) == (WebGLVertexArrayObject b) = js_eq a b
+
+instance PToJSRef WebGLVertexArrayObject where
+  pToJSRef = unWebGLVertexArrayObject
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef WebGLVertexArrayObject where
+  pFromJSRef = WebGLVertexArrayObject
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef WebGLVertexArrayObject where
+  toJSRef = return . unWebGLVertexArrayObject
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef WebGLVertexArrayObject where
+  fromJSRef = return . fmap WebGLVertexArrayObject . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject WebGLVertexArrayObject where
+  toGObject = GObject . unWebGLVertexArrayObject
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = WebGLVertexArrayObject . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToWebGLVertexArrayObject :: IsGObject obj => obj -> WebGLVertexArrayObject
+castToWebGLVertexArrayObject = castTo gTypeWebGLVertexArrayObject "WebGLVertexArrayObject"
+
+foreign import javascript unsafe "window[\"WebGLVertexArrayObject\"]" gTypeWebGLVertexArrayObject :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.WebGLVertexArrayObjectOES".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/WebGLVertexArrayObjectOES Mozilla WebGLVertexArrayObjectOES documentation>
+newtype WebGLVertexArrayObjectOES = WebGLVertexArrayObjectOES { unWebGLVertexArrayObjectOES :: JSRef }
+
+instance Eq (WebGLVertexArrayObjectOES) where
+  (WebGLVertexArrayObjectOES a) == (WebGLVertexArrayObjectOES b) = js_eq a b
+
+instance PToJSRef WebGLVertexArrayObjectOES where
+  pToJSRef = unWebGLVertexArrayObjectOES
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef WebGLVertexArrayObjectOES where
+  pFromJSRef = WebGLVertexArrayObjectOES
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef WebGLVertexArrayObjectOES where
+  toJSRef = return . unWebGLVertexArrayObjectOES
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef WebGLVertexArrayObjectOES where
+  fromJSRef = return . fmap WebGLVertexArrayObjectOES . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject WebGLVertexArrayObjectOES where
+  toGObject = GObject . unWebGLVertexArrayObjectOES
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = WebGLVertexArrayObjectOES . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToWebGLVertexArrayObjectOES :: IsGObject obj => obj -> WebGLVertexArrayObjectOES
+castToWebGLVertexArrayObjectOES = castTo gTypeWebGLVertexArrayObjectOES "WebGLVertexArrayObjectOES"
+
+foreign import javascript unsafe "window[\"WebGLVertexArrayObjectOES\"]" gTypeWebGLVertexArrayObjectOES :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.WebKitAnimationEvent".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.Event"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/WebKitAnimationEvent Mozilla WebKitAnimationEvent documentation>
+newtype WebKitAnimationEvent = WebKitAnimationEvent { unWebKitAnimationEvent :: JSRef }
+
+instance Eq (WebKitAnimationEvent) where
+  (WebKitAnimationEvent a) == (WebKitAnimationEvent b) = js_eq a b
+
+instance PToJSRef WebKitAnimationEvent where
+  pToJSRef = unWebKitAnimationEvent
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef WebKitAnimationEvent where
+  pFromJSRef = WebKitAnimationEvent
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef WebKitAnimationEvent where
+  toJSRef = return . unWebKitAnimationEvent
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef WebKitAnimationEvent where
+  fromJSRef = return . fmap WebKitAnimationEvent . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEvent WebKitAnimationEvent
+instance IsGObject WebKitAnimationEvent where
+  toGObject = GObject . unWebKitAnimationEvent
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = WebKitAnimationEvent . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToWebKitAnimationEvent :: IsGObject obj => obj -> WebKitAnimationEvent
+castToWebKitAnimationEvent = castTo gTypeWebKitAnimationEvent "WebKitAnimationEvent"
+
+foreign import javascript unsafe "window[\"WebKitAnimationEvent\"]" gTypeWebKitAnimationEvent :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.WebKitCSSFilterValue".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.CSSValueList"
+--     * "GHCJS.DOM.CSSValue"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSFilterValue Mozilla WebKitCSSFilterValue documentation>
+newtype WebKitCSSFilterValue = WebKitCSSFilterValue { unWebKitCSSFilterValue :: JSRef }
+
+instance Eq (WebKitCSSFilterValue) where
+  (WebKitCSSFilterValue a) == (WebKitCSSFilterValue b) = js_eq a b
+
+instance PToJSRef WebKitCSSFilterValue where
+  pToJSRef = unWebKitCSSFilterValue
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef WebKitCSSFilterValue where
+  pFromJSRef = WebKitCSSFilterValue
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef WebKitCSSFilterValue where
+  toJSRef = return . unWebKitCSSFilterValue
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef WebKitCSSFilterValue where
+  fromJSRef = return . fmap WebKitCSSFilterValue . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsCSSValueList WebKitCSSFilterValue
+instance IsCSSValue WebKitCSSFilterValue
+instance IsGObject WebKitCSSFilterValue where
+  toGObject = GObject . unWebKitCSSFilterValue
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = WebKitCSSFilterValue . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToWebKitCSSFilterValue :: IsGObject obj => obj -> WebKitCSSFilterValue
+castToWebKitCSSFilterValue = castTo gTypeWebKitCSSFilterValue "WebKitCSSFilterValue"
+
+foreign import javascript unsafe "window[\"WebKitCSSFilterValue\"]" gTypeWebKitCSSFilterValue :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.WebKitCSSMatrix".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSMatrix Mozilla WebKitCSSMatrix documentation>
+newtype WebKitCSSMatrix = WebKitCSSMatrix { unWebKitCSSMatrix :: JSRef }
+
+instance Eq (WebKitCSSMatrix) where
+  (WebKitCSSMatrix a) == (WebKitCSSMatrix b) = js_eq a b
+
+instance PToJSRef WebKitCSSMatrix where
+  pToJSRef = unWebKitCSSMatrix
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef WebKitCSSMatrix where
+  pFromJSRef = WebKitCSSMatrix
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef WebKitCSSMatrix where
+  toJSRef = return . unWebKitCSSMatrix
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef WebKitCSSMatrix where
+  fromJSRef = return . fmap WebKitCSSMatrix . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject WebKitCSSMatrix where
+  toGObject = GObject . unWebKitCSSMatrix
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = WebKitCSSMatrix . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToWebKitCSSMatrix :: IsGObject obj => obj -> WebKitCSSMatrix
+castToWebKitCSSMatrix = castTo gTypeWebKitCSSMatrix "WebKitCSSMatrix"
+
+foreign import javascript unsafe "window[\"WebKitCSSMatrix\"]" gTypeWebKitCSSMatrix :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.WebKitCSSRegionRule".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.CSSRule"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSRegionRule Mozilla WebKitCSSRegionRule documentation>
+newtype WebKitCSSRegionRule = WebKitCSSRegionRule { unWebKitCSSRegionRule :: JSRef }
+
+instance Eq (WebKitCSSRegionRule) where
+  (WebKitCSSRegionRule a) == (WebKitCSSRegionRule b) = js_eq a b
+
+instance PToJSRef WebKitCSSRegionRule where
+  pToJSRef = unWebKitCSSRegionRule
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef WebKitCSSRegionRule where
+  pFromJSRef = WebKitCSSRegionRule
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef WebKitCSSRegionRule where
+  toJSRef = return . unWebKitCSSRegionRule
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef WebKitCSSRegionRule where
+  fromJSRef = return . fmap WebKitCSSRegionRule . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsCSSRule WebKitCSSRegionRule
+instance IsGObject WebKitCSSRegionRule where
+  toGObject = GObject . unWebKitCSSRegionRule
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = WebKitCSSRegionRule . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToWebKitCSSRegionRule :: IsGObject obj => obj -> WebKitCSSRegionRule
+castToWebKitCSSRegionRule = castTo gTypeWebKitCSSRegionRule "WebKitCSSRegionRule"
+
+foreign import javascript unsafe "window[\"WebKitCSSRegionRule\"]" gTypeWebKitCSSRegionRule :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.WebKitCSSTransformValue".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.CSSValueList"
+--     * "GHCJS.DOM.CSSValue"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSTransformValue Mozilla WebKitCSSTransformValue documentation>
+newtype WebKitCSSTransformValue = WebKitCSSTransformValue { unWebKitCSSTransformValue :: JSRef }
+
+instance Eq (WebKitCSSTransformValue) where
+  (WebKitCSSTransformValue a) == (WebKitCSSTransformValue b) = js_eq a b
+
+instance PToJSRef WebKitCSSTransformValue where
+  pToJSRef = unWebKitCSSTransformValue
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef WebKitCSSTransformValue where
+  pFromJSRef = WebKitCSSTransformValue
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef WebKitCSSTransformValue where
+  toJSRef = return . unWebKitCSSTransformValue
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef WebKitCSSTransformValue where
+  fromJSRef = return . fmap WebKitCSSTransformValue . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsCSSValueList WebKitCSSTransformValue
+instance IsCSSValue WebKitCSSTransformValue
+instance IsGObject WebKitCSSTransformValue where
+  toGObject = GObject . unWebKitCSSTransformValue
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = WebKitCSSTransformValue . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToWebKitCSSTransformValue :: IsGObject obj => obj -> WebKitCSSTransformValue
+castToWebKitCSSTransformValue = castTo gTypeWebKitCSSTransformValue "WebKitCSSTransformValue"
+
+foreign import javascript unsafe "window[\"WebKitCSSTransformValue\"]" gTypeWebKitCSSTransformValue :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.WebKitCSSViewportRule".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.CSSRule"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/WebKitCSSViewportRule Mozilla WebKitCSSViewportRule documentation>
+newtype WebKitCSSViewportRule = WebKitCSSViewportRule { unWebKitCSSViewportRule :: JSRef }
+
+instance Eq (WebKitCSSViewportRule) where
+  (WebKitCSSViewportRule a) == (WebKitCSSViewportRule b) = js_eq a b
+
+instance PToJSRef WebKitCSSViewportRule where
+  pToJSRef = unWebKitCSSViewportRule
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef WebKitCSSViewportRule where
+  pFromJSRef = WebKitCSSViewportRule
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef WebKitCSSViewportRule where
+  toJSRef = return . unWebKitCSSViewportRule
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef WebKitCSSViewportRule where
+  fromJSRef = return . fmap WebKitCSSViewportRule . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsCSSRule WebKitCSSViewportRule
+instance IsGObject WebKitCSSViewportRule where
+  toGObject = GObject . unWebKitCSSViewportRule
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = WebKitCSSViewportRule . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToWebKitCSSViewportRule :: IsGObject obj => obj -> WebKitCSSViewportRule
+castToWebKitCSSViewportRule = castTo gTypeWebKitCSSViewportRule "WebKitCSSViewportRule"
+
+foreign import javascript unsafe "window[\"WebKitCSSViewportRule\"]" gTypeWebKitCSSViewportRule :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.WebKitNamedFlow".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/WebKitNamedFlow Mozilla WebKitNamedFlow documentation>
+newtype WebKitNamedFlow = WebKitNamedFlow { unWebKitNamedFlow :: JSRef }
+
+instance Eq (WebKitNamedFlow) where
+  (WebKitNamedFlow a) == (WebKitNamedFlow b) = js_eq a b
+
+instance PToJSRef WebKitNamedFlow where
+  pToJSRef = unWebKitNamedFlow
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef WebKitNamedFlow where
+  pFromJSRef = WebKitNamedFlow
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef WebKitNamedFlow where
+  toJSRef = return . unWebKitNamedFlow
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef WebKitNamedFlow where
+  fromJSRef = return . fmap WebKitNamedFlow . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEventTarget WebKitNamedFlow
+instance IsGObject WebKitNamedFlow where
+  toGObject = GObject . unWebKitNamedFlow
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = WebKitNamedFlow . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToWebKitNamedFlow :: IsGObject obj => obj -> WebKitNamedFlow
+castToWebKitNamedFlow = castTo gTypeWebKitNamedFlow "WebKitNamedFlow"
+
+foreign import javascript unsafe "window[\"WebKitNamedFlow\"]" gTypeWebKitNamedFlow :: GType
+#else
+type IsWebKitNamedFlow o = WebKitNamedFlowClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.WebKitNamespace".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/WebKitNamespace Mozilla WebKitNamespace documentation>
+newtype WebKitNamespace = WebKitNamespace { unWebKitNamespace :: JSRef }
+
+instance Eq (WebKitNamespace) where
+  (WebKitNamespace a) == (WebKitNamespace b) = js_eq a b
+
+instance PToJSRef WebKitNamespace where
+  pToJSRef = unWebKitNamespace
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef WebKitNamespace where
+  pFromJSRef = WebKitNamespace
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef WebKitNamespace where
+  toJSRef = return . unWebKitNamespace
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef WebKitNamespace where
+  fromJSRef = return . fmap WebKitNamespace . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject WebKitNamespace where
+  toGObject = GObject . unWebKitNamespace
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = WebKitNamespace . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToWebKitNamespace :: IsGObject obj => obj -> WebKitNamespace
+castToWebKitNamespace = castTo gTypeWebKitNamespace "WebKitNamespace"
+
+foreign import javascript unsafe "window[\"WebKitNamespace\"]" gTypeWebKitNamespace :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.WebKitPlaybackTargetAvailabilityEvent".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.Event"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/WebKitPlaybackTargetAvailabilityEvent Mozilla WebKitPlaybackTargetAvailabilityEvent documentation>
+newtype WebKitPlaybackTargetAvailabilityEvent = WebKitPlaybackTargetAvailabilityEvent { unWebKitPlaybackTargetAvailabilityEvent :: JSRef }
+
+instance Eq (WebKitPlaybackTargetAvailabilityEvent) where
+  (WebKitPlaybackTargetAvailabilityEvent a) == (WebKitPlaybackTargetAvailabilityEvent b) = js_eq a b
+
+instance PToJSRef WebKitPlaybackTargetAvailabilityEvent where
+  pToJSRef = unWebKitPlaybackTargetAvailabilityEvent
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef WebKitPlaybackTargetAvailabilityEvent where
+  pFromJSRef = WebKitPlaybackTargetAvailabilityEvent
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef WebKitPlaybackTargetAvailabilityEvent where
+  toJSRef = return . unWebKitPlaybackTargetAvailabilityEvent
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef WebKitPlaybackTargetAvailabilityEvent where
+  fromJSRef = return . fmap WebKitPlaybackTargetAvailabilityEvent . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEvent WebKitPlaybackTargetAvailabilityEvent
+instance IsGObject WebKitPlaybackTargetAvailabilityEvent where
+  toGObject = GObject . unWebKitPlaybackTargetAvailabilityEvent
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = WebKitPlaybackTargetAvailabilityEvent . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToWebKitPlaybackTargetAvailabilityEvent :: IsGObject obj => obj -> WebKitPlaybackTargetAvailabilityEvent
+castToWebKitPlaybackTargetAvailabilityEvent = castTo gTypeWebKitPlaybackTargetAvailabilityEvent "WebKitPlaybackTargetAvailabilityEvent"
+
+foreign import javascript unsafe "window[\"WebKitPlaybackTargetAvailabilityEvent\"]" gTypeWebKitPlaybackTargetAvailabilityEvent :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.WebKitPoint".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/WebKitPoint Mozilla WebKitPoint documentation>
+newtype WebKitPoint = WebKitPoint { unWebKitPoint :: JSRef }
+
+instance Eq (WebKitPoint) where
+  (WebKitPoint a) == (WebKitPoint b) = js_eq a b
+
+instance PToJSRef WebKitPoint where
+  pToJSRef = unWebKitPoint
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef WebKitPoint where
+  pFromJSRef = WebKitPoint
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef WebKitPoint where
+  toJSRef = return . unWebKitPoint
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef WebKitPoint where
+  fromJSRef = return . fmap WebKitPoint . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject WebKitPoint where
+  toGObject = GObject . unWebKitPoint
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = WebKitPoint . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToWebKitPoint :: IsGObject obj => obj -> WebKitPoint
+castToWebKitPoint = castTo gTypeWebKitPoint "WebKitPoint"
+
+foreign import javascript unsafe "window[\"WebKitPoint\"]" gTypeWebKitPoint :: GType
+#else
+type IsWebKitPoint o = WebKitPointClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.WebKitTransitionEvent".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.Event"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/WebKitTransitionEvent Mozilla WebKitTransitionEvent documentation>
+newtype WebKitTransitionEvent = WebKitTransitionEvent { unWebKitTransitionEvent :: JSRef }
+
+instance Eq (WebKitTransitionEvent) where
+  (WebKitTransitionEvent a) == (WebKitTransitionEvent b) = js_eq a b
+
+instance PToJSRef WebKitTransitionEvent where
+  pToJSRef = unWebKitTransitionEvent
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef WebKitTransitionEvent where
+  pFromJSRef = WebKitTransitionEvent
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef WebKitTransitionEvent where
+  toJSRef = return . unWebKitTransitionEvent
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef WebKitTransitionEvent where
+  fromJSRef = return . fmap WebKitTransitionEvent . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEvent WebKitTransitionEvent
+instance IsGObject WebKitTransitionEvent where
+  toGObject = GObject . unWebKitTransitionEvent
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = WebKitTransitionEvent . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToWebKitTransitionEvent :: IsGObject obj => obj -> WebKitTransitionEvent
+castToWebKitTransitionEvent = castTo gTypeWebKitTransitionEvent "WebKitTransitionEvent"
+
+foreign import javascript unsafe "window[\"WebKitTransitionEvent\"]" gTypeWebKitTransitionEvent :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.WebSocket".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/WebSocket Mozilla WebSocket documentation>
+newtype WebSocket = WebSocket { unWebSocket :: JSRef }
+
+instance Eq (WebSocket) where
+  (WebSocket a) == (WebSocket b) = js_eq a b
+
+instance PToJSRef WebSocket where
+  pToJSRef = unWebSocket
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef WebSocket where
+  pFromJSRef = WebSocket
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef WebSocket where
+  toJSRef = return . unWebSocket
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef WebSocket where
+  fromJSRef = return . fmap WebSocket . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEventTarget WebSocket
+instance IsGObject WebSocket where
+  toGObject = GObject . unWebSocket
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = WebSocket . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToWebSocket :: IsGObject obj => obj -> WebSocket
+castToWebSocket = castTo gTypeWebSocket "WebSocket"
+
+foreign import javascript unsafe "window[\"WebSocket\"]" gTypeWebSocket :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.WheelEvent".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.MouseEvent"
+--     * "GHCJS.DOM.UIEvent"
+--     * "GHCJS.DOM.Event"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/WheelEvent Mozilla WheelEvent documentation>
+newtype WheelEvent = WheelEvent { unWheelEvent :: JSRef }
+
+instance Eq (WheelEvent) where
+  (WheelEvent a) == (WheelEvent b) = js_eq a b
+
+instance PToJSRef WheelEvent where
+  pToJSRef = unWheelEvent
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef WheelEvent where
+  pFromJSRef = WheelEvent
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef WheelEvent where
+  toJSRef = return . unWheelEvent
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef WheelEvent where
+  fromJSRef = return . fmap WheelEvent . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsMouseEvent WheelEvent
+instance IsUIEvent WheelEvent
+instance IsEvent WheelEvent
+instance IsGObject WheelEvent where
+  toGObject = GObject . unWheelEvent
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = WheelEvent . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToWheelEvent :: IsGObject obj => obj -> WheelEvent
+castToWheelEvent = castTo gTypeWheelEvent "WheelEvent"
+
+foreign import javascript unsafe "window[\"WheelEvent\"]" gTypeWheelEvent :: GType
+#else
+#ifndef USE_OLD_WEBKIT
+type IsWheelEvent o = WheelEventClass o
+#endif
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.Window".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/Window Mozilla Window documentation>
+newtype Window = Window { unWindow :: JSRef }
+
+instance Eq (Window) where
+  (Window a) == (Window b) = js_eq a b
+
+instance PToJSRef Window where
+  pToJSRef = unWindow
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef Window where
+  pFromJSRef = Window
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef Window where
+  toJSRef = return . unWindow
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef Window where
+  fromJSRef = return . fmap Window . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEventTarget Window
+instance IsGObject Window where
+  toGObject = GObject . unWindow
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = Window . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToWindow :: IsGObject obj => obj -> Window
+castToWindow = castTo gTypeWindow "Window"
+
+foreign import javascript unsafe "window[\"Window\"]" gTypeWindow :: GType
+#else
+type IsWindow o = WindowClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.WindowBase64".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64 Mozilla WindowBase64 documentation>
+newtype WindowBase64 = WindowBase64 { unWindowBase64 :: JSRef }
+
+instance Eq (WindowBase64) where
+  (WindowBase64 a) == (WindowBase64 b) = js_eq a b
+
+instance PToJSRef WindowBase64 where
+  pToJSRef = unWindowBase64
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef WindowBase64 where
+  pFromJSRef = WindowBase64
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef WindowBase64 where
+  toJSRef = return . unWindowBase64
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef WindowBase64 where
+  fromJSRef = return . fmap WindowBase64 . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject WindowBase64 where
+  toGObject = GObject . unWindowBase64
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = WindowBase64 . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToWindowBase64 :: IsGObject obj => obj -> WindowBase64
+castToWindowBase64 = castTo gTypeWindowBase64 "WindowBase64"
+
+foreign import javascript unsafe "window[\"WindowBase64\"]" gTypeWindowBase64 :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.WindowTimers".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers Mozilla WindowTimers documentation>
+newtype WindowTimers = WindowTimers { unWindowTimers :: JSRef }
+
+instance Eq (WindowTimers) where
+  (WindowTimers a) == (WindowTimers b) = js_eq a b
+
+instance PToJSRef WindowTimers where
+  pToJSRef = unWindowTimers
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef WindowTimers where
+  pFromJSRef = WindowTimers
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef WindowTimers where
+  toJSRef = return . unWindowTimers
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef WindowTimers where
+  fromJSRef = return . fmap WindowTimers . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject WindowTimers where
+  toGObject = GObject . unWindowTimers
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = WindowTimers . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToWindowTimers :: IsGObject obj => obj -> WindowTimers
+castToWindowTimers = castTo gTypeWindowTimers "WindowTimers"
+
+foreign import javascript unsafe "window[\"WindowTimers\"]" gTypeWindowTimers :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.Worker".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/Worker Mozilla Worker documentation>
+newtype Worker = Worker { unWorker :: JSRef }
+
+instance Eq (Worker) where
+  (Worker a) == (Worker b) = js_eq a b
+
+instance PToJSRef Worker where
+  pToJSRef = unWorker
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef Worker where
+  pFromJSRef = Worker
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef Worker where
+  toJSRef = return . unWorker
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef Worker where
+  fromJSRef = return . fmap Worker . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEventTarget Worker
+instance IsGObject Worker where
+  toGObject = GObject . unWorker
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = Worker . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToWorker :: IsGObject obj => obj -> Worker
+castToWorker = castTo gTypeWorker "Worker"
+
+foreign import javascript unsafe "window[\"Worker\"]" gTypeWorker :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.WorkerGlobalScope".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/WorkerGlobalScope Mozilla WorkerGlobalScope documentation>
+newtype WorkerGlobalScope = WorkerGlobalScope { unWorkerGlobalScope :: JSRef }
+
+instance Eq (WorkerGlobalScope) where
+  (WorkerGlobalScope a) == (WorkerGlobalScope b) = js_eq a b
+
+instance PToJSRef WorkerGlobalScope where
+  pToJSRef = unWorkerGlobalScope
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef WorkerGlobalScope where
+  pFromJSRef = WorkerGlobalScope
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef WorkerGlobalScope where
+  toJSRef = return . unWorkerGlobalScope
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef WorkerGlobalScope where
+  fromJSRef = return . fmap WorkerGlobalScope . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+class IsEventTarget o => IsWorkerGlobalScope o
+toWorkerGlobalScope :: IsWorkerGlobalScope o => o -> WorkerGlobalScope
+toWorkerGlobalScope = unsafeCastGObject . toGObject
+
+instance IsWorkerGlobalScope WorkerGlobalScope
+instance IsEventTarget WorkerGlobalScope
+instance IsGObject WorkerGlobalScope where
+  toGObject = GObject . unWorkerGlobalScope
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = WorkerGlobalScope . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToWorkerGlobalScope :: IsGObject obj => obj -> WorkerGlobalScope
+castToWorkerGlobalScope = castTo gTypeWorkerGlobalScope "WorkerGlobalScope"
+
+foreign import javascript unsafe "window[\"WorkerGlobalScope\"]" gTypeWorkerGlobalScope :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.WorkerLocation".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/WorkerLocation Mozilla WorkerLocation documentation>
+newtype WorkerLocation = WorkerLocation { unWorkerLocation :: JSRef }
+
+instance Eq (WorkerLocation) where
+  (WorkerLocation a) == (WorkerLocation b) = js_eq a b
+
+instance PToJSRef WorkerLocation where
+  pToJSRef = unWorkerLocation
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef WorkerLocation where
+  pFromJSRef = WorkerLocation
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef WorkerLocation where
+  toJSRef = return . unWorkerLocation
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef WorkerLocation where
+  fromJSRef = return . fmap WorkerLocation . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject WorkerLocation where
+  toGObject = GObject . unWorkerLocation
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = WorkerLocation . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToWorkerLocation :: IsGObject obj => obj -> WorkerLocation
+castToWorkerLocation = castTo gTypeWorkerLocation "WorkerLocation"
+
+foreign import javascript unsafe "window[\"WorkerLocation\"]" gTypeWorkerLocation :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.WorkerNavigator".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/WorkerNavigator Mozilla WorkerNavigator documentation>
+newtype WorkerNavigator = WorkerNavigator { unWorkerNavigator :: JSRef }
+
+instance Eq (WorkerNavigator) where
+  (WorkerNavigator a) == (WorkerNavigator b) = js_eq a b
+
+instance PToJSRef WorkerNavigator where
+  pToJSRef = unWorkerNavigator
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef WorkerNavigator where
+  pFromJSRef = WorkerNavigator
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef WorkerNavigator where
+  toJSRef = return . unWorkerNavigator
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef WorkerNavigator where
+  fromJSRef = return . fmap WorkerNavigator . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject WorkerNavigator where
+  toGObject = GObject . unWorkerNavigator
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = WorkerNavigator . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToWorkerNavigator :: IsGObject obj => obj -> WorkerNavigator
+castToWorkerNavigator = castTo gTypeWorkerNavigator "WorkerNavigator"
+
+foreign import javascript unsafe "window[\"WorkerNavigator\"]" gTypeWorkerNavigator :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.XMLHttpRequest".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest Mozilla XMLHttpRequest documentation>
+newtype XMLHttpRequest = XMLHttpRequest { unXMLHttpRequest :: JSRef }
+
+instance Eq (XMLHttpRequest) where
+  (XMLHttpRequest a) == (XMLHttpRequest b) = js_eq a b
+
+instance PToJSRef XMLHttpRequest where
+  pToJSRef = unXMLHttpRequest
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef XMLHttpRequest where
+  pFromJSRef = XMLHttpRequest
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef XMLHttpRequest where
+  toJSRef = return . unXMLHttpRequest
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef XMLHttpRequest where
+  fromJSRef = return . fmap XMLHttpRequest . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEventTarget XMLHttpRequest
+instance IsGObject XMLHttpRequest where
+  toGObject = GObject . unXMLHttpRequest
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = XMLHttpRequest . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToXMLHttpRequest :: IsGObject obj => obj -> XMLHttpRequest
+castToXMLHttpRequest = castTo gTypeXMLHttpRequest "XMLHttpRequest"
+
+foreign import javascript unsafe "window[\"XMLHttpRequest\"]" gTypeXMLHttpRequest :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.XMLHttpRequestProgressEvent".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.ProgressEvent"
+--     * "GHCJS.DOM.Event"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequestProgressEvent Mozilla XMLHttpRequestProgressEvent documentation>
+newtype XMLHttpRequestProgressEvent = XMLHttpRequestProgressEvent { unXMLHttpRequestProgressEvent :: JSRef }
+
+instance Eq (XMLHttpRequestProgressEvent) where
+  (XMLHttpRequestProgressEvent a) == (XMLHttpRequestProgressEvent b) = js_eq a b
+
+instance PToJSRef XMLHttpRequestProgressEvent where
+  pToJSRef = unXMLHttpRequestProgressEvent
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef XMLHttpRequestProgressEvent where
+  pFromJSRef = XMLHttpRequestProgressEvent
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef XMLHttpRequestProgressEvent where
+  toJSRef = return . unXMLHttpRequestProgressEvent
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef XMLHttpRequestProgressEvent where
+  fromJSRef = return . fmap XMLHttpRequestProgressEvent . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsProgressEvent XMLHttpRequestProgressEvent
+instance IsEvent XMLHttpRequestProgressEvent
+instance IsGObject XMLHttpRequestProgressEvent where
+  toGObject = GObject . unXMLHttpRequestProgressEvent
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = XMLHttpRequestProgressEvent . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToXMLHttpRequestProgressEvent :: IsGObject obj => obj -> XMLHttpRequestProgressEvent
+castToXMLHttpRequestProgressEvent = castTo gTypeXMLHttpRequestProgressEvent "XMLHttpRequestProgressEvent"
+
+foreign import javascript unsafe "window[\"XMLHttpRequestProgressEvent\"]" gTypeXMLHttpRequestProgressEvent :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.XMLHttpRequestUpload".
+-- Base interface functions are in:
+--
+--     * "GHCJS.DOM.EventTarget"
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequestUpload Mozilla XMLHttpRequestUpload documentation>
+newtype XMLHttpRequestUpload = XMLHttpRequestUpload { unXMLHttpRequestUpload :: JSRef }
+
+instance Eq (XMLHttpRequestUpload) where
+  (XMLHttpRequestUpload a) == (XMLHttpRequestUpload b) = js_eq a b
+
+instance PToJSRef XMLHttpRequestUpload where
+  pToJSRef = unXMLHttpRequestUpload
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef XMLHttpRequestUpload where
+  pFromJSRef = XMLHttpRequestUpload
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef XMLHttpRequestUpload where
+  toJSRef = return . unXMLHttpRequestUpload
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef XMLHttpRequestUpload where
+  fromJSRef = return . fmap XMLHttpRequestUpload . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsEventTarget XMLHttpRequestUpload
+instance IsGObject XMLHttpRequestUpload where
+  toGObject = GObject . unXMLHttpRequestUpload
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = XMLHttpRequestUpload . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToXMLHttpRequestUpload :: IsGObject obj => obj -> XMLHttpRequestUpload
+castToXMLHttpRequestUpload = castTo gTypeXMLHttpRequestUpload "XMLHttpRequestUpload"
+
+foreign import javascript unsafe "window[\"XMLHttpRequestUpload\"]" gTypeXMLHttpRequestUpload :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.XMLSerializer".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/XMLSerializer Mozilla XMLSerializer documentation>
+newtype XMLSerializer = XMLSerializer { unXMLSerializer :: JSRef }
+
+instance Eq (XMLSerializer) where
+  (XMLSerializer a) == (XMLSerializer b) = js_eq a b
+
+instance PToJSRef XMLSerializer where
+  pToJSRef = unXMLSerializer
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef XMLSerializer where
+  pFromJSRef = XMLSerializer
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef XMLSerializer where
+  toJSRef = return . unXMLSerializer
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef XMLSerializer where
+  fromJSRef = return . fmap XMLSerializer . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject XMLSerializer where
+  toGObject = GObject . unXMLSerializer
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = XMLSerializer . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToXMLSerializer :: IsGObject obj => obj -> XMLSerializer
+castToXMLSerializer = castTo gTypeXMLSerializer "XMLSerializer"
+
+foreign import javascript unsafe "window[\"XMLSerializer\"]" gTypeXMLSerializer :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.XPathEvaluator".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/XPathEvaluator Mozilla XPathEvaluator documentation>
+newtype XPathEvaluator = XPathEvaluator { unXPathEvaluator :: JSRef }
+
+instance Eq (XPathEvaluator) where
+  (XPathEvaluator a) == (XPathEvaluator b) = js_eq a b
+
+instance PToJSRef XPathEvaluator where
+  pToJSRef = unXPathEvaluator
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef XPathEvaluator where
+  pFromJSRef = XPathEvaluator
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef XPathEvaluator where
+  toJSRef = return . unXPathEvaluator
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef XPathEvaluator where
+  fromJSRef = return . fmap XPathEvaluator . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject XPathEvaluator where
+  toGObject = GObject . unXPathEvaluator
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = XPathEvaluator . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToXPathEvaluator :: IsGObject obj => obj -> XPathEvaluator
+castToXPathEvaluator = castTo gTypeXPathEvaluator "XPathEvaluator"
+
+foreign import javascript unsafe "window[\"XPathEvaluator\"]" gTypeXPathEvaluator :: GType
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.XPathExpression".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/XPathExpression Mozilla XPathExpression documentation>
+newtype XPathExpression = XPathExpression { unXPathExpression :: JSRef }
+
+instance Eq (XPathExpression) where
+  (XPathExpression a) == (XPathExpression b) = js_eq a b
+
+instance PToJSRef XPathExpression where
+  pToJSRef = unXPathExpression
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef XPathExpression where
+  pFromJSRef = XPathExpression
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef XPathExpression where
+  toJSRef = return . unXPathExpression
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef XPathExpression where
+  fromJSRef = return . fmap XPathExpression . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject XPathExpression where
+  toGObject = GObject . unXPathExpression
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = XPathExpression . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToXPathExpression :: IsGObject obj => obj -> XPathExpression
+castToXPathExpression = castTo gTypeXPathExpression "XPathExpression"
+
+foreign import javascript unsafe "window[\"XPathExpression\"]" gTypeXPathExpression :: GType
+#else
+type IsXPathExpression o = XPathExpressionClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.XPathNSResolver".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/XPathNSResolver Mozilla XPathNSResolver documentation>
+newtype XPathNSResolver = XPathNSResolver { unXPathNSResolver :: JSRef }
+
+instance Eq (XPathNSResolver) where
+  (XPathNSResolver a) == (XPathNSResolver b) = js_eq a b
+
+instance PToJSRef XPathNSResolver where
+  pToJSRef = unXPathNSResolver
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef XPathNSResolver where
+  pFromJSRef = XPathNSResolver
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef XPathNSResolver where
+  toJSRef = return . unXPathNSResolver
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef XPathNSResolver where
+  fromJSRef = return . fmap XPathNSResolver . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject XPathNSResolver where
+  toGObject = GObject . unXPathNSResolver
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = XPathNSResolver . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToXPathNSResolver :: IsGObject obj => obj -> XPathNSResolver
+castToXPathNSResolver = castTo gTypeXPathNSResolver "XPathNSResolver"
+
+foreign import javascript unsafe "window[\"XPathNSResolver\"]" gTypeXPathNSResolver :: GType
+#else
+type IsXPathNSResolver o = XPathNSResolverClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.XPathResult".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/XPathResult Mozilla XPathResult documentation>
+newtype XPathResult = XPathResult { unXPathResult :: JSRef }
+
+instance Eq (XPathResult) where
+  (XPathResult a) == (XPathResult b) = js_eq a b
+
+instance PToJSRef XPathResult where
+  pToJSRef = unXPathResult
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef XPathResult where
+  pFromJSRef = XPathResult
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef XPathResult where
+  toJSRef = return . unXPathResult
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef XPathResult where
+  fromJSRef = return . fmap XPathResult . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject XPathResult where
+  toGObject = GObject . unXPathResult
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = XPathResult . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToXPathResult :: IsGObject obj => obj -> XPathResult
+castToXPathResult = castTo gTypeXPathResult "XPathResult"
+
+foreign import javascript unsafe "window[\"XPathResult\"]" gTypeXPathResult :: GType
+#else
+type IsXPathResult o = XPathResultClass o
+#endif
+
+
+#if (defined(ghcjs_HOST_OS) && defined(USE_JAVASCRIPTFFI)) || !defined(USE_WEBKIT)
+-- | Functions for this inteface are in "GHCJS.DOM.XSLTProcessor".
+--
+-- <https://developer.mozilla.org/en-US/docs/Web/API/XSLTProcessor Mozilla XSLTProcessor documentation>
+newtype XSLTProcessor = XSLTProcessor { unXSLTProcessor :: JSRef }
+
+instance Eq (XSLTProcessor) where
+  (XSLTProcessor a) == (XSLTProcessor b) = js_eq a b
+
+instance PToJSRef XSLTProcessor where
+  pToJSRef = unXSLTProcessor
+  {-# INLINE pToJSRef #-}
+
+instance PFromJSRef XSLTProcessor where
+  pFromJSRef = XSLTProcessor
+  {-# INLINE pFromJSRef #-}
+
+instance ToJSRef XSLTProcessor where
+  toJSRef = return . unXSLTProcessor
+  {-# INLINE toJSRef #-}
+
+instance FromJSRef XSLTProcessor where
+  fromJSRef = return . fmap XSLTProcessor . maybeJSNullOrUndefined
+  {-# INLINE fromJSRef #-}
+
+instance IsGObject XSLTProcessor where
+  toGObject = GObject . unXSLTProcessor
+  {-# INLINE toGObject #-}
+  unsafeCastGObject = XSLTProcessor . unGObject
+  {-# INLINE unsafeCastGObject #-}
+
+castToXSLTProcessor :: IsGObject obj => obj -> XSLTProcessor
+castToXSLTProcessor = castTo gTypeXSLTProcessor "XSLTProcessor"
+
+foreign import javascript unsafe "window[\"XSLTProcessor\"]" gTypeXSLTProcessor :: GType
 #endif
 
 
