tricycle/system-actor-model/8.0.2

NOTE: the latest version is 9.0.0

Renamed to bellroy/system-actor-model. That is where the repository lives now. It has not been published as a package under the new name.

Versions published as tricycle/system-actor-model still install under that name. 26 versions of 26 come from the new location (see their notes).

Rerouted (renamed, verified). The GitHub user or repository was renamed. The tag is still there, at the new name. The Lamdera package server serves a copy recovered from https://github.com/bellroy/system-actor-model.

What we checked: The repo moved to github.com/bellroy/system-actor-model. Rebuilt with git archive from commit 18ae67c77f4c of https://github.com/bellroy/system-actor-model (zip prefix tricycle-system-actor-model-499fdd3/, America/Los_Angeles times): the zip is byte-identical to the one package.elm-lang.org recorded, SHA-1 5ba0270fce809eb1f5449bdcb89c7add0c71b548.

The Lamdera compiler uses this copy and prints a one-line notice saying so. elm itself fails to download this version.

Details · package.elm-lang.org's zip: https://github.com/tricycle/system-actor-model/zipball/8.0.2/

System.Actor

Actor

In the context of this package an Actor is a Component that is mapped to the System.

Currently there are three components defined;

  • The Layout Component
  • The Ui Component
  • The Worker Component

An Actor probably looks very familiar to you, that is because it closely resembles the Elm Program definition.

It should be relativaly straight forwards to map you exisiting Elm component on top of one of the existing Components.

Actors can communicate with other Actors when they know their PIDs or they can send a message to other Actors listening on a given Address.

Actor

An Actor is an alias for the following Record

type alias Actor componentModel appModel output systemMsg =
{ init : ( PID, Value ) -> ( appModel, systemMsg )
, update :
componentModel -> systemMsg -> PID -> ( appModel, systemMsg )
, subscriptions : componentModel -> PID -> Sub systemMsg
, events : Event -> PID -> EventHandler systemMsg
, view : Maybe (componentModel -> PID -> (PID -> Maybe output) -> output)
}

An Actor looks a lot like a Browser.element!

It's quite easy to grab an existing Elm application and make it part of an application that is setup to use this package.

SystemActor

type alias SystemActor appModel output systemMsg =
SystemActor appModel output systemMsg

An Actor within the System has a different Type,

it no longer has the componentModel in the type definition, this is because the componentModel is no wrapped using the appModel.

You can create a SystemActor using the toSystemActor function.

Actor componentModel appModel output systemMsg
-> componentModel
-> SystemActor appModel output systemMsg

Apply your model over your Actor and create a SystemActor