jsaddle-0.5.0.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 ToJSVal a where Source #

Anything that can be used to make a JavaScript value reference

Minimal complete definition

toJSVal

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

Methods

makeArgs :: JSNull -> JSM [JSVal] Source #

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.

Methods

makeArgs :: JSValue -> JSM [JSVal] Source #

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 $ strToText <$> valToStr JSNull
null
>>> testJSaddle $ strToText <$> valToStr ()
undefined
>>> testJSaddle $ strToText <$> valToStr True
true
>>> testJSaddle $ strToText <$> valToStr False
false
>>> testJSaddle $ strToText <$> valToStr (1.0 :: Double)
1
>>> testJSaddle $ strToText <$> valToStr (0.0 :: Double)
0
>>> testJSaddle $ strToText <$> valToStr ""

>>> testJSaddle $ strToText <$> valToStr "1"
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
null
>>> testJSaddle $ (valToObject () >>= valToText) `catch` \ (JSException e) -> valToText e
undefined
>>> 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 => value -> JSM JSString Source #

Given a JavaScript value get a JSON string value. May throw JSException.

>>> testJSaddle $ strToText <$> valToJSON JSNull
null
>>> testJSaddle $ strToText <$> valToJSON ()

>>> testJSaddle $ strToText <$> valToJSON True
true
>>> testJSaddle $ strToText <$> valToJSON False
false
>>> testJSaddle $ strToText <$> valToJSON (1.0 :: Double)
1
>>> testJSaddle $ strToText <$> valToJSON (0.0 :: Double)
0
>>> testJSaddle $ strToText <$> valToJSON ""
""
>>> testJSaddle $ strToText <$> valToJSON "1"
"1"
>>> testJSaddle $ strToText <$> (obj >>= valToJSON)
{}

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)

valNull :: JSVal Source #

A null JavaScript value

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

Test a JavaScript value to see if it is null

valUndefined :: JSVal Source #

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 #

valBool :: Bool -> JSVal Source #

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)
true
>>> testJSaddle $ showJSValue <$> (obj >>= 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 #

Determine if two values are equal (JavaScripts ===) >>> testJSaddle $ strictEqual True False false >>> testJSaddle $ strictEqual True True true >>> testJSaddle $ strictEqual Hello () false >>> testJSaddle $ strictEqual Hello Hello true

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

Determine if two values are equal (JavaScripts ===) >>> testJSaddle $ instanceOf obj (Object $ jsg Object) true

Orphan instances

MakeObject JSVal Source # 
ToJSString String Source # 
ToJSString Text Source # 
ToJSString JSString Source #

If we already have a JSString we are fine

ToJSVal Bool Source #

Make a JavaScript boolean value

Methods

toJSVal :: Bool -> JSM JSVal Source #

ToJSVal Double Source #

Makes a JavaScript number

ToJSVal Float Source # 

Methods

toJSVal :: Float -> JSM JSVal Source #

ToJSVal Int Source # 

Methods

toJSVal :: Int -> JSM JSVal Source #

ToJSVal Int32 Source # 

Methods

toJSVal :: Int32 -> JSM JSVal Source #

ToJSVal Int64 Source # 

Methods

toJSVal :: Int64 -> JSM JSVal Source #

ToJSVal Word Source # 

Methods

toJSVal :: Word -> JSM JSVal Source #

ToJSVal Word32 Source # 
ToJSVal Word64 Source # 
ToJSVal String Source #

Makes a JavaScript string

ToJSVal Text Source #

Makes a JavaScript string

Methods

toJSVal :: Text -> JSM JSVal Source #

ToJSVal JSString Source #

Makes a JavaScript string

ToJSVal JSVal Source #

If we already have a JSVal we are fine

Methods

toJSVal :: JSVal -> JSM JSVal Source #

ToJSVal JSUndefined Source #

Makes an undefined JavaScript value

MakeArgs Bool Source #

Makes an argument list with just a single JavaScript boolean value

Methods

makeArgs :: Bool -> JSM [JSVal] Source #

MakeArgs Double Source #

Makes an argument list with just a single JavaScript number

Methods

makeArgs :: Double -> JSM [JSVal] Source #

MakeArgs () Source #

This allows us to pass no arguments easily (altenative would be to use []::[JSVal]).

Methods

makeArgs :: () -> JSM [JSVal] Source #

MakeArgs Text Source #

Makes an argument list with just a single JavaScript string

Methods

makeArgs :: Text -> JSM [JSVal] Source #

MakeArgs JSVal Source #

A single JSVal can be used as the argument list

Methods

makeArgs :: JSVal -> JSM [JSVal] Source #

ToJSVal a => ToJSVal (Maybe a) Source #

Makes a JSVal or null JavaScript value

Methods

toJSVal :: Maybe a -> JSM JSVal Source #

ToJSVal v => ToJSVal (JSM v) Source #

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

Methods

toJSVal :: JSM v -> JSM JSVal Source #