packages feed

Shpadoinkle-examples-0.0.0.1: Counter.hs

{-# LANGUAGE OverloadedStrings #-}


module Main where


import           Control.Monad.IO.Class      (liftIO)
import           Data.Text                   (pack)
import           Prelude                     hiding (span)

import           Shpadoinkle
import           Shpadoinkle.Backend.ParDiff
import           Shpadoinkle.Html            (br'_, button, div_, h2_, id',
                                              onClick, span)
import           Shpadoinkle.Html.Utils


view :: Applicative m => Int -> Html m Int
view count = div_
  [ h2_ [ "Counter Example" ]
  , "The current count is: "
  , span [ id' "out" ] [ text (pack $ show count) ]
  , br'_, br'_
  , button [ onClick (count - 1) ] [ "Decrement" ]
  , button [ onClick (count + 1) ] [ "Increment" ]
  ]


app :: JSM ()
app = do
  model <- liftIO $ newTVarIO 0
  shpadoinkle id runParDiff 0 model view getBody


main :: IO ()
main = runJSorWarp 8080 app