├── 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 | --------------------------------------------------------------------------------