javascript-extras-0.5.0.0: Extra javascript functions when using GHCJS

Safe HaskellNone
LanguageHaskell2010

JavaScript.Extras.Cast

Synopsis

Documentation

class ToJS a where Source #

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.

Methods

toJS :: a -> JSVal Source #

This is a pure conversion, so instances must be able to convert the same or equivalent JSVal each time.

toJS :: IsJSVal a => a -> JSVal Source #

This is a pure conversion, so instances must be able to convert the same or equivalent JSVal each time.

Instances
ToJS Bool Source # 
Instance details

Defined in JavaScript.Extras.Cast

Methods

toJS :: Bool -> JSVal Source #

ToJS Char Source #

Char instance converts to string

Instance details

Defined in JavaScript.Extras.Cast

Methods

toJS :: Char -> JSVal Source #

ToJS Double Source # 
Instance details

Defined in JavaScript.Extras.Cast

Methods

toJS :: Double -> JSVal Source #

ToJS Float Source # 
Instance details

Defined in JavaScript.Extras.Cast

Methods

toJS :: Float -> JSVal Source #

ToJS Int Source # 
Instance details

Defined in JavaScript.Extras.Cast

Methods

toJS :: Int -> JSVal Source #

ToJS Int8 Source # 
Instance details

Defined in JavaScript.Extras.Cast

Methods

toJS :: Int8 -> JSVal Source #

ToJS Int16 Source # 
Instance details

Defined in JavaScript.Extras.Cast

Methods

toJS :: Int16 -> JSVal Source #

ToJS Int32 Source # 
Instance details

Defined in JavaScript.Extras.Cast

Methods

toJS :: Int32 -> JSVal Source #

ToJS Word Source # 
Instance details

Defined in JavaScript.Extras.Cast

Methods

toJS :: Word -> JSVal Source #

ToJS Word8 Source # 
Instance details

Defined in JavaScript.Extras.Cast

Methods

toJS :: Word8 -> JSVal Source #

ToJS Word16 Source # 
Instance details

Defined in JavaScript.Extras.Cast

Methods

toJS :: Word16 -> JSVal Source #

ToJS Word32 Source # 
Instance details

Defined in JavaScript.Extras.Cast

Methods

toJS :: Word32 -> JSVal Source #

ToJS String Source # 
Instance details

Defined in JavaScript.Extras.Cast

Methods

toJS :: String -> JSVal Source #

ToJS Text Source # 
Instance details

Defined in JavaScript.Extras.Cast

Methods

toJS :: Text -> JSVal Source #

ToJS Object Source # 
Instance details

Defined in JavaScript.Extras.Cast

Methods

toJS :: Object -> JSVal Source #

ToJS JSString Source # 
Instance details

Defined in JavaScript.Extras.Cast

Methods

toJS :: JSString -> JSVal Source #

ToJS JSVal Source # 
Instance details

Defined in JavaScript.Extras.Cast

Methods

toJS :: JSVal -> JSVal Source #

ToJS JSRep Source # 
Instance details

Defined in JavaScript.Extras.JSRep

Methods

toJS :: JSRep -> JSVal Source #

ToJS a => ToJS (Maybe a) Source # 
Instance details

Defined in JavaScript.Extras.Cast

Methods

toJS :: Maybe a -> JSVal Source #

ToJS (Nullable a) Source # 
Instance details

Defined in JavaScript.Extras.Cast

Methods

toJS :: Nullable a -> JSVal Source #

ToJS (Callback a) Source # 
Instance details

Defined in JavaScript.Extras.Cast

Methods

toJS :: Callback a -> JSVal Source #

ToJS (Export a) Source # 
Instance details

Defined in JavaScript.Extras.Cast

Methods

toJS :: Export a -> JSVal Source #

ToJS (SomeJSArray m) Source # 
Instance details

Defined in JavaScript.Extras.Cast

Methods

toJS :: SomeJSArray m -> JSVal Source #

class FromJS a where Source #

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.

Minimal complete definition

fromJS

Methods

fromJS :: JSVal -> Maybe a Source #

Instances
FromJS Bool Source # 
Instance details

Defined in JavaScript.Extras.Cast

Methods

fromJS :: JSVal -> Maybe Bool Source #

FromJS Char Source #

This will only succeed on a single character string

Instance details

Defined in JavaScript.Extras.Cast

Methods

fromJS :: JSVal -> Maybe Char Source #

FromJS Double Source # 
Instance details

Defined in JavaScript.Extras.Cast

FromJS Float Source # 
Instance details

Defined in JavaScript.Extras.Cast

FromJS Int Source # 
Instance details

Defined in JavaScript.Extras.Cast

Methods

fromJS :: JSVal -> Maybe Int Source #

FromJS Int8 Source # 
Instance details

Defined in JavaScript.Extras.Cast

Methods

fromJS :: JSVal -> Maybe Int8 Source #

FromJS Int16 Source # 
Instance details

Defined in JavaScript.Extras.Cast

FromJS Int32 Source # 
Instance details

Defined in JavaScript.Extras.Cast

FromJS Word Source # 
Instance details

Defined in JavaScript.Extras.Cast

Methods

fromJS :: JSVal -> Maybe Word Source #

FromJS Word8 Source # 
Instance details

Defined in JavaScript.Extras.Cast

FromJS Word16 Source # 
Instance details

Defined in JavaScript.Extras.Cast

FromJS Word32 Source # 
Instance details

Defined in JavaScript.Extras.Cast

FromJS String Source # 
Instance details

Defined in JavaScript.Extras.Cast

FromJS Text Source # 
Instance details

Defined in JavaScript.Extras.Cast

Methods

fromJS :: JSVal -> Maybe Text Source #

FromJS Object Source # 
Instance details

Defined in JavaScript.Extras.Cast

FromJS JSString Source # 
Instance details

Defined in JavaScript.Extras.Cast

FromJS JSVal Source # 
Instance details

Defined in JavaScript.Extras.Cast

FromJS JSRep Source # 
Instance details

Defined in JavaScript.Extras.JSRep

FromJS (SomeJSArray m) Source # 
Instance details

Defined in JavaScript.Extras.Cast