-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Extra javascript functions when using GHCJS -- -- Extra javascript functions when using GHCJS @package javascript-extras @version 0.5.0.0 module JavaScript.Extras.Cast -- | This provides a consistent way to convert to JSVal, with different -- semantics for Char. In the Char's instance of ToJS, it converts to a -- string instead of integer - IMHO this is less surprising. -- -- The other reason for this class is while GHCJS base provide both -- IsJSVal and PToJSVal to convert to jsval, some types are instances of -- one or the other class. This means you can't use the "Maybe a" -- instance of PToJSVal if it contains IsISJVal but not pToJSVal. class ToJS a -- | This is a pure conversion, so instances must be able to convert the -- same or equivalent JSVal each time. toJS :: ToJS a => a -> JSVal -- | This is a pure conversion, so instances must be able to convert the -- same or equivalent JSVal each time. toJS :: (ToJS a, IsJSVal a) => a -> JSVal -- | This provides a consistent way to safely convert from JSVal. The -- semantics is that if the return value is a Just, then the JSVal is not -- a null value. Also, Nothing is also returned for values out of range. -- They are not silently truncated. (Except for Float where there may be -- loss of precision) during conversion. -- -- The reason for this class is because GHCJS.Marshal.fromJSVal and -- GHCJS.Marshal.pFromJSVal are not safe to use as it assumes that the -- JSVal are of the correct type and not null. -- (https:/github.comghcjsghcjs-baseissues/87). The safe -- way to convert from JSVal is to use JavaScript.Cast or to use the -- 'Maybe a' instance of FromJSVal, ie fromJSVal :: JSVal -> IO -- (Maybe (Maybe a)), which is a bit more awkward to use, and -- requires IO. Also, Javascript.Cast doesn't have much instances, and it -- hardcodes the instance detection method to javascript -- isinstance which is not sufficient for complex types -- (https:/github.comghcjsghcjs-baseissues/86). -- -- It is actually safe to convert from JSVal without IO because every -- JSVal is a copy of a value or reference. The copy never change, so the -- conversion will always convert to the same result/object every time. class FromJS a fromJS :: FromJS a => JSVal -> Maybe a instance JavaScript.Extras.Cast.FromJS GHCJS.Prim.JSVal instance JavaScript.Extras.Cast.FromJS (JavaScript.Array.Internal.SomeJSArray m) instance JavaScript.Extras.Cast.FromJS JavaScript.Object.Internal.Object instance JavaScript.Extras.Cast.FromJS GHC.Types.Bool instance JavaScript.Extras.Cast.FromJS GHC.Types.Char instance JavaScript.Extras.Cast.FromJS GHC.Types.Double instance JavaScript.Extras.Cast.FromJS GHC.Types.Float instance JavaScript.Extras.Cast.FromJS GHC.Types.Int instance JavaScript.Extras.Cast.FromJS GHC.Int.Int8 instance JavaScript.Extras.Cast.FromJS GHC.Int.Int16 instance JavaScript.Extras.Cast.FromJS GHC.Int.Int32 instance JavaScript.Extras.Cast.FromJS GHC.Types.Word instance JavaScript.Extras.Cast.FromJS GHC.Word.Word8 instance JavaScript.Extras.Cast.FromJS GHC.Word.Word16 instance JavaScript.Extras.Cast.FromJS GHC.Word.Word32 instance JavaScript.Extras.Cast.FromJS Data.Text.Internal.Text instance JavaScript.Extras.Cast.FromJS GHC.Base.String instance JavaScript.Extras.Cast.FromJS Data.JSString.Internal.Type.JSString instance JavaScript.Extras.Cast.ToJS GHCJS.Prim.JSVal instance JavaScript.Extras.Cast.ToJS (GHCJS.Foreign.Callback.Internal.Callback a) instance JavaScript.Extras.Cast.ToJS (GHCJS.Foreign.Export.Export a) instance JavaScript.Extras.Cast.ToJS (GHCJS.Nullable.Nullable a) instance JavaScript.Extras.Cast.ToJS (JavaScript.Array.Internal.SomeJSArray m) instance JavaScript.Extras.Cast.ToJS JavaScript.Object.Internal.Object instance JavaScript.Extras.Cast.ToJS GHC.Types.Bool instance JavaScript.Extras.Cast.ToJS GHC.Types.Char instance JavaScript.Extras.Cast.ToJS GHC.Types.Double instance JavaScript.Extras.Cast.ToJS GHC.Types.Float instance JavaScript.Extras.Cast.ToJS GHC.Types.Int instance JavaScript.Extras.Cast.ToJS GHC.Int.Int8 instance JavaScript.Extras.Cast.ToJS GHC.Int.Int16 instance JavaScript.Extras.Cast.ToJS GHC.Int.Int32 instance JavaScript.Extras.Cast.ToJS GHC.Types.Word instance JavaScript.Extras.Cast.ToJS GHC.Word.Word8 instance JavaScript.Extras.Cast.ToJS GHC.Word.Word16 instance JavaScript.Extras.Cast.ToJS GHC.Word.Word32 instance JavaScript.Extras.Cast.ToJS Data.Text.Internal.Text instance JavaScript.Extras.Cast.ToJS GHC.Base.String instance JavaScript.Extras.Cast.ToJS Data.JSString.Internal.Type.JSString instance JavaScript.Extras.Cast.ToJS a => JavaScript.Extras.Cast.ToJS (GHC.Base.Maybe a) module JavaScript.Extras.JSRep -- | Wrapper to have a JSVal that also have an IString instance This is -- helpful when using OverloadedStrings newtype JSRep JSRep :: JSVal -> JSRep toJSR :: ToJS a => a -> JSRep fromJSR :: FromJS a => JSRep -> Maybe a js_stringify :: JSRep -> JSString instance GHC.Generics.Generic JavaScript.Extras.JSRep.JSRep instance Control.Newtype.Generics.Newtype JavaScript.Extras.JSRep.JSRep instance GHC.Show.Show JavaScript.Extras.JSRep.JSRep instance GHCJS.Internal.Types.IsJSVal JavaScript.Extras.JSRep.JSRep instance GHCJS.Marshal.Internal.PToJSVal JavaScript.Extras.JSRep.JSRep instance JavaScript.Extras.Cast.ToJS JavaScript.Extras.JSRep.JSRep instance JavaScript.Extras.Cast.FromJS JavaScript.Extras.JSRep.JSRep instance Data.String.IsString JavaScript.Extras.JSRep.JSRep instance Control.DeepSeq.NFData JavaScript.Extras.JSRep.JSRep module JavaScript.Extras.JSRep.Unsafe js_eval :: JSString -> JSRep instance GHC.Read.Read JavaScript.Extras.JSRep.JSRep module JavaScript.Extras.Number maxSafeInteger :: Int minSafeInteger :: Int -- | always returns a number between [Number.MIN_SAFE_INTEGER, -- Number.MAX_SAFE_INTEGER] safeIncrement :: Int -> Int -- | always returns a number between [Number.MIN_SAFE_INTEGER, -- Number.MAX_SAFE_INTEGER] safeDecrement :: Int -> Int module JavaScript.Extras.Property -- | Creates a JE.JSRep single string for "className" property from a list -- of (JSString, Bool) Idea from -- https://github.com/JedWatson/classnames classNames :: [(JSString, Bool)] -> JSRep type Property = (JSString, JSRep) -- | get a property of any JSVal. If a null or undefined is queried, the -- result will also be null getProperty :: ToJS j => JSString -> j -> IO JSRep -- | set a property of any JSVal setProperty :: ToJS j => Property -> j -> IO () fromProperties :: [Property] -> Object toProperties :: Object -> IO [Property] module JavaScript.Extras