Module

Spork.PureApp

#PureApp

type PureApp model action = { init :: model, render :: model -> Html action, update :: model -> action -> model }

A PureApp has no effects or subscriptions.

#make

make :: forall model action. PureApp model action -> Node -> Effect (AppInstance model action)

Builds a running PureApp.

example domNode = do
  inst <- PureApp.make app domNode
  _    <- inst.subscribe \_ -> log "Got a change!"

#makeWithSelector

makeWithSelector :: forall model action. PureApp model action -> String -> Effect (AppInstance model action)

Builds a running PureApp given a DOM selector.

main = do
  inst <- PureApp.makeWithSelector app "#app"
  _    <- inst.subscribe \_ -> log "Got a change!"

#toApp

toApp :: forall model action void1 void2. PureApp model action -> App void1 void2 model action

Converts a PureApp to a regular App.

Re-exports from Spork.App

#AppInstance

type AppInstance model action = { push :: action -> Effect Unit, restore :: model -> Effect Unit, run :: Effect Unit, snapshot :: Effect model, subscribe :: (AppChange model action -> Effect Unit) -> Effect (Effect 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).

#AppChange

type AppChange model action = { action :: action, new :: model, old :: model }

#App

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 to Html which 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.

Modules