Elmish.Foreign
- Package
- purescript-elmish
- Repository
- collegevine/purescript-elmish
#CanPassToJavaScript Source
class CanPassToJavaScript (a :: Type) This class is used to assert that values of a type can be passed to JavaScript code directly (without conversion) and understood by that code. Specifically, this class is defined for primitives (strings, numbers, booleans), arrays, and records. This assertion is used in a number of places that pass complex values to JS code to restrict the set of types that can be safely passed.
It is still possible to define instances of this class for other,
non-primitive types, but you have to know what you're doing and make sure
that JS representation is sane and stable. For example, a common trick is
to newtype-wrap known JS enumerations to provide type safety:
module HTMLButton
( ButtonType -- NOTE: not exporting the constructor
, typeButton, typeSubmit, typeReset
, ButtonProps, button
)
where
newtype ButtonType = ButtonType String
derive newtype instance CanPassToJavaScript ButtonType
typeButton = ButtonType "button" :: ButtonType
typeSubmit = ButtonType "submit" :: ButtonType
typeReset = ButtonType "reset" :: ButtonType
type ButtonProps =
{ type :: ButtonType
, ...
}
foreign import button :: ButtonProps -> ReactElement
Instances
CanPassToJavaScript JsonCanPassToJavaScript ForeignCanPassToJavaScript StringCanPassToJavaScript NumberCanPassToJavaScript BooleanCanPassToJavaScript JSDateCanPassToJavaScript Int(CanPassToJavaScript a) => CanPassToJavaScript (Object a)CanPassToJavaScript (Effect Unit)(CanPassToJavaScript a) => CanPassToJavaScript (Effect a)(CanReceiveFromJavaScript a) => CanPassToJavaScript (EffectFn1 a Unit)(CanReceiveFromJavaScript a, CanPassToJavaScript b) => CanPassToJavaScript (EffectFn1 a b)(CanReceiveFromJavaScript a) => CanPassToJavaScript (EffectFn2 a b Unit)(CanReceiveFromJavaScript a, CanReceiveFromJavaScript b, CanPassToJavaScript c) => CanPassToJavaScript (EffectFn2 a b c)(CanPassToJavaScript a) => CanPassToJavaScript (Array a)(CanPassToJavaScript a) => CanPassToJavaScript (Nullable a)(CanPassToJavaScript a) => CanPassToJavaScript (Opt a)(CanPassToJavaScript a) => CanPassToJavaScript (Req a)(RowToList r rl, CanPassToJavaScriptRecord rl) => CanPassToJavaScript (Record r)(CanPassToJavaScript a) => CanPassToJavaScript (Foreign -> a)
#CanReceiveFromJavaScript Source
class CanReceiveFromJavaScript (a :: Type) whereThis class is used to assert that values of a type can be passed from JavaScript to PureScript without any conversions. Specifically, this class is defined for primitives (strings, numbers, booleans), arrays, and records.
Members
Instances
CanReceiveFromJavaScript ForeignCanReceiveFromJavaScript StringCanReceiveFromJavaScript NumberCanReceiveFromJavaScript BooleanCanReceiveFromJavaScript JSDateCanReceiveFromJavaScript IntCanReceiveFromJavaScript (Object Foreign)(CanReceiveFromJavaScript a) => CanReceiveFromJavaScript (Object a)CanReceiveFromJavaScript (Effect Unit)(CanPassToJavaScript a) => CanReceiveFromJavaScript (EffectFn1 a Unit)(CanPassToJavaScript a, CanPassToJavaScript b) => CanReceiveFromJavaScript (EffectFn2 a b Unit)CanReceiveFromJavaScript (Array Foreign)(CanReceiveFromJavaScript a) => CanReceiveFromJavaScript (Array a)(CanReceiveFromJavaScript a) => CanReceiveFromJavaScript (Nullable a)(CanReceiveFromJavaScript a) => CanReceiveFromJavaScript (Opt a)(CanReceiveFromJavaScript a) => CanReceiveFromJavaScript (Req a)(RowToList r rl, CanReceiveFromJavaScriptRecord rl) => CanReceiveFromJavaScript (Record r)
#readForeign Source
readForeign :: forall @a. CanReceiveFromJavaScript a => Foreign -> Maybe aVerifies if the given raw JS value is of the right type/shape to be
represented as a, and if so, coerces the value to a.
#readForeign' Source
readForeign' :: forall @a. CanReceiveFromJavaScript a => Foreign -> Either String aVerifies if the given raw JS value is of the right type/shape to be
represented as a, and if so, coerces the value to a.
#showForeign Source
showForeign :: Foreign -> String#Arguments Source
data ArgumentsType of the arguments object in a JS function (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments).
#argumentsToArray_ Source
argumentsToArray_ :: Arguments -> Array ForeignCreates a new Array from an Arguments object.
#getArgument Source
getArgument :: Arguments -> Int -> Maybe ForeignGets the value at a specified index of an Arguments object.
Returns Nothing if there are not enough arguments.
#mkVarArgEff_ Source
mkVarArgEff_ :: (Arguments -> Effect Unit) -> ForeignCreates a JS function that takes a variable number of args (via
arguments) and calls the provided effectful continuation, passing the
arguments as an array.
#CanReceiveFromJavaScriptRecord Source
class CanReceiveFromJavaScriptRecord :: RowList Type -> Constraintclass CanReceiveFromJavaScriptRecord (rowList :: RowList Type) where
This class is implementation of validateForeignType for records. It
validates a given JS hash (aka "object") against a given type row that
represents a PureScript record, recursively calling
validateForeignType for each field.
Members
Instances
CanReceiveFromJavaScriptRecord Nil(IsSymbol name, CanReceiveFromJavaScript a, CanReceiveFromJavaScriptRecord rl') => CanReceiveFromJavaScriptRecord (Cons name a rl')
#CanPassToJavaScriptRecord Source
class CanPassToJavaScriptRecord :: RowList Type -> Constraintclass CanPassToJavaScriptRecord (rowList :: RowList Type)
This class is implementation of CanPassToJavaScript for records. It
simply iterates over all fields, checking that every field is of a type
that also has an instance of CanPassToJavaScript.
Instances
CanPassToJavaScriptRecord Nil(IsSymbol name, CanPassToJavaScript a, CanPassToJavaScriptRecord rl') => CanPassToJavaScriptRecord (Cons name a rl')
Re-exports from Foreign
#Foreign Source
data ForeignA type for foreign data.
Foreign data is data from any external unknown or unreliable source, for which it cannot be guaranteed that the runtime representation conforms to that of any particular type.
Suitable applications of Foreign are
- To represent responses from web services
- To integrate with external JavaScript libraries.