48 lines
1.0 KiB
Plaintext
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
|