summaryrefslogtreecommitdiff
path: root/aero/Ibb.hs
diff options
context:
space:
mode:
Diffstat (limited to 'aero/Ibb.hs')
-rw-r--r--aero/Ibb.hs45
1 files changed, 45 insertions, 0 deletions
diff --git a/aero/Ibb.hs b/aero/Ibb.hs
new file mode 100644
index 0000000..e357317
--- /dev/null
+++ b/aero/Ibb.hs
@@ -0,0 +1,45 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+module Ibb where
+
+import Miso
+import Miso.String
+
+main :: IO ()
+main = startApp App {..}
+ where
+ initialAction = SayHelloWorld
+ model = 0
+ update = updateModel
+ view = viewModel
+ events = defaultEvents
+ subs = []
+ mountPoint = Nothing
+
+type Model = Int
+
+-- | Sum type for application events
+data Action
+ = AddOne
+ | SubtractOne
+ | NoOp
+ | SayHelloWorld
+ deriving (Show, Eq)
+
+-- | Updates model, optionally introduces side effects
+updateModel :: Action -> Model -> Effect Action Model
+updateModel AddOne m = (m + 1) <# do
+ putStrLn "Hiya World" >> pure NoOp
+updateModel SubtractOne m = noEff (m - 1)
+updateModel NoOp m = noEff m
+updateModel SayHelloWorld m = m <# do
+ putStrLn "Hiya World" >> pure NoOp
+
+-- | Constructs a virtual DOM from a model
+viewModel :: Model -> View Action
+viewModel x = div_ []
+ [ button_ [ onClick AddOne ] [ text "+" ]
+ , text (ms x)
+ , button_ [ onClick SubtractOne ] [ text "-" ]
+ ]