Platform

Programs

type Program flags model msg

A Program describes an Gren program! How does it react to input? Does it show anything on screen? Etc.

worker :
{ init : flags -> { model : model, command : Cmd msg }
, update : msg -> model -> { model : model, command : Cmd msg }
, subscriptions : model -> Sub msg
}
-> Program flags model msg

Create a headless program with no user interface.

This is great if you want to use Gren as the “brain” for something else. For example, you could send messages out ports to modify the DOM, but do all the complex logic in Gren.

Initializing a headless program from JavaScript looks like this:

var app = Gren.MyThing.init();

If you do want to control the user interface in Gren, the Browser module has a few ways to create that kind of Program instead!

Platform Internals

Tasks and Processes

type Task err ok

Head over to the documentation for the Task module for more information on this. It is only defined here because it is a platform primitive.

type ProcessId

Head over to the documentation for the Process module for information on this. It is only defined here because it is a platform primitive.

Effect Manager Helpers

An extremely tiny portion of library authors should ever write effect managers. Fundamentally, Gren needs maybe 10 of them total. I get that people are smart, curious, etc. but that is not a substitute for a legitimate reason to make an effect manager. Do you have an organic need this fills? Or are you just curious? Public discussions of your explorations should be framed accordingly.

type Router appMsg selfMsg

An effect manager has access to a “router” that routes messages between the main app and your individual effect manager.

sendToApp : Router msg a -> msg -> Task x {}

Send the router a message for the main loop of your app. This message will be handled by the overall update function, just like events from Html.

sendToSelf : Router a msg -> msg -> Task x {}

Send the router a message for your effect manager. This message will be routed to the onSelfMsg function, where you can update the state of your effect manager as necessary.

As an example, the effect manager for web sockets