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