Module
Spork.App
- Package
- purescript-spork
- Repository
- natefaubion/purescript-spork
#App Source
type App effects subs model action = { init :: Transition effects model action, render :: model -> Html action, subs :: model -> Batch subs action, update :: model -> action -> Transition effects model action }A specification for a Spork app:
render- Renders a model toHtmlwhich yields actions via DOM events.update- Takes the current model and, with a new action, transitions to a new model while optionally running effects.subs- Determines the set of active subscriptions based on the model.init- Initial model and effects to kickstart the application.
#AppInstance Source
type AppInstance eff model action = { push :: action -> Eff eff Unit, restore :: model -> Eff eff Unit, run :: Eff eff Unit, snapshot :: Eff eff model, subscribe :: (AppChange model action -> Eff eff Unit) -> Eff eff (Eff eff Unit) }The interface for communicating with a running App.
push- Buffers an action to be run on the next tick.run- Initiates a tick of the App, flushing and applying all queued actions.snapshot- Yields the current model of the App.restore- Replaces the current model of the App.subscribe- Listens to App changes (model and actions).
#make Source
make :: forall action model subs effects eff. Interpreter (Eff (AppEffects eff)) (Coproduct effects subs) action -> App effects subs model action -> Node -> Eff (AppEffects eff) (AppInstance (AppEffects eff) model action)Builds a running App given an Interpreter and a parent DOM Node.
example domNode = do
inst <- App.make (basicAff `merge` never) app domNode
_ <- inst.subscribe \_ -> log "Got a change!"
inst.run
The returned AppInstance has yet to run any initial effects. You may
use the opportunity to setup change handlers. Invoke inst.run when
ready to run initial effects.
#makeWithSelector Source
makeWithSelector :: forall action model subs effects eff. Interpreter (Eff (AppEffects eff)) (Coproduct effects subs) action -> App effects subs model action -> String -> Eff (AppEffects eff) (AppInstance (AppEffects eff) model action)Builds a running App given an Interpreter and a DOM selector.
main = do
inst <- App.makeWithSelector (basicAff `merge` never) app "#app"
_ <- inst.subscribe \_ -> log "Got a change!"
inst.run
The returned AppInstance has yet to run any initial effects. You may
use the opportunity to setup change handlers. Invoke inst.run when
ready to run initial effects.
Re-exports from Spork.Batch
Re-exports from Spork.Transition
#Transition Source
type Transition m s i = { effects :: Batch m i, model :: s }#purely Source
purely :: forall i s f. s -> Transition f s iA pure model Transition without effects.