Bonsai.Core
- Package
- purescript-bonsai
- Repository
- grmble/purescript-bonsai
#Program Source
type Program aff model msg = { dbgEvents :: Boolean, dbgTiming :: Boolean, document :: Document, pending :: Ref (Array msg), renderer :: model -> VNode msg, state :: Ref (ProgramState model msg), updater :: model -> msg -> UpdateResult aff model msg, window :: Window }
Program describes the Bonsai program.
It is passed around in a ReaderT and stores callbacks and a ref to the pending commands. Event callbacks append to the list of pending commands, they will then be applied in the main event loop.
#UpdateResult Source
type UpdateResult aff model msg = { cmd :: Cmd aff msg, model :: model }
An update functions returns a new model and a possibly empty command
#ProgramState Source
type ProgramState model msg = { dirty :: Boolean, dnode :: Element, model :: model, vnode :: VNode msg }
ProgramState tracks the current state of the model, vnode and dom element.
These are needed to advance the state in reaction to a Cmd message.
#emittingTask Source
emittingTask :: forall msg aff. (TaskContext aff msg -> Aff aff Unit) -> Cmd aff msg
Procudes a task that can emit multiple times
#emitMessage Source
emitMessage :: forall msg aff. TaskContext aff msg -> msg -> Aff aff Unit
Emit helper for Tasks.
In an emitting task, use this function to emit messages.
#issueCommand Source
issueCommand :: forall msg model eff bff. Program bff model msg -> Cmd bff msg -> Eff (bonsai :: BONSAI | eff) Unit
Issue a command.
For pure commands, this will send the messages and request a redraw. For (asynchronous) task commands, the task will be started.
This can be used to start tasks, e.g. to initialize the model
#mapResult Source
mapResult :: forall msg2 model2 msg1 model1 aff. (model1 -> model2) -> (msg1 -> msg2) -> UpdateResult aff model1 msg1 -> UpdateResult aff model2 msg2
Helper to map update results from sub-components
#plainResult Source
plainResult :: forall msg model aff. model -> UpdateResult aff model msg
Creates an update result with empty command.
#simpleTask Source
simpleTask :: forall msg aff. Aff aff msg -> Cmd aff msg
Produces a simple task (not cancellable, ony emits the return values