module JavaScript.Extras.JSVar where
import Control.DeepSeq
import Data.Coerce
import Data.JSString as JS
import Data.String
import qualified GHCJS.Marshal.Pure as J
import qualified GHCJS.Types as J
import JavaScript.Extras.Cast as JE
newtype JSVar = JSVar J.JSVal
instance J.IsJSVal JSVar
instance J.PToJSVal JSVar where
pToJSVal = J.jsval
instance JE.ToJS JSVar
instance JE.FromJS JSVar where
fromJS v = coerce (fromJS v :: Maybe J.JSVal)
instance IsString JSVar where
fromString = JSVar . J.jsval . JS.pack
instance NFData JSVar where
rnf (JSVar v) = rnf v
toJS' :: JE.ToJS a => a -> JSVar
toJS' = JSVar . toJS
fromJS' :: JE.FromJS a => JSVar -> Maybe a
fromJS' (JSVar v) = fromJS v