module Main where import Prelude import Effect (Effect) import Halogen as H import Halogen.Aff as HA import Halogen.HTML as HH import Halogen.HTML.Events as HE import Halogen.VDom.Driver (runUI) main :: Effect Unit main = HA.runHalogenAff do body <- HA.awaitBody runUI component unit body type State = { count :: Int } data Action = Increment | Decrement component :: forall q i o m. H.Component q i o m component = H.mkComponent { initialState , render , eval: H.mkEval $ H.defaultEval { handleAction = handleAction } } initialState :: forall i. i -> State initialState _ = { count: 0 } render :: forall m. State -> H.ComponentHTML Action () m render state = HH.div_ [ HH.button [ HE.onClick \_ -> Decrement ] [ HH.text "-" ] , HH.text (show state.count) , HH.button [ HE.onClick \_ -> Increment ] [ HH.text "+" ] ] handleAction :: forall o m. Action -> H.HalogenM State Action () o m Unit handleAction = case _ of Increment -> H.modify_ \st -> st { count = st.count + 1 } Decrement -> H.modify_ \st -> st { count = st.count - 1 }