linsyking/messenger-extra/3.1.0

NOTE: the latest version is 7.0.0

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

Versions published as linsyking/messenger-extra still install under that name. 12 versions of 20 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/elm-messenger/messenger-extra.

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

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-extra/zipball/3.1.0/

Messenger.Component.PortableComponent

Portable components

These are components that might be provided by an elm package.

There are some limitations for portable components:

  • They don't have the base data
  • They cannot get the common data
  • You need to set the msg and target type for every portable component
  • You need to provide a codec in the layer to translate the messages and targets
type alias ConcretePortableComponent data userdata tar msg scenemsg =
{ init : PortableComponentInit userdata msg data
, update : PortableComponentUpdate data userdata tar msg scenemsg
, updaterec :
PortableComponentUpdateRec data userdata tar msg scenemsg
, view : PortableComponentView userdata data
, matcher : Matcher data tar
}

ConcretePortableComponent

Used when createing a portable component.

Use translatePortableComponent to create a ConcreteUserComponent from a ConcretePortableComponent.

The scenemsg type is replaced by () because you cannot send changescene message.

type alias PortableMsgCodec specificmsg generalmsg =
{ encode : generalmsg -> specificmsg
, decode : specificmsg -> generalmsg
}

Portable Component Message Codec

type alias PortableTarCodec specifictar generaltar =
{ encode : generaltar -> specifictar
, decode : specifictar -> generaltar
}

Portable Component Target Codec

You can generate a general type of component from a concrete portable component, which means you can manage this component with a list of user components.

ConcretePortableComponent data userdata tar msg scenemsg
-> PortableTarCodec tar gtar
-> PortableMsgCodec msg gmsg
-> bdata
-> Int
-> PortableComponentStorage
cdata
userdata
gtar
gmsg
bdata
scenemsg

Generate abstract component from concrete component.

Type sugar

type alias PortableComponentInit userdata msg data =
Env () userdata -> msg -> data

Portable component init type sugar

type alias PortableComponentUpdate data userdata tar msg scenemsg =
Env () userdata
-> UserEvent
-> data
-> ( data
, List (MMsg tar msg scenemsg userdata)
, ( Env () userdata, Bool )
)

Portable component update type sugar

type alias PortableComponentUpdateRec data userdata tar msg scenemsg =
Env () userdata
-> msg
-> data
-> ( data
, List (MMsg tar msg scenemsg userdata)
, Env () userdata
)

Portable component updaterec type sugar

type alias PortableComponentView userdata data =
Env () userdata -> data -> Renderable

Portable component view type sugar

type alias PortableComponentStorage cdata userdata gtar gmsg bdata scenemsg =
gmsg
-> Env cdata userdata
-> AbstractComponent cdata userdata gtar gmsg bdata scenemsg

Portable component storage as a specific component type sugar