-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | High level interface for webkit-javascriptcore -- -- This package provides an EDSL for calling JavaScript code using the -- JavaScriptCore engine and low level Haskell bindings in the -- webkit-javascriptcore library -- https://github.com/ghcjs/webkit-javascriptcore. @package jsaddle @version 0.3.0.3 module Language.Javascript.JSaddle.Types type JSVal = ForeignPtr OpaqueJSValue type MutableJSArray = JSValueRefRef newtype Object Object :: (ForeignPtr OpaqueJSValue) -> Object type JSPropertyNameArray = JSPropertyNameArrayRef type JSPropertyAttributes = CUInt type JSContextRef = Ptr OpaqueJSContext type JSString = ForeignPtr OpaqueJSString type Index = CUInt newtype Nullable a Nullable :: a -> Nullable a -- | The JSM monad keeps track of the JavaScript context. -- -- Given a JSM function and a JSContextRef you can run -- the function like this... -- --
--   runReaderT jsmFunction javaScriptContext
--   
-- -- For an example of how to set up WebKitGTK+ see tests/TestJSaddle.hs type JSM = ReaderT JSContextRef IO -- | These classes are used to make various JavaScript types out of -- whatever we have. Functions in jsaddle take these as inputs. This -- alows implicit casting and eager evaluation. module Language.Javascript.JSaddle.Classes -- | Anything that can be used to make a JavaScript value reference class ToJSVal a toJSVal :: ToJSVal a => a -> JSM JSVal -- | Anything that can be used to make a JavaScript string reference class ToJSVal a => ToJSString a toJSString :: ToJSString a => a -> JSString -- | Anything that can be used to make a JavaScript object reference class MakeObject this makeObject :: MakeObject this => this -> JSM Object instance Language.Javascript.JSaddle.Classes.ToJSVal Language.Javascript.JSaddle.Types.Object instance Language.Javascript.JSaddle.Classes.MakeObject Language.Javascript.JSaddle.Types.Object module Language.Javascript.JSaddle.Native makeNewJSVal :: JSValueRef -> JSM (ForeignPtr OpaqueJSValue) makeNewJSString :: MonadIO m => JSStringRef -> m (ForeignPtr OpaqueJSString) wrapJSString :: MonadIO m => JSStringRef -> m (ForeignPtr OpaqueJSString) withJSVal :: MonadIO m => JSVal -> (JSValueRef -> m a) -> m a withJSVals :: MonadIO m => [JSVal] -> ([JSValueRef] -> m a) -> m a withObject :: MonadIO m => Object -> (JSObjectRef -> m a) -> m a withJSString :: MonadIO m => JSString -> (JSStringRef -> m a) -> m a withToJSVal :: ToJSVal val => val -> (JSValueRef -> JSM a) -> JSM a -- | JSM monad keeps track of the JavaScript context module Language.Javascript.JSaddle.Monad -- | The JSM monad keeps track of the JavaScript context. -- -- Given a JSM function and a JSContextRef you can run -- the function like this... -- --
--   runReaderT jsmFunction javaScriptContext
--   
-- -- For an example of how to set up WebKitGTK+ see tests/TestJSaddle.hs type JSM = ReaderT JSContextRef IO type JSContextRef = Ptr OpaqueJSContext runJSaddle :: WebView -> JSM a -> IO a -- | Handle JavaScriptCore functions that take a MutableJSArray in order to -- throw exceptions. catchval :: (MutableJSArray -> JSM a) -> (JSVal -> JSM a) -> JSM a -- | Wrapped version of catch that runs in a MonadIO that works a -- bit better with JSM catch :: (MonadIO m, Exception e) => ReaderT r IO b -> (e -> ReaderT r IO b) -> ReaderT r m b -- | Wrapped version of bracket that runs in a MonadIO that works a -- bit better with JSM bracket :: MonadIO m => ReaderT r IO a -> (a -> ReaderT r IO b) -> (a -> ReaderT r IO c) -> ReaderT r m c postGUIAsyncJS :: JSM () -> JSM () postGUISyncJS :: JSM a -> JSM a module Language.Javascript.JSaddle.Exception newtype JSException JSException :: JSVal -> JSException -- | Catch JavaScript exceptions and rethrow Haskell ones rethrow :: (MutableJSArray -> JSM a) -> JSM a instance GHC.Show.Show Language.Javascript.JSaddle.Exception.JSException instance GHC.Exception.Exception Language.Javascript.JSaddle.Exception.JSException module Language.Javascript.JSaddle.Arguments -- | Anything that can be used to make a list of JavaScript value -- references for use as function arguments class MakeArgs this makeArgs :: MakeArgs this => this -> JSM [JSVal] instance Language.Javascript.JSaddle.Arguments.MakeArgs arg => Language.Javascript.JSaddle.Arguments.MakeArgs (Language.Javascript.JSaddle.Types.JSM arg) instance Language.Javascript.JSaddle.Classes.ToJSVal arg => Language.Javascript.JSaddle.Arguments.MakeArgs [arg] instance (Language.Javascript.JSaddle.Classes.ToJSVal arg1, Language.Javascript.JSaddle.Classes.ToJSVal arg2) => Language.Javascript.JSaddle.Arguments.MakeArgs (arg1, arg2) instance (Language.Javascript.JSaddle.Classes.ToJSVal arg1, Language.Javascript.JSaddle.Classes.ToJSVal arg2, Language.Javascript.JSaddle.Classes.ToJSVal arg3) => Language.Javascript.JSaddle.Arguments.MakeArgs (arg1, arg2, arg3) instance (Language.Javascript.JSaddle.Classes.ToJSVal arg1, Language.Javascript.JSaddle.Classes.ToJSVal arg2, Language.Javascript.JSaddle.Classes.ToJSVal arg3, Language.Javascript.JSaddle.Classes.ToJSVal arg4) => Language.Javascript.JSaddle.Arguments.MakeArgs (arg1, arg2, arg3, arg4) instance (Language.Javascript.JSaddle.Classes.ToJSVal arg1, Language.Javascript.JSaddle.Classes.ToJSVal arg2, Language.Javascript.JSaddle.Classes.ToJSVal arg3, Language.Javascript.JSaddle.Classes.ToJSVal arg4, Language.Javascript.JSaddle.Classes.ToJSVal arg5) => Language.Javascript.JSaddle.Arguments.MakeArgs (arg1, arg2, arg3, arg4, arg5) instance (Language.Javascript.JSaddle.Classes.ToJSVal arg1, Language.Javascript.JSaddle.Classes.ToJSVal arg2, Language.Javascript.JSaddle.Classes.ToJSVal arg3, Language.Javascript.JSaddle.Classes.ToJSVal arg4, Language.Javascript.JSaddle.Classes.ToJSVal arg5, Language.Javascript.JSaddle.Classes.ToJSVal arg6) => Language.Javascript.JSaddle.Arguments.MakeArgs (arg1, arg2, arg3, arg4, arg5, arg6) -- | JavaScript string conversion functions module Language.Javascript.JSaddle.String type JSString = ForeignPtr OpaqueJSString -- | Anything that can be used to make a JavaScript string reference class ToJSVal a => ToJSString a toJSString :: ToJSString a => a -> JSString -- | Convert a JavaScript string to a Haskell Text strToText :: MonadIO m => JSString -> m Text -- | Convert a Haskell Text to a JavaScript string textToStr :: Text -> JSString nullJSString :: JSString -- | Deals with JavaScript values. These can be -- -- module Language.Javascript.JSaddle.Value type JSVal = ForeignPtr OpaqueJSValue -- | Anything that can be used to make a JavaScript value reference class ToJSVal a toJSVal :: ToJSVal a => a -> JSM JSVal data JSNull -- | Type that represents a value that can only be null. Haskell of course -- has no null so we are adding this type. JSNull :: JSNull type JSUndefined = () 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. type JSString = ForeignPtr OpaqueJSString -- | An algebraic data type that can represent a JavaScript value. Any -- JavaScriptCore JSVal can be converted into this type. data JSValue -- | null ValNull :: JSValue -- | undefined ValUndefined :: JSValue -- | true or false ValBool :: Bool -> JSValue -- | a number ValNumber :: Double -> JSValue -- | a string ValString :: Text -> JSValue -- | an object ValObject :: Object -> JSValue -- | Show a JSValue but just say "object" if the value is a JavaScript -- object. showJSValue :: JSValue -> String -- | 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
--   
valToBool :: ToJSVal value => value -> JSM Bool -- | 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
--   
valToNumber :: ToJSVal value => value -> JSM Double -- | 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
--   
valToStr :: ToJSVal value => value -> JSM JSString -- | 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
--   
valToObject :: ToJSVal value => value -> JSM Object -- | 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"
--   
valToText :: ToJSVal value => value -> JSM Text -- | 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
--   {}
--   
valToJSON :: ToJSVal value => Word -> value -> JSM JSString -- | Convert to a JavaScript value (just an alias for toJSVal) val :: ToJSVal value => value -> JSM JSVal -- | Make a null JavaScript value valMakeNull :: JSM JSVal -- | Test a JavaScript value to see if it is null valIsNull :: ToJSVal value => value -> JSM Bool -- | Make an undefined JavaScript value valMakeUndefined :: JSM JSVal -- | Test a JavaScript value to see if it is undefined valIsUndefined :: ToJSVal value => value -> JSM Bool -- | Convert a JSVal to a Maybe JSVal (converting null and undefined to -- Nothing) maybeNullOrUndefined :: ToJSVal value => value -> JSM (Maybe JSVal) maybeNullOrUndefined' :: ToJSVal value => (JSVal -> JSM a) -> value -> JSM (Maybe a) -- | Make a JavaScript boolean value valMakeBool :: Bool -> JSM JSVal -- | Make a JavaScript number valMakeNumber :: Double -> JSM JSVal -- | Make a JavaScript string from JSString valMakeString :: JSString -> JSM JSVal -- | 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
--   
deRefVal :: ToJSVal value => value -> JSM JSValue -- | 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
--   
valMakeRef :: JSValue -> JSM JSVal strictEqual :: (ToJSVal a, ToJSVal b) => a -> b -> JSM Bool instanceOf :: (ToJSVal value, MakeObject constructor) => value -> constructor -> JSM Bool instance Language.Javascript.JSaddle.Classes.MakeObject Language.Javascript.JSaddle.Types.JSVal instance Language.Javascript.JSaddle.Classes.ToJSVal Language.Javascript.JSaddle.Types.JSVal instance Language.Javascript.JSaddle.Arguments.MakeArgs Language.Javascript.JSaddle.Types.JSVal instance Language.Javascript.JSaddle.Classes.ToJSVal v => Language.Javascript.JSaddle.Classes.ToJSVal (Language.Javascript.JSaddle.Types.JSM v) instance Language.Javascript.JSaddle.Classes.ToJSVal Language.Javascript.JSaddle.Value.JSNull instance Language.Javascript.JSaddle.Arguments.MakeArgs Language.Javascript.JSaddle.Value.JSNull instance Language.Javascript.JSaddle.Classes.ToJSVal a => Language.Javascript.JSaddle.Classes.ToJSVal (GHC.Base.Maybe a) instance Language.Javascript.JSaddle.Classes.ToJSVal Language.Javascript.JSaddle.Value.JSUndefined instance Language.Javascript.JSaddle.Arguments.MakeArgs () instance Language.Javascript.JSaddle.Classes.ToJSVal GHC.Types.Bool instance Language.Javascript.JSaddle.Arguments.MakeArgs GHC.Types.Bool instance Language.Javascript.JSaddle.Classes.ToJSVal GHC.Types.Double instance Language.Javascript.JSaddle.Classes.ToJSVal GHC.Types.Float instance Language.Javascript.JSaddle.Classes.ToJSVal GHC.Types.Word instance Language.Javascript.JSaddle.Classes.ToJSVal GHC.Word.Word32 instance Language.Javascript.JSaddle.Classes.ToJSVal GHC.Word.Word64 instance Language.Javascript.JSaddle.Classes.ToJSVal GHC.Types.Int instance Language.Javascript.JSaddle.Classes.ToJSVal GHC.Int.Int32 instance Language.Javascript.JSaddle.Classes.ToJSVal GHC.Int.Int64 instance Language.Javascript.JSaddle.Arguments.MakeArgs GHC.Types.Double instance Language.Javascript.JSaddle.Classes.ToJSVal Data.Text.Internal.Text instance Language.Javascript.JSaddle.Arguments.MakeArgs Data.Text.Internal.Text instance Language.Javascript.JSaddle.Classes.ToJSVal GHC.Base.String instance Language.Javascript.JSaddle.Classes.ToJSVal Language.Javascript.JSaddle.Types.JSString instance Language.Javascript.JSaddle.Classes.ToJSString Language.Javascript.JSaddle.Types.JSString instance Language.Javascript.JSaddle.Classes.ToJSString Data.Text.Internal.Text instance Language.Javascript.JSaddle.Classes.ToJSString GHC.Base.String instance Language.Javascript.JSaddle.Classes.ToJSVal Language.Javascript.JSaddle.Value.JSValue instance Language.Javascript.JSaddle.Arguments.MakeArgs Language.Javascript.JSaddle.Value.JSValue -- | Low level JavaScript object property access. In most cases you should -- use Language.Javascript.JSaddle.Object instead. -- -- This module is mostly here to implement functions needed to use -- JSPropRef. module Language.Javascript.JSaddle.Properties -- | Get a property value given the object and the name of the property. objGetPropertyByName :: ToJSString name => Object -> name -> MutableJSArray -> JSM JSVal -- | Get a property value given the object and the index of the property. objGetPropertyAtIndex :: Object -> Index -> MutableJSArray -> JSM JSVal -- | Set a property value given the object and the name of the property. objSetPropertyByName :: (ToJSString name, ToJSVal val) => Object -> name -> val -> JSPropertyAttributes -> MutableJSArray -> JSM () -- | Set a property value given the object and the index of the property. objSetPropertyAtIndex :: (ToJSVal val) => Object -> Index -> val -> MutableJSArray -> JSM () -- | Interface to JavaScript object module Language.Javascript.JSaddle.Object data Object -- | Anything that can be used to make a JavaScript object reference class MakeObject this makeObject :: MakeObject this => this -> JSM Object -- | Lookup a property based on its name. -- --
--   >>> testJSaddle $ eval "'Hello World'.length"
--   11
--   
--   >>> testJSaddle $ val "Hello World" ! "length"
--   11
--   
(!) :: (MakeObject this, ToJSString name) => this -> name -> JSM JSVal -- | Lookup a property based on its index. -- --
--   >>> testJSaddle $ eval "'Hello World'[6]"
--   W
--   
--   >>> testJSaddle $ val "Hello World" !! 6
--   W
--   
(!!) :: (MakeObject this) => this -> Index -> JSM JSVal -- | Makes a getter for a particular property name. -- --
--   js name = to (!name)
--   
-- --
--   >>> testJSaddle $ eval "'Hello World'.length"
--   11
--   
--   >>> testJSaddle $ val "Hello World" ^. js "length"
--   11
--   
js :: (MakeObject s, ToJSString name) => name -> IndexPreservingGetter s (JSM JSVal) -- | Makes a setter for a particular property name. -- --
--   jss name = to (<#name)
--   
-- --
--   >>> testJSaddle $ eval "'Hello World'.length"
--   11
--   
--   >>> testJSaddle $ val "Hello World" ^. js "length"
--   11
--   
jss :: (ToJSString name, ToJSVal val) => name -> val -> forall o. MakeObject o => IndexPreservingGetter o (JSM ()) -- | Java script function applications have this type type JSF = forall o. MakeObject o => IndexPreservingGetter o (JSM JSVal) -- | Handy way to call a function -- --
--   jsf name = to (\o -> o # name $ args)
--   
-- --
--   >>> testJSaddle $ val "Hello World" ^. jsf "indexOf" ["World"]
--   6
--   
jsf :: (ToJSString name, MakeArgs args) => name -> args -> JSF -- | Handy way to call a function that expects no arguments -- --
--   js0 name = jsf name ()
--   
-- --
--   >>> testJSaddle $ val "Hello World" ^. js0 "toLowerCase"
--   hello world
--   
js0 :: (ToJSString name) => name -> JSF -- | Handy way to call a function that expects one argument -- --
--   js1 name a0 = jsf name [a0]
--   
-- --
--   >>> testJSaddle $ val "Hello World" ^. js1 "indexOf" "World"
--   6
--   
js1 :: (ToJSString name, ToJSVal a0) => name -> a0 -> JSF -- | Handy way to call a function that expects two arguments js2 :: (ToJSString name, ToJSVal a0, ToJSVal a1) => name -> a0 -> a1 -> JSF -- | Handy way to call a function that expects three arguments js3 :: (ToJSString name, ToJSVal a0, ToJSVal a1, ToJSVal a2) => name -> a0 -> a1 -> a2 -> JSF -- | Handy way to call a function that expects four arguments js4 :: (ToJSString name, ToJSVal a0, ToJSVal a1, ToJSVal a2, ToJSVal a3) => name -> a0 -> a1 -> a2 -> a3 -> JSF -- | Handy way to call a function that expects five arguments js5 :: (ToJSString name, ToJSVal a0, ToJSVal a1, ToJSVal a2, ToJSVal a3, ToJSVal a4) => name -> a0 -> a1 -> a2 -> a3 -> a4 -> JSF -- | Handy way to get and hold onto a reference top level javascript -- --
--   >>> testJSaddle $ eval "w = console; w.log('Hello World')"
--   ** Message: console message:  @1: Hello World
--   
--   undefined
--   
--   >>> testJSaddle $ do w <- jsg "console"; w ^. js1 "log" "Hello World"
--   ** Message: console message:...@0: Hello World
--   
--   undefined
--   
jsg :: ToJSString a => a -> JSM JSVal -- | Handy way to call a function -- --
--   jsgf name = jsg name . to (# args)
--   
-- --
--   >>> testJSaddle $ eval "globalFunc = function (x) {return x.length;}"
--   function (x) {return x.length;}
--   
--   >>> testJSaddle $ jsgf "globalFunc" ["World"]
--   5
--   
jsgf :: (ToJSString name, MakeArgs args) => name -> args -> JSM JSVal -- | Handy way to call a function that expects no arguments -- --
--   jsg0 name = jsgf name ()
--   
-- --
--   >>> testJSaddle $ jsg0 "globalFunc"
--   TypeError:...undefined...is not an objec...
--   
jsg0 :: (ToJSString name) => name -> JSM JSVal -- | Handy way to call a function that expects one argument -- --
--   jsg1 name a0 = jsgf name [a0]
--   
-- --
--   >>> testJSaddle $ jsg1 "globalFunc" "World"
--   5
--   
jsg1 :: (ToJSString name, ToJSVal a0) => name -> a0 -> JSM JSVal -- | Handy way to call a function that expects two arguments jsg2 :: (ToJSString name, ToJSVal a0, ToJSVal a1) => name -> a0 -> a1 -> JSM JSVal -- | Handy way to call a function that expects three arguments jsg3 :: (ToJSString name, ToJSVal a0, ToJSVal a1, ToJSVal a2) => name -> a0 -> a1 -> a2 -> JSM JSVal -- | Handy way to call a function that expects four arguments jsg4 :: (ToJSString name, ToJSVal a0, ToJSVal a1, ToJSVal a2, ToJSVal a3) => name -> a0 -> a1 -> a2 -> a3 -> JSM JSVal -- | Handy way to call a function that expects five arguments jsg5 :: (ToJSString name, ToJSVal a0, ToJSVal a1, ToJSVal a2, ToJSVal a3, ToJSVal a4) => name -> a0 -> a1 -> a2 -> a3 -> a4 -> JSM JSVal -- | Set a JavaScript property -- --
--   >>> testJSaddle $ eval "var j = {}; j.x = 1; j.x"
--   1
--   
--   >>> testJSaddle $ do {j <- obj; (j <# "x") 1; j!"x"}
--   1
--   
(<#) :: (MakeObject this, ToJSString name, ToJSVal val) => this -> name -> val -> JSM () -- | Set a JavaScript property -- --
--   >>> testJSaddle $ eval "var j = {}; j[6] = 1; j[6]"
--   1
--   
--   >>> testJSaddle $ do {j <- obj; (j <## 6) 1; j!!6}
--   1
--   
(<##) :: (MakeObject this, ToJSVal val) => this -> Index -> val -> JSM () -- | Call a JavaScript function -- --
--   >>> testJSaddle $ eval "'Hello World'.indexOf('World')"
--   6
--   
--   >>> testJSaddle $ val "Hello World" # "indexOf" $ ["World"]
--   6
--   
(#) :: (MakeObject this, ToJSString name, MakeArgs args) => this -> name -> args -> JSM JSVal -- | Call a JavaScript function -- --
--   >>> testJSaddle $ eval "something = {}; something[6]=function (x) {return x.length;}; something[6]('World')"
--   5
--   
--   >>> testJSaddle $ jsg "something" ## 6 $ ["World"]
--   5
--   
(##) :: (MakeObject this, MakeArgs args) => this -> Index -> args -> JSM JSVal -- | Use this to create a new JavaScript object -- -- If you pass more than 7 arguments to a constructor for a built in -- JavaScript type (like Date) then this function will fail. -- --
--   >>> testJSaddle $ new (jsg "Date") (2013, 1, 1)
--   Fri Feb 01 2013 00:00:00 GMT+... (...)
--   
new :: (MakeObject constructor, MakeArgs args) => constructor -> args -> JSM JSVal -- | Call function with a given this. In most cases you should use -- '#'. -- --
--   >>> testJSaddle $ eval "(function(){return this;}).apply('Hello', [])"
--   Hello
--   
--   >>> testJSaddle $ do { test <- eval "(function(){return this;})"; call test (val "Hello") () }
--   Hello
--   
call :: (MakeObject f, MakeObject this, MakeArgs args) => f -> this -> args -> JSM JSVal -- | Make an empty object using the default constuctor -- --
--   >>> testJSaddle $ eval "var a = {}; a.x = 'Hello'; a.x"
--   Hello
--   
--   >>> testJSaddle $ do { a <- obj; (a <# "x") "Hello"; a ^. js "x" }
--   Hello
--   
obj :: JSM Object -- | Make a JavaScript function object that wraps a Haskell function. data Function Function :: HaskellCallback -> Object -> Function [functionCallback] :: Function -> HaskellCallback [functionObject] :: Function -> Object function :: ToJSString name => name -> JSCallAsFunction -> JSM Function freeFunction :: MonadIO m => Function -> m () -- | Short hand ::JSCallAsFunction so a haskell function can be -- passed to a to a JavaScipt one. -- --
--   >>> testJSaddle $ eval "(function(f) {f('Hello');})(function (a) {console.log(a)})"
--   ** Message: console message:  @1: Hello
--   
--   undefined
--   
--   >>> testJSaddle $ call (eval "(function(f) {f('Hello');})") global [fun $ \ _ _ args -> valToText (head args) >>= (liftIO . putStrLn . T.unpack) ]
--   Hello
--   undefined
--   
fun :: JSCallAsFunction -> JSCallAsFunction -- | Type used for Haskell functions called from JavaScript. type JSCallAsFunction = JSVal Function object -> JSVal this -> [JSVal] Function arguments -> JSM JSUndefined Only 'JSUndefined' can be returned because the function may need to be executed in a different thread. If you need to get a value out pass in a continuation function as an argument and invoke it from haskell. -- | Make an JavaScript array from a list of values -- --
--   >>> testJSaddle $ eval "['Hello', 'World'][1]"
--   World
--   
--   >>> testJSaddle $ array ["Hello", "World"] !! 1
--   World
--   
--   >>> testJSaddle $ eval "['Hello', null, undefined, true, 1]"
--   Hello,,,true,1
--   
--   >>> testJSaddle $ array ("Hello", JSNull, (), True, 1.0::Double)
--   Hello,,,true,1
--   
array :: MakeArgs args => args -> JSM Object -- | JavaScript's global object global :: JSM Object -- | Get a list containing the property names present on a given object propertyNames :: MakeObject this => this -> JSM [JSString] -- | Get a list containing references to all the properties present on a -- given object properties :: MakeObject this => this -> JSM [JSVal] -- | Call a JavaScript object as function. Consider using '#'. objCallAsFunction :: MakeArgs args => Object -> Object -> args -> MutableJSArray -> JSM JSVal -- | Call a JavaScript object as a constructor. Consider using new. -- -- If you pass more than 7 arguments to a constructor for a built in -- JavaScript type (like Date) then this function will fail. objCallAsConstructor :: MakeArgs args => Object -> args -> MutableJSArray -> JSM JSVal nullObject :: Object instance Language.Javascript.JSaddle.Classes.MakeObject v => Language.Javascript.JSaddle.Classes.MakeObject (Language.Javascript.JSaddle.Types.JSM v) instance Language.Javascript.JSaddle.Classes.ToJSVal Language.Javascript.JSaddle.Object.Function instance Language.Javascript.JSaddle.Classes.ToJSVal Language.Javascript.JSaddle.Object.JSCallAsFunction instance Language.Javascript.JSaddle.Arguments.MakeArgs Language.Javascript.JSaddle.Object.JSCallAsFunction instance Language.Javascript.JSaddle.Classes.ToJSVal [Language.Javascript.JSaddle.Types.JSVal] instance Language.Javascript.JSaddle.Classes.ToJSVal [Language.Javascript.JSaddle.Types.JSM Language.Javascript.JSaddle.Types.JSVal] instance Language.Javascript.JSaddle.Classes.ToJSVal [GHC.Types.Double] instance Language.Javascript.JSaddle.Classes.ToJSVal [GHC.Types.Float] instance Language.Javascript.JSaddle.Classes.ToJSVal [GHC.Types.Int] instance Language.Javascript.JSaddle.Classes.ToJSVal [Language.Javascript.JSaddle.Types.JSString] instance Language.Javascript.JSaddle.Classes.ToJSVal [GHC.Base.String] instance Language.Javascript.JSaddle.Classes.ToJSVal [Data.Text.Internal.Text] instance Language.Javascript.JSaddle.Classes.ToJSVal [GHC.Types.Bool] -- | If you just want to run some JavaScript that you have as a string this -- is you can use eval or evaluateScript. module Language.Javascript.JSaddle.Evaluate -- | Evaluates a script (like eval in java script). Unlike eval this -- function lets you specify a source URL and starting line number for -- beter error information. -- --
--   >>> testJSaddle $ (evaluateScript "\n\n{" global "FileName" 53 >>= valToText) `catch` \(JSException e) -> array (e,e!"sourceURL", e!"line") >>= valToText
--   SyntaxError: ...,FileName,55
--   
evaluateScript :: (ToJSString script, MakeObject this, ToJSString url) => script -> this -> url -> Int -> JSM JSVal -- | Evaluates a script (like eval in java script) -- --
--   >>> testJSaddle $ eval "1+1"
--   2
--   
eval :: ToJSString script => script -> JSM JSVal -- | This package provides an EDSL for calling JavaScript code using the -- JavaScriptCore engine and low level Haskell bindings in the -- webkit-javascriptcore library -- https://github.com/ghcjs/webkit-javascriptcore. module Language.Javascript.JSaddle module Language.Javascript.JSaddle.Test testJSaddle :: ToJSVal val => JSM val -> IO () showJSaddle :: ToJSVal val => JSM val -> IO () listWindowProperties :: IO ()