Safe Haskell | None |
---|---|
Language | Haskell2010 |
Deals with JavaScript values. These can be
- null
- undefined
- true | false
- a double precision floating point number
- a string
- an object
- type JSVal = ForeignPtr OpaqueJSValue
- class ToJSVal a where
- data JSNull = JSNull
- type JSUndefined = ()
- type JSString = ForeignPtr OpaqueJSString
- data JSValue
- showJSValue :: JSValue -> String
- valToBool :: ToJSVal value => value -> JSM Bool
- valToNumber :: ToJSVal value => value -> JSM Double
- valToStr :: ToJSVal value => value -> JSM JSString
- valToObject :: ToJSVal value => value -> JSM Object
- valToText :: ToJSVal value => value -> JSM Text
- valToJSON :: ToJSVal value => Word -> value -> JSM JSString
- val :: ToJSVal value => value -> JSM JSVal
- valMakeNull :: JSM JSVal
- valIsNull :: ToJSVal value => value -> JSM Bool
- valMakeUndefined :: JSM JSVal
- valIsUndefined :: ToJSVal value => value -> JSM Bool
- maybeNullOrUndefined :: ToJSVal value => value -> JSM (Maybe JSVal)
- maybeNullOrUndefined' :: ToJSVal value => (JSVal -> JSM a) -> value -> JSM (Maybe a)
- valMakeBool :: Bool -> JSM JSVal
- valMakeNumber :: Double -> JSM JSVal
- valMakeString :: JSString -> JSM JSVal
- deRefVal :: ToJSVal value => value -> JSM JSValue
- valMakeRef :: JSValue -> JSM JSVal
- strictEqual :: (ToJSVal a, ToJSVal b) => a -> b -> JSM Bool
- instanceOf :: (ToJSVal value, MakeObject constructor) => value -> constructor -> JSM Bool
JavaScript value references
type JSVal = ForeignPtr OpaqueJSValue Source
Anything that can be used to make a JavaScript value reference
Haskell types for JavaScript values
JSNull | Type that represents a value that can only be null. Haskell of course has no null so we are adding this type. |
type JSUndefined Source
= () | A type that can only be undefined in JavaScript. Using ()
because functions in JavaScript that have no return, impicitly
return undefined.
type JSBool = Bool -- ^ JavaScript boolean values map the |
type JSString = ForeignPtr OpaqueJSString Source
An algebraic data type that can represent a JavaScript value. Any JavaScriptCore
JSVal
can be converted into this type.
showJSValue :: JSValue -> String Source
Show a JSValue but just say "object" if the value is a JavaScript object.
Converting JavaScript values
valToBool :: ToJSVal value => value -> JSM Bool Source
Given a JavaScript value get its boolean value. All values in JavaScript convert to bool.
>>>
testJSaddle $ valToBool JSNull
false>>>
testJSaddle $ valToBool ()
false>>>
testJSaddle $ valToBool True
true>>>
testJSaddle $ valToBool False
false>>>
testJSaddle $ valToBool (1.0 :: Double)
true>>>
testJSaddle $ valToBool (0.0 :: Double)
false>>>
testJSaddle $ valToBool ""
false>>>
testJSaddle $ valToBool "1"
true
valToNumber :: ToJSVal value => value -> JSM Double Source
Given a JavaScript value get its numeric value. May throw JSException.
>>>
testJSaddle $ show <$> valToNumber JSNull
0.0>>>
testJSaddle $ show <$> valToNumber ()
NaN>>>
testJSaddle $ show <$> valToNumber True
1.0>>>
testJSaddle $ show <$> valToNumber False
0.0>>>
testJSaddle $ show <$> valToNumber (1.0 :: Double)
1.0>>>
testJSaddle $ show <$> valToNumber (0.0 :: Double)
0.0>>>
testJSaddle $ show <$> valToNumber ""
0.0>>>
testJSaddle $ show <$> valToNumber "1"
1.0
valToStr :: ToJSVal value => value -> JSM JSString Source
Given a JavaScript value get its string value (as a JavaScript string). May throw JSException.
>>>
testJSaddle $ valToStr JSNull >>= strToText
null>>>
testJSaddle $ valToStr () >>= strToText
undefined>>>
testJSaddle $ valToStr True >>= strToText
true>>>
testJSaddle $ valToStr False >>= strToText
false>>>
testJSaddle $ valToStr (1.0 :: Double) >>= strToText
1>>>
testJSaddle $ valToStr (0.0 :: Double) >>= strToText
0>>>
testJSaddle $ valToStr "" >>= strToText
>>>
testJSaddle $ valToStr "1" >>= strToText
1
valToObject :: ToJSVal value => value -> JSM Object Source
Given a JavaScript value get its object value. May throw JSException.
>>>
testJSaddle $ (valToObject JSNull >>= valToText) `catch` \ (JSException e) -> valToText e
TypeError:...null...is not an object>>>
testJSaddle $ (valToObject () >>= valToText) `catch` \ (JSException e) -> valToText e
TypeError:...undefined...is not an object>>>
testJSaddle $ valToObject True
true>>>
testJSaddle $ valToObject False
false>>>
testJSaddle $ valToObject (1.0 :: Double)
1>>>
testJSaddle $ valToObject (0.0 :: Double)
0>>>
testJSaddle $ valToObject ""
>>>
testJSaddle $ valToObject "1"
1
valToText :: ToJSVal value => value -> JSM Text Source
Given a JavaScript value get its string value (as a Haskell Text
).
May throw JSException.
>>>
testJSaddle $ show <$> valToText JSNull
"null">>>
testJSaddle $ show <$> valToText ()
"undefined">>>
testJSaddle $ show <$> valToText True
"true">>>
testJSaddle $ show <$> valToText False
"false">>>
testJSaddle $ show <$> valToText (1.0 :: Double)
"1">>>
testJSaddle $ show <$> valToText (0.0 :: Double)
"0">>>
testJSaddle $ show <$> valToText ""
"">>>
testJSaddle $ show <$> valToText "1"
"1"
valToJSON :: ToJSVal value => Word -> value -> JSM JSString Source
Given a JavaScript value get a JSON string value. May throw JSException.
>>>
testJSaddle $ valToJSON 0 JSNull >>= strToText
null>>>
testJSaddle $ valToJSON 0 () >>= strToText
>>>
testJSaddle $ valToJSON 0 True >>= strToText
true>>>
testJSaddle $ valToJSON 0 False >>= strToText
false>>>
testJSaddle $ valToJSON 0 (1.0 :: Double) >>= strToText
1>>>
testJSaddle $ valToJSON 0 (0.0 :: Double) >>= strToText
0>>>
testJSaddle $ valToJSON 0 "" >>= strToText
"">>>
testJSaddle $ valToJSON 0 "1" >>= strToText
"1">>>
testJSaddle $ obj >>= valToJSON 0 >>= strToText
{}
Make JavaScript values from Haskell ones
Convert to a JavaScript value (just an alias for toJSVal
)
valMakeNull :: JSM JSVal Source
Make a null
JavaScript value
valMakeUndefined :: JSM JSVal Source
Make an undefined
JavaScript value
valIsUndefined :: ToJSVal value => value -> JSM Bool Source
Test a JavaScript value to see if it is undefined
maybeNullOrUndefined :: ToJSVal value => value -> JSM (Maybe JSVal) Source
Convert a JSVal to a Maybe JSVal (converting null and undefined to Nothing)
valMakeBool :: Bool -> JSM JSVal Source
Make a JavaScript boolean value
valMakeNumber :: Double -> JSM JSVal Source
Make a JavaScript number
Convert to and from JSValue
deRefVal :: ToJSVal value => value -> JSM JSValue Source
Derefernce a value reference.
>>>
testJSaddle $ showJSValue <$> deRefVal JSNull
null>>>
testJSaddle $ showJSValue <$> deRefVal ()
undefined>>>
testJSaddle $ showJSValue <$> deRefVal True
true>>>
testJSaddle $ showJSValue <$> deRefVal False
false>>>
testJSaddle $ showJSValue <$> deRefVal (1.0 :: Double)
1.0>>>
testJSaddle $ showJSValue <$> deRefVal (0.0 :: Double)
0.0>>>
testJSaddle $ showJSValue <$> deRefVal ""
"">>>
testJSaddle $ showJSValue <$> deRefVal "1"
"1">>>
testJSaddle $ showJSValue <$> (valToObject True >>= deRefVal)
object
valMakeRef :: JSValue -> JSM JSVal Source
Make a JavaScript value out of a JSValue
ADT.
>>>
testJSaddle $ valMakeRef ValNull
null>>>
testJSaddle $ valMakeRef ValUndefined
undefined>>>
testJSaddle $ valMakeRef (ValBool True)
true>>>
testJSaddle $ valMakeRef (ValNumber 1)
1>>>
testJSaddle $ valMakeRef (ValString $ T.pack "Hello")
Hello
instanceOf :: (ToJSVal value, MakeObject constructor) => value -> constructor -> JSM Bool Source