Actors
Actor Intercommunication
Utility
Document
spawn : appFlags -> appActors -> (Framework.Internal.Pid.Pid -> FrameworkMessage appFlags appAddresses appActors appModel appMsg) -> FrameworkMessage appFlags appAddresses appActors appModel appMsg
Spawn an Actor
spawn () Counter addToView
-- Spawns a `Counter` and adds it to your
-- applications view.
spawn () Counter (\_ -> noOperation)
-- Spawns a `Counter` and doesn't do anything with
-- the newly retrieved Pid.
spawn 10 Counter (\pid -> batch [
addToView pid
, populateAddress AllCounters pid
]
-- Spawns a `Counter` and passes it some appFlags
-- (Int 10) then adds it to your
-- applications view and populates an
-- address `AllCounters`.
stopProcess : Framework.Internal.Pid.Pid -> FrameworkMessage appFlags appAddresses appActors appModel appMsg
Stops a process (an Actor becomes a Process identified by a Pid
after you
have spawned it).
This is also stops any processes that the targeted process might have spawned.
If the process is part of the applications view it will be removed.
stopProcess pid
addToView : Framework.Internal.Pid.Pid -> FrameworkMessage appFlags appAddresses appActors appModel appMsg
Every Actor has a view, but it's up to you to determine the order and even if you want it to render.
The applications view function receives a list of outputs in the order you have added the Pids to the applications view using this function.
spawn Counter addToView
-- Spawns a `Counter` and adds it to your
-- applications view.
populateAddress : appAddresses -> Framework.Internal.Pid.Pid -> FrameworkMessage appFlags appAddresses appActors appModel appMsg
Add an process to an address. Multiple processes can be housed under the same or multiple addresses.
Once a process is listed under an address you can send it messages by using
sendToAddress
.
batch [
spawn Counter (populateAddress AllCounters)
, spawn Counter (populateAddress AllCounters)
]
-- Spawn two Counter Actors and populate the
-- same address (AllCounters).
removeFromView : Framework.Internal.Pid.Pid -> FrameworkMessage appFlags appAddresses appActors appModel appMsg
Remove a process from the applications view
removeFromAddress : appAddresses -> Framework.Internal.Pid.Pid -> FrameworkMessage appFlags appAddresses appActors appModel appMsg
Remove a process from the given address
sendToPid : Framework.Internal.Pid.Pid -> appMsg -> FrameworkMessage appFlags appAddresses appActors appModel appMsg
Send a process a message using its Pid
.
sendToPid pid (CounterMsg Increment)
sendToAddress : appAddresses -> appMsg -> FrameworkMessage appFlags appAddresses appActors appModel appMsg
Send a message to an address that mone, a single or multiple processes might receive.
sendToAddress AllCounters (CounterMsg Increment)
batch : List (FrameworkMessage appFlags appAddresses appActors appModel appMsg) -> FrameworkMessage appFlags appAddresses appActors appModel appMsg
Batch multiple messages into a single message
batch
[ spawn Counter (populateAddress AllCounters)
, spawn Counter (populateAddress AllCounters)
, updateDocumentTitle "batch example"
]
noOperation : FrameworkMessage appFlags appAddresses appActors appModel appMsg
No operation, don't do anything.
spawn Counter (\_ -> noOperation)
-- Spawn a `Counter` and ignore the newly created
-- Pid by returning noOperation.
toCmd : msg -> Platform.Cmd.Cmd msg
Turn any msg into a Cmd.
filterMsgIns : (appMsg -> Maybe msgIn) -> FrameworkMessage appFlags appAddresses appActors appModel appMsg -> List msgIn
Filter out your "MsgIn"s from a FrameworkMessage
updateDocumentTitle : String -> FrameworkMessage appFlags appAddresses appActors appModel appMsg
Update the document title
This only works when using Browser.document or Browser.application.
updateDocumenTitle "New Title"
Framework.Internal.Message.FrameworkMessage appFlags appAddresses appActors appModel appMsg