linsyking/messenger-core/12.1.0

NOTE: the latest version is 20.0.0

Renamed to elm-messenger/messenger-core. That is where the repository lives now. It has not been published as a package under the new name.

Versions published as linsyking/messenger-core still install under that name. 34 versions of 52 come from the new location (see their notes). 7 versions could not be recovered and cannot be installed.

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/elm-messenger/messenger-core.

What we checked: The repo moved to github.com/elm-messenger/messenger-core. Rebuilt with git archive from commit a3e8f98eb35e of https://github.com/elm-messenger/messenger-core (zip prefix linsyking-messenger-core-f27cb21/, America/Los_Angeles times): the zip is byte-identical to the one package.elm-lang.org recorded, SHA-1 495bf88e40bb3574a0d956668b488cc6a86890f3.

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/linsyking/messenger-core/zipball/12.1.0/

Messenger.GeneralModel

General Model

General model is designed to be an abstract interface of layers, components, etc..

A Gernel model has the ability to:

  • specialize its own data types
  • share some data types with objects in the same type
  • be initialized by some inputs
  • be updated by event and msgs
  • be updated in a list of same type objects
  • send msg to the objects in the same type
  • send msg to the parent object
  • render itself
  • identify itself by a matcher
type Msg othertar msg sommsg
= Parent (MsgBase msg sommsg)
| Other ( othertar, msg )

The Basic Msg Model.

Using Other when sending msg to objects in the same type. Make sure the othertar can pass the matcher of target object.

type MsgBase othermsg sommsg
= SOMMsg sommsg
| OtherMsg othermsg

MsgBase

Used when sending a msg to parent object.

Using SOMMsg when sending a SceneOutputMsg, which will be directedly handled by Top-level.

type alias MMsg othertar msg scenemsg userdata =
Msg othertar msg (SceneOutputMsg scenemsg userdata)

Messenger Msg

type alias MMsgBase othermsg scenemsg userdata =
MsgBase othermsg (SceneOutputMsg scenemsg userdata)

Messsenger MsgBase

type alias ConcreteGeneralModel data env event tar msg ren bdata sommsg =
{ init : env -> msg -> ( data, bdata )
, update :
env
-> event
-> data
-> bdata
-> ( ( data, bdata ), List (Msg tar msg sommsg), ( env, Bool ) )
, updaterec :
env
-> msg
-> data
-> bdata
-> ( ( data, bdata ), List (Msg tar msg sommsg), env )
, view : env -> data -> bdata -> ren
, matcher : data -> bdata -> tar -> Bool
}

Concrete General Model.

Users deal with the fields in concrete model.

type AbstractGeneralModel env event tar msg ren bdata sommsg
= Roll
(UnrolledAbstractGeneralModel
env
event
tar
msg
ren
bdata
sommsg
)

Rolled Abstract General Model.

Cannot be directedly modified. Used for storage.

type alias MConcreteGeneralModel data common userdata tar msg bdata scenemsg =
ConcreteGeneralModel
data
(Env common userdata)
tar
msg
Renderable
bdata
(SceneOutputMsg scenemsg userdata)

Specialized Concrete Model for Messenger

type alias MAbstractGeneralModel common userdata tar msg bdata scenemsg =
(Env common userdata)
tar
msg
Renderable
bdata
(SceneOutputMsg scenemsg userdata)

Specialized Abstract Model for Messenger

AbstractGeneralModel env event tar msg ren bdata sommsg
-> UnrolledAbstractGeneralModel env event tar msg ren bdata sommsg

Unroll a rolled abstract model.

ConcreteGeneralModel data env event tar msg ren bdata sommsg
-> msg
-> env
-> AbstractGeneralModel env event tar msg ren bdata sommsg

Abstract a concrete model to an abstract model.

Initialize it with env and msg.

Env common userdata
-> List
(MAbstractGeneralModel common userdata tar msg bdata scenemsg)
-> List Renderable

View model list.

type alias Matcher data tar =
data -> tar -> Bool

A general matcher type sugar