halogen-websocket-ipc-playzone/src/Main.purs

48 lines
1.0 KiB
Plaintext

module Main where
import Prelude
import Control.Monad.Eff (Eff())
import Halogen
import Halogen.Util (awaitBody, runHalogenAff)
import Halogen.HTML.Indexed as H
import Halogen.HTML.Events.Indexed as E
data Query a = ToggleState a
type State = { on :: Boolean }
initialState :: State
initialState = { on: false }
ui :: forall g. Component State Query g
ui = component { render, eval }
where
render :: State -> ComponentHTML Query
render state =
H.div_
[ H.h1_
[ H.text "Hello world!" ]
, H.p_
[ H.text "Why not toggle this button:" ]
, H.button
[ E.onClick (E.input_ ToggleState) ]
[ H.text
if not state.on
then "Don't push me"
else "I said don't push me!"
]
]
eval :: Natural Query (ComponentDSL State Query g)
eval (ToggleState next) = do
modify (\state -> { on: not state.on })
pure next
main :: Eff (HalogenEffects ()) Unit
main = runHalogenAff do
body <- awaitBody
runUI ui initialState body