Advertisement
Guest User

Untitled

a guest
May 30th, 2015
245
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.57 KB | None | 0 0
  1. module Main where
  2. import Data.Void
  3. import Data.Tuple
  4. import Data.Either
  5.  
  6. import Control.Monad.Eff
  7. import Control.Plus
  8. import DOM
  9.  
  10. import Halogen
  11. import Halogen.Signal
  12. import Halogen.Component
  13.  
  14. import qualified Halogen.HTML as H
  15. import qualified Halogen.HTML.Attributes as A
  16. import qualified Halogen.HTML.Events as A
  17.  
  18. import qualified Halogen.Themes.Bootstrap3 as B
  19.  
  20. import qualified Halogen.HTML.Events as E
  21. import qualified Halogen.HTML.Events.Handler as E
  22. import qualified Halogen.HTML.Events.Monad as E
  23.  
  24. foreign import appendToBody
  25. "function appendToBody(node) {\
  26. \ return function() {\
  27. \ document.body.appendChild(node);\
  28. \ };\
  29. \}" :: forall eff. Node -> Eff (dom :: DOM | eff) Node
  30.  
  31. data State = State Number
  32.  
  33. -- | Inputs to the state machine
  34. data Input = Tick
  35.  
  36. ui :: forall p eff. Component p (E.Event _) Input Input
  37. ui = component (render <$> stateful (State 0) update)
  38. where
  39. render :: State -> H.HTML p (E.Event _ Input)
  40. render (State n) =
  41. H.div [ A.class_ B.container
  42. , E.onClick (E.input_ Tick)
  43. , A.initializer (do E.yield Tick
  44. E.yield Tick
  45. E.yield Tick
  46. empty) ]
  47.  
  48. ([ H.h1 [ A.id_ "header" ] [ H.text "counter" ]
  49. , H.p [A.initializer (do pure Tick
  50. )]
  51. [ H.text (show n) ]] <>
  52. (if n > 5
  53. then [H.p_ [H.text "More than five"]]
  54. else []))
  55.  
  56.  
  57.  
  58. update :: State -> Input -> State
  59. update (State n) Tick = State (n + 1)
  60.  
  61. main = onLoad $ void do
  62. Tuple node driver <- runUI ui
  63. appendToBody node
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement