Platform
Programs
A Program
describes an Gren program! How does it react to input? Does it
show anything on screen? Etc.
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
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.
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.
An effect manager has access to a “router” that routes messages between the main app and your individual effect manager.
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
.
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