jsaddle-0.3.0.2: 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 ToJSVal a where Source

Anything that can be used to make a JavaScript value reference

Methods

toJSVal :: a -> JSM JSVal Source

Instances

ToJSVal Object Source 
ToJSVal JSValue Source

Makes a JavaScript value from a JSValue ADT.

ToJSVal JSNull Source

Makes a null JavaScript value

ToJSVal Function Source 

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

ToJSVal JSNull Source

Makes a null JavaScript value

MakeArgs JSNull Source

Makes an argument list with just a single 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 = Bool -- ^ JavaScript boolean values map the Bool haskell type. type JSNumber = Double -- ^ A number in JavaScript maps nicely to Double. type JSString = 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 JSVal can be converted into this type.

Constructors

ValNull

null

ValUndefined

undefined

ValBool Bool

true or false

ValNumber Double

a number

ValString Text

a string

ValObject Object

an object

Instances

ToJSVal JSValue Source

Makes a JavaScript value from a JSValue ADT.

MakeArgs JSValue Source

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

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

val Source

Arguments

:: ToJSVal value 
=> value

value to convert to a JavaScript value

-> JSM JSVal 

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

valMakeNull :: JSM JSVal Source

Make a null JavaScript value

valIsNull :: ToJSVal value => value -> JSM Bool Source

Test a JavaScript value to see if it is null

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)

maybeNullOrUndefined' :: ToJSVal value => (JSVal -> JSM a) -> value -> JSM (Maybe a) Source

valMakeBool :: Bool -> JSM JSVal Source

Make a JavaScript boolean value

valMakeNumber :: Double -> JSM JSVal Source

Make a JavaScript number

valMakeString :: JSString -> JSM JSVal Source

Make a JavaScript string from JSString

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

strictEqual :: (ToJSVal a, ToJSVal b) => a -> b -> JSM Bool Source

instanceOf :: (ToJSVal value, MakeObject constructor) => value -> constructor -> JSM Bool Source