{-# LANGUAGE CPP #-}
module GHCJS.Foreign (
jsTrue
, jsFalse
, jsNull
, toJSBool
, jsUndefined
, isTruthy
, isNull
, isUndefined
, isObject
, isFunction
, isString
, isBoolean
, isSymbol
, isNumber
, JSType(..)
, jsTypeOf
) where
import GHCJS.Foreign.Internal
import Language.Javascript.JSaddle.Types (JSVal(..), GHCJSPure(..))
import Language.Javascript.JSaddle.Object (jsg1)
import GHCJS.Marshal (FromJSVal(..))
isObject :: JSVal -> GHCJSPure Bool
isObject :: JSVal -> GHCJSPure Bool
isObject JSVal
v = JSM Bool -> GHCJSPure Bool
forall a. JSM a -> GHCJSPure a
GHCJSPure (JSM Bool -> GHCJSPure Bool) -> JSM Bool -> GHCJSPure Bool
forall a b. (a -> b) -> a -> b
$ String -> JSVal -> JSM JSVal
forall name a0.
(ToJSString name, ToJSVal a0) =>
name -> a0 -> JSM JSVal
jsg1 String
"h$isObject" JSVal
v JSM JSVal -> (JSVal -> JSM Bool) -> JSM Bool
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 Bool
forall a. FromJSVal a => JSVal -> JSM a
fromJSValUnchecked
{-# INLINE isObject #-}
isFunction :: JSVal -> GHCJSPure Bool
isFunction :: JSVal -> GHCJSPure Bool
isFunction JSVal
v = JSM Bool -> GHCJSPure Bool
forall a. JSM a -> GHCJSPure a
GHCJSPure (JSM Bool -> GHCJSPure Bool) -> JSM Bool -> GHCJSPure Bool
forall a b. (a -> b) -> a -> b
$ String -> JSVal -> JSM JSVal
forall name a0.
(ToJSString name, ToJSVal a0) =>
name -> a0 -> JSM JSVal
jsg1 String
"h$isFunction" JSVal
v JSM JSVal -> (JSVal -> JSM Bool) -> JSM Bool
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 Bool
forall a. FromJSVal a => JSVal -> JSM a
fromJSValUnchecked
{-# INLINE isFunction #-}
isString :: JSVal -> GHCJSPure Bool
isString :: JSVal -> GHCJSPure Bool
isString JSVal
v = JSM Bool -> GHCJSPure Bool
forall a. JSM a -> GHCJSPure a
GHCJSPure (JSM Bool -> GHCJSPure Bool) -> JSM Bool -> GHCJSPure Bool
forall a b. (a -> b) -> a -> b
$ String -> JSVal -> JSM JSVal
forall name a0.
(ToJSString name, ToJSVal a0) =>
name -> a0 -> JSM JSVal
jsg1 String
"h$isString" JSVal
v JSM JSVal -> (JSVal -> JSM Bool) -> JSM Bool
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 Bool
forall a. FromJSVal a => JSVal -> JSM a
fromJSValUnchecked
{-# INLINE isString #-}
isBoolean :: JSVal -> GHCJSPure Bool
isBoolean :: JSVal -> GHCJSPure Bool
isBoolean JSVal
v = JSM Bool -> GHCJSPure Bool
forall a. JSM a -> GHCJSPure a
GHCJSPure (JSM Bool -> GHCJSPure Bool) -> JSM Bool -> GHCJSPure Bool
forall a b. (a -> b) -> a -> b
$ String -> JSVal -> JSM JSVal
forall name a0.
(ToJSString name, ToJSVal a0) =>
name -> a0 -> JSM JSVal
jsg1 String
"h$isBoolean" JSVal
v JSM JSVal -> (JSVal -> JSM Bool) -> JSM Bool
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 Bool
forall a. FromJSVal a => JSVal -> JSM a
fromJSValUnchecked
{-# INLINE isBoolean #-}
isSymbol :: JSVal -> GHCJSPure Bool
isSymbol :: JSVal -> GHCJSPure Bool
isSymbol JSVal
v = JSM Bool -> GHCJSPure Bool
forall a. JSM a -> GHCJSPure a
GHCJSPure (JSM Bool -> GHCJSPure Bool) -> JSM Bool -> GHCJSPure Bool
forall a b. (a -> b) -> a -> b
$ String -> JSVal -> JSM JSVal
forall name a0.
(ToJSString name, ToJSVal a0) =>
name -> a0 -> JSM JSVal
jsg1 String
"h$isSymbol" JSVal
v JSM JSVal -> (JSVal -> JSM Bool) -> JSM Bool
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 Bool
forall a. FromJSVal a => JSVal -> JSM a
fromJSValUnchecked
{-# INLINE isSymbol #-}
isNumber :: JSVal -> GHCJSPure Bool
isNumber :: JSVal -> GHCJSPure Bool
isNumber JSVal
v = JSM Bool -> GHCJSPure Bool
forall a. JSM a -> GHCJSPure a
GHCJSPure (JSM Bool -> GHCJSPure Bool) -> JSM Bool -> GHCJSPure Bool
forall a b. (a -> b) -> a -> b
$ String -> JSVal -> JSM JSVal
forall name a0.
(ToJSString name, ToJSVal a0) =>
name -> a0 -> JSM JSVal
jsg1 String
"h$isNumber" JSVal
v JSM JSVal -> (JSVal -> JSM Bool) -> JSM Bool
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 Bool
forall a. FromJSVal a => JSVal -> JSM a
fromJSValUnchecked
{-# INLINE isNumber #-}
jsTypeOf :: JSVal -> GHCJSPure JSType
jsTypeOf :: JSVal -> GHCJSPure JSType
jsTypeOf JSVal
v = JSM JSType -> GHCJSPure JSType
forall a. JSM a -> GHCJSPure a
GHCJSPure (JSM JSType -> GHCJSPure JSType) -> JSM JSType -> GHCJSPure JSType
forall a b. (a -> b) -> a -> b
$ Int -> JSType
forall a. Enum a => Int -> a
toEnum (Int -> JSType) -> JSM Int -> JSM JSType
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (String -> JSVal -> JSM JSVal
forall name a0.
(ToJSString name, ToJSVal a0) =>
name -> a0 -> JSM JSVal
jsg1 String
"h$jsonTypeOf" JSVal
v JSM JSVal -> (JSVal -> JSM Int) -> JSM Int
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 Int
forall a. FromJSVal a => JSVal -> JSM a
fromJSValUnchecked)
{-# INLINE jsTypeOf #-}