oak

Implementation of the Elm Architecture in Purescript


License
MIT
Install
psc-package install oak

Documentation

Oak is an implementation of the Elm architecture in Purescript.

module Main where

import Prelude ( (+)
               , (-)
               , show
               )

import Oak ( createApp, App )

import Oak.HTML ( text
                , div
                , button
                , input
                , br
                , HTML
                )

import Oak.HTML.Attributes ( onClick
                           , onInput
                           )

type Model =
  { number :: Int
  , message :: String
  }

data Msg = Inc
         | Dec
         | SetMessage String

view :: Model -> (HTML Msg)
view model = div [] [ div [] [ text (show model.number)
                             , button [(onClick Inc)] [text "+"]
                             , button [(onClick Dec)] [text "-"]
                             ]
                    , br []
                    , div [] [ text model.message
                             , br []
                             , input [(onInput SetMessage)] []
                             ]
                    ]

update :: Msg -> Model -> Model
update Inc model = model { number = model.number + 1 }
update Dec model = model { number = model.number - 1 }
update (SetMessage s) model = model { message = s }

init :: Model
init = { number: 0
       , message: ""
       }

main :: App
main =
  createApp
    { init: init
    , view: view
    , update: update
    }