1 -----------------------------------------------------------------------------
2 {-# LANGUAGE LambdaCase #-}
3 {-# LANGUAGE RecordWildCards #-}
4 {-# LANGUAGE OverloadedStrings #-}
5 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
6 -----------------------------------------------------------------------------
8 -----------------------------------------------------------------------------
9 import Miso hiding (text_)
11 import Miso.Lynx.Element.View.Event (onTap)
12 -----------------------------------------------------------------------------
15 import qualified Miso.CSS as CSS
16 -----------------------------------------------------------------------------
17 -- | Application model
18 newtype Model = Model { _value :: Int }
19 deriving (Show, Eq, ToMisoString)
20 -----------------------------------------------------------------------------
21 value :: Lens Model Int
22 value = lens _value $ \m v -> m { _value = v }
23 -----------------------------------------------------------------------------
28 -----------------------------------------------------------------------------
29 -- | Entry point for a miso application
31 main = run $ lynx counterComponent
34 -----------------------------------------------------------------------------
35 counterComponent :: App Model Action
36 counterComponent = component (Model 0) updateModel viewModel
37 -----------------------------------------------------------------------------
40 -> Transition Model Action
46 -----------------------------------------------------------------------------
47 -- | Constructs a virtual DOM from a model
48 viewModel :: Model -> View Model Action
53 , CSS.alignItems "center"
54 , CSS.justifyContent "center"
60 [ CSS.backgroundColor CSS.yellow
65 , CSS.alignItems "center"
66 , CSS.justifyContent "center"
79 [ CSS.backgroundColor CSS.orange
83 , CSS.alignItems "center"
84 , CSS.justifyContent "center"
92 [ text $ ms (m ^. value)
98 [ CSS.backgroundColor CSS.pink
103 , CSS.alignItems "center"
104 , CSS.justifyContent "center"
109 [ CSS.fontSize "48px"
116 -----------------------------------------------------------------------------