{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE ImplicitParams, ConstraintKinds, KindSignatures #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
module JSDOM.Generated.WebSocket
(newWebSocket, newWebSocket', send, sendView, sendBlob, sendString,
close, pattern CONNECTING, pattern OPEN, pattern CLOSING,
pattern CLOSED, getUrl, getReadyState, getBufferedAmount, open,
message, error, closeEvent, getProtocol, getProtocolUnsafe,
getProtocolUnchecked, getExtensions, getExtensionsUnsafe,
getExtensionsUnchecked, setBinaryType, getBinaryType,
WebSocket(..), gTypeWebSocket)
where
import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, realToFrac, fmap, Show, Read, Eq, Ord, Maybe(..))
import qualified Prelude (error)
import Data.Typeable (Typeable)
import Data.Traversable (mapM)
import Language.Javascript.JSaddle (JSM(..), JSVal(..), JSString, strictEqual, toJSVal, valToStr, valToNumber, valToBool, js, jss, jsf, jsg, function, asyncFunction, new, array, jsUndefined, (!), (!!))
import Data.Int (Int64)
import Data.Word (Word, Word64)
import JSDOM.Types
import Control.Applicative ((<$>))
import Control.Monad (void)
import Control.Lens.Operators ((^.))
import JSDOM.EventTargetClosures (EventName, unsafeEventName, unsafeEventNameAsync)
import JSDOM.Enums
newWebSocket ::
(MonadDOM m, ToJSString url, ToJSString protocols) =>
url -> [protocols] -> m WebSocket
newWebSocket :: forall (m :: * -> *) url protocols.
(MonadDOM m, ToJSString url, ToJSString protocols) =>
url -> [protocols] -> m WebSocket
newWebSocket url
url [protocols]
protocols
= DOM WebSocket -> m WebSocket
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM
(JSVal -> WebSocket
WebSocket (JSVal -> WebSocket) -> JSM JSVal -> DOM WebSocket
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
JSM JSVal -> [JSM JSVal] -> JSM JSVal
forall constructor args.
(MakeObject constructor, MakeArgs args) =>
constructor -> args -> JSM JSVal
new (String -> JSM JSVal
forall a. ToJSString a => a -> JSM JSVal
jsg String
"WebSocket") [url -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal url
url, JSM Object -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal ([protocols] -> JSM Object
forall args. MakeArgs args => args -> JSM Object
array [protocols]
protocols)])
newWebSocket' ::
(MonadDOM m, ToJSString url, ToJSString protocol) =>
url -> protocol -> m WebSocket
newWebSocket' :: forall (m :: * -> *) url protocol.
(MonadDOM m, ToJSString url, ToJSString protocol) =>
url -> protocol -> m WebSocket
newWebSocket' url
url protocol
protocol
= DOM WebSocket -> m WebSocket
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM
(JSVal -> WebSocket
WebSocket (JSVal -> WebSocket) -> JSM JSVal -> DOM WebSocket
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
JSM JSVal -> [JSM JSVal] -> JSM JSVal
forall constructor args.
(MakeObject constructor, MakeArgs args) =>
constructor -> args -> JSM JSVal
new (String -> JSM JSVal
forall a. ToJSString a => a -> JSM JSVal
jsg String
"WebSocket") [url -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal url
url, protocol -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal protocol
protocol])
send ::
(MonadDOM m, IsArrayBuffer data') => WebSocket -> data' -> m ()
send :: forall (m :: * -> *) data'.
(MonadDOM m, IsArrayBuffer data') =>
WebSocket -> data' -> m ()
send WebSocket
self data'
data'
= DOM () -> m ()
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM (JSM JSVal -> DOM ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (WebSocket
self WebSocket -> Getting (JSM JSVal) WebSocket (JSM JSVal) -> JSM JSVal
forall s a. s -> Getting a s a -> a
^. String -> [JSM JSVal] -> JSF
forall name args.
(ToJSString name, MakeArgs args) =>
name -> args -> JSF
jsf String
"send" [data' -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal data'
data']))
sendView ::
(MonadDOM m, IsArrayBufferView data') => WebSocket -> data' -> m ()
sendView :: forall (m :: * -> *) data'.
(MonadDOM m, IsArrayBufferView data') =>
WebSocket -> data' -> m ()
sendView WebSocket
self data'
data'
= DOM () -> m ()
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM (JSM JSVal -> DOM ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (WebSocket
self WebSocket -> Getting (JSM JSVal) WebSocket (JSM JSVal) -> JSM JSVal
forall s a. s -> Getting a s a -> a
^. String -> [JSM JSVal] -> JSF
forall name args.
(ToJSString name, MakeArgs args) =>
name -> args -> JSF
jsf String
"send" [data' -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal data'
data']))
sendBlob ::
(MonadDOM m, IsBlob data') => WebSocket -> data' -> m ()
sendBlob :: forall (m :: * -> *) data'.
(MonadDOM m, IsBlob data') =>
WebSocket -> data' -> m ()
sendBlob WebSocket
self data'
data'
= DOM () -> m ()
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM (JSM JSVal -> DOM ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (WebSocket
self WebSocket -> Getting (JSM JSVal) WebSocket (JSM JSVal) -> JSM JSVal
forall s a. s -> Getting a s a -> a
^. String -> [JSM JSVal] -> JSF
forall name args.
(ToJSString name, MakeArgs args) =>
name -> args -> JSF
jsf String
"send" [data' -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal data'
data']))
sendString ::
(MonadDOM m, ToJSString data') => WebSocket -> data' -> m ()
sendString :: forall (m :: * -> *) data'.
(MonadDOM m, ToJSString data') =>
WebSocket -> data' -> m ()
sendString WebSocket
self data'
data'
= DOM () -> m ()
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM (JSM JSVal -> DOM ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (WebSocket
self WebSocket -> Getting (JSM JSVal) WebSocket (JSM JSVal) -> JSM JSVal
forall s a. s -> Getting a s a -> a
^. String -> [JSM JSVal] -> JSF
forall name args.
(ToJSString name, MakeArgs args) =>
name -> args -> JSF
jsf String
"send" [data' -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal data'
data']))
close ::
(MonadDOM m, ToJSString reason) =>
WebSocket -> Maybe Word -> Maybe reason -> m ()
close :: forall (m :: * -> *) reason.
(MonadDOM m, ToJSString reason) =>
WebSocket -> Maybe Word -> Maybe reason -> m ()
close WebSocket
self Maybe Word
code Maybe reason
reason
= DOM () -> m ()
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM
(JSM JSVal -> DOM ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (WebSocket
self WebSocket -> Getting (JSM JSVal) WebSocket (JSM JSVal) -> JSM JSVal
forall s a. s -> Getting a s a -> a
^. String -> [JSM JSVal] -> JSF
forall name args.
(ToJSString name, MakeArgs args) =>
name -> args -> JSF
jsf String
"close" [Maybe Word -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal Maybe Word
code, Maybe reason -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal Maybe reason
reason]))
pattern $mCONNECTING :: forall {r} {a}.
(Eq a, Num a) =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
$bCONNECTING :: forall {a}. (Eq a, Num a) => a
CONNECTING = 0
pattern $mOPEN :: forall {r} {a}.
(Eq a, Num a) =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
$bOPEN :: forall {a}. (Eq a, Num a) => a
OPEN = 1
pattern $mCLOSING :: forall {r} {a}.
(Eq a, Num a) =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
$bCLOSING :: forall {a}. (Eq a, Num a) => a
CLOSING = 2
pattern $mCLOSED :: forall {r} {a}.
(Eq a, Num a) =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
$bCLOSED :: forall {a}. (Eq a, Num a) => a
CLOSED = 3
getUrl ::
(MonadDOM m, FromJSString result) => WebSocket -> m result
getUrl :: forall (m :: * -> *) result.
(MonadDOM m, FromJSString result) =>
WebSocket -> m result
getUrl WebSocket
self = DOM result -> m result
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM ((WebSocket
self WebSocket -> Getting (JSM JSVal) WebSocket (JSM JSVal) -> JSM JSVal
forall s a. s -> Getting a s a -> a
^. String -> IndexPreservingGetter WebSocket (JSM JSVal)
forall s name.
(MakeObject s, ToJSString name) =>
name -> IndexPreservingGetter s (JSM JSVal)
js String
"url") JSM JSVal -> (JSVal -> DOM result) -> DOM result
forall a b. JSM a -> (a -> JSM b) -> JSM b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= JSVal -> DOM result
forall a. FromJSVal a => JSVal -> JSM a
fromJSValUnchecked)
getReadyState :: (MonadDOM m) => WebSocket -> m Word
getReadyState :: forall (m :: * -> *). MonadDOM m => WebSocket -> m Word
getReadyState WebSocket
self
= DOM Word -> m Word
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM (Double -> Word
forall b. Integral b => Double -> b
forall a b. (RealFrac a, Integral b) => a -> b
round (Double -> Word) -> JSM Double -> DOM Word
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ((WebSocket
self WebSocket -> Getting (JSM JSVal) WebSocket (JSM JSVal) -> JSM JSVal
forall s a. s -> Getting a s a -> a
^. String -> IndexPreservingGetter WebSocket (JSM JSVal)
forall s name.
(MakeObject s, ToJSString name) =>
name -> IndexPreservingGetter s (JSM JSVal)
js String
"readyState") JSM JSVal -> (JSVal -> JSM Double) -> JSM Double
forall a b. JSM a -> (a -> JSM b) -> JSM b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= JSVal -> JSM Double
forall value. ToJSVal value => value -> JSM Double
valToNumber))
getBufferedAmount :: (MonadDOM m) => WebSocket -> m Word
getBufferedAmount :: forall (m :: * -> *). MonadDOM m => WebSocket -> m Word
getBufferedAmount WebSocket
self
= DOM Word -> m Word
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM
(Double -> Word
forall b. Integral b => Double -> b
forall a b. (RealFrac a, Integral b) => a -> b
round (Double -> Word) -> JSM Double -> DOM Word
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ((WebSocket
self WebSocket -> Getting (JSM JSVal) WebSocket (JSM JSVal) -> JSM JSVal
forall s a. s -> Getting a s a -> a
^. String -> IndexPreservingGetter WebSocket (JSM JSVal)
forall s name.
(MakeObject s, ToJSString name) =>
name -> IndexPreservingGetter s (JSM JSVal)
js String
"bufferedAmount") JSM JSVal -> (JSVal -> JSM Double) -> JSM Double
forall a b. JSM a -> (a -> JSM b) -> JSM b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= JSVal -> JSM Double
forall value. ToJSVal value => value -> JSM Double
valToNumber))
open :: EventName WebSocket Event
open :: EventName WebSocket Event
open = DOMString -> EventName WebSocket Event
forall t e. DOMString -> EventName t e
unsafeEventNameAsync (String -> DOMString
forall a. ToJSString a => a -> DOMString
toJSString String
"open")
message :: EventName WebSocket MessageEvent
message :: EventName WebSocket MessageEvent
message = DOMString -> EventName WebSocket MessageEvent
forall t e. DOMString -> EventName t e
unsafeEventNameAsync (String -> DOMString
forall a. ToJSString a => a -> DOMString
toJSString String
"message")
error :: EventName WebSocket UIEvent
error :: EventName WebSocket UIEvent
error = DOMString -> EventName WebSocket UIEvent
forall t e. DOMString -> EventName t e
unsafeEventNameAsync (String -> DOMString
forall a. ToJSString a => a -> DOMString
toJSString String
"error")
closeEvent :: EventName WebSocket CloseEvent
closeEvent :: EventName WebSocket CloseEvent
closeEvent = DOMString -> EventName WebSocket CloseEvent
forall t e. DOMString -> EventName t e
unsafeEventNameAsync (String -> DOMString
forall a. ToJSString a => a -> DOMString
toJSString String
"close")
getProtocol ::
(MonadDOM m, FromJSString result) => WebSocket -> m (Maybe result)
getProtocol :: forall (m :: * -> *) result.
(MonadDOM m, FromJSString result) =>
WebSocket -> m (Maybe result)
getProtocol WebSocket
self
= DOM (Maybe result) -> m (Maybe result)
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM ((WebSocket
self WebSocket -> Getting (JSM JSVal) WebSocket (JSM JSVal) -> JSM JSVal
forall s a. s -> Getting a s a -> a
^. String -> IndexPreservingGetter WebSocket (JSM JSVal)
forall s name.
(MakeObject s, ToJSString name) =>
name -> IndexPreservingGetter s (JSM JSVal)
js String
"protocol") JSM JSVal -> (JSVal -> DOM (Maybe result)) -> DOM (Maybe result)
forall a b. JSM a -> (a -> JSM b) -> JSM b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= JSVal -> DOM (Maybe result)
forall a. FromJSString a => JSVal -> JSM (Maybe a)
fromMaybeJSString)
getProtocolUnsafe ::
(MonadDOM m, HasCallStack, FromJSString result) =>
WebSocket -> m result
getProtocolUnsafe :: forall (m :: * -> *) result.
(MonadDOM m, HasCallStack, FromJSString result) =>
WebSocket -> m result
getProtocolUnsafe WebSocket
self
= DOM result -> m result
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM
(((WebSocket
self WebSocket -> Getting (JSM JSVal) WebSocket (JSM JSVal) -> JSM JSVal
forall s a. s -> Getting a s a -> a
^. String -> IndexPreservingGetter WebSocket (JSM JSVal)
forall s name.
(MakeObject s, ToJSString name) =>
name -> IndexPreservingGetter s (JSM JSVal)
js String
"protocol") JSM JSVal -> (JSVal -> JSM (Maybe result)) -> JSM (Maybe result)
forall a b. JSM a -> (a -> JSM b) -> JSM b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= JSVal -> JSM (Maybe result)
forall a. FromJSString a => JSVal -> JSM (Maybe a)
fromMaybeJSString) JSM (Maybe result) -> (Maybe result -> DOM result) -> DOM result
forall a b. JSM a -> (a -> JSM b) -> JSM b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>=
DOM result -> (result -> DOM result) -> Maybe result -> DOM result
forall b a. b -> (a -> b) -> Maybe a -> b
maybe (String -> DOM result
forall a. HasCallStack => String -> a
Prelude.error String
"Nothing to return") result -> DOM result
forall a. a -> JSM a
forall (m :: * -> *) a. Monad m => a -> m a
return)
getProtocolUnchecked ::
(MonadDOM m, FromJSString result) => WebSocket -> m result
getProtocolUnchecked :: forall (m :: * -> *) result.
(MonadDOM m, FromJSString result) =>
WebSocket -> m result
getProtocolUnchecked WebSocket
self
= DOM result -> m result
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM ((WebSocket
self WebSocket -> Getting (JSM JSVal) WebSocket (JSM JSVal) -> JSM JSVal
forall s a. s -> Getting a s a -> a
^. String -> IndexPreservingGetter WebSocket (JSM JSVal)
forall s name.
(MakeObject s, ToJSString name) =>
name -> IndexPreservingGetter s (JSM JSVal)
js String
"protocol") JSM JSVal -> (JSVal -> DOM result) -> DOM result
forall a b. JSM a -> (a -> JSM b) -> JSM b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= JSVal -> DOM result
forall a. FromJSVal a => JSVal -> JSM a
fromJSValUnchecked)
getExtensions ::
(MonadDOM m, FromJSString result) => WebSocket -> m (Maybe result)
getExtensions :: forall (m :: * -> *) result.
(MonadDOM m, FromJSString result) =>
WebSocket -> m (Maybe result)
getExtensions WebSocket
self
= DOM (Maybe result) -> m (Maybe result)
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM ((WebSocket
self WebSocket -> Getting (JSM JSVal) WebSocket (JSM JSVal) -> JSM JSVal
forall s a. s -> Getting a s a -> a
^. String -> IndexPreservingGetter WebSocket (JSM JSVal)
forall s name.
(MakeObject s, ToJSString name) =>
name -> IndexPreservingGetter s (JSM JSVal)
js String
"extensions") JSM JSVal -> (JSVal -> DOM (Maybe result)) -> DOM (Maybe result)
forall a b. JSM a -> (a -> JSM b) -> JSM b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= JSVal -> DOM (Maybe result)
forall a. FromJSString a => JSVal -> JSM (Maybe a)
fromMaybeJSString)
getExtensionsUnsafe ::
(MonadDOM m, HasCallStack, FromJSString result) =>
WebSocket -> m result
getExtensionsUnsafe :: forall (m :: * -> *) result.
(MonadDOM m, HasCallStack, FromJSString result) =>
WebSocket -> m result
getExtensionsUnsafe WebSocket
self
= DOM result -> m result
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM
(((WebSocket
self WebSocket -> Getting (JSM JSVal) WebSocket (JSM JSVal) -> JSM JSVal
forall s a. s -> Getting a s a -> a
^. String -> IndexPreservingGetter WebSocket (JSM JSVal)
forall s name.
(MakeObject s, ToJSString name) =>
name -> IndexPreservingGetter s (JSM JSVal)
js String
"extensions") JSM JSVal -> (JSVal -> JSM (Maybe result)) -> JSM (Maybe result)
forall a b. JSM a -> (a -> JSM b) -> JSM b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= JSVal -> JSM (Maybe result)
forall a. FromJSString a => JSVal -> JSM (Maybe a)
fromMaybeJSString) JSM (Maybe result) -> (Maybe result -> DOM result) -> DOM result
forall a b. JSM a -> (a -> JSM b) -> JSM b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>=
DOM result -> (result -> DOM result) -> Maybe result -> DOM result
forall b a. b -> (a -> b) -> Maybe a -> b
maybe (String -> DOM result
forall a. HasCallStack => String -> a
Prelude.error String
"Nothing to return") result -> DOM result
forall a. a -> JSM a
forall (m :: * -> *) a. Monad m => a -> m a
return)
getExtensionsUnchecked ::
(MonadDOM m, FromJSString result) => WebSocket -> m result
getExtensionsUnchecked :: forall (m :: * -> *) result.
(MonadDOM m, FromJSString result) =>
WebSocket -> m result
getExtensionsUnchecked WebSocket
self
= DOM result -> m result
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM ((WebSocket
self WebSocket -> Getting (JSM JSVal) WebSocket (JSM JSVal) -> JSM JSVal
forall s a. s -> Getting a s a -> a
^. String -> IndexPreservingGetter WebSocket (JSM JSVal)
forall s name.
(MakeObject s, ToJSString name) =>
name -> IndexPreservingGetter s (JSM JSVal)
js String
"extensions") JSM JSVal -> (JSVal -> DOM result) -> DOM result
forall a b. JSM a -> (a -> JSM b) -> JSM b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= JSVal -> DOM result
forall a. FromJSVal a => JSVal -> JSM a
fromJSValUnchecked)
setBinaryType ::
(MonadDOM m, ToJSString val) => WebSocket -> val -> m ()
setBinaryType :: forall (m :: * -> *) data'.
(MonadDOM m, ToJSString data') =>
WebSocket -> data' -> m ()
setBinaryType WebSocket
self val
val
= DOM () -> m ()
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM (WebSocket
self WebSocket -> Getting (DOM ()) WebSocket (DOM ()) -> DOM ()
forall s a. s -> Getting a s a -> a
^. String
-> JSM JSVal
-> forall o. MakeObject o => IndexPreservingGetter o (DOM ())
forall name val.
(ToJSString name, ToJSVal val) =>
name
-> val
-> forall o. MakeObject o => IndexPreservingGetter o (DOM ())
jss String
"binaryType" (val -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal val
val))
getBinaryType ::
(MonadDOM m, FromJSString result) => WebSocket -> m result
getBinaryType :: forall (m :: * -> *) result.
(MonadDOM m, FromJSString result) =>
WebSocket -> m result
getBinaryType WebSocket
self
= DOM result -> m result
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM ((WebSocket
self WebSocket -> Getting (JSM JSVal) WebSocket (JSM JSVal) -> JSM JSVal
forall s a. s -> Getting a s a -> a
^. String -> IndexPreservingGetter WebSocket (JSM JSVal)
forall s name.
(MakeObject s, ToJSString name) =>
name -> IndexPreservingGetter s (JSM JSVal)
js String
"binaryType") JSM JSVal -> (JSVal -> DOM result) -> DOM result
forall a b. JSM a -> (a -> JSM b) -> JSM b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= JSVal -> DOM result
forall a. FromJSVal a => JSVal -> JSM a
fromJSValUnchecked)