jsaddle-0.2.0.6: 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 JSValue Source

Makes a JavaScript value from a JSValue ADT.

MakeValueRef JSNull Source

Makes a null JavaScript value

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 Source 
MakeArgRefs JSNull Source

Makes an argument list with just a single null JavaScript value

MakeValueRef JSNull Source

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 Source 
Show JSValue Source 
MakeArgRefs JSValue Source

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

MakeValueRef JSValue Source

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"