jsaddle-0.2.1.0: High level interface for webkit-javascriptcore

Safe HaskellNone
LanguageHaskell2010

Language.Javascript.JSaddle.Value

Contents

Description

Deals with JavaScript values. These can be

  • null
  • undefined
  • true | false
  • a double precision floating point number
  • a string
  • an object

Synopsis

JavaScript value references

class MakeValueRef a where Source

Anything that can be used to make a JavaScript value reference

Instances

MakeValueRef Bool

Make a JavaScript boolean value

MakeValueRef Double

Makes a JavaScript number

MakeValueRef String

Makes a JavaScript string

MakeValueRef Text

Makes a JavaScript string

MakeValueRef JSValueRef

If we already have a JSValueRef we are fine

MakeValueRef JSPropRef

We can use a property as a value.

MakeValueRef JSValue

Makes a JavaScript value from a JSValue ADT.

MakeValueRef JSUndefined

Makes an undefined JavaScript value

MakeValueRef JSNull

Makes a null JavaScript value

MakeValueRef JSCallAsFunction

A callback to Haskell can be used as a JavaScript value. This will create an anonymous JavaScript function object. Use function to create one with a name.

MakeValueRef v => MakeValueRef (JSM v)

JSValueRef can be made by evaluating a function in JSM as long as it returns something we can make into a JSValueRef.

Haskell types for JavaScript values

data JSNull Source

Constructors

JSNull

Type that represents a value that can only be null. Haskell of course has no null so we are adding this type.

Instances

MakeObjectRef JSNull 
MakeArgRefs JSNull

Makes an argument list with just a single null JavaScript value

MakeValueRef JSNull

Makes a null JavaScript value

type JSUndefined Source

Arguments

 = ()

A type that can only be undefined in JavaScript. Using () because functions in JavaScript that have no return, impicitly return undefined.

type JSBool Source

Arguments

 = Bool

JavaScript boolean values map the Bool haskell type.

type JSNumber Source

Arguments

 = Double

A number in JavaScript maps nicely to Double.

type JSString Source

Arguments

 = Text

JavaScript strings can be represented with the Haskell Text type.

data JSValue Source

An algebraic data type that can represent a JavaScript value. Any JavaScriptCore JSValueRef can be converted into this type.

Constructors

ValNull

null

ValUndefined

undefined

ValBool JSBool

true or false

ValNumber JSNumber

a number

ValString JSString

a string

ValObject JSObjectRef

an object

Instances

Eq JSValue 
Show JSValue 
MakeArgRefs JSValue

Makes an argument list with just a single JavaScript value from a JSValue ADT.

MakeValueRef JSValue

Makes a JavaScript value from a JSValue ADT.

Converting JavaScript values

valToBool :: MakeValueRef val => val -> JSM JSBool 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 :: MakeValueRef val => val -> JSM JSNumber 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 :: MakeValueRef val => val -> JSM JSStringRef 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 :: MakeValueRef val => val -> JSM JSObjectRef 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 :: MakeValueRef val => val -> 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 :: MakeValueRef val => Word -> val -> JSM JSStringRef 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

val Source

Arguments

:: MakeValueRef value 
=> value

value to convert to a JavaScript value

-> JSM JSValueRef 

Convert to a JavaScript value (just an alias for makeValueRef)

valMakeNull :: JSM JSValueRef Source

Make a null JavaScript value

valMakeUndefined :: JSM JSValueRef Source

Make an undefined JavaScript value

valMakeBool :: JSBool -> JSM JSValueRef Source

Make a JavaScript boolean value

valMakeNumber :: JSNumber -> JSM JSValueRef Source

Make a JavaScript number

valMakeString :: Text -> JSM JSValueRef Source

Make a JavaScript string

Conver to and from JSValue

deRefVal :: MakeValueRef val => val -> JSM JSValue Source

Derefernce a value reference.

>>> testJSaddle $ show <$> deRefVal JSNull
ValNull
>>> testJSaddle $ show <$> deRefVal ()
ValUndefined
>>> testJSaddle $ show <$> deRefVal True
ValBool True
>>> testJSaddle $ show <$> deRefVal False
ValBool False
>>> testJSaddle $ show <$> deRefVal (1.0 :: Double)
ValNumber 1.0
>>> testJSaddle $ show <$> deRefVal (0.0 :: Double)
ValNumber 0.0
>>> testJSaddle $ show <$> deRefVal ""
ValString ""
>>> testJSaddle $ show <$> deRefVal "1"
ValString "1"
>>> testJSaddle $ show <$> valToObject True >>= deRefVal
ValObject 0x...

valMakeRef :: JSValue -> JSM JSValueRef 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 $ pack "Hello")
"Hello"