content: {-# LANGUAGE CPP #-}
  -----------------------------------------------------------------------------
  --
  -- Module      :  Language.Javascript.JSaddle.Value
  -- Copyright   :  (c) Hamish Mackenzie
  -- License     :  MIT
  --
  -- Maintainer  :  Hamish Mackenzie <Hamish.K.Mackenzie@googlemail.com>
  --
  -- |
  --
  -----------------------------------------------------------------------------
  module GHCJS.Foreign (
      jsTrue
    , jsFalse
    , jsNull
    , toJSBool
  --  , fromJSBool
    , 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 v = GHCJSPure $ jsg1 "h$isObject" v >>= fromJSValUnchecked
  {-# INLINE isObject #-}
  
  isFunction :: JSVal -> GHCJSPure Bool
  isFunction v = GHCJSPure $ jsg1 "h$isFunction" v >>= fromJSValUnchecked
  {-# INLINE isFunction #-}
  
  isString :: JSVal -> GHCJSPure Bool
  isString v = GHCJSPure $ jsg1 "h$isString" v >>= fromJSValUnchecked
  {-# INLINE isString #-}
  
  isBoolean :: JSVal -> GHCJSPure Bool
  isBoolean v = GHCJSPure $ jsg1 "h$isBoolean" v >>= fromJSValUnchecked
  {-# INLINE isBoolean #-}
  
  isSymbol :: JSVal -> GHCJSPure Bool
  isSymbol v = GHCJSPure $ jsg1 "h$isSymbol" v >>= fromJSValUnchecked
  {-# INLINE isSymbol #-}
  
  isNumber :: JSVal -> GHCJSPure Bool
  isNumber v = GHCJSPure $ jsg1 "h$isNumber" v >>= fromJSValUnchecked
  {-# INLINE isNumber #-}
  
  jsTypeOf :: JSVal -> GHCJSPure JSType
  jsTypeOf v = GHCJSPure $ toEnum <$> (jsg1 "h$jsonTypeOf" v >>= fromJSValUnchecked)
  {-# INLINE jsTypeOf #-}
  