├── Makefile
├── examples
├── static
│ ├── index.js
│ └── index.html
├── Makefile
├── spago.dhall
├── package.json
└── src
│ ├── Main.purs
│ └── Component
│ └── Counter.purs
├── .gitignore
├── packages.dhall
├── spago.dhall
├── package.json
├── .github
└── FUNDING.yml
├── src
└── Gimel
│ ├── Cmd.purs
│ ├── Sub
│ ├── Time.purs
│ └── Window.purs
│ ├── Types.purs
│ ├── Utils.purs
│ ├── Sub.purs
│ ├── Component.purs
│ ├── Engine.purs
│ ├── Attributes.purs
│ └── Html.purs
└── README.md
/Makefile:
--------------------------------------------------------------------------------
1 | def:
2 | npm run watch
3 |
4 | build:
5 | spago build
--------------------------------------------------------------------------------
/examples/static/index.js:
--------------------------------------------------------------------------------
1 | main = require ("../output/Main").main
2 |
3 | module.hot && module.hot.accept (main)
4 |
5 | main ()
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | bower_components
2 | node_modules
3 | .pulp-cache
4 | output
5 | generated-docs
6 | .psc-package
7 | .psc*
8 | .purs*
9 | .psa*
10 | .spago
11 | .cache
12 | .parcel-cache
13 | dist
--------------------------------------------------------------------------------
/examples/Makefile:
--------------------------------------------------------------------------------
1 | def:
2 | make -j dev watch
3 |
4 | init:
5 | npm i -g purescript spago
6 | npm i
7 | spago build
8 |
9 | dev:
10 | npm run parcel:dev
11 |
12 | watch:
13 | npm run parcel:watch
14 |
--------------------------------------------------------------------------------
/examples/static/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Gimel Playground
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/packages.dhall:
--------------------------------------------------------------------------------
1 | let upstream =
2 | https://github.com/purescript/package-sets/releases/download/psc-0.13.6-20200309/packages.dhall sha256:9221987b4e7ea99ccd0efbe056f7bebc872cd92e0058efe5baa181d73359e7b3
3 |
4 | let overrides = {=}
5 |
6 | let additions = {=}
7 |
8 | in upstream // overrides // additions
9 |
--------------------------------------------------------------------------------
/spago.dhall:
--------------------------------------------------------------------------------
1 | { name = "my-project"
2 | , dependencies =
3 | [ "aff"
4 | , "console"
5 | , "css"
6 | , "effect"
7 | , "filterable"
8 | , "js-timers"
9 | , "ordered-collections"
10 | , "psci-support"
11 | , "react"
12 | , "react-dom"
13 | , "web-html"
14 | ]
15 | , packages = ./packages.dhall
16 | , sources = [ "src/**/*.purs" ]
17 | }
18 |
--------------------------------------------------------------------------------
/examples/spago.dhall:
--------------------------------------------------------------------------------
1 | { name = "gimel-examples"
2 | , dependencies =
3 | [ "aff"
4 | , "affjax"
5 | , "argonaut"
6 | , "argonaut-codecs"
7 | , "console"
8 | , "css"
9 | , "effect"
10 | , "filterable"
11 | , "generics-rep"
12 | , "js-timers"
13 | , "psci-support"
14 | , "react"
15 | , "react-dom"
16 | , "web-html"
17 | ]
18 | , sources = [ "src/**/*.purs", "../src/**/*.purs" ]
19 | , packages = ../packages.dhall
20 | }
21 |
--------------------------------------------------------------------------------
/examples/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "examples",
3 | "version": "1.0.0",
4 | "description": "",
5 | "scripts": {
6 | "parcel:watch": "spago build --watch",
7 | "parcel:dev": "parcel static/index.html",
8 | "build": "rm -r dist; spago build && parcel build static/index.html --no-source-maps"
9 | },
10 | "author": "",
11 | "license": "ISC",
12 | "devDependencies": {
13 | "parcel": "^2.0.0-beta.1"
14 | },
15 | "dependencies": {}
16 | }
17 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "gimel-core",
3 | "description": "",
4 | "main": "index.js",
5 | "directories": {
6 | "test": "test"
7 | },
8 | "scripts": {
9 | "watch": "spago build --watch"
10 | },
11 | "author": "",
12 | "license": "ISC",
13 | "devDependencies": {},
14 | "dependencies": {
15 | "@types/react": "^16.9.32",
16 | "react": "^16.13.1",
17 | "react-dom": "^16.13.1",
18 | "react-router": "^5.2.0",
19 | "react-router-dom": "^5.2.0"
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | # These are supported funding model platforms
2 |
3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
4 | patreon: RynerReinhardt
5 | open_collective: # Replace with a single Open Collective username
6 | ko_fi: # Replace with a single Ko-fi username
7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
9 | liberapay: # Replace with a single Liberapay username
10 | issuehunt: # Replace with a single IssueHunt username
11 | otechie: # Replace with a single Otechie username
12 | custom: ["https://www.buymeacoffee.com/DoctorRyner"]
13 |
--------------------------------------------------------------------------------
/src/Gimel/Cmd.purs:
--------------------------------------------------------------------------------
1 | module Gimel.Cmd where
2 |
3 | import Prelude
4 |
5 | import Data.Foldable (traverse_)
6 | import Effect (Effect)
7 | import Effect.Aff (Aff)
8 | import Effect.Class (liftEffect)
9 |
10 | newtype Cmd event = Cmd ((event -> Aff Unit) -> Aff Unit)
11 |
12 | instance functorCmd :: Functor Cmd where
13 | map f (Cmd runCmd) = Cmd \runEvent -> runCmd $ runEvent <<< f
14 |
15 | execEventCmd :: forall event. event -> Cmd event
16 | execEventCmd event = execEventsCmd [event]
17 |
18 | execEventsCmd :: forall event. Array event -> Cmd event
19 | execEventsCmd events = Cmd \runEvent -> traverse_ runEvent events
20 |
21 | cmd :: forall event. Aff Unit -> Cmd event
22 | cmd f = Cmd \_ -> f
23 |
24 | cmdEff :: forall event. Effect Unit -> Cmd event
25 | cmdEff = cmd <<< liftEffect
--------------------------------------------------------------------------------
/src/Gimel/Sub/Time.purs:
--------------------------------------------------------------------------------
1 | module Gimel.Sub.Time where
2 |
3 | import Prelude
4 |
5 | import Data.Int (round)
6 | import Effect.Aff (launchAff_)
7 | import Effect.Class (liftEffect)
8 | import Effect.Timer (clearInterval, setInterval)
9 | import Gimel.Cmd (Cmd(..))
10 | import Gimel.Sub (Sub, mkSub, mkSubEff)
11 | import Gimel.Utils (wait)
12 |
13 | every :: forall model event. Number -> Cmd event -> Sub model event
14 | every offset (Cmd cmd) = mkSubEff \_ runEvent ->
15 | clearInterval <$> setInterval (round $ offset * 1000.0)
16 | (launchAff_ $ cmd (liftEffect <<< runEvent))
17 |
18 | delay :: forall model event. Number -> Cmd event -> Sub model event
19 | delay offset (Cmd cmd) = mkSub \_ runEvent -> do
20 | wait offset
21 | cmd runEvent $> mempty
22 |
--------------------------------------------------------------------------------
/examples/src/Main.purs:
--------------------------------------------------------------------------------
1 | module Main where
2 |
3 | import Prelude hiding (div)
4 |
5 | import Data.Foldable (fold)
6 | import Effect (Effect)
7 | import Gimel.Attributes (onClick)
8 | import Gimel.Engine (run)
9 | import Gimel.Html (Html, button, text, textS)
10 | import Gimel.Sub (Sub, none)
11 | import Gimel.Types (Update)
12 |
13 | data Event = Inc | Dec
14 |
15 | type Model = {counter :: Int}
16 |
17 | init :: Model
18 | init = {counter: 0}
19 |
20 | view :: Model -> Html Event
21 | view model = fold
22 | [ button [onClick Inc] [text "+"]
23 | , textS model
24 | , button [onClick Dec] [text "-"]
25 | ]
26 |
27 | update :: Model -> Event -> Update Model Event
28 | update model event = case event of
29 | Inc -> pure model {counter = model.counter + 1}
30 | Dec -> pure model {counter = model.counter - 1}
31 |
32 | subs :: Sub Model Event
33 | subs = none
34 |
35 | main :: Effect Unit
36 | main = run {init, view, update, subs}
37 |
--------------------------------------------------------------------------------
/examples/src/Component/Counter.purs:
--------------------------------------------------------------------------------
1 | module Component.Counter where
2 |
3 | import Prelude
4 |
5 | import Data.Foldable (fold)
6 | import Effect.Class.Console (logShow)
7 | import Gimel.Attributes (onClick)
8 | import Gimel.Cmd (cmd, execEventCmd)
9 | import Gimel.Html (Html, br, button, text, textS)
10 | import Gimel.Sub (Sub, enableWhen)
11 | import Gimel.Sub.Time (every)
12 | import Gimel.Types (Update, Application)
13 | import Gimel.Utils (withCmd)
14 |
15 | data Event = Inc | Dec
16 |
17 | type Model = Int
18 |
19 | view :: Model -> Html Event
20 | view model = fold
21 | [ button [onClick Inc] [text "+"]
22 | , textS model
23 | , button [onClick Dec] [text "-"]
24 | , br
25 | ]
26 |
27 | update :: Model -> Event -> Update Model Event
28 | update model = case _ of
29 | Inc -> pure $ model + 1
30 | Dec ->
31 | withCmd
32 | (model - 1)
33 | (cmd $ logShow model)
34 |
35 | subs :: Sub Model Event
36 | subs =
37 | -- enableWhen (\model -> model < 4) $
38 | every 1.0 (execEventCmd Inc)
39 |
40 | app :: Application Model Event
41 | app = {init: 0, view, update, subs}
--------------------------------------------------------------------------------
/src/Gimel/Sub/Window.purs:
--------------------------------------------------------------------------------
1 | module Gimel.Sub.Window where
2 |
3 | import Prelude
4 |
5 | import Gimel.Sub (Sub, mkSubEff)
6 | import Web.Event.Event (EventType(..))
7 | import Web.Event.EventTarget (addEventListener, eventListener, removeEventListener)
8 | import Web.HTML (window)
9 | import Web.HTML.Window (innerHeight, innerWidth, toEventTarget)
10 |
11 | windowResize :: forall model event. ({height :: Int, width :: Int} -> event) -> Sub model event
12 | windowResize resizeEvent = mkSubEff \_ runEvent -> do
13 | win <- window
14 | listener <-
15 | eventListener \_ -> do
16 | height <- innerHeight win
17 | width <- innerWidth win
18 |
19 | runEvent $ resizeEvent {height, width}
20 |
21 | addEventListener (EventType "resize") listener false $ toEventTarget win
22 |
23 | pure $
24 | removeEventListener
25 | (EventType "resize")
26 | listener
27 | false
28 | (toEventTarget win)
29 |
30 | getWindowSize :: forall model event. ({height :: Int, width :: Int} -> event) -> Sub model event
31 | getWindowSize getWindowEvent = mkSubEff \_ runEvent -> do
32 | win <- window
33 | height <- innerHeight win
34 | width <- innerWidth win
35 |
36 | runEvent $ getWindowEvent {height, width}
37 | pure mempty
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Gimel
2 |
3 | # ALPHA RELEASE IS OUT!
4 | Now I'm going to build some infrastructure, the first step is to make a website with documentation, you can follow my progress here https://github.com/DoctorRyner/gimel.io
5 |
6 | Also, it can be a good example of Gimel's usage
7 |
8 | ## What is this?
9 |
10 | This is an Elm-like UI library with power of React. Elm is great but it doesn't have that much widgets and ready-to-use solutions as React. Also PureScript is just much more powerful than Elm. I wanted to make this library as easy-to-use as Elm but with much greater potential
11 |
12 | ## How to run the examples?
13 |
14 | If you don't have `npm`, you'll need to install it. For example, you can download it from here https://nodejs.org/en/download/
15 |
16 | Just enter the examples folder and type `make init def`. Next time you can just type `make` because everything is already initialized
17 |
18 | ## Tools
19 |
20 | We use:
21 | * `PureScript` as a programming language because it's much more powerful and less error-prone than `JavaScript`, you can install it using `npm i -g purescript`
22 | * `spago` as a PureScript build tool, it's much more flexible and reliable than pulp, you can install it using `npm i -g spago`
23 | * `parcel` as a web bundler, we use it because it doesn't require ANY configuration in opposite to `webpack`
24 |
--------------------------------------------------------------------------------
/src/Gimel/Types.purs:
--------------------------------------------------------------------------------
1 | module Gimel.Types where
2 |
3 | import Prelude
4 |
5 | import Data.Foldable (fold)
6 | import Gimel.Cmd (Cmd)
7 | import Gimel.Html (Html)
8 | import Gimel.Sub (Sub, none)
9 |
10 | type Application model event =
11 | { init :: model
12 | , view :: model -> Html event
13 | , update :: model -> event -> Update model event
14 | , subs :: Sub model event
15 | }
16 |
17 | type Update model event = UpdateM event model
18 |
19 | newtype UpdateM event model =
20 | Update
21 | { model :: model
22 | , cmds :: Array (Cmd event)
23 | }
24 |
25 | instance functorUpdate :: Functor (UpdateM event) where
26 | map f (Update context) = Update context {model = f context.model}
27 |
28 | instance applyUpdate :: Apply (UpdateM event) where
29 | apply (Update context) upd = context.model <$> upd
30 |
31 | instance applicativeUpdate :: Applicative (UpdateM event) where
32 | pure model = Update {model, cmds: []}
33 |
34 | instance bindUpdate :: Bind (UpdateM event) where
35 | bind (Update context) f = f context.model
36 |
37 | instance monadUpdate :: Monad (UpdateM event)
38 |
39 | viewNone :: forall model event. model -> Html event
40 | viewNone _ = fold []
41 |
42 | updateNone :: forall model event. model -> event -> Update model event
43 | updateNone model = pure <<< const model
44 |
45 | mkApp :: forall model event. model -> Application model event
46 | mkApp init = {init, view: viewNone, update: updateNone, subs: none}
--------------------------------------------------------------------------------
/src/Gimel/Utils.purs:
--------------------------------------------------------------------------------
1 | module Gimel.Utils where
2 |
3 | import Prelude
4 |
5 | import CSS (CSS, fromString, prefixed, render, renderedInline)
6 | import Data.Maybe (Maybe(..), fromMaybe, maybe)
7 | import Effect (Effect)
8 | import Effect.Aff (Aff, Milliseconds(..), delay)
9 | import Effect.Class (liftEffect)
10 | import Gimel.Cmd (Cmd(..))
11 | import Gimel.Types (UpdateM(..), Update)
12 |
13 | withEvent :: forall model event. model -> event -> Update model event
14 | withEvent model event = withEvents model [event]
15 |
16 | withEvents :: forall model event. model -> Array event -> Update model event
17 | withEvents model events =
18 | Update
19 | { model
20 | , cmds: map (\event -> Cmd \runEvent -> runEvent event)
21 | events
22 | }
23 |
24 | withAff :: forall model event. model -> Aff event -> Update model event
25 | withAff model aff = withAffs model [aff]
26 |
27 | withMaybeAff :: forall model event. model -> Aff (Maybe event) -> Update model event
28 | withMaybeAff model aff = withMaybeAffs model [aff]
29 |
30 | withAffs :: forall model event. model -> Array (Aff event) -> Update model event
31 | withAffs model = withMaybeAffs model <<< map (map Just)
32 |
33 | withMaybeAffs :: forall model event. model -> Array (Aff (Maybe event)) -> Update model event
34 | withMaybeAffs model affs =
35 | Update
36 | { model
37 | , cmds: map (\aff -> Cmd \runEvent -> maybe mempty runEvent =<< aff)
38 | affs
39 | }
40 |
41 | withEff :: forall model event. model -> Effect event -> Update model event
42 | withEff model eff = withEffs model [eff]
43 |
44 | withMaybeEff :: forall model event. model -> Effect (Maybe event) -> Update model event
45 | withMaybeEff model eff = withMaybeEffs model [eff]
46 |
47 | withEffs :: forall model event. model -> Array (Effect event) -> Update model event
48 | withEffs model = withMaybeEffs model <<< map (map Just)
49 |
50 | withMaybeEffs :: forall model event. model -> Array (Effect (Maybe event)) -> Update model event
51 | withMaybeEffs model = withMaybeAffs model <<< map liftEffect
52 |
53 | withCmds :: forall model event. model -> Array (Cmd event) -> Update model event
54 | withCmds model cmds = Update {model, cmds}
55 |
56 | withCmd :: forall model event. model -> Cmd event -> Update model event
57 | withCmd model cmd = withCmds model [cmd]
58 |
59 | wait :: Number -> Aff Unit
60 | wait sec = delay $ Milliseconds $ sec * 1000.0
61 |
62 | custom :: String -> String -> CSS
63 | custom = prefixed <<< fromString
64 |
65 | infix 4 custom as |:
66 |
67 | renderCSS :: CSS -> String
68 | renderCSS = fromMaybe "" <<< renderedInline <<< render
--------------------------------------------------------------------------------
/src/Gimel/Sub.purs:
--------------------------------------------------------------------------------
1 | module Gimel.Sub where
2 |
3 | import Prelude
4 |
5 | import Data.Foldable (traverse_)
6 | import Effect (Effect)
7 | import Effect.Aff (Aff, launchAff_)
8 | import Effect.Class (liftEffect)
9 | import Effect.Class.Console (logShow)
10 | import Gimel.Cmd (Cmd(..))
11 |
12 | data Sub model event
13 | = Sub (SubInstance model event)
14 | | Always (model -> Cmd event)
15 | | Batch (Array (Sub model event))
16 |
17 | instance semigroupSub :: Semigroup (Sub model event) where
18 | append x y = Batch [x, y]
19 |
20 | instance monoidSub :: Monoid (Sub model event) where
21 | mempty = Batch []
22 |
23 | instance functorSub :: Functor (Sub model) where
24 | map f = case _ of
25 | Sub inst ->
26 | Sub $ inst
27 | { enable = \model runEvent ->
28 | inst.enable model $ runEvent <<< f
29 | }
30 | Always runSub -> Always \model -> f <$> runSub model
31 | Batch subs -> Batch $ map f <$> subs
32 |
33 | connect
34 | :: forall model1 model2 event1 event2
35 | . (model2 -> model1)
36 | -> (event1 -> event2)
37 | -> Sub model1 event1
38 | -> Sub model2 event2
39 | connect fModel fEvent = mapSubModel fModel <<< map fEvent
40 |
41 | mapSubModel :: forall model1 model2 event. (model2 -> model1) -> Sub model1 event -> Sub model2 event
42 | mapSubModel f = case _ of
43 | Batch xs -> Batch $ map (mapSubModel f) xs
44 | Always runSub -> Always \model -> runSub $ f model
45 | Sub inst ->
46 | Sub $ inst
47 | { checkCondition = \model -> inst.checkCondition $ f model
48 | , enable = \model runEvent -> inst.enable (f model) runEvent
49 | }
50 |
51 | type SubInstance model event =
52 | { checkCondition :: model -> Boolean
53 | , enable :: model -> (event -> Aff Unit) -> Aff (Aff Unit)
54 | , status :: SubStatus
55 | }
56 |
57 | data SubStatus
58 | = Active {disable :: Aff Unit}
59 | | Inactive
60 |
61 | none :: forall model event. Sub model event
62 | none = Batch []
63 |
64 | mkSub
65 | :: forall model event
66 | . (model -> (event -> Aff Unit) -> Aff (Aff Unit))
67 | -> Sub model event
68 | mkSub enable = Sub {checkCondition: const true, enable, status: Inactive}
69 |
70 | mkSubEff
71 | :: forall model event
72 | . (model -> (event -> Effect Unit) -> Effect (Effect Unit))
73 | -> Sub model event
74 | mkSubEff enable =
75 | Sub
76 | { checkCondition: const true
77 | , enable: \model runEvent ->
78 | liftEffect <$> liftEffect (enable model (launchAff_ <<< runEvent))
79 | , status: Inactive
80 | }
81 |
82 | enableWhen :: forall model event. (model -> Boolean) -> Sub model event -> Sub model event
83 | enableWhen checkCondition (Sub inst) = Sub inst {checkCondition = checkCondition}
84 | enableWhen _ x = x
85 |
86 | logModel :: forall model event. Show model => Sub model event
87 | logModel = Always $ Cmd <<< const <<< logShow
88 |
89 | execEvents :: forall model event. Array event -> Sub model event
90 | execEvents events = mkSub \_ runEvent -> traverse_ runEvent events $> mempty
91 |
92 | runCmd :: forall model event. Cmd event -> Sub model event
93 | runCmd cmd = runCmds [cmd]
94 |
95 | runCmds :: forall model event. Array (Cmd event) -> Sub model event
96 | runCmds cmds = mkSub \_ runEvent -> do
97 | traverse_ (\(Cmd cmd) -> cmd runEvent) cmds
98 |
99 | pure mempty
100 |
101 | execEvent :: forall model event. event -> Sub model event
102 | execEvent e = execEvents [e]
--------------------------------------------------------------------------------
/src/Gimel/Component.purs:
--------------------------------------------------------------------------------
1 | module Gimel.Component where
2 |
3 | import Prelude
4 |
5 | import Data.Array (cons)
6 | import Data.Foldable (find, foldMap)
7 | import Data.Maybe (Maybe(..))
8 | import Gimel.Html (Html)
9 | import Gimel.Types (Application, UpdateM(..), Update)
10 | import Gimel.Utils (withCmds)
11 |
12 | newtype Component model event1 event2 = Component
13 | { transformMsg :: event1 -> event2
14 | , app :: Application model event1
15 | }
16 |
17 | instance showComponent :: Show model => Show (Component model event1 event2) where
18 | show x = "Component (" <> show (getModel x) <> ")"
19 |
20 | getModel :: forall model event1 event2. Component model event1 event2 -> model
21 | getModel (Component component) = component.app.init
22 |
23 | new
24 | :: forall model event1 event2
25 | . (event1 -> event2)
26 | -> Application model event1
27 | -> Component model event1 event2
28 | new transformMsg app = Component {transformMsg, app}
29 |
30 | display :: forall model event1 event2. Component model event1 event2 -> Html event2
31 | display (Component component) = map component.transformMsg $ component.app.view component.app.init
32 |
33 | relay
34 | :: forall model parentModel event1 event2
35 | . event1
36 | -> (Component model event1 event2 -> parentModel)
37 | -> Component model event1 event2
38 | -> Update parentModel event2
39 | relay event inject (Component component) =
40 | let Update next = component.app.update component.app.init event
41 | in withCmds
42 | (inject $ Component component {app = component.app {init = next.model}})
43 | (map (map component.transformMsg) next.cmds)
44 |
45 | data Box model event1 event2 =
46 | Box
47 | { items :: Array (BoxItem model)
48 | , transformMsg :: event1 -> Int -> event2
49 | , app :: Application model event1
50 | , idRatio :: Int
51 | }
52 |
53 | instance showBox :: Show model => Show (Box model event1 event2) where
54 | show (Box x) = "Box (" <> show x.items <> ", idRatio: " <> show x.idRatio <> ")"
55 |
56 | type BoxItem model =
57 | { id :: Int
58 | , model :: model
59 | }
60 |
61 | newBox
62 | :: forall model event1 event2
63 | . (event1 -> Int -> event2)
64 | -> Application model event1
65 | -> Box model event1 event2
66 | newBox transformMsg app = Box {items: [], app, transformMsg, idRatio: 0}
67 |
68 | displayBox :: forall model event1 event2. Box model event1 event2 -> Html event2
69 | displayBox (Box box) =
70 | foldMap
71 | (\item ->
72 | map
73 | (\msg -> box.transformMsg msg item.id)
74 | (box.app.view item.model)
75 | )
76 | box.items
77 |
78 | addItem :: forall model event1 event2. Box model event1 event2 -> Box model event1 event2
79 | addItem (Box box) =
80 | Box box
81 | { items = cons {model: box.app.init, id: box.idRatio} box.items
82 | , idRatio = box.idRatio + 1
83 | }
84 |
85 | relayBox
86 | :: forall model parentModel event1 event2
87 | . event1
88 | -> Int
89 | -> (Box model event1 event2 -> parentModel)
90 | -> Box model event1 event2
91 | -> Update parentModel event2
92 | relayBox event id inject (Box box) =
93 | let
94 | itemToUpdate =
95 | case find (\x -> x.id == id) box.items of
96 | Just item -> item
97 | Nothing -> {id: 0, model: box.app.init}
98 |
99 | Update next = box.app.update itemToUpdate.model event
100 | in
101 | withCmds
102 | (inject $ Box box
103 | { items =
104 | map
105 | (\item ->
106 | if item.id == id
107 | then item {model = next.model}
108 | else item
109 | )
110 | box.items
111 | }
112 | )
113 | (map (map (\msg -> box.transformMsg msg id)) next.cmds)
--------------------------------------------------------------------------------
/src/Gimel/Engine.purs:
--------------------------------------------------------------------------------
1 | module Gimel.Engine where
2 |
3 | import Prelude
4 |
5 | import Data.Array (cons, uncons)
6 | import Data.Foldable (traverse_)
7 | import Data.Maybe (Maybe(..))
8 | import Data.Traversable (traverse)
9 | import Effect (Effect)
10 | import Effect.Aff (Aff, launchAff_)
11 | import Effect.Class (liftEffect)
12 | import Effect.Class.Console (error)
13 | import Effect.Ref as Ref
14 | import Gimel.Cmd (Cmd(..))
15 | import Gimel.Html (Html, toReactHtml)
16 | import Gimel.Sub (Sub(..), SubInstance, SubStatus(..), none)
17 | import Gimel.Types (Application, Update, UpdateM(..))
18 | import React (Children, ReactClass, createElement, getState, modifyState)
19 | import React (component) as React
20 | import ReactDOM (render)
21 | import Web.DOM.NonElementParentNode (getElementById) as DOM
22 | import Web.HTML (window) as DOM
23 | import Web.HTML.HTMLDocument (toNonElementParentNode) as DOM
24 | import Web.HTML.Window (document) as DOM
25 |
26 | classFromApp :: forall event model. Application model event -> ReactClass { children :: Children | () }
27 | classFromApp app = React.component "Gimel" constructor
28 | where
29 | constructor this = do
30 | modelRef <- Ref.new app.init
31 |
32 | let
33 | runEvent :: event -> Aff Unit
34 | runEvent event = do
35 | model <- liftEffect $ Ref.read modelRef
36 |
37 | let Update next = app.update model event
38 |
39 | liftEffect do
40 | Ref.write next.model modelRef
41 | modifyState this $ \state -> state {model = next.model}
42 |
43 | runCmds next.cmds
44 |
45 | runCmds = traverse_ (\(Cmd x) -> x runEvent)
46 |
47 | collectSubs
48 | :: Array (Sub model event)
49 | -> {always :: Array (model -> Cmd event), active :: Array (SubInstance model event)}
50 | -> {always :: Array (model -> Cmd event), active :: Array (SubInstance model event)}
51 | collectSubs subs res = case uncons subs of
52 | Nothing -> res
53 | Just {head: x , tail: xs} ->
54 | case x of
55 | Always f -> collectSubs xs $ res {always = cons f res.always}
56 | Sub sub -> collectSubs xs $ res {active = cons sub res.active}
57 | Batch innerSubs -> collectSubs xs $ res <> collectSubs innerSubs mempty
58 |
59 | collectedSubs = collectSubs [app.subs] mempty
60 |
61 | updateActiveSub :: SubInstance model event -> Aff (SubInstance model event)
62 | updateActiveSub sub = do
63 | currState <- liftEffect $ getState this
64 | status <-
65 | case sub.status of
66 | Active {disable} ->
67 | if sub.checkCondition currState.model
68 | then pure sub.status
69 | else disable $> Inactive
70 | Inactive ->
71 | if sub.checkCondition currState.model
72 | then do
73 | disable <- sub.enable currState.model runEvent
74 | pure $ Active {disable}
75 | else pure Inactive
76 |
77 | pure sub {status = status}
78 |
79 | initActiveSubs :: Aff (Array (SubInstance model event))
80 | initActiveSubs =
81 | traverse
82 | (\sub ->
83 | if sub.checkCondition app.init
84 | then do
85 | disable <- sub.enable app.init runEvent
86 | pure sub {status = Active {disable}}
87 | else pure sub
88 | )
89 | collectedSubs.active
90 |
91 | activeSubsRef <- Ref.new []
92 |
93 | pure
94 | { state: {model: app.init}
95 |
96 | , render: (\state -> toReactHtml runEvent $ app.view state.model) <$> getState this
97 |
98 | , componentDidMount: launchAff_ do
99 | subs <- initActiveSubs
100 | liftEffect $ Ref.write subs activeSubsRef
101 |
102 | , componentDidUpdate: \_ state _ -> launchAff_ do
103 | -- Perform Always subs
104 | runCmds $ map (\f -> f state.model) collectedSubs.always
105 |
106 | -- Update Active subs
107 | currActiveSubs <- liftEffect $ Ref.read activeSubsRef
108 | updatedActiveSubs <- traverse updateActiveSub currActiveSubs
109 |
110 | liftEffect $ Ref.write updatedActiveSubs activeSubsRef
111 | }
112 |
113 | run :: forall model event. Application model event -> Effect Unit
114 | run = runOn "gimel"
115 |
116 | runOn :: forall model event. String -> Application model event -> Effect Unit
117 | runOn nodeId app = do
118 | win <- DOM.window
119 | maybeRoot <- DOM.getElementById nodeId =<< DOM.toNonElementParentNode <$> DOM.document win
120 |
121 | case maybeRoot of
122 | Just root -> render (createElement (classFromApp app) {} []) root *> mempty
123 | Nothing -> error $ "Can't find an element with an id " <> nodeId
124 |
125 | pureApp
126 | :: forall model event
127 | . {init :: model, view :: model -> Html event, update :: model -> event -> model}
128 | -> Application model event
129 | pureApp app =
130 | { init: app.init
131 | , update: \model -> pure <<< app.update model
132 | , view: app.view
133 | , subs: none
134 | }
135 |
136 | sandbox
137 | :: forall model event
138 | . { init :: model
139 | , view :: model -> Html event
140 | , update :: model -> event -> Update model event
141 | }
142 | -> Application model event
143 | sandbox app =
144 | { init: app.init
145 | , update: app.update
146 | , view: app.view
147 | , subs: none
148 | }
--------------------------------------------------------------------------------
/src/Gimel/Attributes.purs:
--------------------------------------------------------------------------------
1 | module Gimel.Attributes where
2 |
3 | import Prelude
4 |
5 | import Effect.Aff (Aff, launchAff_)
6 | import Effect.Uncurried (mkEffectFn1)
7 | import React.DOM.Props (Props, unsafeMkProps)
8 | import React.SyntheticEvent (SyntheticEvent)
9 | import Unsafe.Coerce (unsafeCoerce)
10 |
11 | data Attribute event
12 | = Attribute Props
13 | | AttributeEvent String (SyntheticEvent -> event)
14 |
15 | instance functoAttribute :: Functor Attribute where
16 | map f = case _ of
17 | Attribute props -> Attribute props
18 | AttributeEvent str e -> AttributeEvent str $ f <<< e
19 |
20 | on :: forall event. String -> event -> Attribute event
21 | on eventName = AttributeEvent ("on" <> eventName) <<< const
22 |
23 | on_ :: forall event. String -> (SyntheticEvent -> event) -> Attribute event
24 | on_ eventName f = AttributeEvent ("on" <> eventName) f
25 |
26 | attribute :: forall event propValue. String -> propValue -> Attribute event
27 | attribute k v = Attribute $ unsafeMkProps k v
28 |
29 | infix 4 attribute as =:
30 |
31 | toReactProp :: forall event. (event -> Aff Unit) -> Attribute event -> Props
32 | toReactProp _ (Attribute prop) = prop
33 | toReactProp runEvent (AttributeEvent eventName event) =
34 | unsafeMkProps eventName $ mkEffectFn1 (launchAff_ <<< runEvent <<< event)
35 |
36 | -- Events
37 |
38 | targetOf :: forall a b. a -> b
39 | targetOf e = (unsafeCoerce e).target
40 |
41 | onClick :: forall event. event -> Attribute event
42 | onClick = on "Click"
43 |
44 | onDoubleClick :: forall event. event -> Attribute event
45 | onDoubleClick = on "DoubleClick"
46 |
47 | onMouseDown :: forall event. event -> Attribute event
48 | onMouseDown = on "MouseDown"
49 |
50 | onMouseUp :: forall event. event -> Attribute event
51 | onMouseUp = on "MouseUp"
52 |
53 | onMouseEnter :: forall event. event -> Attribute event
54 | onMouseEnter = on "MouseEnter"
55 |
56 | onMouseLeave :: forall event. event -> Attribute event
57 | onMouseLeave = on "MouseLeave"
58 |
59 | onMouseOver :: forall event. event -> Attribute event
60 | onMouseOver = on "MouseOver"
61 |
62 | onMouseOut :: forall event. event -> Attribute event
63 | onMouseOut = on "MouseOut"
64 |
65 | onChange :: forall event. (String -> event) -> Attribute event
66 | onChange f = on_ "Change" \e -> f (targetOf e).value
67 |
68 | onInput :: forall event. (String -> event) -> Attribute event
69 | onInput f = on_ "Input" \e -> f (targetOf e).value
70 |
71 | onCheck :: forall event. (Boolean -> event) -> Attribute event
72 | onCheck f = on_ "Check" \e -> f (targetOf e).checked
73 |
74 | onSubmit :: forall event. event -> Attribute event
75 | onSubmit = on "Submit"
76 |
77 | onBlur :: forall event. event -> Attribute event
78 | onBlur = on "Blur"
79 |
80 | onFocus :: forall event. event -> Attribute event
81 | onFocus = on "Focus"
82 |
83 | -- Attributes
84 |
85 | _data :: forall a event. Record a -> Attribute event
86 | _data = attribute "data"
87 |
88 | style :: forall a event. Record a -> Attribute event
89 | style = attribute "style"
90 |
91 | accept :: forall event. String -> Attribute event
92 | accept = attribute "accept"
93 |
94 | acceptCharset :: forall event. String -> Attribute event
95 | acceptCharset = attribute "accept-charset"
96 |
97 | accessKey :: forall event. String -> Attribute event
98 | accessKey = attribute "accesskey"
99 |
100 | allowFullScreen :: forall event. Boolean -> Attribute event
101 | allowFullScreen = attribute "allowfullscreen"
102 |
103 | allowTransparency :: forall event. Boolean -> Attribute event
104 | allowTransparency = attribute "allowTransparency"
105 |
106 | alt :: forall event. String -> Attribute event
107 | alt = attribute "alt"
108 |
109 | async :: forall event. Boolean -> Attribute event
110 | async = attribute "async"
111 |
112 | autoComplete :: forall event. String -> Attribute event
113 | autoComplete = attribute "autocomplete"
114 |
115 | autoFocus :: forall event. Boolean -> Attribute event
116 | autoFocus = attribute "autofocus"
117 |
118 | autoPlay :: forall event. Boolean -> Attribute event
119 | autoPlay = attribute "autoplay"
120 |
121 | capture :: forall event. Boolean -> Attribute event
122 | capture = attribute "capture"
123 |
124 | cellPadding :: forall event. String -> Attribute event
125 | cellPadding = attribute "cellpadding"
126 |
127 | cellSpacing :: forall event. String -> Attribute event
128 | cellSpacing = attribute "cellspacing"
129 |
130 | charset :: forall event. String -> Attribute event
131 | charset = attribute "charset"
132 |
133 | challenge :: forall event. Boolean -> Attribute event
134 | challenge = attribute "challenge"
135 |
136 | checked :: forall event. Boolean -> Attribute event
137 | checked = attribute "checked"
138 |
139 | cite :: forall event. String -> Attribute event
140 | cite = attribute "cite"
141 |
142 | classID :: forall event. String -> Attribute event
143 | classID = attribute "classid"
144 |
145 | className :: forall event. String -> Attribute event
146 | className = attribute "className"
147 |
148 | cols :: forall event. Int -> Attribute event
149 | cols = attribute "cols"
150 |
151 | colspan :: forall event. Int -> Attribute event
152 | colspan = attribute "colspan"
153 |
154 | content :: forall event. String -> Attribute event
155 | content = attribute "content"
156 |
157 | contentEditable :: forall event. Boolean -> Attribute event
158 | contentEditable = attribute "contenteditable"
159 |
160 | contextMenu :: forall event. String -> Attribute event
161 | contextMenu = attribute "contextmenu"
162 |
163 | controls :: forall event. Boolean -> Attribute event
164 | controls = attribute "controls"
165 |
166 | coords :: forall event. String -> Attribute event
167 | coords = attribute "coords"
168 |
169 | crossorigin :: forall event. String -> Attribute event
170 | crossorigin = attribute "crossorigin"
171 |
172 | dateTime :: forall event. String -> Attribute event
173 | dateTime = attribute "datetime"
174 |
175 | default :: forall event. Boolean -> Attribute event
176 | default = attribute "default"
177 |
178 | defaultChecked :: forall event. Boolean -> Attribute event
179 | defaultChecked = attribute "defaultChecked"
180 |
181 | defaultValue :: forall event. Boolean -> Attribute event
182 | defaultValue = attribute "defaultValue"
183 |
184 | defer :: forall event. Boolean -> Attribute event
185 | defer = attribute "defer"
186 |
187 | dir :: forall event. String -> Attribute event
188 | dir = attribute "dir"
189 |
190 | disabled :: forall event. Boolean -> Attribute event
191 | disabled = attribute "disabled"
192 |
193 | download :: forall event. String -> Attribute event
194 | download = attribute "download"
195 |
196 | draggable :: forall event. Boolean -> Attribute event
197 | draggable = attribute "draggable"
198 |
199 | encType :: forall event. String -> Attribute event
200 | encType = attribute "enctype"
201 |
202 | form :: forall event. String -> Attribute event
203 | form = attribute "form"
204 |
205 | formAction :: forall event. String -> Attribute event
206 | formAction = attribute "formaction"
207 |
208 | formEncType :: forall event. String -> Attribute event
209 | formEncType = attribute "formenctype"
210 |
211 | formMethod :: forall event. String -> Attribute event
212 | formMethod = attribute "formmethod"
213 |
214 | formNoValidate :: forall event. Boolean -> Attribute event
215 | formNoValidate = attribute "formnovalidate"
216 |
217 | formTarget :: forall event. String -> Attribute event
218 | formTarget = attribute "formtarget"
219 |
220 | headers :: forall event. String -> Attribute event
221 | headers = attribute "headers"
222 |
223 | height :: forall event. String -> Attribute event
224 | height = attribute "height"
225 |
226 | hidden :: forall event. Boolean -> Attribute event
227 | hidden = attribute "hidden"
228 |
229 | high :: forall event. String -> Attribute event
230 | high = attribute "high"
231 |
232 | href :: forall event. String -> Attribute event
233 | href = attribute "href"
234 |
235 | hrefLang :: forall event. String -> Attribute event
236 | hrefLang = attribute "hreflang"
237 |
238 | htmlFor :: forall event. String -> Attribute event
239 | htmlFor = attribute "htmlfor"
240 |
241 | httpEquiv :: forall event. String -> Attribute event
242 | httpEquiv = attribute "httpequiv"
243 |
244 | icon :: forall event. String -> Attribute event
245 | icon = attribute "icon"
246 |
247 | _id :: forall event. String -> Attribute event
248 | _id = attribute "id"
249 |
250 | inputMode :: forall event. String -> Attribute event
251 | inputMode = attribute "inputmode"
252 |
253 | integrity :: forall event. String -> Attribute event
254 | integrity = attribute "integrity"
255 |
256 | is :: forall event. String -> Attribute event
257 | is = attribute "is"
258 |
259 | key :: forall event. String -> Attribute event
260 | key = attribute "key"
261 |
262 | keyparams :: forall event. String -> Attribute event
263 | keyparams = attribute "keyparams"
264 |
265 | type_ :: forall event. String -> Attribute event
266 | type_ = attribute "type"
267 |
268 | keytype :: forall event. String -> Attribute event
269 | keytype = attribute "keytype"
270 |
271 | kind :: forall event. String -> Attribute event
272 | kind = attribute "kind"
273 |
274 | label :: forall event. String -> Attribute event
275 | label = attribute "label"
276 |
277 | list :: forall event. String -> Attribute event
278 | list = attribute "list"
279 |
280 | lang :: forall event. String -> Attribute event
281 | lang = attribute "lang"
282 |
283 | loop :: forall event. Boolean -> Attribute event
284 | loop = attribute "loop"
285 |
286 | low :: forall event. String -> Attribute event
287 | low = attribute "low"
288 |
289 | manifest :: forall event. String -> Attribute event
290 | manifest = attribute "manifest"
291 |
292 | marginHeight :: forall event. String -> Attribute event
293 | marginHeight = attribute "marginheight"
294 |
295 | marginWidth :: forall event. String -> Attribute event
296 | marginWidth = attribute "marginwidth"
297 |
298 | max :: forall event. String -> Attribute event
299 | max = attribute "max"
300 |
301 | maxLenght :: forall event. String -> Attribute event
302 | maxLenght = attribute "maxlenght"
303 |
304 | media :: forall event. String -> Attribute event
305 | media = attribute "media"
306 |
307 | mediaGroup :: forall event. String -> Attribute event
308 | mediaGroup = attribute "media"
309 |
310 | method :: forall event. String -> Attribute event
311 | method = attribute "method"
312 |
313 | min :: forall event. String -> Attribute event
314 | min = attribute "min"
315 |
316 | minLength :: forall event. String -> Attribute event
317 | minLength = attribute "minlenght"
318 |
319 | muted :: forall event. Boolean -> Attribute event
320 | muted = attribute "muted"
321 |
322 | multiple :: forall event. Boolean -> Attribute event
323 | multiple = attribute "multiple"
324 |
325 | name :: forall event. String -> Attribute event
326 | name = attribute "name"
327 |
328 | nonce :: forall event. String -> Attribute event
329 | nonce = attribute "nonce"
330 |
331 | noValidate :: forall event. Boolean -> Attribute event
332 | noValidate = attribute "novalidate"
333 |
334 | open :: forall event. Boolean -> Attribute event
335 | open = attribute "open"
336 |
337 | optimum :: forall event. String -> Attribute event
338 | optimum = attribute "optimum"
339 |
340 | pattern :: forall event. String -> Attribute event
341 | pattern = attribute "pattern"
342 |
343 | placeholder :: forall event. String -> Attribute event
344 | placeholder = attribute "placeholder"
345 |
346 | poster :: forall event. String -> Attribute event
347 | poster = attribute "poster"
348 |
349 | preload :: forall event. String -> Attribute event
350 | preload = attribute "preload"
351 |
352 | profile :: forall event. String -> Attribute event
353 | profile = attribute "profile"
354 |
355 | radioGroup :: forall event. String -> Attribute event
356 | radioGroup = attribute "radiogroup"
357 |
358 | readOnly :: forall event. Boolean -> Attribute event
359 | readOnly = attribute "readonly"
360 |
361 | rel :: forall event. String -> Attribute event
362 | rel = attribute "rel"
363 |
364 | required :: forall event. Boolean -> Attribute event
365 | required = attribute "required"
366 |
367 | value :: forall event. String -> Attribute event
368 | value = attribute "value"
369 |
--------------------------------------------------------------------------------
/src/Gimel/Html.purs:
--------------------------------------------------------------------------------
1 | module Gimel.Html where
2 |
3 | import Prelude
4 |
5 | import Data.Foldable (fold)
6 | import Effect.Aff (Aff)
7 | import Gimel.Attributes (Attribute, toReactProp)
8 | import React (Children, ReactClass, ReactElement, unsafeCreateElement)
9 | import React.DOM (IsDynamic(..), mkDOM)
10 | import React.DOM (text) as DOM
11 | import React.DOM.Props (Props, unsafeFromPropsArray)
12 |
13 | data Html event
14 | = Html ReactEl (Array (Attribute event)) (Array (Html event))
15 | | Text String
16 | | Fragment (Array (Html event))
17 | | RawReact ReactElement
18 |
19 | instance semigroupHtml :: Semigroup (Html event) where
20 | append x y = Fragment [x, y]
21 |
22 | instance monoidHtml :: Monoid (Html event) where
23 | mempty = Fragment []
24 |
25 | instance functorHtml :: Functor Html where
26 | map f = case _ of
27 | Text t -> Text t
28 | Fragment xs -> Fragment $ map (map f) xs
29 | RawReact r -> RawReact r
30 | Html reactEl attrs childs -> Html reactEl (map (map f) attrs) $ map (map f) childs
31 |
32 | text :: forall event. String -> Html event
33 | text = Text
34 |
35 | textS :: forall event a. Show a => a -> Html event
36 | textS = Text <<< show
37 |
38 | textShow :: forall event a. Show a => a -> Html event
39 | textShow = textS
40 |
41 | frag :: forall event. Array (Html event) -> Html event
42 | frag = Fragment
43 |
44 | reactNodeFromTag :: String -> Array Props -> Array ReactElement -> ReactElement
45 | reactNodeFromTag = mkDOM (IsDynamic false)
46 |
47 | el :: forall event. String -> Array (Attribute event) -> Array (Html event) -> Html event
48 | el tagName = Html (reactNodeFromTag tagName)
49 |
50 | el_ :: forall event. String -> Array (Attribute event) -> Html event -> Html event
51 | el_ tagName attrs child = Html (reactNodeFromTag tagName) attrs [child]
52 |
53 | el' :: forall event. String -> Array (Html event) -> Html event
54 | el' tagName = Html (reactNodeFromTag tagName) []
55 |
56 | elAttrs :: String -> ElAttrs
57 | elAttrs tagName attrs = el tagName attrs []
58 |
59 | raw :: forall event. ReactElement -> Html event
60 | raw = RawReact
61 |
62 | react
63 | :: forall props event
64 | . ReactClass { children :: Children | props }
65 | -> Array (Attribute event)
66 | -> Array (Html event)
67 | -> Html event
68 | react class_ = Html (unsafeCreateElement class_ <<< unsafeFromPropsArray)
69 |
70 | toReactHtml :: forall event. (event -> Aff Unit) -> Html event -> ReactElement
71 | toReactHtml runEvent = case _ of
72 | Text str -> DOM.text str
73 | RawReact element -> element
74 | Fragment htmls -> fold $ map (toReactHtml runEvent) htmls
75 | Html element attrs childs -> element (map (toReactProp runEvent) attrs)
76 | (map (toReactHtml runEvent) childs)
77 |
78 | -- Shortcut types
79 | type El = forall event. Array (Attribute event) -> Array (Html event) -> Html event
80 | type El_ = forall event. Array (Attribute event) -> Html event -> Html event
81 | type El' = forall event. Array (Html event) -> Html event
82 | type ElAttrs = forall event. Array (Attribute event) -> Html event
83 | type ReactEl = Array Props -> Array ReactElement -> ReactElement
84 |
85 | -- Tags
86 | a_ :: forall event. Array (Attribute event) -> Html event -> Html event
87 | a_ = el_ "a"
88 |
89 | a :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
90 | a = el "a"
91 |
92 | a' :: forall event. Array (Html event) -> Html event
93 | a' = el' "a"
94 |
95 | abbr_ :: forall event. Array (Attribute event) -> Html event -> Html event
96 | abbr_ = el_ "abbr"
97 |
98 | abbr :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
99 | abbr = el "abbr"
100 |
101 | abbr' :: forall event. Array (Html event) -> Html event
102 | abbr' = el' "abbr"
103 |
104 | address_ :: forall event. Array (Attribute event) -> Html event -> Html event
105 | address_ = el_ "address"
106 |
107 | address :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
108 | address = el "address"
109 |
110 | address' :: forall event. Array (Html event) -> Html event
111 | address' = el' "address"
112 |
113 | article_ :: forall event. Array (Attribute event) -> Html event -> Html event
114 | article_ = el_ "article"
115 |
116 | article :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
117 | article = el "article"
118 |
119 | article' :: forall event. Array (Html event) -> Html event
120 | article' = el' "article"
121 |
122 | aside_ :: forall event. Array (Attribute event) -> Html event -> Html event
123 | aside_ = el_ "aside"
124 |
125 | aside :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
126 | aside = el "aside"
127 |
128 | aside' :: forall event. Array (Html event) -> Html event
129 | aside' = el' "aside"
130 |
131 | audio_ :: forall event. Array (Attribute event) -> Html event -> Html event
132 | audio_ = el_ "audio"
133 |
134 | audio :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
135 | audio = el "audio"
136 |
137 | audio' :: forall event. Array (Html event) -> Html event
138 | audio' = el' "audio"
139 |
140 | b_ :: forall event. Array (Attribute event) -> Html event -> Html event
141 | b_ = el_ "b"
142 |
143 | b :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
144 | b = el "b"
145 |
146 | b' :: forall event. Array (Html event) -> Html event
147 | b' = el' "b"
148 |
149 | base_ :: forall event. Array (Attribute event) -> Html event -> Html event
150 | base_ = el_ "base"
151 |
152 | base :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
153 | base = el "base"
154 |
155 | base' :: forall event. Array (Html event) -> Html event
156 | base' = el' "base"
157 |
158 | bdi_ :: forall event. Array (Attribute event) -> Html event -> Html event
159 | bdi_ = el_ "bdi"
160 |
161 | bdi :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
162 | bdi = el "bdi"
163 |
164 | bdi' :: forall event. Array (Html event) -> Html event
165 | bdi' = el' "bdi"
166 |
167 | bdo_ :: forall event. Array (Attribute event) -> Html event -> Html event
168 | bdo_ = el_ "bdo"
169 |
170 | bdo :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
171 | bdo = el "bdo"
172 |
173 | bdo' :: forall event. Array (Html event) -> Html event
174 | bdo' = el' "bdo"
175 |
176 | blockquote_ :: forall event. Array (Attribute event) -> Html event -> Html event
177 | blockquote_ = el_ "blockquote"
178 |
179 | blockquote :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
180 | blockquote = el "blockquote"
181 |
182 | blockquote' :: forall event. Array (Html event) -> Html event
183 | blockquote' = el' "blockquote"
184 |
185 | body_ :: forall event. Array (Attribute event) -> Html event -> Html event
186 | body_ = el_ "body"
187 |
188 | body :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
189 | body = el "body"
190 |
191 | body' :: forall event. Array (Html event) -> Html event
192 | body' = el' "body"
193 |
194 | button_ :: forall event. Array (Attribute event) -> Html event -> Html event
195 | button_ = el_ "button"
196 |
197 | button :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
198 | button = el "button"
199 |
200 | button' :: forall event. Array (Html event) -> Html event
201 | button' = el' "button"
202 |
203 | canvas_ :: forall event. Array (Attribute event) -> Html event -> Html event
204 | canvas_ = el_ "canvas"
205 |
206 | canvas :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
207 | canvas = el "canvas"
208 |
209 | canvas' :: forall event. Array (Html event) -> Html event
210 | canvas' = el' "canvas"
211 |
212 | caption_ :: forall event. Array (Attribute event) -> Html event -> Html event
213 | caption_ = el_ "caption"
214 |
215 | caption :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
216 | caption = el "caption"
217 |
218 | caption' :: forall event. Array (Html event) -> Html event
219 | caption' = el' "caption"
220 |
221 | cite_ :: forall event. Array (Attribute event) -> Html event -> Html event
222 | cite_ = el_ "cite"
223 |
224 | cite :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
225 | cite = el "cite"
226 |
227 | cite' :: forall event. Array (Html event) -> Html event
228 | cite' = el' "cite"
229 |
230 | code_ :: forall event. Array (Attribute event) -> Html event -> Html event
231 | code_ = el_ "code"
232 |
233 | code :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
234 | code = el "code"
235 |
236 | code' :: forall event. Array (Html event) -> Html event
237 | code' = el' "code"
238 |
239 | col_ :: forall event. Array (Attribute event) -> Html event -> Html event
240 | col_ = el_ "col"
241 |
242 | col :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
243 | col = el "col"
244 |
245 | col' :: forall event. Array (Html event) -> Html event
246 | col' = el' "col"
247 |
248 | colgroup_ :: forall event. Array (Attribute event) -> Html event -> Html event
249 | colgroup_ = el_ "colgroup"
250 |
251 | colgroup :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
252 | colgroup = el "colgroup"
253 |
254 | colgroup' :: forall event. Array (Html event) -> Html event
255 | colgroup' = el' "colgroup"
256 |
257 | data_ :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
258 | data_ = el "data"
259 |
260 | data' :: forall event. Array (Html event) -> Html event
261 | data' = el' "data"
262 |
263 | datalist_ :: forall event. Array (Attribute event) -> Html event -> Html event
264 | datalist_ = el_ "datalist"
265 |
266 | datalist :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
267 | datalist = el "datalist"
268 |
269 | datalist' :: forall event. Array (Html event) -> Html event
270 | datalist' = el' "datalist"
271 |
272 | dd_ :: forall event. Array (Attribute event) -> Html event -> Html event
273 | dd_ = el_ "dd"
274 |
275 | dd :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
276 | dd = el "dd"
277 |
278 | dd' :: forall event. Array (Html event) -> Html event
279 | dd' = el' "dd"
280 |
281 | del_ :: forall event. Array (Attribute event) -> Html event -> Html event
282 | del_ = el_ "del"
283 |
284 | del :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
285 | del = el "del"
286 |
287 | del' :: forall event. Array (Html event) -> Html event
288 | del' = el' "del"
289 |
290 | details_ :: forall event. Array (Attribute event) -> Html event -> Html event
291 | details_ = el_ "details"
292 |
293 | details :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
294 | details = el "details"
295 |
296 | details' :: forall event. Array (Html event) -> Html event
297 | details' = el' "details"
298 |
299 | dfn_ :: forall event. Array (Attribute event) -> Html event -> Html event
300 | dfn_ = el_ "dfn"
301 |
302 | dfn :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
303 | dfn = el "dfn"
304 |
305 | dfn' :: forall event. Array (Html event) -> Html event
306 | dfn' = el' "dfn"
307 |
308 | dialog_ :: forall event. Array (Attribute event) -> Html event -> Html event
309 | dialog_ = el_ "dialog"
310 |
311 | dialog :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
312 | dialog = el "dialog"
313 |
314 | dialog' :: forall event. Array (Html event) -> Html event
315 | dialog' = el' "dialog"
316 |
317 | div_ :: forall event. Array (Attribute event) -> Html event -> Html event
318 | div_ = el_ "div"
319 |
320 | div :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
321 | div = el "div"
322 |
323 | div' :: forall event. Array (Html event) -> Html event
324 | div' = el' "div"
325 |
326 | dl_ :: forall event. Array (Attribute event) -> Html event -> Html event
327 | dl_ = el_ "dl"
328 |
329 | dl :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
330 | dl = el "dl"
331 |
332 | dl' :: forall event. Array (Html event) -> Html event
333 | dl' = el' "dl"
334 |
335 | dt_ :: forall event. Array (Attribute event) -> Html event -> Html event
336 | dt_ = el_ "dt"
337 |
338 | dt :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
339 | dt = el "dt"
340 |
341 | dt' :: forall event. Array (Html event) -> Html event
342 | dt' = el' "dt"
343 |
344 | em_ :: forall event. Array (Attribute event) -> Html event -> Html event
345 | em_ = el_ "em"
346 |
347 | em :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
348 | em = el "em"
349 |
350 | em' :: forall event. Array (Html event) -> Html event
351 | em' = el' "em"
352 |
353 | embed_ :: forall event. Array (Attribute event) -> Html event -> Html event
354 | embed_ = el_ "embed"
355 |
356 | embed :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
357 | embed = el "embed"
358 |
359 | embed' :: forall event. Array (Html event) -> Html event
360 | embed' = el' "embed"
361 |
362 | fieldset_ :: forall event. Array (Attribute event) -> Html event -> Html event
363 | fieldset_ = el_ "fieldset"
364 |
365 | fieldset :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
366 | fieldset = el "fieldset"
367 |
368 | fieldset' :: forall event. Array (Html event) -> Html event
369 | fieldset' = el' "fieldset"
370 |
371 | figcaption_ :: forall event. Array (Attribute event) -> Html event -> Html event
372 | figcaption_ = el_ "figcaption"
373 |
374 | figcaption :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
375 | figcaption = el "figcaption"
376 |
377 | figcaption' :: forall event. Array (Html event) -> Html event
378 | figcaption' = el' "figcaption"
379 |
380 | figure_ :: forall event. Array (Attribute event) -> Html event -> Html event
381 | figure_ = el_ "figure"
382 |
383 | figure :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
384 | figure = el "figure"
385 |
386 | figure' :: forall event. Array (Html event) -> Html event
387 | figure' = el' "figure"
388 |
389 | footer_ :: forall event. Array (Attribute event) -> Html event -> Html event
390 | footer_ = el_ "footer"
391 |
392 | footer :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
393 | footer = el "footer"
394 |
395 | footer' :: forall event. Array (Html event) -> Html event
396 | footer' = el' "footer"
397 |
398 | form_ :: forall event. Array (Attribute event) -> Html event -> Html event
399 | form_ = el_ "form"
400 |
401 | form :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
402 | form = el "form"
403 |
404 | form' :: forall event. Array (Html event) -> Html event
405 | form' = el' "form"
406 |
407 | h1_ :: forall event. Array (Attribute event) -> Html event -> Html event
408 | h1_ = el_ "h1"
409 |
410 | h1 :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
411 | h1 = el "h1"
412 |
413 | h1' :: forall event. Array (Html event) -> Html event
414 | h1' = el' "h1"
415 |
416 | h2_ :: forall event. Array (Attribute event) -> Html event -> Html event
417 | h2_ = el_ "h2"
418 |
419 | h2 :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
420 | h2 = el "h2"
421 |
422 | h2' :: forall event. Array (Html event) -> Html event
423 | h2' = el' "h2"
424 |
425 | h3_ :: forall event. Array (Attribute event) -> Html event -> Html event
426 | h3_ = el_ "h3"
427 |
428 | h3 :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
429 | h3 = el "h3"
430 |
431 | h3' :: forall event. Array (Html event) -> Html event
432 | h3' = el' "h3"
433 |
434 | h4_ :: forall event. Array (Attribute event) -> Html event -> Html event
435 | h4_ = el_ "h4"
436 |
437 | h4 :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
438 | h4 = el "h4"
439 |
440 | h4' :: forall event. Array (Html event) -> Html event
441 | h4' = el' "h4"
442 |
443 | h5_ :: forall event. Array (Attribute event) -> Html event -> Html event
444 | h5_ = el_ "h5"
445 |
446 | h5 :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
447 | h5 = el "h5"
448 |
449 | h5' :: forall event. Array (Html event) -> Html event
450 | h5' = el' "h5"
451 |
452 | h6_ :: forall event. Array (Attribute event) -> Html event -> Html event
453 | h6_ = el_ "h6"
454 |
455 | h6 :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
456 | h6 = el "h6"
457 |
458 | h6' :: forall event. Array (Html event) -> Html event
459 | h6' = el' "h6"
460 |
461 | head_ :: forall event. Array (Attribute event) -> Html event -> Html event
462 | head_ = el_ "head"
463 |
464 | head :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
465 | head = el "head"
466 |
467 | head' :: forall event. Array (Html event) -> Html event
468 | head' = el' "head"
469 |
470 | header_ :: forall event. Array (Attribute event) -> Html event -> Html event
471 | header_ = el_ "header"
472 |
473 | header :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
474 | header = el "header"
475 |
476 | header' :: forall event. Array (Html event) -> Html event
477 | header' = el' "header"
478 |
479 | hgroup_ :: forall event. Array (Attribute event) -> Html event -> Html event
480 | hgroup_ = el_ "hgroup"
481 |
482 | hgroup :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
483 | hgroup = el "hgroup"
484 |
485 | hgroup' :: forall event. Array (Html event) -> Html event
486 | hgroup' = el' "hgroup"
487 |
488 | hr_ :: forall event. Array (Attribute event) -> Html event -> Html event
489 | hr_ = el_ "hr"
490 |
491 | hr :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
492 | hr = el "hr"
493 |
494 | hr' :: forall event. Array (Html event) -> Html event
495 | hr' = el' "hr"
496 |
497 | html_ :: forall event. Array (Attribute event) -> Html event -> Html event
498 | html_ = el_ "html"
499 |
500 | html :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
501 | html = el "html"
502 |
503 | html' :: forall event. Array (Html event) -> Html event
504 | html' = el' "html"
505 |
506 | i_ :: forall event. Array (Attribute event) -> Html event -> Html event
507 | i_ = el_ "i"
508 |
509 | i :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
510 | i = el "i"
511 |
512 | i' :: forall event. Array (Html event) -> Html event
513 | i' = el' "i"
514 |
515 | iframe_ :: forall event. Array (Attribute event) -> Html event -> Html event
516 | iframe_ = el_ "iframe"
517 |
518 | iframe :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
519 | iframe = el "iframe"
520 |
521 | iframe' :: forall event. Array (Html event) -> Html event
522 | iframe' = el' "iframe"
523 |
524 | ins_ :: forall event. Array (Attribute event) -> Html event -> Html event
525 | ins_ = el_ "ins"
526 |
527 | ins :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
528 | ins = el "ins"
529 |
530 | ins' :: forall event. Array (Html event) -> Html event
531 | ins' = el' "ins"
532 |
533 | kbd_ :: forall event. Array (Attribute event) -> Html event -> Html event
534 | kbd_ = el_ "kbd"
535 |
536 | kbd :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
537 | kbd = el "kbd"
538 |
539 | kbd' :: forall event. Array (Html event) -> Html event
540 | kbd' = el' "kbd"
541 |
542 | label_ :: forall event. Array (Attribute event) -> Html event -> Html event
543 | label_ = el_ "label"
544 |
545 | label :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
546 | label = el "label"
547 |
548 | label' :: forall event. Array (Html event) -> Html event
549 | label' = el' "label"
550 |
551 | legend_ :: forall event. Array (Attribute event) -> Html event -> Html event
552 | legend_ = el_ "legend"
553 |
554 | legend :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
555 | legend = el "legend"
556 |
557 | legend' :: forall event. Array (Html event) -> Html event
558 | legend' = el' "legend"
559 |
560 | li_ :: forall event. Array (Attribute event) -> Html event -> Html event
561 | li_ = el_ "li"
562 |
563 | li :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
564 | li = el "li"
565 |
566 | li' :: forall event. Array (Html event) -> Html event
567 | li' = el' "li"
568 |
569 | link_ :: forall event. Array (Attribute event) -> Html event -> Html event
570 | link_ = el_ "link"
571 |
572 | link :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
573 | link = el "link"
574 |
575 | link' :: forall event. Array (Html event) -> Html event
576 | link' = el' "link"
577 |
578 | main_ :: forall event. Array (Attribute event) -> Html event -> Html event
579 | main_ = el_ "main"
580 |
581 | main :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
582 | main = el "main"
583 |
584 | main' :: forall event. Array (Html event) -> Html event
585 | main' = el' "main"
586 |
587 | map_ :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
588 | map_ = el "map"
589 |
590 | map' :: forall event. Array (Html event) -> Html event
591 | map' = el' "map"
592 |
593 | mark_ :: forall event. Array (Attribute event) -> Html event -> Html event
594 | mark_ = el_ "mark"
595 |
596 | mark :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
597 | mark = el "mark"
598 |
599 | mark' :: forall event. Array (Html event) -> Html event
600 | mark' = el' "mark"
601 |
602 | math_ :: forall event. Array (Attribute event) -> Html event -> Html event
603 | math_ = el_ "math"
604 |
605 | math :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
606 | math = el "math"
607 |
608 | math' :: forall event. Array (Html event) -> Html event
609 | math' = el' "math"
610 |
611 | menu_ :: forall event. Array (Attribute event) -> Html event -> Html event
612 | menu_ = el_ "menu"
613 |
614 | menu :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
615 | menu = el "menu"
616 |
617 | menu' :: forall event. Array (Html event) -> Html event
618 | menu' = el' "menu"
619 |
620 | menuitem_ :: forall event. Array (Attribute event) -> Html event -> Html event
621 | menuitem_ = el_ "menuitem"
622 |
623 | menuitem :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
624 | menuitem = el "menuitem"
625 |
626 | menuitem' :: forall event. Array (Html event) -> Html event
627 | menuitem' = el' "menuitem"
628 |
629 | meta_ :: forall event. Array (Attribute event) -> Html event -> Html event
630 | meta_ = el_ "meta"
631 |
632 | meta :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
633 | meta = el "meta"
634 |
635 | meta' :: forall event. Array (Html event) -> Html event
636 | meta' = el' "meta"
637 |
638 | meter_ :: forall event. Array (Attribute event) -> Html event -> Html event
639 | meter_ = el_ "meter"
640 |
641 | meter :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
642 | meter = el "meter"
643 |
644 | meter' :: forall event. Array (Html event) -> Html event
645 | meter' = el' "meter"
646 |
647 | nav_ :: forall event. Array (Attribute event) -> Html event -> Html event
648 | nav_ = el_ "nav"
649 |
650 | nav :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
651 | nav = el "nav"
652 |
653 | nav' :: forall event. Array (Html event) -> Html event
654 | nav' = el' "nav"
655 |
656 | noscript_ :: forall event. Array (Attribute event) -> Html event -> Html event
657 | noscript_ = el_ "noscript"
658 |
659 | noscript :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
660 | noscript = el "noscript"
661 |
662 | noscript' :: forall event. Array (Html event) -> Html event
663 | noscript' = el' "noscript"
664 |
665 | object_ :: forall event. Array (Attribute event) -> Html event -> Html event
666 | object_ = el_ "object"
667 |
668 | object :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
669 | object = el "object"
670 |
671 | object' :: forall event. Array (Html event) -> Html event
672 | object' = el' "object"
673 |
674 | ol_ :: forall event. Array (Attribute event) -> Html event -> Html event
675 | ol_ = el_ "ol"
676 |
677 | ol :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
678 | ol = el "ol"
679 |
680 | ol' :: forall event. Array (Html event) -> Html event
681 | ol' = el' "ol"
682 |
683 | optgroup_ :: forall event. Array (Attribute event) -> Html event -> Html event
684 | optgroup_ = el_ "optgroup"
685 |
686 | optgroup :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
687 | optgroup = el "optgroup"
688 |
689 | optgroup' :: forall event. Array (Html event) -> Html event
690 | optgroup' = el' "optgroup"
691 |
692 | option_ :: forall event. Array (Attribute event) -> Html event -> Html event
693 | option_ = el_ "option"
694 |
695 | option :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
696 | option = el "option"
697 |
698 | option' :: forall event. Array (Html event) -> Html event
699 | option' = el' "option"
700 |
701 | output_ :: forall event. Array (Attribute event) -> Html event -> Html event
702 | output_ = el_ "output"
703 |
704 | output :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
705 | output = el "output"
706 |
707 | output' :: forall event. Array (Html event) -> Html event
708 | output' = el' "output"
709 |
710 | p_ :: forall event. Array (Attribute event) -> Html event -> Html event
711 | p_ = el_ "p"
712 |
713 | p :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
714 | p = el "p"
715 |
716 | p' :: forall event. Array (Html event) -> Html event
717 | p' = el' "p"
718 |
719 | param_ :: forall event. Array (Attribute event) -> Html event -> Html event
720 | param_ = el_ "param"
721 |
722 | param :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
723 | param = el "param"
724 |
725 | param' :: forall event. Array (Html event) -> Html event
726 | param' = el' "param"
727 |
728 | picture_ :: forall event. Array (Attribute event) -> Html event -> Html event
729 | picture_ = el_ "picture"
730 |
731 | picture :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
732 | picture = el "picture"
733 |
734 | picture' :: forall event. Array (Html event) -> Html event
735 | picture' = el' "picture"
736 |
737 | pre_ :: forall event. Array (Attribute event) -> Html event -> Html event
738 | pre_ = el_ "pre"
739 |
740 | pre :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
741 | pre = el "pre"
742 |
743 | pre' :: forall event. Array (Html event) -> Html event
744 | pre' = el' "pre"
745 |
746 | progress_ :: forall event. Array (Attribute event) -> Html event -> Html event
747 | progress_ = el_ "progress"
748 |
749 | progress :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
750 | progress = el "progress"
751 |
752 | progress' :: forall event. Array (Html event) -> Html event
753 | progress' = el' "progress"
754 |
755 | q_ :: forall event. Array (Attribute event) -> Html event -> Html event
756 | q_ = el_ "q"
757 |
758 | q :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
759 | q = el "q"
760 |
761 | q' :: forall event. Array (Html event) -> Html event
762 | q' = el' "q"
763 |
764 | rb_ :: forall event. Array (Attribute event) -> Html event -> Html event
765 | rb_ = el_ "rb"
766 |
767 | rb :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
768 | rb = el "rb"
769 |
770 | rb' :: forall event. Array (Html event) -> Html event
771 | rb' = el' "rb"
772 |
773 | rp_ :: forall event. Array (Attribute event) -> Html event -> Html event
774 | rp_ = el_ "rp"
775 |
776 | rp :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
777 | rp = el "rp"
778 |
779 | rp' :: forall event. Array (Html event) -> Html event
780 | rp' = el' "rp"
781 |
782 | rt_ :: forall event. Array (Attribute event) -> Html event -> Html event
783 | rt_ = el_ "rt"
784 |
785 | rt :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
786 | rt = el "rt"
787 |
788 | rt' :: forall event. Array (Html event) -> Html event
789 | rt' = el' "rt"
790 |
791 | rtc_ :: forall event. Array (Attribute event) -> Html event -> Html event
792 | rtc_ = el_ "rtc"
793 |
794 | rtc :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
795 | rtc = el "rtc"
796 |
797 | rtc' :: forall event. Array (Html event) -> Html event
798 | rtc' = el' "rtc"
799 |
800 | ruby_ :: forall event. Array (Attribute event) -> Html event -> Html event
801 | ruby_ = el_ "ruby"
802 |
803 | ruby :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
804 | ruby = el "ruby"
805 |
806 | ruby' :: forall event. Array (Html event) -> Html event
807 | ruby' = el' "ruby"
808 |
809 | s_ :: forall event. Array (Attribute event) -> Html event -> Html event
810 | s_ = el_ "s"
811 |
812 | s :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
813 | s = el "s"
814 |
815 | s' :: forall event. Array (Html event) -> Html event
816 | s' = el' "s"
817 |
818 | samp_ :: forall event. Array (Attribute event) -> Html event -> Html event
819 | samp_ = el_ "samp"
820 |
821 | samp :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
822 | samp = el "samp"
823 |
824 | samp' :: forall event. Array (Html event) -> Html event
825 | samp' = el' "samp"
826 |
827 | script_ :: forall event. Array (Attribute event) -> Html event -> Html event
828 | script_ = el_ "script"
829 |
830 | script :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
831 | script = el "script"
832 |
833 | script' :: forall event. Array (Html event) -> Html event
834 | script' = el' "script"
835 |
836 | section_ :: forall event. Array (Attribute event) -> Html event -> Html event
837 | section_ = el_ "section"
838 |
839 | section :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
840 | section = el "section"
841 |
842 | section' :: forall event. Array (Html event) -> Html event
843 | section' = el' "section"
844 |
845 | select_ :: forall event. Array (Attribute event) -> Html event -> Html event
846 | select_ = el_ "select"
847 |
848 | select :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
849 | select = el "select"
850 |
851 | select' :: forall event. Array (Html event) -> Html event
852 | select' = el' "select"
853 |
854 | slot_ :: forall event. Array (Attribute event) -> Html event -> Html event
855 | slot_ = el_ "slot"
856 |
857 | slot :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
858 | slot = el "slot"
859 |
860 | slot' :: forall event. Array (Html event) -> Html event
861 | slot' = el' "slot"
862 |
863 | small_ :: forall event. Array (Attribute event) -> Html event -> Html event
864 | small_ = el_ "small"
865 |
866 | small :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
867 | small = el "small"
868 |
869 | small' :: forall event. Array (Html event) -> Html event
870 | small' = el' "small"
871 |
872 | source_ :: forall event. Array (Attribute event) -> Html event -> Html event
873 | source_ = el_ "source"
874 |
875 | source :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
876 | source = el "source"
877 |
878 | source' :: forall event. Array (Html event) -> Html event
879 | source' = el' "source"
880 |
881 | span_ :: forall event. Array (Attribute event) -> Html event -> Html event
882 | span_ = el_ "span"
883 |
884 | span :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
885 | span = el "span"
886 |
887 | span' :: forall event. Array (Html event) -> Html event
888 | span' = el' "span"
889 |
890 | strong_ :: forall event. Array (Attribute event) -> Html event -> Html event
891 | strong_ = el_ "strong"
892 |
893 | strong :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
894 | strong = el "strong"
895 |
896 | strong' :: forall event. Array (Html event) -> Html event
897 | strong' = el' "strong"
898 |
899 | style_ :: forall event. Array (Attribute event) -> Html event -> Html event
900 | style_ = el_ "style"
901 |
902 | style :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
903 | style = el "style"
904 |
905 | style' :: forall event. Array (Html event) -> Html event
906 | style' = el' "style"
907 |
908 | sub_ :: forall event. Array (Attribute event) -> Html event -> Html event
909 | sub_ = el_ "sub"
910 |
911 | sub :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
912 | sub = el "sub"
913 |
914 | sub' :: forall event. Array (Html event) -> Html event
915 | sub' = el' "sub"
916 |
917 | summary_ :: forall event. Array (Attribute event) -> Html event -> Html event
918 | summary_ = el_ "summary"
919 |
920 | summary :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
921 | summary = el "summary"
922 |
923 | summary' :: forall event. Array (Html event) -> Html event
924 | summary' = el' "summary"
925 |
926 | sup_ :: forall event. Array (Attribute event) -> Html event -> Html event
927 | sup_ = el_ "sup"
928 |
929 | sup :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
930 | sup = el "sup"
931 |
932 | sup' :: forall event. Array (Html event) -> Html event
933 | sup' = el' "sup"
934 |
935 | svg_ :: forall event. Array (Attribute event) -> Html event -> Html event
936 | svg_ = el_ "svg"
937 |
938 | svg :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
939 | svg = el "svg"
940 |
941 | svg' :: forall event. Array (Html event) -> Html event
942 | svg' = el' "svg"
943 |
944 | table_ :: forall event. Array (Attribute event) -> Html event -> Html event
945 | table_ = el_ "table"
946 |
947 | table :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
948 | table = el "table"
949 |
950 | table' :: forall event. Array (Html event) -> Html event
951 | table' = el' "table"
952 |
953 | tbody_ :: forall event. Array (Attribute event) -> Html event -> Html event
954 | tbody_ = el_ "tbody"
955 |
956 | tbody :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
957 | tbody = el "tbody"
958 |
959 | tbody' :: forall event. Array (Html event) -> Html event
960 | tbody' = el' "tbody"
961 |
962 | td_ :: forall event. Array (Attribute event) -> Html event -> Html event
963 | td_ = el_ "td"
964 |
965 | td :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
966 | td = el "td"
967 |
968 | td' :: forall event. Array (Html event) -> Html event
969 | td' = el' "td"
970 |
971 | template_ :: forall event. Array (Attribute event) -> Html event -> Html event
972 | template_ = el_ "template"
973 |
974 | template :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
975 | template = el "template"
976 |
977 | template' :: forall event. Array (Html event) -> Html event
978 | template' = el' "template"
979 |
980 | textarea_ :: forall event. Array (Attribute event) -> Html event -> Html event
981 | textarea_ = el_ "textarea"
982 |
983 | textarea :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
984 | textarea = el "textarea"
985 |
986 | textarea' :: forall event. Array (Html event) -> Html event
987 | textarea' = el' "textarea"
988 |
989 | tfoot_ :: forall event. Array (Attribute event) -> Html event -> Html event
990 | tfoot_ = el_ "tfoot"
991 |
992 | tfoot :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
993 | tfoot = el "tfoot"
994 |
995 | tfoot' :: forall event. Array (Html event) -> Html event
996 | tfoot' = el' "tfoot"
997 |
998 | th_ :: forall event. Array (Attribute event) -> Html event -> Html event
999 | th_ = el_ "th"
1000 |
1001 | th :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
1002 | th = el "th"
1003 |
1004 | th' :: forall event. Array (Html event) -> Html event
1005 | th' = el' "th"
1006 |
1007 | thead_ :: forall event. Array (Attribute event) -> Html event -> Html event
1008 | thead_ = el_ "thead"
1009 |
1010 | thead :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
1011 | thead = el "thead"
1012 |
1013 | thead' :: forall event. Array (Html event) -> Html event
1014 | thead' = el' "thead"
1015 |
1016 | time_ :: forall event. Array (Attribute event) -> Html event -> Html event
1017 | time_ = el_ "time"
1018 |
1019 | time :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
1020 | time = el "time"
1021 |
1022 | time' :: forall event. Array (Html event) -> Html event
1023 | time' = el' "time"
1024 |
1025 | title_ :: forall event. Array (Attribute event) -> Html event -> Html event
1026 | title_ = el_ "title"
1027 |
1028 | title :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
1029 | title = el "title"
1030 |
1031 | title' :: forall event. Array (Html event) -> Html event
1032 | title' = el' "title"
1033 |
1034 | tr_ :: forall event. Array (Attribute event) -> Html event -> Html event
1035 | tr_ = el_ "tr"
1036 |
1037 | tr :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
1038 | tr = el "tr"
1039 |
1040 | tr' :: forall event. Array (Html event) -> Html event
1041 | tr' = el' "tr"
1042 |
1043 | track_ :: forall event. Array (Attribute event) -> Html event -> Html event
1044 | track_ = el_ "track"
1045 |
1046 | track :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
1047 | track = el "track"
1048 |
1049 | track' :: forall event. Array (Html event) -> Html event
1050 | track' = el' "track"
1051 |
1052 | u_ :: forall event. Array (Attribute event) -> Html event -> Html event
1053 | u_ = el_ "u"
1054 |
1055 | u :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
1056 | u = el "u"
1057 |
1058 | u' :: forall event. Array (Html event) -> Html event
1059 | u' = el' "u"
1060 |
1061 | ul_ :: forall event. Array (Attribute event) -> Html event -> Html event
1062 | ul_ = el_ "ul"
1063 |
1064 | ul :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
1065 | ul = el "ul"
1066 |
1067 | ul' :: forall event. Array (Html event) -> Html event
1068 | ul' = el' "ul"
1069 |
1070 | var_ :: forall event. Array (Attribute event) -> Html event -> Html event
1071 | var_ = el_ "var"
1072 |
1073 | var :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
1074 | var = el "var"
1075 |
1076 | var' :: forall event. Array (Html event) -> Html event
1077 | var' = el' "var"
1078 |
1079 | video_ :: forall event. Array (Attribute event) -> Html event -> Html event
1080 | video_ = el_ "video"
1081 |
1082 | video :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
1083 | video = el "video"
1084 |
1085 | video' :: forall event. Array (Html event) -> Html event
1086 | video' = el' "video"
1087 |
1088 | wbr_ :: forall event. Array (Attribute event) -> Html event -> Html event
1089 | wbr_ = el_ "wbr"
1090 |
1091 | wbr :: forall event. Array (Attribute event) -> Array (Html event) -> Html event
1092 | wbr = el "wbr"
1093 |
1094 | wbr' :: forall event. Array (Html event) -> Html event
1095 | wbr' = el' "wbr"
1096 |
1097 | img :: ElAttrs
1098 | img = elAttrs "img"
1099 |
1100 | input :: ElAttrs
1101 | input = elAttrs "input"
1102 |
1103 | br :: forall event. Html event
1104 | br = el "br" [] []
1105 |
1106 | area :: ElAttrs
1107 | area = elAttrs "area"
1108 |
--------------------------------------------------------------------------------