Module

Spork.App

#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.

#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 }

#BasicApp

type BasicApp effects model action = App effects (Const Void) model action

A type synonym for Apps which don't have subs.

#make

make :: forall effects subs model action. Interpreter Effect (Coproduct effects subs) action -> App effects subs model action -> Node -> Effect (AppInstance 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

makeWithSelector :: forall effects subs model action. Interpreter Effect (Coproduct effects subs) action -> App effects subs model action -> String -> Effect (AppInstance 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

#Batch

newtype Batch f a

A type for Batching effects/subscriptions.

Instances

#unBatch

unBatch :: forall f a. Batch f a -> Array (f a)

#lift

lift :: forall f a. f a -> Batch f a

Lifts a singleton effect/subscription into Batch.

#batch

batch :: forall f a. Array (f a) -> Batch f a

Builds a Batch from an Array.

Re-exports from Spork.Transition

#Transition

type Transition m s i = { effects :: Batch m i, model :: s }

#purely

purely :: forall f s i. s -> Transition f s i

A pure model Transition without effects.

Modules