From 22d4756f831ac57c17286bae86a5799a0377239a Mon Sep 17 00:00:00 2001 From: Mike Solomon Date: Thu, 24 Aug 2023 14:22:24 +0300 Subject: [PATCH] Uses Poll as the primary type (#103) Deku now uses Poll + hot events as its primary architectural type. This makes its effect system more predictable and less prone to extraneous dangling effects, especially for games with an event loop. --- .github/workflows/deploy.yml | 90 - .github/workflows/unit-tests.yml | 24 - .gitignore | 8 - CHANGELOG.md | 4 +- article/Behavior.purs | 27 - article/Filtering.purs | 30 - article/Fix.purs | 63 - article/Fold.purs | 48 - article/Intro.purs | 33 - article/KeepLatest.purs | 40 - article/SampleOn.purs | 28 - article/Todo.purs | 84 - codegen/src/DOM/Common.purs | 6 +- codegen/src/DOM/Indexed/Attribute.purs | 12 +- codegen/src/DOM/Indexed/Element.purs | 261 ++- codegen/src/DOM/Indexed/Listener.purs | 10 +- codegen/src/DOM/Indexed/Self.purs | 16 +- codegen/src/Parser/Pursx.purs_ | 67 +- deku-core/src/Deku/Attribute.purs | 10 +- deku-core/src/Deku/Control.purs | 356 ++-- deku-core/src/Deku/Core.purs | 387 ++-- deku-core/src/Deku/Effect.purs | 152 ++ deku-core/src/Deku/Hooks.purs | 662 +++--- deku-core/src/Deku/Interpret.js | 41 +- deku-core/src/Deku/Interpret.purs | 377 ++-- deku-core/src/Deku/Lifecycle.purs | 40 - deku-core/src/Deku/Pursx/Unsafe.purs | 218 +- deku-core/src/Deku/Toplevel.purs | 188 +- deku-dom/src/Deku/DOM.purs | 886 ++++++-- deku-dom/src/Deku/DOM/Attributes.purs | 1895 ++++++++--------- deku-dom/src/Deku/DOM/Combinators.purs | 52 +- deku-dom/src/Deku/DOM/Listeners.purs | 884 ++++---- deku-dom/src/Deku/DOM/MathML.purs | 187 +- deku-dom/src/Deku/DOM/MathML/Attributes.purs | 142 +- deku-dom/src/Deku/DOM/SVG.purs | 392 +++- deku-dom/src/Deku/DOM/SVG/Attributes.purs | 1158 +++++----- deku-dom/src/Deku/DOM/SVG/Listeners.purs | 20 +- deku-dom/src/Deku/DOM/Self.purs | 14 +- deku/src/Deku/Pursx.purs | 65 +- deku/test/Performance/Main.purs | 95 - deku/test/Performance/Setup/Measure.purs | 262 --- deku/test/Performance/Setup/Puppeteer.js | 107 - deku/test/Performance/Setup/Puppeteer.purs | 284 --- deku/test/Performance/Snapshot.purs | 60 - deku/test/Performance/Snapshot/StateTest.js | 23 - deku/test/Performance/Snapshot/StateTest.purs | 7 - deku/test/Performance/Snapshot/TodoTest.js | 23 - deku/test/Performance/Snapshot/TodoTest.purs | 7 - deku/test/Performance/Snapshot/Write.purs | 76 - deku/test/Performance/Test/App.purs | 105 - .../Performance/Test/State/Component.purs | 44 - deku/test/Performance/Test/State/Deku.purs | 95 - deku/test/Performance/Test/State/Hook.purs | 46 - deku/test/Performance/Test/State/README.md | 9 - deku/test/Performance/Test/State/Shared.purs | 11 - .../test/Performance/Test/Todo/Component.purs | 223 -- deku/test/Performance/Test/Todo/Deku.purs | 219 -- deku/test/Performance/Test/Todo/Hook.purs | 152 -- deku/test/Performance/Test/Todo/README.md | 13 - deku/test/Performance/Test/Todo/Shared.purs | 114 - deku/test/Performance/Test/Types.purs | 27 - deku/test/Test/Main.js | 10 +- deku/test/Test/Main.purs | 636 +++++- deku/test/test-optimized.dhall | 5 - examples/spago.yaml | 32 - examples/src/canvas/Canvas.js | 4 - examples/src/canvas/Canvas.purs | 68 - examples/src/canvas/index.html | 6 - examples/src/hello-world/HelloWorld.purs | 57 - examples/src/hello-world/index.html | 15 - examples/src/insert/Insert.purs | 45 - examples/src/insert/index.html | 6 - examples/src/nested/Nested.purs | 87 - examples/src/nested/index.html | 6 - examples/src/portal/Portal.purs | 132 -- examples/src/portal/index.html | 6 - examples/src/pursx/Pursx.purs | 77 - examples/src/pursx/index.html | 6 - examples/src/readme-legend/ReadmeLegend.purs | 64 - index.test.js | 864 +++++--- package-lock.json | 618 ++---- package.json | 7 +- packages.dhall | 77 - pursx.py | 360 ++++ spago.dhall | 40 - spago.yaml | 16 +- 86 files changed, 6060 insertions(+), 8163 deletions(-) delete mode 100644 article/Behavior.purs delete mode 100644 article/Filtering.purs delete mode 100644 article/Fix.purs delete mode 100644 article/Fold.purs delete mode 100644 article/Intro.purs delete mode 100644 article/KeepLatest.purs delete mode 100644 article/SampleOn.purs delete mode 100644 article/Todo.purs create mode 100644 deku-core/src/Deku/Effect.purs delete mode 100644 deku-core/src/Deku/Lifecycle.purs delete mode 100644 deku/test/Performance/Main.purs delete mode 100644 deku/test/Performance/Setup/Measure.purs delete mode 100644 deku/test/Performance/Setup/Puppeteer.js delete mode 100644 deku/test/Performance/Setup/Puppeteer.purs delete mode 100644 deku/test/Performance/Snapshot.purs delete mode 100644 deku/test/Performance/Snapshot/StateTest.js delete mode 100644 deku/test/Performance/Snapshot/StateTest.purs delete mode 100644 deku/test/Performance/Snapshot/TodoTest.js delete mode 100644 deku/test/Performance/Snapshot/TodoTest.purs delete mode 100644 deku/test/Performance/Snapshot/Write.purs delete mode 100644 deku/test/Performance/Test/App.purs delete mode 100644 deku/test/Performance/Test/State/Component.purs delete mode 100644 deku/test/Performance/Test/State/Deku.purs delete mode 100644 deku/test/Performance/Test/State/Hook.purs delete mode 100644 deku/test/Performance/Test/State/README.md delete mode 100644 deku/test/Performance/Test/State/Shared.purs delete mode 100644 deku/test/Performance/Test/Todo/Component.purs delete mode 100644 deku/test/Performance/Test/Todo/Deku.purs delete mode 100644 deku/test/Performance/Test/Todo/Hook.purs delete mode 100644 deku/test/Performance/Test/Todo/README.md delete mode 100644 deku/test/Performance/Test/Todo/Shared.purs delete mode 100644 deku/test/Performance/Test/Types.purs delete mode 100644 deku/test/test-optimized.dhall delete mode 100644 examples/spago.yaml delete mode 100644 examples/src/canvas/Canvas.js delete mode 100644 examples/src/canvas/Canvas.purs delete mode 100644 examples/src/canvas/index.html delete mode 100644 examples/src/hello-world/HelloWorld.purs delete mode 100644 examples/src/hello-world/index.html delete mode 100644 examples/src/insert/Insert.purs delete mode 100644 examples/src/insert/index.html delete mode 100644 examples/src/nested/Nested.purs delete mode 100644 examples/src/nested/index.html delete mode 100644 examples/src/portal/Portal.purs delete mode 100644 examples/src/portal/index.html delete mode 100644 examples/src/pursx/Pursx.purs delete mode 100644 examples/src/pursx/index.html delete mode 100644 examples/src/readme-legend/ReadmeLegend.purs delete mode 100644 packages.dhall create mode 100644 pursx.py delete mode 100644 spago.dhall diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 74cbd2ce..b130de4b 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -12,100 +12,10 @@ jobs: steps: - name: Check out repository code uses: actions/checkout@v2 - - name: Cache purescript dependencies - uses: actions/cache@v2 - with: - path: | - ~/.npm - .spago - ${{ env.spago_global_cache }} - output - key: >- - ${{ hashFiles('package-lock.json') }}- - ${{ hashFiles('spago.dhall') }}- - ${{ hashFiles('packages.dhall') }}- - ${{ hashFiles('test.dhall') }}- - ${{ hashFiles('examples.dhall') }} - name: Install dependencies run: npm ci - name: Test run: npm t - - name: Spago build examples - run: npm run build:examples - # - name: Build make - # run: npx spago -x examples.dhall bundle-app --main Deku.Example.Docs.Static.Build --to examples/docs/Static/make.mjs --platform node - # - name: Build hydration - # run: npx spago -x examples.dhall bundle-module --main Deku.Example.Docs.Static.Live --to examples/docs/Static/bundle.js --minify - # - name: Make index.html for netlify - # run: | - # cd examples/docs/Static - # mkdir -p intro - # echo '{"page":"Intro","slug":"/","top":true}' > config.json - # node make.mjs config.json > index.html - # mkdir -p hello - # echo '{"page":"HelloWorld","slug":"/","top":false}' > config.json - # node make.mjs config.json > hello/index.html - # mkdir -p simple - # echo '{"page":"SimpleComponent","slug":"/","top":false}' > config.json - # node make.mjs config.json > simple/index.html - # mkdir -p pursx1 - # echo '{"page":"PURSX1","slug":"/","top":false}' > config.json - # node make.mjs config.json > pursx1/index.html - # mkdir -p pursx2 - # echo '{"page":"PURSX2","slug":"/","top":false}' > config.json - # node make.mjs config.json > pursx2/index.html - # mkdir -p events1 - # echo '{"page":"Events","slug":"/","top":false}' > config.json - # node make.mjs config.json > events1/index.html - # mkdir -p effects - # echo '{"page":"Effects","slug":"/","top":false}' > config.json - # node make.mjs config.json > effects/index.html - # mkdir -p events2 - # echo '{"page":"Events2","slug":"/","top":false}' > config.json - # node make.mjs config.json > events2/index.html - # mkdir -p portals - # echo '{"page":"Portals","slug":"/","top":false}' > config.json - # node make.mjs config.json > portals/index.html - # mkdir -p ssr - # echo '{"page":"SSR","slug":"/","top":false}' > config.json - # node make.mjs config.json > ssr/index.html - # cd ../../.. - # - name: deploy to netlify - # run: NETLIFY_SITE_ID=${{ secrets.NETLIFY_SITE_ID }} NETLIFY_AUTH_TOKEN=${{ secrets.NETLIFY_AUTH_TOKEN }} netlify deploy --dir=./examples/docs/Static --prod - # - name: Make index.html for github - # run: | - # cd examples/docs/Static - # mkdir -p intro - # echo '{"page":"Intro","slug":"/purescript-deku/","top":true}' > config.json - # node make.mjs config.json > index.html - # mkdir -p hello - # echo '{"page":"HelloWorld","slug":"/purescript-deku/","top":false}' > config.json - # node make.mjs config.json > hello/index.html - # mkdir -p simple - # echo '{"page":"SimpleComponent","slug":"/purescript-deku/","top":false}' > config.json - # node make.mjs config.json > simple/index.html - # mkdir -p pursx1 - # echo '{"page":"PURSX1","slug":"/purescript-deku/","top":false}' > config.json - # node make.mjs config.json > pursx1/index.html - # mkdir -p pursx2 - # echo '{"page":"PURSX2","slug":"/purescript-deku/","top":false}' > config.json - # node make.mjs config.json > pursx2/index.html - # mkdir -p events1 - # echo '{"page":"Events","slug":"/purescript-deku/","top":false}' > config.json - # node make.mjs config.json > events1/index.html - # mkdir -p effects - # echo '{"page":"Effects","slug":"/purescript-deku/","top":false}' > config.json - # node make.mjs config.json > effects/index.html - # mkdir -p events2 - # echo '{"page":"Events2","slug":"/purescript-deku/","top":false}' > config.json - # node make.mjs config.json > events2/index.html - # mkdir -p portals - # echo '{"page":"Portals","slug":"/purescript-deku/","top":false}' > config.json - # node make.mjs config.json > portals/index.html - # mkdir -p ssr - # echo '{"page":"SSR","slug":"/purescript-deku/","top":false}' > config.json - # node make.mjs config.json > ssr/index.html - # cd ../../.. - name: Deploy uses: peaceiris/actions-gh-pages@v3 with: diff --git a/.github/workflows/unit-tests.yml b/.github/workflows/unit-tests.yml index 52723a00..a6eb6afc 100644 --- a/.github/workflows/unit-tests.yml +++ b/.github/workflows/unit-tests.yml @@ -12,31 +12,7 @@ jobs: steps: - name: Check out repository code uses: actions/checkout@v2 - - name: Cache purescript dependencies - uses: actions/cache@v2 - with: - path: | - ~/.npm - .spago - ${{ env.spago_global_cache }} - output - key: >- - ${{ hashFiles('package-lock.json') }}- - ${{ hashFiles('spago.dhall') }}- - ${{ hashFiles('packages.dhall') }}- - ${{ hashFiles('test.dhall') }}- - ${{ hashFiles('examples.dhall') }} - name: Install dependencies run: npm ci - - name: Build examples - run: npm run build:examples - name: Test run: npm t - - name: Build test - run: npm run build:test - # perf test runs locally but hangs on gh actions - # inspect why at some point - # - name: Bunlde performance - # run: npm run bundle:performance - # - name: Test performance - # run: npm run test:performance diff --git a/.gitignore b/.gitignore index f13f0606..99fbfaeb 100644 --- a/.gitignore +++ b/.gitignore @@ -10,14 +10,6 @@ /.psa* /.spago /output-es/ -/examples/docs/Examples.js -/examples/docs/Examples.purs -/examples/**/index.js -/examples/**/bundle.js -/examples/**/main.js -/examples/**/make.mjs -/examples/**/config.json -/examples/docs/Static/**.html packages.json .venv /test-results/ diff --git a/CHANGELOG.md b/CHANGELOG.md index 0e4d085a..76b4fb4c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -209,7 +209,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [0.2.2] - 2022-04-11 -- Updates event and behavior libraries. +- Updates event and poll libraries. ## [0.2.1] - 2022-04-08 @@ -295,7 +295,7 @@ Fixes the sorting algorithm on insert of subgraphs. ### Added -- Exposes the DOM API via a FRP Behavior by using induction on existentially-quantified and linearly-typed indexed cofree comonads that act as kan-extended natural transformations over embedded universal morphisms. +- Exposes the DOM API via a FRP Poll by using induction on existentially-quantified and linearly-typed indexed cofree comonads that act as kan-extended natural transformations over embedded universal morphisms. - A README. - A CHANGELOG. - Several tests. diff --git a/article/Behavior.purs b/article/Behavior.purs deleted file mode 100644 index e79f7c7b..00000000 --- a/article/Behavior.purs +++ /dev/null @@ -1,27 +0,0 @@ -module Main where - -import Prelude - -import Data.Tuple (Tuple(..)) -import Deku.Control (text, text_) -import Deku.DOM as D -import Deku.Toplevel (runInBody1) -import Effect (Effect) -import Effect.Random as Random -import FRP.Behavior (Behavior, behavior, sample_) -import FRP.Event (makeEvent, memoize, subscribe) -import FRP.Event.Time (interval) - -random :: Behavior Number -random = behavior \e -> - makeEvent \k -> subscribe e \f -> - Random.random >>= k <<< f - -example counter = D.div_ - [ text_ "Here are some random numbers: " - , text (show <$> sample_ (Tuple <$> random <*> random) counter) - ] - -main :: Effect Unit -main = runInBody1 - (memoize (interval 400) example) \ No newline at end of file diff --git a/article/Filtering.purs b/article/Filtering.purs deleted file mode 100644 index 12356f80..00000000 --- a/article/Filtering.purs +++ /dev/null @@ -1,30 +0,0 @@ -module Main where - -import Prelude - -import Control.Alt ((<|>)) -import Data.Filterable (filter) -import Deku.Control (text, text_) -import Deku.DOM as D -import Deku.Toplevel (runInBody1) -import Effect (Effect) -import FRP.Event (fold, memoize) -import FRP.Event.Time (interval) - -example model = D.div_ - [ D.div_ [ text_ "Name: ", text (_.name <$> model) ] - , D.div_ [ text_ "Age: ", text (_.age >>> show <$> model) ] - , text - (filter (_.age >>> (5 < _)) model $> "They sure do grow up fast!") - ] - -main :: Effect Unit -main = runInBody1 - ( memoize - ( ( { name: "Jane", age: _ } <$> - (fold (const (add 1)) (interval 400) 0 <|> pure 0) - ) - ) - (example) - - ) \ No newline at end of file diff --git a/article/Fix.purs b/article/Fix.purs deleted file mode 100644 index 3a47bcd3..00000000 --- a/article/Fix.purs +++ /dev/null @@ -1,63 +0,0 @@ -module Main where - -import Prelude - -import Data.DateTime.Instant (Instant, instant, unInstant) -import Data.Int (toNumber) -import Data.Maybe (Maybe, fromMaybe, maybe) -import Data.Newtype (wrap) -import Data.Time.Duration (Milliseconds(..)) -import Deku.Control (text, text_) -import Deku.DOM as D -import Deku.Toplevel (runInBody1) -import Effect (Effect) -import FRP.Event (Event, bus, fix, fold, gateBy, memoize) -import FRP.Event.Time (interval, withTime) - --- | Provided an input event and transformation, block the input event for the --- | duration of the specified period on each output. -debounce - :: forall a b - . (Event a -> Event { period :: Milliseconds, value :: b }) - -> Event a - -> Event b -debounce process event = fix \allowed -> - let - processed :: Event { period :: Milliseconds, value :: b } - processed = process allowed - - expiries :: Event Instant - expiries = - map - (\{ time, value } -> fromMaybe time (instant (unInstant time <> value))) - (withTime (map _.period processed)) - - comparison :: forall r. Maybe Instant -> { time :: Instant | r } -> Boolean - comparison a b = maybe true (_ < b.time) a - - unblocked :: Event { time :: Instant, value :: a } - unblocked = gateBy comparison expiries stamped - in - { input: map _.value unblocked - , output: map _.value processed - } - where - stamped :: Event { time :: Instant, value :: a } - stamped = withTime event - -example counter = do - let - myCounter = debounce - (map (\x -> { period: wrap (toNumber x), value: unit })) - (fold (const (add 300)) counter 0) - D.div_ - [ D.div_ [ text_ "I get slowwwwwerrr" ] - , text (show <$> fold (const (add 1)) myCounter 0) - ] - -main :: Effect Unit -main = runInBody1 - ( memoize - (interval 100) - example - ) \ No newline at end of file diff --git a/article/Fold.purs b/article/Fold.purs deleted file mode 100644 index 3ac7e24f..00000000 --- a/article/Fold.purs +++ /dev/null @@ -1,48 +0,0 @@ -module Main where - -import Prelude - -import Data.Either (Either(..)) -import Data.Filterable (compact, partitionMap) -import Data.Foldable (for_, oneOfMap) -import Data.Maybe (Maybe(..)) -import Data.Tuple.Nested ((/\)) -import Deku.Attribute (cb, (:=)) -import Deku.Control (text, text_) -import Deku.DOM as D -import Deku.Toplevel (runInBody1) -import Effect (Effect) -import FRP.Event (bus, mapAccum, sampleOn) -import Web.Event.Event (target) -import Web.HTML.HTMLInputElement (fromEventTarget, value) - -main :: Effect Unit -main = runInBody1 - ( bus \push event -> do - let - top = - [ D.input - ( oneOfMap pure - [ D.OnInput := cb \e -> for_ - ( target e - >>= fromEventTarget - ) - ( value - >=> push <<< Right - ) - ] - ) - [] - , D.button - (pure $ D.OnClick := push (Left unit)) - [ text_ "Finalize text" ] - ] - events = partitionMap identity event - current = sampleOn events.right (events.left $> identity) - previous = compact $ mapAccum (\a b -> Just a /\ b) current Nothing - D.div_ - [ D.div_ top - , D.div_ [ text (("Current value: " <> _) <$> current) ] - , D.div_ [ text (("Previous value: " <> _) <$> previous) ] - ] - ) diff --git a/article/Intro.purs b/article/Intro.purs deleted file mode 100644 index a22ade40..00000000 --- a/article/Intro.purs +++ /dev/null @@ -1,33 +0,0 @@ -module Main where - -import Prelude - -import Control.Alt ((<|>)) -import Data.Profunctor (lcmap) -import Deku.Attribute (attr) -import Deku.Control (text) -import Deku.DOM as D -import Deku.Pursx ((~~)) -import Deku.Toplevel (runInBody1) -import Effect (Effect) -import FRP.Event (Event, bus) -import Type.Proxy (Proxy(..)) - -example name = bus - \setAge -> lcmap (pure 1 <|> _) \age -> - ( Proxy - :: Proxy - """ -
-

Hello ~name~. I'm guessing your age is ~age~.

- -
-""" - ) ~~ - { name: text name - , age: text $ show <$> age - , setAge: attr D.OnClick <<< setAge <<< add 1 <$> (age :: Event Int) - } - -main :: Effect Unit -main = runInBody1 (example (pure "Steve")) \ No newline at end of file diff --git a/article/KeepLatest.purs b/article/KeepLatest.purs deleted file mode 100644 index 741ed2ad..00000000 --- a/article/KeepLatest.purs +++ /dev/null @@ -1,40 +0,0 @@ -module Main where - -import Prelude - -import Control.Alt ((<|>)) -import Data.Foldable (oneOfMap) -import Deku.Attribute ((:=)) -import Deku.Control (text_) -import Deku.DOM as D -import Deku.Toplevel (runInBody1) -import Effect (Effect) -import FRP.Event (fold, keepLatest, memoize) -import FRP.Event.Time (interval) - -padMe :: Int -> String -padMe i = - "margin: " <> show (mod i 256) <> "px;" - -example counter = D.div_ - [ text_ "Hello margin" - , D.input - ( keepLatest $ - ( \i -> oneOfMap pure - [ D.Style := padMe i - , D.Xtype := "checkbox" - , D.Checked := show (if mod i 2 == 0 then true else false) - ] - ) <$> counter - ) - [] - ] - -main :: Effect Unit -main = runInBody1 - ( memoize - ( (fold (const (add 1)) (interval 400) 0 <|> pure 0) - ) - example - - ) \ No newline at end of file diff --git a/article/SampleOn.purs b/article/SampleOn.purs deleted file mode 100644 index 325d058f..00000000 --- a/article/SampleOn.purs +++ /dev/null @@ -1,28 +0,0 @@ -module Main where - -import Prelude - -import Bolson.Core (envy) -import Control.Alt ((<|>)) -import Deku.Attribute ((:=)) -import Deku.Control (text, text_) -import Deku.DOM as D -import Deku.Toplevel (runInBody1) -import Effect (Effect) -import FRP.Event (bus, fold, memoize, sampleOn) -import FRP.Event.Time (interval) - -example counter = envy $ bus \push event -> D.div_ - [ D.button (pure (D.OnClick := (push unit :: Effect Unit))) - [ text_ "Show current counter" ] - , text (sampleOn (show <$> counter) (event $> identity)) - ] - -main :: Effect Unit -main = runInBody1 - ( memoize - ( (fold (const (add 1)) (interval 400) 0 <|> pure 0) - ) - (example) - - ) \ No newline at end of file diff --git a/article/Todo.purs b/article/Todo.purs deleted file mode 100644 index 443d7a02..00000000 --- a/article/Todo.purs +++ /dev/null @@ -1,84 +0,0 @@ -module Main where - -import Prelude - -import Control.Alt ((<|>)) -import Data.Filterable (filterMap) -import Data.Foldable (for_, oneOfMap) -import Data.Maybe (Maybe(..)) -import Data.Tuple.Nested ((/\)) -import Deku.Attribute (cb, (:=)) -import Deku.Control (dyn, dyn_, text_) -import Deku.Core (insert, insert_, remove, sendToTop) -import Deku.DOM as D -import Deku.Toplevel (runInBody1) -import Effect (Effect) -import FRP.Event (bus, keepLatest, mapAccum) -import Web.Event.Event (target) -import Web.HTML.HTMLInputElement (fromEventTarget, value) -import Web.UIEvent.KeyboardEvent (code, fromEvent) - -data MainUIAction - = AddTodo - | ChangeText String - -data TodoAction = Prioritize | Delete - -main :: Effect Unit -main = runInBody1 - ( bus \push event -> do - let - top = - [ D.input - ( oneOfMap pure - [ D.OnInput := cb \e -> for_ - ( target e - >>= fromEventTarget - ) - ( value - >=> push <<< ChangeText - ) - , D.OnKeyup := cb - \e -> for_ (fromEvent e) \evt -> do - when (code evt == "Enter") $ do - push AddTodo - ] - ) - [] - , D.button - (pure $ D.OnClick := push AddTodo) - [ text_ "Add" ] - ] - D.div_ - [ D.div_ top - , dyn_ D.div - (( \txt -> keepLatest $ bus \p' e' -> - ( pure $ insert_ $ D.div_ - [ text_ txt - , D.button - ( pure - $ D.OnClick := p' sendToTop - ) - [ text_ "Prioritize" ] - , D.button - ( pure - $ D.OnClick := p' remove - ) - [ text_ "Delete" ] - ] - ) <|> e' - ) <$> - filterMap - ( \(tf /\ s) -> - if tf then Just s else Nothing - ) - ( mapAccum - ( \a b -> case a of - ChangeText s -> s /\ (false /\ s) - AddTodo -> b /\ (true /\ b) - ) - event - mempty - )) - ] - ) diff --git a/codegen/src/DOM/Common.purs b/codegen/src/DOM/Common.purs index bb372105..7eb693db 100644 --- a/codegen/src/DOM/Common.purs +++ b/codegen/src/DOM/Common.purs @@ -200,9 +200,9 @@ typeArrayed :: Type Void -> Type Void typeArrayed t = unsafePartial $ typeApp ( typeCtor "Array" ) $ pure t -typeEvented :: Type Void -> Type Void -typeEvented t = - unsafePartial $ typeApp ( typeCtor "FRP.Event.Event" ) $ pure t +typePolled :: Type Void -> Type Void +typePolled t = + unsafePartial $ typeApp ( typeCtor "FRP.Poll.Poll" ) $ pure t typeAttributed :: Type Void -> Type Void typeAttributed t = diff --git a/codegen/src/DOM/Indexed/Attribute.purs b/codegen/src/DOM/Indexed/Attribute.purs index 3faafcc4..3092e0e8 100644 --- a/codegen/src/DOM/Indexed/Attribute.purs +++ b/codegen/src/DOM/Indexed/Attribute.purs @@ -3,7 +3,7 @@ module DOM.Indexed.Attribute where import Prelude import Prim hiding (Type) -import DOM.Common (Attribute, Ctor(..), Keyword, declHandler, typeAttributed, typeEvented, typeIndexedAt) +import DOM.Common (Attribute, Ctor(..), Keyword, declHandler, typeAttributed, typePolled, typeIndexedAt) import DOM.TypeStub (constructArg, constructIndex, handler, handlerImports) import Data.Array as Array import PureScript.CST.Types (Declaration, Export, ImportDecl, Type) @@ -16,7 +16,7 @@ imports attributes = [ declImportAs "Control.Applicative" [ importValue "pure" ] "Applicative" , declImport "Control.Category" [ importOp "<<<" ] , declImportAs "Data.Functor" [ importValue "map" ] "Functor" - , declImportAs "FRP.Event" [] "FRP.Event" + , declImportAs "FRP.Poll" [] "FRP.Poll" , declImportAs "Deku.DOM.Combinators" [ importValue "unset" ] "Combinators" ] , handlerImports ( map _.type attributes ) @@ -43,14 +43,14 @@ generate attributes = -- generate simple function definition [ declSignature ctor $ typeForall [ typeVar "r" ] - $ typeArrow [ typeEvented $ constructArg t ] - $ typeEvented $ typeAttributed $ typeIndexedAt index indexType + $ typeArrow [ typePolled $ constructArg t ] + $ typePolled $ typeAttributed $ typeIndexedAt index indexType , declHandler ctor name $ handler t , declSignature shortHand $ typeForall [ typeVar "r" ] $ typeArrow [ constructArg t ] - $ typeEvented $ typeAttributed $ typeIndexedAt index indexType + $ typePolled $ typeAttributed $ typeIndexedAt index indexType , declValue shortHand [] $ exprOp ( exprIdent ctor ) [ binaryOp "<<<" $ exprIdent "Applicative.pure" ] ] -- create additional shorthands for known keywords @@ -63,6 +63,6 @@ generate attributes = let valueName = ctor <> name [ declSignature valueName $ typeForall [ typeVar "r" ] - $ typeEvented $ typeAttributed $ typeIndexedAt index $ indexType + $ typePolled $ typeAttributed $ typeIndexedAt index $ indexType , declValue valueName [] $ exprApp ( exprIdent shortHand ) [ exprString original ] ] \ No newline at end of file diff --git a/codegen/src/DOM/Indexed/Element.purs b/codegen/src/DOM/Indexed/Element.purs index a0503d75..05b2c619 100644 --- a/codegen/src/DOM/Indexed/Element.purs +++ b/codegen/src/DOM/Indexed/Element.purs @@ -3,7 +3,7 @@ module DOM.Indexed.Element where import Prelude import Prim hiding (Type) -import DOM.Common (Ctor(..), Element, Interface, TagNS, typeArrayed, typeAttributed, typeEvented, typeNut, xhtmlNamespace, nominal) +import DOM.Common (Ctor(..), Element, Interface, TagNS, typeArrayed, typeAttributed, typePolled, typeNut, xhtmlNamespace, nominal) import DOM.TypeStub (constructIndex, indexImports) import Data.Array as Array import Data.Array.NonEmpty as NEA @@ -14,138 +14,183 @@ import Data.Tuple.Nested (type (/\), (/\)) import Foreign.Object as Foreign import PureScript.CST.Types (ClassFundep(..), Declaration, Export, Expr, ImportDecl, Type) import Safe.Coerce (coerce) -import Tidy.Codegen (declClass, declImport, declImportAs, declInstance, declSignature, declType, declValue, exportClass, exportType, exportValue, exprApp, exprArray, exprCtor, exprIdent, exprString, importType, importTypeAll, importValue, typeApp, typeArrow, typeCtor, typeRow, typeRowEmpty, typeString, typeVar, typeVarKinded) +import Tidy.Codegen (binderVar, declClass, declImport, declImportAs, declInstance, declSignature, declType, declValue, exportClass, exportType, exportValue, exprApp, exprArray, exprCtor, exprIdent, exprString, importType, importTypeAll, importValue, typeApp, typeArrow, typeCtor, typeRow, typeRowEmpty, typeString, typeVar, typeVarKinded) import Tidy.Codegen.Class (toName) import Tidy.Codegen.Common (tokRightArrow) -imports :: Partial => String -> Foreign.Object Interface -> Array ( ImportDecl Void ) -imports baseMod interfaces = - Array.concat - [ identity - [ declImportAs "FRP.Event" [] "FRP.Event" - , declImport "Data.Maybe" [ importTypeAll "Maybe" ] - , declImportAs "Deku.Attribute" [ importType "Attribute" ] "Deku.Attribute" - - , declImport "Deku.Control" [ importValue "elementify2" ] - , declImport "Deku.Core" [ importType "Nut" ] - , declImport "Type.Proxy" [ importType "Proxy" ] - ] - , indexImports ( bind ( Foreign.values interfaces ) \{ members } -> map snd members ) - , if Set.isEmpty missing then [] else pure - $ declImport baseMod $ map importType $ Array.fromFoldable missing +imports + :: Partial => String -> Foreign.Object Interface -> Array (ImportDecl Void) +imports baseMod interfaces = + Array.concat + [ identity + [ declImportAs "FRP.Poll" [] "FRP.Poll" + , declImport "Data.Maybe" [ importTypeAll "Maybe" ] + , declImportAs "Deku.Attribute" [ importType "Attribute" ] + "Deku.Attribute" + + , declImport "Deku.Control" [ importValue "elementify2" ] + , declImportAs "Deku.Control" [ ] "DC" + , declImport "Deku.Core" [ importType "Nut" ] + , declImport "Type.Proxy" [ importType "Proxy" ] ] + , indexImports + (bind (Foreign.values interfaces) \{ members } -> map snd members) + , if Set.isEmpty missing then [] + else pure + $ declImport baseMod + $ map importType + $ Array.fromFoldable missing + ] + + where - where + missing = + Set.difference required defined - missing = - Set.difference required defined + required = + Set.fromFoldable $ bind (Foreign.values interfaces) (coerce <<< _.bases) - required = - Set.fromFoldable $ bind ( Foreign.values interfaces ) ( coerce <<< _.bases ) - - defined = - Set.fromFoldable $ Foreign.keys interfaces + defined = + Set.fromFoldable $ Foreign.keys interfaces -exports :: Partial => Foreign.Object Interface -> Array Element -> Array ( Export Void ) +exports + :: Partial => Foreign.Object Interface -> Array Element -> Array (Export Void) exports interfaces tags = do - Array.concat - [ pure $ exportClass "TagToDeku" - , bind tags \{ ctor : Ctor tag } -> do - let shortHand = tag <> "_" - [ exportValue tag, exportValue shortHand ] - , map exportType $ Foreign.keys interfaces + Array.concat + [ pure $ exportClass "TagToDeku" + , bind tags \{ ctor: Ctor tag } -> do + let shortHand = tag <> "_" + let shorShortHand = tag <> "__" + [ exportValue tag, exportValue shortHand, exportValue shorShortHand ] + , map exportType $ Foreign.keys interfaces + ] + +generate + :: Partial + => Foreign.Object Interface + -> Array Element + -> Array (Declaration Void) +generate interfaces tags = do + Array.concat + [ pure $ declClass [] "TagToDeku" + [ typeVarKinded "tag" $ typeCtor "Symbol" + , typeVarKinded "interface" $ typeApp (typeCtor "Row") + [ typeCtor "Type" ] + ] + [ FundepDetermines (NEA.singleton (toName "tag")) tokRightArrow + (NEA.singleton (toName "interface")) + ] + [] + + -- interfaces + , bind (Foreign.values interfaces) \{ ctor, name, bases, members } -> + [ declType ctor + [ typeVarKinded "r" $ typeApp (typeCtor "Row") [ typeCtor "Type" ] ] + $ typeIndex (coerce bases) + -- add an additional property to identify the interface + $ Array.cons + (nominal /\ (typeApp (typeCtor "Proxy") [ typeString name ])) + $ map (\(index /\ t) -> index /\ constructIndex t) + $ Array.nub members ] -generate :: Partial => Foreign.Object Interface -> Array Element -> Array ( Declaration Void ) -generate interfaces tags = do - Array.concat - [ pure $ declClass [] "TagToDeku" - [ typeVarKinded "tag" $ typeCtor "Symbol" - , typeVarKinded "interface" $ typeApp ( typeCtor "Row" ) [ typeCtor "Type" ] - ] - [ FundepDetermines ( NEA.singleton ( toName "tag" ) ) tokRightArrow ( NEA.singleton ( toName "interface" ) ) ] + -- elements + , bind tags \{ ctor: Ctor ctor, tag, ns, interface } -> do + let shortHand = ctor <> "_" + let shortShortHand = ctor <> "__" + [ declInstance Nothing [] "TagToDeku" + [ typeString tag, typeApp (typeCtor interface) [ typeRowEmpty ] ] [] - - -- interfaces - , bind ( Foreign.values interfaces ) \{ ctor, name, bases, members } -> - [ declType ctor [ typeVarKinded "r" $ typeApp ( typeCtor "Row" ) [ typeCtor "Type" ] ] - $ typeIndex ( coerce bases ) - -- add an additional property to identify the interface - $ Array.cons ( nominal /\ ( typeApp ( typeCtor "Proxy" ) [ typeString name ] ) ) - $ map (\( index /\ t ) -> index /\ constructIndex t ) - $ Array.nub members + , declSignature ctor + $ typeArrow + [ typeArrayed $ typePolled $ typeAttributed $ typeApp + (typeCtor interface) + [ typeRowEmpty ] + , typeApp (typeCtor "Array") [ typeNut ] + ] + typeNut + , declValue ctor [] $ exprApp (exprIdent "elementify2") + [ exprNamespace ns + , exprString tag ] - -- elements - , bind tags \{ ctor : Ctor ctor, tag, ns, interface } -> do - let shortHand = ctor <> "_" - [ declInstance Nothing [] "TagToDeku" [ typeString tag, typeApp ( typeCtor interface ) [ typeRowEmpty ] ] [] - , declSignature ctor - $ typeArrow - [ typeArrayed $ typeEvented $ typeAttributed $ typeApp ( typeCtor interface ) [ typeRowEmpty ] - , typeApp ( typeCtor "Array" ) [ typeNut ] - ] - typeNut - , declValue ctor [] $ exprApp ( exprIdent "elementify2" ) - [ exprNamespace ns - , exprString tag + , declSignature shortHand + $ typeArrow + [ typeApp (typeCtor "Array") [ typeNut ] ] + typeNut + , declValue shortHand [] $ exprApp (exprIdent ctor) + [ exprArray [] + ] - , declSignature shortHand - $ typeArrow - [ typeApp ( typeCtor "Array" ) [ typeNut ] + , declSignature shortShortHand + $ typeArrow + [ typeCtor "String" ] + typeNut + , declValue shortShortHand [ binderVar "t" ] $ exprApp (exprIdent ctor) + [ exprArray [] + , exprArray + [ exprApp (exprIdent "DC.text_") + [ exprIdent "t" ] - typeNut - , declValue shortHand [] $ exprApp ( exprIdent ctor ) - [ exprArray [] ] ] ] + ] - where + where - exprNamespace :: Partial => TagNS -> Expr Void - exprNamespace ns = - maybe - ( exprCtor "Nothing" ) - ( exprApp ( exprCtor "Just" ) <<< pure <<< exprString ) - ( xhtmlNamespace ns ) + exprNamespace :: Partial => TagNS -> Expr Void + exprNamespace ns = + maybe + (exprCtor "Nothing") + (exprApp (exprCtor "Just") <<< pure <<< exprString) + (xhtmlNamespace ns) -typeIndex :: Partial => Array String -> Array ( Ctor /\ Type Void ) -> Type Void +typeIndex :: Partial => Array String -> Array (Ctor /\ Type Void) -> Type Void typeIndex bases members = - typeRow members $ Just $ Array.foldl (\r n -> typeApp ( typeCtor n ) [ r ] ) ( typeVar "r" ) bases + typeRow members $ Just $ Array.foldl (\r n -> typeApp (typeCtor n) [ r ]) + (typeVar "r") + bases -- | Constructs the set of reachable interfaces for the root defined by all elements. crawlInterfaces :: Array Element -> Array Interface -> Foreign.Object Interface crawlInterfaces elements all = - Foreign.fromFoldable $ flip Array.mapMaybe all \intf -> - if intf.name `Set.member` reachable then - Just $ intf.name /\ intf - - else - Nothing - - where - - reachable :: Set.Set String - reachable = - go - ( Foreign.fromFoldable $ map (\{ name, bases } -> name /\ coerce bases ) all ) - initial - initial - - initial :: Set.Set String - initial = - Set.fromFoldable $ coerce <<< _.interface <$> elements - - go :: Foreign.Object ( Array String ) -> Set.Set String -> Set.Set String -> Set.Set String - go _ seen next | Set.isEmpty next = seen - go spec seen next = do - let - found :: Set.Set String - found = - Set.fromFoldable - $ Array.foldMap ( fromMaybe mempty <<< flip Foreign.lookup spec <<< coerce ) - $ Set.toUnfoldable next - - go spec ( Set.union seen found ) ( Set.difference found seen ) \ No newline at end of file + Foreign.fromFoldable $ flip Array.mapMaybe all \intf -> + if intf.name `Set.member` reachable then + Just $ intf.name /\ intf + + else + Nothing + + where + + reachable :: Set.Set String + reachable = + go + ( Foreign.fromFoldable $ map (\{ name, bases } -> name /\ coerce bases) + all + ) + initial + initial + + initial :: Set.Set String + initial = + Set.fromFoldable $ coerce <<< _.interface <$> elements + + go + :: Foreign.Object (Array String) + -> Set.Set String + -> Set.Set String + -> Set.Set String + go _ seen next | Set.isEmpty next = seen + go spec seen next = do + let + found :: Set.Set String + found = + Set.fromFoldable + $ Array.foldMap + (fromMaybe mempty <<< flip Foreign.lookup spec <<< coerce) + $ Set.toUnfoldable next + + go spec (Set.union seen found) (Set.difference found seen) \ No newline at end of file diff --git a/codegen/src/DOM/Indexed/Listener.purs b/codegen/src/DOM/Indexed/Listener.purs index 338f8e0e..2ba9dd7f 100644 --- a/codegen/src/DOM/Indexed/Listener.purs +++ b/codegen/src/DOM/Indexed/Listener.purs @@ -3,7 +3,7 @@ module DOM.Indexed.Listener where import Prelude import Prim hiding (Type) -import DOM.Common (Ctor(..), Event, declHandler, typeAttributed, typeEvented, typeIndexedAt) +import DOM.Common (Ctor(..), Event, declHandler, typeAttributed, typePolled, typeIndexedAt) import DOM.TypeStub (constructArg, constructIndex, handler, handlerImports) import Data.Array as Array import PureScript.CST.Types (Declaration, Export, ImportDecl) @@ -16,7 +16,7 @@ imports events = [ declImportAs "Control.Applicative" [ importValue "pure" ] "Applicative" , declImport "Control.Category" [ importOp "<<<" ] , declImportAs "Data.Functor" [ importValue "map" ] "Functor" - , declImportAs "FRP.Event" [] "FRP.Event" + , declImportAs "FRP.Poll" [] "FRP.Poll" , declImportAs "Deku.DOM.Combinators" ( map importValue [ "unset" @@ -54,13 +54,13 @@ generate events = -- generate simple function definition [ declSignature ctor $ typeForall [ typeVar "r" ] - $ typeArrow [ typeEvented $ constructArg t ] - $ typeEvented $ typeAttributed $ typeIndexedAt index indexType + $ typeArrow [ typePolled $ constructArg t ] + $ typePolled $ typeAttributed $ typeIndexedAt index indexType , declHandler ctor name $ handler t , declSignature shortHand $ typeForall [ typeVar "r" ] $ typeArrow [ constructArg t ] - $ typeEvented $ typeAttributed $ typeIndexedAt index indexType + $ typePolled $ typeAttributed $ typeIndexedAt index indexType , declValue shortHand [] $ exprOp ( exprIdent ctor ) [ binaryOp "<<<" $ exprIdent "Applicative.pure" ] ] diff --git a/codegen/src/DOM/Indexed/Self.purs b/codegen/src/DOM/Indexed/Self.purs index 06f96bd7..f206bf85 100644 --- a/codegen/src/DOM/Indexed/Self.purs +++ b/codegen/src/DOM/Indexed/Self.purs @@ -4,7 +4,7 @@ import Prelude import Prim hiding (Type) import Comment (documentDecl) -import DOM.Common (declHandler, selfKey, typeAttributed, typeEvented, nominal, typeIndexedAt) +import DOM.Common (declHandler, selfKey, typeAttributed, typePolled, nominal, typeIndexedAt) import DOM.TypeStub (TypeStub(..), constructArg, constructIndex, handler, handlerImports) import Data.Array as Array import Data.Array.NonEmpty as NEA @@ -22,7 +22,7 @@ imports es = [ declImportAs "Control.Applicative" [ importValue "pure" ] "Applicative" , declImport "Control.Category" [ importOp "<<<" ] , declImportAs "Data.Functor" [ importValue "map" ] "Functor" - , declImportAs "FRP.Event" [] "FRP.Event" + , declImportAs "FRP.Poll" [] "FRP.Poll" , declImport "Type.Proxy" [ importType "Proxy" ] ] , handlerImports $ Array.cons rawSelf es @@ -47,15 +47,15 @@ generate es = ] $ declSignature "self" $ typeForall [ typeVar "r" ] - $ typeArrow [ typeEvented $ constructArg rawSelf ] - $ typeEvented $ typeAttributed $ typeVar "r" + $ typeArrow [ typePolled $ constructArg rawSelf ] + $ typePolled $ typeAttributed $ typeVar "r" , declHandler "self" selfKey $ handler $ rawSelf , documentDecl [ "Shorthand version of `self`" ] $ declSignature "self_" $ typeForall [ typeVar "r" ] $ typeArrow [ constructArg rawSelf ] - $ typeEvented $ typeAttributed $ typeVar "r" + $ typePolled $ typeAttributed $ typeVar "r" , declValue "self_" [] $ exprOp ( exprIdent "self" ) [ binaryOp "<<<" $ exprIdent "Applicative.pure" ] , documentDecl @@ -66,8 +66,8 @@ generate es = $ declSignature "selfT" $ typeForall [ typeVar "name", typeVar "e", typeVar "r" ] $ typeConstrained [ typeApp ( typeCtor "IsSelf" ) [ typeVar "e" , typeVar "name" ] ] - $ typeArrow [ typeEvented $ selfHandler $ typeVar "e" ] - $ typeEvented $ typeAttributed $ typeIndexedAt nominal $ typeApp ( typeCtor "Proxy" ) [ typeVar "name" ] + $ typeArrow [ typePolled $ selfHandler $ typeVar "e" ] + $ typePolled $ typeAttributed $ typeIndexedAt nominal $ typeApp ( typeCtor "Proxy" ) [ typeVar "name" ] , declHandler "selfT" selfKey $ handler rawSelf , documentDecl [ "Shorthand version of `selfT`" ] @@ -75,7 +75,7 @@ generate es = $ typeForall [ typeVar "name", typeVar "e", typeVar "r" ] $ typeConstrained [ typeApp ( typeCtor "IsSelf" ) [ typeVar "e" , typeVar "name" ] ] $ typeArrow [ selfHandler $ typeVar "e" ] - $ typeEvented $ typeAttributed $ typeIndexedAt nominal $ typeApp ( typeCtor "Proxy" ) [ typeVar "name" ] + $ typePolled $ typeAttributed $ typeIndexedAt nominal $ typeApp ( typeCtor "Proxy" ) [ typeVar "name" ] , declValue "selfT_" [] $ exprOp ( exprIdent "selfT" ) [ binaryOp "<<<" $ exprIdent "Applicative.pure" ] ] diff --git a/codegen/src/Parser/Pursx.purs_ b/codegen/src/Parser/Pursx.purs_ index 9af59830..509dc1e2 100644 --- a/codegen/src/Parser/Pursx.purs_ +++ b/codegen/src/Parser/Pursx.purs_ @@ -1,17 +1,11 @@ module Deku.Pursx where -import Prelude - -import Bolson.Core (Entity(..), PSR) -import Control.Monad.ST.Uncurried (mkSTFn2, runSTFn1, runSTFn2) -import Control.Plus (empty) -import Data.Maybe (Maybe, maybe) import Data.Reflectable (class Reflectable, reflectType) import Deku.Attribute (Attribute) -import Deku.Core (DOMInterpret(..), Node(..), Nut(..), NutF(..)) -import Deku.Pursx.Unsafe(unsafeMakePursx,class PursxToElement,pursxToElement,domableToNode) +import Deku.Core (Nut) +import Deku.Pursx.Unsafe (class PursxToElement, unsafeMakePursx, unsafeMakePursx') import Deku.DOM (class TagToDeku) -import FRP.Event (Event, Subscriber(..), merge, makeLemmingEventO) +import FRP.Poll (Poll) import Prim.Boolean (False, True) import Prim.Row as Row import Prim.RowList as RL @@ -22,7 +16,7 @@ pursx :: forall s. Proxy s pursx = Proxy class DoVerbForAttr (verb :: Symbol) (tag :: Symbol) (acc :: Symbol) (head :: Symbol) (tail :: Symbol) (pursi :: Row Type) (purso :: Row Type) (newTail :: Symbol) | verb acc head tail pursi -> purso newTail -instance (TagToDeku tag deku, Row.Cons acc (Event (Attribute deku)) pursi purso) => DoVerbForAttr verb tag acc verb tail pursi purso tail +instance (TagToDeku tag deku, Row.Cons acc (Poll (Attribute deku)) pursi purso) => DoVerbForAttr verb tag acc verb tail pursi purso tail else instance (Sym.Append acc anything acc2, Sym.Cons x y tail, DoVerbForAttr verb tag acc2 x y pursi purso newTail) => DoVerbForAttr verb tag acc anything tail pursi purso newTail -- class DoVerbForDOM (verb :: Symbol) (acc :: Symbol) (head :: Symbol) (tail :: Symbol) (pursi :: Row Type) (purso :: Row Type) (newTail :: Symbol) | verb acc head tail pursi -> purso newTail @@ -126,56 +120,7 @@ makePursx' -> Proxy html -> { | r } -> Nut -makePursx' verb html r = Nut ee - where - ee :: forall payload. NutF payload - ee = NutF (Element' (Node go)) - - go - :: forall payload - . PSR (pos :: Maybe Int, ez :: Boolean, dynFamily :: Maybe String) - -> DOMInterpret payload - -> Event payload - go - z@{ parent, scope, raiseId, dynFamily, pos } - di@(DOMInterpret { makePursx: mpx, ids, deleteFromCache, attributeParent }) = - makeLemmingEventO $ mkSTFn2 \(Subscriber mySub) k1 -> do - me <- ids - pxScope <- ids - raiseId me - let - { cache, element: element' } = pursxToElement - pxScope - (Proxy :: _ rl) - r - let Node element = domableToNode element' - unsub <- runSTFn2 mySub - ( merge - [ pure $ - mpx - { id: me - , parent - , cache - , dynFamily - , pos - , pxScope: pxScope - , scope - , html: reflectType html - , verb: reflectType verb - } - , element z di - , maybe empty - ( \p -> - pure $ attributeParent - { id: me, parent: p, pos, dynFamily, ez: false } - ) - parent - ] - ) - k1 - pure do - runSTFn1 k1 (deleteFromCache { id: me }) - unsub +makePursx' verb html = unsafeMakePursx' (reflectType verb) (reflectType html) infixr 5 makePursx as ~~ -infixr 5 unsafeMakePursx as ~!~ \ No newline at end of file +infixr 5 unsafeMakePursx as ~!~ diff --git a/deku-core/src/Deku/Attribute.purs b/deku-core/src/Deku/Attribute.purs index 940be511..f0792bd5 100644 --- a/deku-core/src/Deku/Attribute.purs +++ b/deku-core/src/Deku/Attribute.purs @@ -5,6 +5,7 @@ module Deku.Attribute ( AttributeValue(..) , Attribute + , Attribute' , unsafeUnAttribute , unsafeAttribute , prop' @@ -69,14 +70,15 @@ unset' = Unset' -- | the `:=` family of operators and helpers like `style` and `klass` instead. data AttributeValue = Prop' String | Cb' Cb | Unset' +type Attribute' = { key :: String + , value :: AttributeValue + } + -- | Low level representation of key-value pairs for attributes and listeners. -- | In general, this type is for internal use only. In practice, you'll use -- | the `:=` family of operators and helpers like `style` and `klass` instead. newtype Attribute :: forall k . k -> Type -newtype Attribute i = Attribute - { key :: String - , value :: AttributeValue - } +newtype Attribute i = Attribute Attribute' -- | For internal use only, exported to be used by other modules. Ignore this. unsafeUnAttribute diff --git a/deku-core/src/Deku/Control.purs b/deku-core/src/Deku/Control.purs index c394a4e0..af4cc4d9 100644 --- a/deku-core/src/Deku/Control.purs +++ b/deku-core/src/Deku/Control.purs @@ -3,42 +3,34 @@ -- | the DOM, and basic text creation. It also has several internal functions used for -- | DOM element creation. module Deku.Control - ( (<#~>) - , (<$~>) - , blank - , deku + ( deku , elementify2 - , toDeku , globalPortal , globalPortal1 - , guard , portal , portal1 - , switcher - , switcherFlipped , text , text_ + , unsafeSetAttribute ) where import Prelude +import Bolson.Control (behaving) import Bolson.Control as Bolson -import Bolson.Core (Element(..), Entity(..), PSR, Scope(..)) +import Bolson.Core (Element(..), Entity(..), Scope(..)) import Bolson.Core as BCore -import Control.Alt ((<|>)) -import Control.Monad.ST.Uncurried (mkSTFn2, runSTFn1, runSTFn2) import Control.Plus (empty) import Data.FastVect.FastVect (Vect, singleton, index) -import Data.Filterable (filter) +import Data.Foldable (for_) import Data.FunctorWithIndex (mapWithIndex) -import Data.Maybe (Maybe(..), maybe) -import Data.Newtype (class Newtype, unwrap, wrap) +import Data.Maybe (Maybe(..)) +import Data.Newtype (unwrap, wrap) import Data.Profunctor (dimap, lcmap) -import Data.Tuple (snd) -import Data.Tuple.Nested ((/\)) -import Deku.Attribute (Attribute, AttributeValue(..), unsafeUnAttribute) -import Deku.Core (DOMInterpret(..), Node(..), Nut(..), NutF(..), dyn, envy, insert_, remove, unsafeSetPos) -import FRP.Event (Event, Subscriber(..), keepLatest, makeLemmingEventO, mapAccum, memoize, merge) +import Data.Tuple (Tuple(..)) +import Deku.Attribute (Attribute, Attribute', AttributeValue(..), unsafeUnAttribute) +import Deku.Core (DOMInterpret(..), HeadNode', Node(..), Node', Nut(..), NutF(..), dyn, flattenArgs, unsafeSetPos) +import FRP.Poll (Poll, merge, sample, sampleBy) import Prim.Int (class Compare) import Prim.Ordering (GT) import Record (union) @@ -55,28 +47,26 @@ unsafeSetText :: forall payload . DOMInterpret payload -> String - -> Event String - -> Event payload -unsafeSetText (DOMInterpret { setText }) id txt = map + -> String + -> payload +unsafeSetText (DOMInterpret { setText }) id txt = (setText <<< { id, text: _ }) - txt + txt unsafeSetAttribute - :: forall element payload + :: forall payload . DOMInterpret payload -> String - -> Event (Attribute element) - -> Event payload -unsafeSetAttribute (DOMInterpret { setProp, setCb, unsetAttribute }) id atts = - map - ( ( \{ key, value } -> case value of - Prop' s -> setProp { id, key, value: s } - Cb' c -> setCb { id, key, value: c } - Unset' -> unsetAttribute { id, key } - ) <<< - unsafeUnAttribute - ) - (atts) + -> Attribute' + -> payload +unsafeSetAttribute + (DOMInterpret { setProp, setCb, unsetAttribute }) + id + { key, value } = + case value of + Prop' s -> setProp { id, key, value: s } + Cb' c -> setCb { id, key, value: c } + Unset' -> unsetAttribute { id, key } -- | Used internally to create new [`Element`-s](https://developer.mozilla.org/en-US/docs/Web/API/Element). -- | Do not use this directly. Instead, use `unsafeCustomElement` from `Deku.DOM`. @@ -84,7 +74,7 @@ elementify2 :: forall element . Maybe String -> String - -> Array (Event (Attribute element)) + -> Array (Poll (Attribute element)) -> Array Nut -> Nut elementify2 ns en attributes kids = Nut @@ -106,48 +96,44 @@ elementify :: forall payload element . Maybe String -> String - -> Event (Attribute element) + -> Poll (Attribute element) -> NutF payload -> Node payload -elementify ns tag atts children = Node go +elementify ns tag atts children = Node $ Element go where + go :: Node' payload go - { parent, scope, raiseId, pos, dynFamily, ez } - di@(DOMInterpret { ids, deleteFromCache, makeElement, attributeParent }) = - makeLemmingEventO $ mkSTFn2 \(Subscriber mySub) k -> do + { parent, scope, raiseId, pos, deferralPath, dynFamily, ez } + di@ + ( DOMInterpret + { ids, deferPayload, deleteFromCache, makeElement, attributeParent } + ) = behaving \ee kx subscribe -> + do me <- ids - raiseId me - unsub <- runSTFn2 mySub - ( ( merge - ( [ pure - ( makeElement - { id: me, parent, scope, ns, tag, pos, dynFamily } - ) - , unsafeSetAttribute di me atts - ] <> maybe [] - ( \p -> - [ pure $ attributeParent - { id: me, parent: p, pos, dynFamily, ez } - ] - ) - parent - ) - ) - <|> __internalDekuFlatten - { parent: Just me - , scope - , ez: true - , raiseId: \_ -> pure unit - , pos: Nothing - , dynFamily: Nothing - } - di - children + raiseId $ show me + kx $ makeElement { id: show me, parent, scope, ns, tag, pos, dynFamily } + for_ parent \p -> + kx $ attributeParent { id: show me, parent: p, pos, dynFamily, ez } + + kx $ deferPayload deferralPath $ deleteFromCache { id: show me } + subscribe + ( sample + ( __internalDekuFlatten + children + { parent: Just $ show me + , deferralPath + , scope + , ez: true + , raiseId: \_ -> pure unit + , pos: Nothing + , dynFamily: Nothing + } + di + ) + ee ) - k - pure do - runSTFn1 k (deleteFromCache { id: me }) - unsub + subscribe + (sampleBy (\zzz fff -> fff $ unsafeSetAttribute di (show me) (unsafeUnAttribute zzz)) atts ee) -- | Creates a portal. -- | @@ -195,7 +181,7 @@ globalPortal v' c' = -> NutF payload go v c = NutF ( Bolson.globalPortalComplexComplex - portalFlatten + flattenArgs { fromEltO1: coerce , fromEltO2: coerce , toElt: coerce @@ -217,41 +203,6 @@ globalPortal1 -> Nut globalPortal1 i f = globalPortal (singleton i) (lcmap (index (Proxy :: _ 0)) f) --- ugh, this isn't sacred, delete it and regenerate if something changes -portalFlatten - :: forall payload136 b143 d145 t149 t157 t159 payload171 - . Newtype b143 - { ids :: d145 - | t149 - } - => { disconnectElement :: - DOMInterpret t157 - -> { id :: String - , parent :: String - , scope :: Scope - | t159 - } - -> t157 - , doLogic :: Int -> DOMInterpret payload136 -> String -> payload136 - , ids :: b143 -> d145 - , toElt :: - Node payload171 - -> Element (DOMInterpret payload171) - ( pos :: Maybe Int - , dynFamily :: Maybe String - , ez :: Boolean - ) - payload171 - } -portalFlatten = - { doLogic: \pos (DOMInterpret { sendToPos }) id -> sendToPos { id, pos } - , ids: unwrap >>> _.ids - , disconnectElement: - \(DOMInterpret { disconnectElement }) { id, scope, parent } -> - disconnectElement { id, scope, parent, scopeEq: eq } - , toElt: \(Node e) -> Element e - } - -- | A variation of portal that takes a single element instead of a vector of elements. portal1 :: Nut @@ -289,19 +240,17 @@ portal -> (Vect n Nut -> Nut) -> Nut portal v' c' = - -- all local portals are wrapped in a `dyn` - -- otherwise, they would have no unique scope, which would not - -- allow us to determine if they've exacped their scope - -- for global portals, this is not needed as they use the global scope dyn - ( pure unit <#> \_ -> pure - $ insert_ + ( pure + ( Tuple empty ( Nut ( go (map (\(Nut df) -> df) v') (shouldBeSafe c') ) ) + ) ) + where shouldBeSafe :: forall payload @@ -317,7 +266,7 @@ portal v' c' = -> NutF payload go v c = NutF ( Bolson.portalComplexComplex - portalFlatten + flattenArgs { fromEltO1: coerce , fromEltO2: coerce , toElt: coerce @@ -332,141 +281,86 @@ portal v' c' = (dimap (map ((_ $ unit) >>> wrap)) unwrap c) ) --- | Create a [`Text`](https://developer.mozilla.org/en-US/docs/Web/API/Text) node from --- | the emitted strings. Each emitted string replaces the previous string. -text - :: Event String - -> Nut -text txt = Nut go' +text_ :: String -> Nut +text_ s = text (pure s) + +text :: Poll String -> Nut +text t2 = Nut go' where go' :: forall payload. NutF payload - go' = NutF (Element' (Node go)) + go' = NutF (Element' (Node (Element go))) go :: forall payload - . PSR (pos :: Maybe Int, ez :: Boolean, dynFamily :: Maybe String) - -> DOMInterpret payload - -> Event payload + . Node' payload go - { parent, scope, raiseId, dynFamily, pos, ez } - di@(DOMInterpret { ids, makeText, deleteFromCache, attributeParent }) = - makeLemmingEventO $ mkSTFn2 \(Subscriber mySub) k -> do - me <- ids - raiseId me - unsub <- runSTFn2 mySub - ( merge - [ pure (makeText { id: me, parent, pos, scope, dynFamily }) - , unsafeSetText di me txt - , maybe empty - ( \p -> - pure $ attributeParent - { id: me, parent: p, pos, dynFamily, ez } - ) - parent - ] - ) - k - pure do - runSTFn1 k (deleteFromCache { id: me }) - unsub - --- | Create a [`Text`](https://developer.mozilla.org/en-US/docs/Web/API/Text) node from --- | a string. The node is set immediately with the string and does not change. -text_ :: String -> Nut -text_ txt = text (pure txt) + { parent, scope, raiseId, deferralPath, dynFamily, pos, ez } + di@ + ( DOMInterpret + { ids, makeText, deferPayload, deleteFromCache, attributeParent } + ) = behaving \e kx subscribe -> do + me <- ids + raiseId $ show me + kx $ makeText { id: show me, parent, pos, scope, dynFamily } + for_ parent \p -> + kx $ attributeParent { id: show me, parent: p, pos, dynFamily, ez } + kx $ deferPayload deferralPath (deleteFromCache { id: show me }) + subscribe + (sampleBy (\ttt fff -> fff $ unsafeSetText di (show me) ttt) t2 e) -- | A low-level function that creates a Deku application. -- | In most situations this should not be used. Instead, use functions from `Deku.Toplevel`. deku :: Web.DOM.Element -> Nut - -> ( forall payload - . DOMInterpret payload - -> Event payload - ) + -> (forall payload. HeadNode' payload) deku root (Nut cc) = go cc where go :: forall payload . NutF payload - -> DOMInterpret payload - -> Event payload - go children di@(DOMInterpret { makeRoot }) = makeLemmingEventO $ mkSTFn2 - \(Subscriber mySub) k -> do - let me = "deku-root" -- <- ids - runSTFn2 mySub - ( pure (makeRoot { id: me, root }) - <|> __internalDekuFlatten - { parent: Just me - , scope: Local "rootScope" - , raiseId: \_ -> pure unit - , ez: true - , pos: Nothing - , dynFamily: Nothing - } - di - children + -> HeadNode' payload + go + children + di@ + ( DOMInterpret + { ids + , makeRoot + , forcePayload + , deferPayload + , deleteFromCache + } + ) = behaving \ee kx subscribe -> do + let me = "deku-root" + headRedecorator <- ids + kx $ makeRoot { id: me, root } + for_ + [ forcePayload (pure headRedecorator) + , deleteFromCache { id: me } + ] + (kx <<< deferPayload (pure headRedecorator)) + subscribe + ( ( sample + ( __internalDekuFlatten + children + { parent: Just me + , deferralPath: pure headRedecorator + , scope: Local "rootScope" + , raiseId: \_ -> pure unit + , ez: true + , pos: Nothing + , dynFamily: Nothing + } + di + ) + ee ) - k + ) data Stage = Begin | Middle | End __internalDekuFlatten :: forall payload - . PSR (pos :: Maybe Int, ez :: Boolean, dynFamily :: Maybe String) - -> DOMInterpret payload - -> NutF payload - -> Event payload -__internalDekuFlatten a b (NutF c) = Bolson.flatten portalFlatten a b c - --- | Like `bindFlipped`, except instead of working with a monad, it dipts into an `Event` --- | and creates a `Nut`. This allows you to use an event to switch between different --- | bits of DOM. This is how a [Virtual DOM](https://en.wikipedia.org/wiki/Virtual_DOM) works --- | in its most basic, unoptimized form. As a result, `switcher`, while convenient, is inefficient --- | and should be used when the content needs to be replaced wholesale. For a more efficient --- | approach, see the `useDyn` hook. -switcher - :: forall a - . (a -> Nut) - -> Event a - -> Nut -switcher f event = dyn $ keepLatest - $ memoize (counter event) \cenv -> map - ( \(p /\ n) -> merge - [ ((const remove) <$> filter (eq (n + 1) <<< snd) cenv) - , pure (insert_ $ coerce (f p)) - ] - ) - cenv - where - counter = mapAccum fn 0 - where - fn a b = (a + 1) /\ (b /\ a) - -infixl 4 switcher as <$~> - --- | A flipped version of `switcher`. -switcherFlipped - :: forall a - . Event a - -> (a -> Nut) - -> Nut -switcherFlipped = flip switcher - -infixl 1 switcherFlipped as <#~> - --- | Inserts the Deku Nut when an event emits `true`, otherwise destroys the element. -guard - :: Event Boolean - -> Nut - -> Nut -guard eb d = switcher - (if _ then d else blank) - eb - --- | An empty domable. `mempty` also works. -blank :: Nut -blank = mempty - -toDeku :: forall a. (a -> Event Nut) -> a -> Nut -toDeku = compose envy \ No newline at end of file + . NutF payload + -> Node' payload +__internalDekuFlatten (NutF c) a b = Bolson.flatten flattenArgs c a b diff --git a/deku-core/src/Deku/Core.purs b/deku-core/src/Deku/Core.purs index 35fc8099..5291e11c 100644 --- a/deku-core/src/Deku/Core.purs +++ b/deku-core/src/Deku/Core.purs @@ -6,7 +6,9 @@ module Deku.Core ( ANut(..) , AttributeParent + , AssociateWithUnsubscribe , DOMInterpret(..) + , DekuExtra , DeleteFromCache , DisconnectElement , GiveNewParent @@ -26,27 +28,22 @@ module Deku.Core , UnsetAttribute , SetText , Nut' + , Node' + , HeadNode' , NutF(..) , Child(..) - , bus - , busUncurried - , bussed - , bussedUncurried - , vbussed - , vbussedUncurried - , insert - , insert_ + , flattenArgs , remove , sendToPos , sendToTop , dyn , fixed - , envy , unsafeSetPos ) where import Prelude +import Bolson.Control (Flatten, behaving) import Bolson.Control as BControl import Bolson.Core (Scope) import Bolson.Core as Bolson @@ -54,22 +51,18 @@ import Control.Monad.ST (ST) import Control.Monad.ST as ST import Control.Monad.ST.Global (Global) import Control.Monad.ST.Global as Region -import Control.Monad.ST.Uncurried (mkSTFn2, runSTFn1, runSTFn2) import Control.Plus (empty) +import Data.Foldable (for_) +import Data.List (List) import Data.Maybe (Maybe(..)) import Data.Newtype (class Newtype, unwrap) import Data.Profunctor (lcmap) -import Data.Tuple (curry) -import Data.Tuple.Nested (type (/\), (/\)) +import Data.Tuple (Tuple(..)) +import Data.Tuple.Nested ((/\)) import Deku.Attribute (Cb) -import Effect (Effect) -import FRP.Event (Event, Subscriber(..), merge, makeLemmingEventO) -import FRP.Event as FRP.Event -import FRP.Event.VBus (class VBus, V, vbus) +import FRP.Event (Event) +import FRP.Poll (Poll, poll, sample) import Foreign.Object (Object) -import Prim.RowList (class RowToList) -import Safe.Coerce (coerce) -import Type.Proxy (Proxy) import Web.DOM as Web.DOM -- | The signature of a custom Deku hook. This works when `payload` variables @@ -85,84 +78,21 @@ type NutWith env = env -> Nut -- | twice on `Nut`. newtype ANut = ANut Nut --- | For internal use only in deku's hooks. See `Deku.Hooks` for more information. -bus - :: forall a b - . ((a -> Effect Unit) -> Event a -> b) - -> Event b -bus f = FRP.Event.bus f - --- | For internal use only in deku's hooks. See `Deku.Hooks` for more information. -busUncurried - :: forall a b - . (((a -> Effect Unit) /\ Event a) -> b) - -> Event b -busUncurried = curry >>> bus - --- | For internal use only in deku's hooks. See `Deku.Hooks` for more information. -bussed - :: forall a - . ((a -> Effect Unit) -> Event a -> Nut) - -> Nut -bussed f = Nut (z (map (\(Nut i) -> i) g)) - where - g :: Event Nut - g = bus f +type DekuExtra = (pos :: Maybe Int, ez :: Boolean, dynFamily :: Maybe String) - z :: forall payload. Event (NutF payload) -> NutF payload - z x = NutF - ( Bolson.EventfulElement' - (Bolson.EventfulElement (coerce x)) - ) +type HeadNode' payload = Bolson.HeadElement' (DOMInterpret payload) + payload --- | For internal use only in deku's hooks. See `Deku.Hooks` for more information. -bussedUncurried - :: forall a - . ( ((a -> Effect Unit) /\ Event a) - -> Nut - ) - -> Nut -bussedUncurried = curry >>> bussed - -vbussed - :: forall rbus bus push event - . RowToList bus rbus - => VBus rbus push event - => Proxy (V bus) - -> ({ | push } -> { | event } -> Nut) - -> Nut -vbussed px f = Nut - ( NutF - ( Bolson.EventfulElement' - (Bolson.EventfulElement gooo) - ) - ) - where - go :: Event Nut - go = vbus px f - - goo :: forall payload. Event (NutF payload) - goo = map (\(Nut nf) -> nf) go - - gooo :: forall payload. Event (Bolson.Entity Int (Node payload)) - gooo = map (\(NutF e) -> e) goo - --- | For internal use only in deku's hooks. See `Deku.Hooks` for more information. -vbussedUncurried - :: forall rbus bus push event - . RowToList bus rbus - => VBus rbus push event - => Proxy (V bus) - -> (({ | push } /\ { | event }) -> Nut) - -> Nut -vbussedUncurried px = curry >>> vbussed px +-- | For internal use in the `Nut` type signature. `Nut` uses `Bolson` under the +-- | hood, and this is used with `Bolson`'s `Entity` type. +type Node' payload = Bolson.Element' (DOMInterpret payload) DekuExtra payload -- | For internal use in the `Nut` type signature. `Nut` uses `Bolson` under the -- | hood, and this is used with `Bolson`'s `Entity` type. newtype Node payload = Node - ( Bolson.PSR (pos :: Maybe Int, ez :: Boolean, dynFamily :: Maybe String) - -> DOMInterpret payload - -> Event payload + ( Bolson.Element (DOMInterpret payload) + (pos :: Maybe Int, ez :: Boolean, dynFamily :: Maybe String) + payload ) -- | For internal use in the construction of Nut. @@ -179,7 +109,12 @@ instance Semigroup Nut where append a b = fixed [ a, b ] instance Monoid Nut where - mempty = Nut (NutF (Bolson.envy empty)) + mempty = Nut + ( NutF + ( Bolson.Element' + (Node (Bolson.Element \_ _ -> poll \_ -> empty)) + ) + ) -- | For internal use only in deku's hooks. See `useDyn` in `Deku.Hooks` for more information. unsafeSetPos @@ -199,37 +134,13 @@ unsafeSetPos' i (Nut df) = Nut (g df) :: Bolson.Entity Int (Node payload) -> Bolson.Entity Int (Node payload) f ii = case ii of - Bolson.Element' (Node e') -> Bolson.Element' - (Node (lcmap (_ { pos = i }) e')) - Bolson.EventfulElement' (Bolson.EventfulElement e') -> - Bolson.EventfulElement' (Bolson.EventfulElement (map f e')) + Bolson.Element' (Node (Bolson.Element e')) -> Bolson.Element' + (Node (Bolson.Element (lcmap (_ { pos = i }) e'))) + -- we don't need to set the pos recursively down as + -- dynify guarantees to wrap in an Element _ -> ii -newtype Child = Child (forall payload. Bolson.Child Int (Node payload)) - --- | For internal use only in deku's hooks. See `useDyn` in `Deku.Hooks` for more information. -insert - :: Int - -> Nut - -> Child -insert i x = Child (f ((\(Nut z) -> z) b)) - where - b :: Nut - b = unsafeSetPos i x - - f :: forall payload. NutF payload -> Bolson.Child Int (Node payload) - f (NutF d) = Bolson.Insert d - -insert_ - :: Nut - -> Child -insert_ x = Child (f ((\(Nut z) -> z) b)) - where - b :: Nut - b = unsafeSetPos' Nothing x - - f :: forall payload. NutF payload -> Bolson.Child Int (Node payload) - f (NutF d) = Bolson.Insert d +newtype Child = Child (Bolson.Child Int) -- | For internal use only in deku's hooks. See `useDyn` in `Deku.Hooks` for more information. remove :: Child @@ -271,6 +182,7 @@ type GiveNewParent payload = , scope :: Scope , pos :: Maybe Int , dynFamily :: Maybe String + , deferralPath :: List Int , ctor :: NutF payload , raiseId :: String -> ST.ST Region.Global Unit } @@ -352,6 +264,9 @@ type MakeDynBeacon = , dynFamily :: Maybe String } +type AssociateWithUnsubscribe = + { id :: String, unsubscribe :: ST.ST Region.Global Unit } + derive instance Newtype (DOMInterpret payload) _ -- | This is the interpreter that any Deku backend creator needs to impelement. @@ -359,7 +274,10 @@ derive instance Newtype (DOMInterpret payload) _ -- | As an example, if you want to create a nullary interpreter that -- | spits out `unit`, you can set everything to `mempty`. newtype DOMInterpret payload = DOMInterpret - { ids :: ST Global String + { ids :: ST Global Int + , deferPayload :: List Int -> payload -> payload + , forcePayload :: List Int -> payload + , associateWithUnsubscribe :: AssociateWithUnsubscribe -> payload , makeRoot :: MakeRoot -> payload , makeElement :: MakeElement -> payload , makeDynBeacon :: MakeDynBeacon -> payload @@ -380,143 +298,142 @@ newtype DOMInterpret payload = DOMInterpret newtype ExDOMInterpret = ExDOMInterpret (forall payload. DOMInterpret payload) newtype ExEvent = ExEvent (forall payload. Event payload) -portalFlatten - :: forall payload136 b143 d145 t149 t157 t159 payload171 - . Newtype b143 - { ids :: d145 - | t149 - } - => { disconnectElement :: - DOMInterpret t157 - -> { id :: String - , parent :: String - , scope :: Scope - | t159 - } - -> t157 - , doLogic :: Int -> DOMInterpret payload136 -> String -> payload136 - , ids :: b143 -> d145 - , toElt :: - Node payload171 - -> Bolson.Element (DOMInterpret payload171) - ( pos :: Maybe Int - , dynFamily :: Maybe String - , ez :: Boolean - ) - payload171 - } -portalFlatten = +flattenArgs + :: forall payload. Flatten Int (DOMInterpret payload) Node DekuExtra payload +flattenArgs = { doLogic: \pos (DOMInterpret { sendToPos: stp }) id -> stp { id, pos } + , deferPayload: \(DOMInterpret { deferPayload }) -> deferPayload + , forcePayload: \(DOMInterpret { forcePayload }) -> forcePayload , ids: unwrap >>> _.ids , disconnectElement: \(DOMInterpret { disconnectElement }) { id, scope, parent } -> disconnectElement { id, scope, parent, scopeEq: eq } - , toElt: \(Node e) -> Bolson.Element e + , toElt: \(Node e) -> e } __internalDekuFlatten :: forall payload - . Bolson.PSR (pos :: Maybe Int, ez :: Boolean, dynFamily :: Maybe String) - -> DOMInterpret payload - -> NutF payload - -> Event payload -__internalDekuFlatten a b c = BControl.flatten portalFlatten a b - ((\(NutF x) -> x) c) + . NutF payload + -> Node' payload +__internalDekuFlatten a b c = BControl.flatten flattenArgs ((\(NutF x) -> x) a) + b + c dynify :: forall i . (i -> Nut) -> i -> Nut -dynify f es = Nut (go' ((\(Nut df) -> df) (f es))) +dynify dfun es = Nut (go' ((\(Nut df) -> df) (dfun es))) where go' :: forall payload. NutF payload -> NutF payload - go' x = NutF (Bolson.Element' (Node (go x))) + go' x = NutF (Bolson.Element' (Node (Bolson.Element (go x)))) go :: forall payload . NutF payload - -> Bolson.PSR (pos :: Maybe Int, ez :: Boolean, dynFamily :: Maybe String) - -> DOMInterpret payload - -> Event payload + -> Node' payload go fes - { parent, scope, raiseId, pos, dynFamily, ez } + { parent, scope, raiseId, pos, dynFamily, ez, deferralPath } di@ ( DOMInterpret - { ids, makeElement, makeDynBeacon, attributeParent, removeDynBeacon } - ) = - makeLemmingEventO - ( mkSTFn2 \(Subscriber mySub) k -> do - me <- ids - raiseId me - -- `dyn`-s need to have a parent - -- Tis is because we need to preserve the order of children and a parent is the cleanest way to do this. - -- Then, we can call `childNodes` and `nextSibling`. - -- In practice, they will almost always have a parent, but for portals they don't, so we create a dummy one that is not rendered. - parentEvent /\ parentId <- case parent of - Nothing -> do - dummyParent <- ids - pure - ( ( pure - ( makeElement - { id: dummyParent - , parent: Nothing - , scope - , ns : Nothing - , tag: "div" - , pos: Nothing - , dynFamily: Nothing - } - ) - ) /\ dummyParent - ) - Just x -> pure (empty /\ x) - unsub <- runSTFn2 mySub - ( merge - [ parentEvent - , pure $ makeDynBeacon - { id: me, parent: Just parentId, scope, dynFamily, pos } - , pure $ attributeParent - { id: me, parent: parentId, pos, dynFamily, ez } - , ( __internalDekuFlatten - { parent: Just parentId - , scope - , ez: false - , raiseId: \_ -> pure unit - -- clear the pos - -- as we don't want the pointer's positional information - -- trickling down to what the pointer points to - -- the logic in Interpret.js will always give - -- the correct positional information to what - -- pointers point to - , pos: Nothing - , dynFamily: Just me - } - di - fes - ) - ] - ) - k - pure do - runSTFn1 k (removeDynBeacon { id: me }) - unsub + { ids + , makeElement + , deferPayload + , makeDynBeacon + , attributeParent + , removeDynBeacon + } + ) = behaving \e kx subscribe -> do + me <- ids + raiseId $ show me + -- `dyn`-s need to have a parent + -- Tis is because we need to preserve the order of children and a parent is the cleanest way to do this. + -- Then, we can call `childNodes` and `nextSibling`. + -- In practice, they will almost always have a parent, but for portals they don't, so we create a dummy one that is not rendered. + parentEvent /\ parentId <- case parent of + Nothing -> do + dummyParent <- ids + pure + ( [ makeElement + { id: show dummyParent + , parent: Nothing + , scope + , tag: "div" + , ns: Nothing + , pos: Nothing + , dynFamily: Nothing + } + + ] /\ show dummyParent + ) + Just x -> pure ([] /\ x) + let + evt = sample + ( __internalDekuFlatten fes + { parent: Just parentId + , scope + , ez: false + , raiseId: \_ -> pure unit + , deferralPath + -- clear the pos + -- as we don't want the pointer's positional information + -- trickling down to what the pointer points to + -- the logic in Interpret.js will always give + -- the correct positional information to what + -- pointers point to + , pos: Nothing + , dynFamily: Just $ show me + } + di + ) + e + for_ + ( parentEvent + <> + [ makeDynBeacon + { id: show me + , parent: Just parentId + , scope + , dynFamily + , pos + } + , attributeParent + { id: show me, parent: parentId, pos, dynFamily, ez } + ] ) + kx + for_ [ removeDynBeacon { id: show me } ] + (kx <<< deferPayload deferralPath) + subscribe evt -- | This function is used along with `useDyn` to create dynamic collections of elements, like todo items in a todo mvc app. -- | See [**Dynamic components**](https://purescript-deku.netlify.app/core-concepts/collections#dynamic-components) in the Deku guide for more information. dyn - :: Event (Event Child) + :: Poll (Tuple (Poll Child) Nut) -> Nut dyn = dynify myDyn where - myDyn :: Event (Event Child) -> Nut - myDyn e = Nut (myDyn' ((map <<< map) (\(Child c) -> c) e)) + bolsonify + :: forall payload + . Tuple (Poll Child) Nut + -> Tuple (Poll (Bolson.Child Int)) (Bolson.Entity Int (Node payload)) + bolsonify (Tuple child (Nut nut)) = Tuple (map (\(Child x) -> x) child) + ((\(NutF n) -> n) nut) + + myDyn + :: (Poll (Tuple (Poll Child) Nut)) + -> Nut + myDyn e = Nut + (myDyn' (map bolsonify e)) myDyn' :: forall payload - . Event (Event (Bolson.Child Int (Node payload))) + . Poll + ( Tuple (Poll (Bolson.Child Int)) + (Bolson.Entity Int (Node payload)) + ) -> NutF payload myDyn' x = NutF (Bolson.dyn x) @@ -535,27 +452,3 @@ fixed = dynify myFixed . Array (NutF payload) -> NutF payload myFixed' x = NutF (Bolson.fixed (map (\(NutF y) -> y) x)) - --- dynify --- ( coerce --- (Bolson.fixed :: Array (Nut' payload) -> Nut' payload) --- ) - --- | Once upon a time, this function was used to emit arbitrary `Nut`-s using an event. --- | Nowadays, its use is discouraged as there are other patterns in place to emit Nuts, like --- | for example `switcher`. It is left in the library for backwards compatibility, but will --- | likely be deprecated, and then all traces of it will be purged, and then people will be forced to study --- | a revisionist history of the library that denies it ever existed. -envy - :: Event Nut - -> Nut -envy = dynify myEnvy - where - myEnvy :: Event Nut -> Nut - myEnvy e = Nut (myEnvy' (map (\(Nut c) -> c) e)) - - myEnvy' - :: forall payload - . Event (NutF payload) - -> NutF payload - myEnvy' x = NutF (Bolson.envy (map (\(NutF y) -> y) x)) diff --git a/deku-core/src/Deku/Effect.purs b/deku-core/src/Deku/Effect.purs new file mode 100644 index 00000000..8ff0b244 --- /dev/null +++ b/deku-core/src/Deku/Effect.purs @@ -0,0 +1,152 @@ +-- | Deku.Effect strives to have parity with the hooks API. +-- | The difference is that all of these functions execute at the top level +-- | either in `Effect` or `ST`. That allows you to use the same deku-like +-- | syntax in a `do` as you would in a Deku.do block. +module Deku.Effect + ( useHot + , useMailboxed + , useRant + , useDeflect + , useState' + , useRant' + , useRefST + , useRefSTNE + , useState + ) where + +import Prelude + +import Bolson.Control (Flatten, behaving, behaving') +import Bolson.Control as Bolson +import Bolson.Core (Element(..), Entity(..)) +import Control.Alt ((<|>)) +import Control.Monad.ST.Class (liftST) +import Control.Monad.ST.Global (Global) +import Control.Monad.ST.Internal (ST) +import Control.Monad.ST.Internal as STRef +import Data.Newtype (unwrap) +import Data.NonEmpty (NonEmpty(..)) +import Data.Tuple.Nested (type (/\), (/\)) +import Deku.Core (DOMInterpret(..), DekuExtra, Hook, Node(..), Node', Nut(..), NutF(..)) +import Effect (Effect) +import FRP.Event as Event +import FRP.Poll (Poll, sample, stToPoll) +import FRP.Poll as Poll + +flattenArgs + :: forall payload. Flatten Int (DOMInterpret payload) Node DekuExtra payload +flattenArgs = + { doLogic: \pos (DOMInterpret { sendToPos }) id -> sendToPos { id, pos } + , ids: unwrap >>> _.ids + , deferPayload: \(DOMInterpret { deferPayload }) -> deferPayload + , forcePayload: \(DOMInterpret { forcePayload }) -> forcePayload + , disconnectElement: + \(DOMInterpret { disconnectElement }) { id, scope, parent } -> + disconnectElement { id, scope, parent, scopeEq: eq } + , toElt: \(Node e) -> e + } + +__internalDekuFlatten + :: forall payload + . NutF payload + -> Node' payload +__internalDekuFlatten (NutF c) a b = Bolson.flatten flattenArgs c a b + +-- | A state hook. See [`useState`](https://purescript-deku.netlify.app/core-concepts/state#the-state-hook) in the Deku guide for example usage. +useState' + :: forall a + . ST Global ((a -> Effect Unit) /\ Poll a) +useState' = do + { poll, push } <- Poll.create + pure (push /\ poll) + +useState + :: forall a + . a + -> ST Global ((a -> Effect Unit) /\ Poll a) +useState a = do + push /\ event <- useState' + pure (push /\ (pure a <|> event)) + +useHot + :: forall a + . a + -> ST Global (ST Global Unit /\ (a -> Effect Unit) /\ Poll a) +useHot a = do + push /\ poll <- useState' + u /\ r <- useRefST a poll + pure (u /\ push /\ (stToPoll r <|> poll)) + +useRant :: forall a. Poll a -> ST Global (ST Global Unit /\ Poll a) +useRant e = do + { poll, unsubscribe } <- Poll.rant e + pure (unsubscribe /\ poll) + +useDeflect :: forall a. Poll a -> Hook (Poll a) +useDeflect e f = Nut go' + where + go' :: forall payload. NutF payload + go' = NutF (Element' (Node (Element go))) + + go + :: forall payload + . Node' payload + go i di = behaving' \_ ee _ subscribe -> do + -- todo: should we incorporate the unsub? + p <- Poll.deflect e + -- we `once e` in case it has an initial value + let Nut nf = f p + subscribe (sample (__internalDekuFlatten nf i di) ee) identity + +-- | A hook to work with memoized values that lack an initial value. See [`useRant'`](https://purescript-deku.netlify.app/core-concepts/more-hooks#memoizing-without-an-initial-event) in the Deku guid for example usage. + +useRant' + :: forall t a + . (Poll t -> Poll a) + -> ST Global (ST Global Unit /\ (t -> Effect Unit) /\ (Poll a)) +useRant' f0 = do + push /\ e <- useState' + u /\ m <- useRant (f0 e) + pure (u /\ push /\ m) + +useRefSTNE + :: forall a + . NonEmpty Poll a + -> ST Global (ST Global Unit /\ ST Global a) +useRefSTNE (NonEmpty x y) = useRefST x y + +-- | A hook that takes an initial value and an event and produces +-- | a reference to the value that can be used in listeners. While the value +-- | itself is mutable, it cannot be changed by the consumer of the ref. +useRefST + :: forall a + . a + -> Poll a + -> ST Global (ST Global Unit /\ ST Global a) +useRefST a e = do + r <- STRef.new a + ep <- Event.createPure + u <- Event.subscribe (sample e ep.event) \aa -> liftST $ void $ STRef.write aa r + ep.push identity + pure (u /\ STRef.read r) + +-- | A hook that provides an event creator instead of events. Event creators turn into events when +-- | given an address, at which point they listen for a payload. This is useful when listening to +-- | large domains like updates of single items over large lists. It runs in _O(log n)_ time. +-- | For example usage, see [`useMailboxed`](https://purescript-deku.netlify.app/core-concepts/more-hooks#use-mailboxed) in the Deku guide. +useMailboxed + :: forall a b + . Ord a + => Hook (({ address :: a, payload :: b } -> Effect Unit) /\ (a -> Poll b)) +useMailboxed f = Nut go' + where + go' :: forall payload. NutF payload + go' = NutF (Element' (Node (Element go))) + + go + :: forall payload + . Node' payload + go i di = behaving \e _ subscribe -> do + { poll, push } <- Poll.mailbox + let Nut nf = f (push /\ poll) + subscribe (sample (__internalDekuFlatten nf i di) e) diff --git a/deku-core/src/Deku/Hooks.purs b/deku-core/src/Deku/Hooks.purs index 31467c9b..6b5f3a04 100644 --- a/deku-core/src/Deku/Hooks.purs +++ b/deku-core/src/Deku/Hooks.purs @@ -1,138 +1,216 @@ --- | Deku Hooks, modeled after React Hooks, are a way to have stateful behavior in Deku. +-- | Deku Hooks, modeled after React Hooks, are a way to have stateful poll in Deku. -- | At a basic level, Deku hooks look very much like their react counterparts: -- | -- | ```purescript -- | Deku.do -- | setCount /\ count <- useState 0 --- | Deku.button (click $ counter <#> add 1 >>> setCount) [ text (show count) ] +-- | Deku.button (click' $ counter <#> add 1 >>> setCount) [ textShow' count ] -- | ``` -- | -- | Deku hooks are covered more extensively in the -- | [Deku guide section on state](https://purescript-deku.netlify.app/core-concepts/state) -- | and the [Deku guide section on collections](https://purescript-deku.netlify.app/core-concepts/collections). module Deku.Hooks - ( useState' - , useState - , useRef - , useMemoized' - , useMemoized - , useMailboxed - , useEffect - , useAff - , useAffWithCancellation - , useAffSequentially - , useAffSequentiallyOrDie - , useAffOrDie - , useHot - , useHot' + ( (<#~>) + , (<$~>) + , cycle + , dynOptions + , guard + , guardWith + , switcher + , switcherFlipped , useDyn , useDynAtBeginning + , useDynAtBeginningWith , useDynAtEnd + , useHot + , useDynAtEndWith + , useDynWith + , useMailboxed + , useRant + , useHotRant + , useDeflect + , useState' + , useRant' + , useRef + , useRefNE + , useRefST + , useRefSTNE + , useState ) where import Prelude -import Bolson.Core (envy, Entity) +import Bolson.Control (Flatten, behaving, behaving') +import Bolson.Control as Bolson +import Bolson.Core (Element(..), Entity(..)) +import Bolson.Core as BCore import Control.Alt ((<|>)) import Control.Monad.ST.Class (liftST) +import Control.Monad.ST.Global (Global) +import Control.Monad.ST.Internal (ST) import Control.Monad.ST.Internal as STRef -import Control.Monad.ST.Uncurried (mkSTFn1, mkSTFn2, runSTFn1, runSTFn2) -import Data.Array as Array -import Data.Either (Either(..)) -import Data.Foldable (for_) -import Data.Maybe (Maybe(..), fromMaybe) -import Data.Tuple (Tuple(..), curry) +import Control.Plus (empty) +import Data.FunctorWithIndex (mapWithIndex) +import Data.Maybe (Maybe(..)) +import Data.Newtype (unwrap) +import Data.NonEmpty (NonEmpty(..)) +import Data.Tuple (Tuple(..), snd) import Data.Tuple.Nested (type (/\), (/\)) -import Deku.Core (Nut(..), NutF(..), Node, Child, bus, bussedUncurried, insert, remove, sendToPos, dyn) +import Deku.Core (Child(..), DOMInterpret(..), DekuExtra, Hook, Node(..), Node', Nut(..), NutF(..), dyn, remove, sendToPos, unsafeSetPos) import Deku.Do as Deku -import Effect (Effect, foreachE) -import Effect.Aff (Aff, Error, error, joinFiber, killFiber, launchAff, launchAff_) -import Effect.Uncurried (mkEffectFn1, runEffectFn1, runEffectFn2) -import FRP.Event (Event, Subscriber(..), createPure, keepLatest, mailboxed, makeEventO, makeLemmingEvent, makeLemmingEventO, mapAccum, memoize, subscribeO) -import Safe.Coerce (coerce) +import Effect (Effect) +import FRP.Event (filterMap, mapAccum) +import FRP.Poll (Poll, merge, sample, sample_, stToPoll) +import FRP.Poll as Poll + +flattenArgs + :: forall payload. Flatten Int (DOMInterpret payload) Node DekuExtra payload +flattenArgs = + { doLogic: \pos (DOMInterpret { sendToPos }) id -> sendToPos { id, pos } + , ids: unwrap >>> _.ids + , deferPayload: \(DOMInterpret { deferPayload }) -> deferPayload + , forcePayload: \(DOMInterpret { forcePayload }) -> forcePayload + , disconnectElement: + \(DOMInterpret { disconnectElement }) { id, scope, parent } -> + disconnectElement { id, scope, parent, scopeEq: eq } + , toElt: \(Node e) -> e + } + +__internalDekuFlatten + :: forall payload + . NutF payload + -> Node' payload +__internalDekuFlatten (NutF c) a b = Bolson.flatten flattenArgs c a b --- | A state hook for states without initial values. See [`useState'`](https://purescript-deku.netlify.app/core-concepts/state#state-without-initial-values) in the Deku guide for example usage. +-- | A state hook. See [`useState`](https://purescript-deku.netlify.app/core-concepts/state#the-state-hook) in the Deku guide for example usage. useState' :: forall a - . ( ((a -> Effect Unit) /\ Event a) - -> Nut - ) - -> Nut -useState' = bussedUncurried - --- | A hook to work with memoized values. See [`useMemoized`](https://purescript-deku.netlify.app/core-concepts/more-hooks#the-case-for-memoization) in the Deku guide for example usage. -useMemoized - :: forall a - . (Event a) - -> (Event a -> Nut) - -> Nut -useMemoized e f1 = Nut eeee + . Hook ((a -> Effect Unit) /\ Poll a) +useState' f = Nut go' where - eeee :: forall payload. NutF payload - eeee = NutF (envy (map (\(NutF x) -> x) eee)) + go' :: forall payload. NutF payload + go' = NutF (Element' (Node (Element go))) + + go + :: forall payload + . Node' payload + go i di = behaving \ee _ subscribe -> do + { poll, push } <- Poll.create + let + Nut nf = f (push /\ poll) + subscribe (sample (__internalDekuFlatten nf i di) ee) - eee :: forall payload. Event (NutF payload) - eee = map (\(Nut df) -> df) ee - - ee :: Event Nut - ee = memoize e f1 +useState + :: forall a + . a + -> Hook ((a -> Effect Unit) /\ Poll a) +useState a f = Deku.do + push /\ event <- useState' + f (push /\ (pure a <|> event)) --- | A hook to work with memoized values that lack an initial value. See [`useMemoized'`](https://purescript-deku.netlify.app/core-concepts/more-hooks#memoizing-without-an-initial-event) in the Deku guid for example usage. -useMemoized' - :: forall a b - . (Event a -> Event b) - -> ( ((a -> Effect Unit) /\ Event b) - -> Nut - ) - -> Nut -useMemoized' f0 f1 = bussedUncurried fx +useHot + :: forall a + . a + -> Hook ((a -> Effect Unit) /\ Poll a) +useHot a f = Deku.do + push /\ poll <- useState' + r <- useRefST a poll + f (push /\ (stToPoll r <|> poll)) + +guard :: Poll Boolean -> Nut -> Nut +guard b e = switcher (if _ then e else mempty) b + +guardWith :: forall a. (Poll (Maybe a)) -> (a -> Nut) -> Nut +guardWith m f = m <#~> case _ of + Just x -> f x + Nothing -> mempty + +useRant :: forall a. Poll a -> Hook (Poll a) +useRant e f = Nut go' where - fx (a /\ b) = Nut eeee - where - eeee :: forall payload. NutF payload - eeee = NutF (envy (map (\(NutF x) -> x) eee)) + go' :: forall payload. NutF payload + go' = NutF (Element' (Node (Element go))) + + go + :: forall payload + . Node' payload + go i di = behaving' \_ ee _ subscribe -> do + -- todo: should we incorporate the unsub? + { poll: p } <- Poll.rant e + -- we `once e` in case it has an initial value + let Nut nf = f p + subscribe (sample (__internalDekuFlatten nf i di) ee) identity + +useHotRant :: forall a. Poll a -> Hook (Poll a) +useHotRant e f = Deku.do + r <- useRefST Nothing (Just <$> e) + p <- useRant e + -- we `once e` in case it has an initial value + f $ filterMap identity (stToPoll r <|> (Just <$> p)) + +useDeflect :: forall a. Poll a -> Hook (Poll a) +useDeflect e f = Nut go' + where + go' :: forall payload. NutF payload + go' = NutF (Element' (Node (Element go))) + + go + :: forall payload + . Node' payload + go i di = behaving' \_ ee _ subscribe -> do + -- todo: should we incorporate the unsub? + p <- Poll.deflect e + -- we `once e` in case it has an initial value + let Nut nf = f p + subscribe (sample (__internalDekuFlatten nf i di) ee) identity + +-- | A hook to work with memoized values that lack an initial value. See [`useRant'`](https://purescript-deku.netlify.app/core-concepts/more-hooks#memoizing-without-an-initial-event) in the Deku guid for example usage. + +useRant' + :: forall t a + . (Poll t -> Poll a) + -> (Tuple (t -> Effect Unit) (Poll a) -> Nut) + -> Nut +useRant' f0 makeHook = Deku.do + push /\ e <- useState' + m <- useRant (f0 e) + makeHook (push /\ m) - eee :: forall payload. Event (NutF payload) - eee = map (\(Nut df) -> df) ee +useRef ∷ ∀ a. a → Poll a → Hook (Effect a) +useRef a b f = useRefST a b \x -> f $ liftST x - ee :: Event Nut - ee = memoize (f0 b) \c -> f1 (a /\ c) +useRefNE ∷ ∀ a. NonEmpty Poll a → Hook (Effect a) +useRefNE a f = useRefSTNE a \x -> f $ liftST x --- | A state hook. See [`useState`](https://purescript-deku.netlify.app/core-concepts/state#the-state-hook) in the Deku guide for example usage. -useState +useRefSTNE :: forall a - . a - -> ( ((a -> Effect Unit) /\ Event a) - -> Nut - ) - -> Nut -useState a f = Deku.do - x /\ y <- useState' - m <- useMemoized (y <|> pure a) - f (x /\ m) + . NonEmpty Poll a + -> Hook (ST Global a) +useRefSTNE (NonEmpty x y) = useRefST x y -- | A hook that takes an initial value and an event and produces -- | a reference to the value that can be used in listeners. While the value -- | itself is mutable, it cannot be changed by the consumer of the ref. -useRef +useRefST :: forall a . a - -> Event a - -> (Effect a -> Nut) - -> Nut -useRef a e f = Nut eeee + -> Poll a + -> Hook (ST Global a) +useRefST a e makeHook = Nut go' where - eeee :: forall payload. NutF payload - eeee = NutF (envy (map (\(NutF x) -> x) eee)) - - eee :: forall payload. Event (NutF payload) - eee = map (\(Nut df) -> df) ee - - ee :: Event Nut - ee = makeLemmingEvent \s k -> do - r <- STRef.new a - k $ f (liftST $ STRef.read r) - s e \i -> void $ STRef.write i r + go' :: forall payload. NutF payload + go' = NutF (Element' (Node (Element go))) + + go + :: forall payload + . Node' payload + go i di = behaving' \_ ee _ subscribe -> do + rf <- STRef.new a + let Nut nf = makeHook (STRef.read rf) + subscribe (sample_ e ee) \_ x -> do + void $ liftST $ STRef.write x rf + subscribe (sample (__internalDekuFlatten nf i di) ee) identity -- | A hook that provides an event creator instead of events. Event creators turn into events when -- | given an address, at which point they listen for a payload. This is useful when listening to @@ -141,304 +219,132 @@ useRef a e f = Nut eeee useMailboxed :: forall a b . Ord a - => ( ( ({ address :: a, payload :: b } -> Effect Unit) /\ - (a -> Event b) - ) - -> Nut - ) - -> Nut -useMailboxed f = bussedUncurried fx + => Hook (({ address :: a, payload :: b } -> Effect Unit) /\ (a -> Poll b)) +useMailboxed f = Nut go' where - fx (a /\ b) = Nut eeee - where - eeee :: forall payload. NutF payload - eeee = NutF (envy (map (\(NutF x) -> x) eee)) + go' :: forall payload. NutF payload + go' = NutF (Element' (Node (Element go))) - eee :: forall payload. Event (NutF payload) - eee = map (\(Nut df) -> df) ee + go + :: forall payload + . Node' payload + go i di = behaving \e _ subscribe -> do + { poll, push } <- Poll.mailbox + let Nut nf = f (push /\ poll) + subscribe (sample (__internalDekuFlatten nf i di) e) - ee :: Event Nut - ee = mailboxed b \c -> f (a /\ c) +type DynOptions v = + { sendTo :: v -> Poll Int, remove :: v -> Poll Unit } -useDyn - :: forall value - . Event (Tuple Int value) - -> ( { value :: value, remove :: Effect Unit, sendTo :: Int -> Effect Unit } - -> Nut - ) - -> Nut -useDyn e f = dyn $ map - ( \(Tuple pos value) -> Deku.do - { remove, sendTo } <- useDyn' pos - f { remove, sendTo, value } - ) - e +dynOptions :: forall v. DynOptions v +dynOptions = { sendTo: \_ -> empty, remove: \_ -> empty } -useDynAtBeginning +useDyn :: forall value - . Event value - -> ( { value :: value, remove :: Effect Unit, sendTo :: Int -> Effect Unit } - -> Nut - ) - -> Nut -useDynAtBeginning e = useDyn ((0 /\ _) <$> e) - -useDynAtEnd + . Poll (Tuple Int value) + -> Hook + { value :: value + , remove :: Effect Unit + , sendTo :: Int -> Effect Unit + } +useDyn y = useDynWith y dynOptions + +useDynWith :: forall value - . Event value - -> ( { value :: value, remove :: Effect Unit, sendTo :: Int -> Effect Unit } - -> Nut - ) - -> Nut -useDynAtEnd e = useDyn (mapAccum (\a b -> (a + 1) /\ (a /\ b)) 0 e) - -useDyn' - :: Int - -> ( { remove :: Effect Unit, sendTo :: Int -> Effect Unit } - -> Nut - ) - -> Event Child -useDyn' i f = keepLatest Deku.do - setChildLogic /\ childLogic <- bus <<< curry - pure - ( insert i - ( f - { remove: setChildLogic remove - , sendTo: setChildLogic <<< sendToPos + . (Poll (Tuple Int value)) + -> DynOptions value + -> Hook + { value :: value + , remove :: Effect Unit + , sendTo :: Int -> Effect Unit + } +useDynWith e opts f = Nut go' + where + go' :: forall payload. NutF payload + go' = NutF (Element' (Node (Element go))) + + go + :: forall payload + . Node' payload + go i di = behaving \ee _ subscribe -> do + c1 <- Poll.mailbox + let + mc ix (Tuple pos v) = Tuple + ( merge + [ opts.remove v $> Child BCore.Remove + , Child <<< BCore.Logic <$> opts.sendTo v + , c1.poll ix + ] + ) + ( unsafeSetPos pos $ f + { value: v + , remove: c1.push { address: ix, payload: remove } + , sendTo: c1.push <<< { address: ix, payload: _ } <<< sendToPos } ) - ) <|> childLogic + let + Nut nf = dyn $ mapWithIndex mc e + subscribe (sample (__internalDekuFlatten nf i di) ee) --- | A hook that remembers its most recent value and plays it back upon subscription _without_ an initial value. See [`useHot'`](https://purescript-deku.netlify.app/core-concepts/state#memoization-and-usehot) in the Deku guide for more info. -useHot' - :: forall a. ((a -> Effect Unit) /\ Event a -> Nut) -> Nut -useHot' f = Nut ee - where - ee :: forall payload. NutF payload - ee = NutF $ envy - $ - ( coerce - :: Event (NutF payload) -> Event (Entity Int (Node payload)) - ) - $ makeLemmingEventO - ( mkSTFn2 \(Subscriber s) k -> do - { push, event } <- createPure - current <- STRef.new Nothing - let writeVal v = STRef.write (Just v) current - let - push'' i = liftST do - _ <- writeVal i - push i - -- push' i = do - -- _ <- writeVal i - -- push i - let - event' = makeLemmingEventO - ( mkSTFn2 \_ k' -> do - val <- STRef.read current - for_ val \x -> runSTFn1 k' x - runSTFn2 s event k' - ) - runSTFn1 k ((\(Nut x) -> x) (f (push'' /\ event'))) - runSTFn2 s event (mkSTFn1 \v -> void $ writeVal v) - ) +useDynAtBeginningWith + :: forall value + . Poll value + -> DynOptions value + -> Hook + { value :: value, remove :: Effect Unit, sendTo :: Int -> Effect Unit } +useDynAtBeginningWith e = useDynWith (map (0 /\ _) e) --- | A hook that remembers its most recent value and plays it back upon subscription. See [`useHot`](https://purescript-deku.netlify.app/core-concepts/state#memoization-and-usehot) in the Deku guide for more info. -useHot - :: forall a - . a - -> ((a -> Effect Unit) /\ Event a -> Nut) - -> Nut -useHot a f = Nut ee - where - ee :: forall payload. NutF payload - ee = NutF $ envy - $ - ( coerce - :: Event (NutF payload) -> Event (Entity Int (Node payload)) - ) - $ makeLemmingEventO - ( mkSTFn2 \(Subscriber s) k -> do - { push, event } <- createPure - current <- STRef.new Nothing - let writeVal v = STRef.write (Just v) current - let - push'' i = liftST do - _ <- writeVal i - push i - -- push' i = do - -- _ <- writeVal i - -- push i - let - event' = makeLemmingEventO - ( mkSTFn2 \_ k' -> do - val <- STRef.read current - runSTFn1 k' (fromMaybe a val) - runSTFn2 s event k' - ) - runSTFn1 k ((\(Nut x) -> x) (f (push'' /\ event'))) - runSTFn2 s event (mkSTFn1 \v -> void $ writeVal v) - ) +useDynAtBeginning + :: forall value + . Poll value + -> Hook + { value :: value, remove :: Effect Unit, sendTo :: Int -> Effect Unit } +useDynAtBeginning b = useDynAtBeginningWith b dynOptions --- | A hook that runs an arbitrary effect when an event's value changes. -useEffect - :: forall a - . Event a - -> (a -> Effect Unit) - -> (Unit -> Nut) - -> Nut -useEffect e f1 f2 = Nut ee - where - ee :: forall payload. NutF payload - ee = NutF $ envy eeeee +useDynAtEndWith + :: forall value + . Poll value + -> DynOptions value + -> Hook + { value :: value, remove :: Effect Unit, sendTo :: Int -> Effect Unit } +useDynAtEndWith e = useDynWith + (mapAccum (\a b -> (a + 1) /\ (a /\ b)) 0 e) - eeeee :: forall payload. Event (Entity Int (Node payload)) - eeeee = map (\(NutF d) -> d) eeee +useDynAtEnd + :: forall value + . Poll value + -> Hook + { value :: value, remove :: Effect Unit, sendTo :: Int -> Effect Unit } +useDynAtEnd b = useDynAtEndWith b dynOptions + +-- | Like `bindFlipped`, except instead of working with a monad, it dipts into an `Event` +-- | and creates a `Nut`. This allows you to use an event to switch between different +-- | bits of DOM. This is how a [Virtual DOM](https://en.wikipedia.org/wiki/Virtual_DOM) works +-- | in its most basic, unoptimized form. As a result, `switcher`, while convenient, is inefficient +-- | and should be used when the content needs to be replaced wholesale. For a more efficient +-- | approach, see the `useDyn` hook. +switcher :: forall a. (a -> Nut) -> Poll a -> Nut +switcher f poll = Deku.do + ctr <- useRant (counter poll) + dctr <- useDeflect (counter poll) + { value } <- useDynAtBeginningWith (ctr <|> dctr) $ dynOptions + { remove = \(Tuple oldV _) -> filterMap + (\(Tuple newV _) -> if newV == oldV + 1 then Just unit else Nothing) + ctr + } + f (snd value) + where + counter = mapAccum fn 0 + where + fn a b = (a + 1) /\ (a /\ b) - eeee :: forall payload. Event (NutF payload) - eeee = map (\(Nut d) -> d) eee +cycle :: Poll Nut -> Nut +cycle = switcher identity - eee :: Event Nut - eee = pure (f2 unit) <|> makeEventO - ( mkEffectFn1 \_ -> do - runEffectFn2 subscribeO e $ mkEffectFn1 f1 - ) +infixl 4 switcher as <$~> --- | A hook that runs an arbitrary aff when an event's value changes. -useAff - :: forall a - . Event a - -> (a -> Aff Unit) - -> (Unit -> Nut) - -> Nut -useAff e = useEffect e <<< map launchAff_ +-- | A flipped version of `switcher`. +switcherFlipped :: forall a. Poll a -> (a -> Nut) -> Nut +switcherFlipped a b = switcher b a --- | A hook that runs an arbitrary aff when an event's value changes, cancelling the previous aff. -useAffWithCancellation - :: forall a - . Event a - -> (a -> Aff Unit) - -> (Unit -> Nut) - -> Nut -useAffWithCancellation e f1 f2 = Nut ee - where - ee :: forall payload. NutF payload - ee = NutF (envy eeeee) - - eeeee :: forall payload. Event (Entity Int (Node payload)) - eeeee = map (\(NutF d) -> d) eeee - - eeee :: forall payload. Event (NutF payload) - eeee = map (\(Nut d) -> d) eee - - eee :: Event Nut - eee = - makeEventO $ mkEffectFn1 \k -> do - r <- liftST $ STRef.new (pure unit) - runEffectFn1 k (f2 unit) - runEffectFn2 subscribeO e $ mkEffectFn1 \a -> do - r' <- liftST $ STRef.read r - r'' <- launchAff do - killFiber (error "useAffWithCancellation") r' - f1 a - liftST $ void $ STRef.write r'' r - --- | A hook that runs an arbitrary aff when an event's value changes, only running after all previous computations from this hook done. -useAffSequentially - :: forall a - . Event a - -> (a -> Aff Unit) - -> (Unit -> Nut) - -> Nut -useAffSequentially e f1 f2 = Nut ee - where - ee :: forall payload. NutF payload - ee = NutF (envy eeeee) - - eeeee :: forall payload. Event (Entity Int (Node payload)) - eeeee = map (\(NutF d) -> d) eeee - - eeee :: forall payload. Event (NutF payload) - eeee = map (\(Nut d) -> d) eee - - eee :: Event Nut - eee = - makeEventO $ mkEffectFn1 \k -> do - r <- liftST $ STRef.new (pure unit) - runEffectFn1 k (f2 unit) - runEffectFn2 subscribeO e $ mkEffectFn1 \a -> do - r' <- liftST $ STRef.read r - r'' <- launchAff do - _ <- joinFiber r' - f1 a - liftST $ void $ STRef.write r'' r - --- | A hook that runs an arbitrary aff when an event's value changes, only running after all previous computations from this hook done. A `Left Error` value kills the sequence, allowing you to start fresh if desired. -useAffSequentiallyOrDie - :: forall a - . Event (Either Error a) - -> (a -> Aff Unit) - -> (Unit -> Nut) - -> Nut -useAffSequentiallyOrDie e f1 f2 = Nut ee - where - ee :: forall payload. NutF payload - ee = NutF (envy eeeee) - - eeeee :: forall payload. Event (Entity Int (Node payload)) - eeeee = map (\(NutF d) -> d) eeee - - eeee :: forall payload. Event (NutF payload) - eeee = map (\(Nut d) -> d) eee - - eee :: Event Nut - eee = - makeEventO $ mkEffectFn1 \k -> do - r <- liftST $ STRef.new (pure unit) - runEffectFn1 k (f2 unit) - runEffectFn2 subscribeO e $ mkEffectFn1 $ case _ of - Right a -> do - r' <- liftST $ STRef.read r - r'' <- launchAff do - _ <- joinFiber r' - f1 a - liftST $ void $ STRef.write r'' r - Left err -> do - r' <- liftST $ STRef.read r - _ <- launchAff do - killFiber err r' - liftST $ void $ STRef.write (pure unit) r - --- | A hook that runs an arbitrary aff when an event's value changes. A `Left Error` value kills the sequence, allowing you to start fresh if desired. -useAffOrDie - :: forall a - . Event (Either Error a) - -> (a -> Aff Unit) - -> (Unit -> Nut) - -> Nut -useAffOrDie e f1 f2 = Nut ee - where - ee :: forall payload. NutF payload - ee = NutF (envy eeeee) - - eeeee :: forall payload. Event (Entity Int (Node payload)) - eeeee = map (\(NutF d) -> d) eeee - - eeee :: forall payload. Event (NutF payload) - eeee = map (\(Nut d) -> d) eee - - eee :: Event Nut - eee = - makeEventO $ mkEffectFn1 \k -> do - r <- liftST $ STRef.new [] - runEffectFn1 k (f2 unit) - runEffectFn2 subscribeO e $ mkEffectFn1 $ case _ of - Right a -> do - r' <- launchAff do - f1 a - liftST $ void $ STRef.modify (Array.cons r') r - Left err -> do - arr <- liftST $ STRef.read r - liftST $ void $ STRef.write [] r - foreachE arr \r' -> launchAff_ do - killFiber err r' +infixl 1 switcherFlipped as <#~> diff --git a/deku-core/src/Deku/Interpret.js b/deku-core/src/Deku/Interpret.js index 441277d0..37077419 100644 --- a/deku-core/src/Deku/Interpret.js +++ b/deku-core/src/Deku/Interpret.js @@ -4,8 +4,11 @@ export const setHydrating = (state) => () => { export const unSetHydrating = (state) => () => { state.hydrating = false; }; +export const associateWithUnsubscribe_ = (a) => state => () => { + state.units[a.id].unsubscribe = a.unsubscribe; +} export const attributeParent_ = (runOnJust) => (a) => (state) => () => { - // console.log("attributeParent_", a); + // @ console.log("attributeParent_", a, new Date().getTime()); if (state.units[a.id]) { const dom = state.units[a.parent].main; // only attribute if it is not attributed already @@ -221,7 +224,7 @@ export const getAllComments = (state) => () => { }; export const makeDynBeacon_ = (runOnJust) => (tryHydration) => (a) => (state) => () => { - // console.log("makeDynBeacon_", a); + // @ console.log("makeDynBeacon_", a, new Date().getTime()); var startBeacon; var endBeacon; var ptr = a.id; @@ -279,7 +282,7 @@ export const getDynFamily = (id) => (state) => () => state.units[id] && state.units[id].dynFamily ? state.units[id].dynFamily : (() => { - throw new Error(`No positional information for ${id}`); + throw new Error(`No dyn family for ${id}`); })(); export const getParent = (id) => (state) => () => state.units[id] && @@ -304,7 +307,7 @@ export const getScope = (id) => (state) => () => export const makeElement_ = (runOnJust) => (tryHydration) => (a) => (state) => () => { - // console.log("makeElement_", a); + // @ console.log("makeElement_", a, new Date().getTime()); var dom; var ptr = a.id; if (!state.scopes[a.scope]) { @@ -353,7 +356,7 @@ export const makeElement_ = export const makeText_ = (runOnJust) => (tryHydration) => (maybe) => (a) => (state) => () => { - // console.log("makeText_", a); + // @ console.log("makeText_", a, new Date().getTime()); var ptr = a.id; var dom; if (!state.scopes[a.scope]) { @@ -400,6 +403,7 @@ export const makeText_ = pos: a.pos, parent: a.parent, scope: a.scope, + dynFamily: a.dynFamily, }; main.$dekuId = ptr; return true; @@ -428,7 +432,7 @@ export function makeFFIDOMSnapshot() { } export const setProp_ = (tryHydration) => (a) => (state) => () => { - // console.log("setProp_", a); + // @ console.log("setProp_", a, new Date().getTime()); if (state.units[a.id]) { var ptr = a.id; var avv = a.value; @@ -472,7 +476,7 @@ export const setProp_ = (tryHydration) => (a) => (state) => () => { }; export const setCb_ = (tryHydration) => (a) => (state) => () => { - // console.log("setCb_", a); + // @ console.log("setCb_", a, new Date().getTime()); if (state.units[a.id]) { var ptr = a.id; var avv = a.value; @@ -512,7 +516,7 @@ export const setCb_ = (tryHydration) => (a) => (state) => () => { }; export const unsetAttribute_ = (tryHydration) => (a) => (state) => () => { - // console.log("unsetAttribute_", a); + // @ console.log("unsetAttribute_", a, new Date().getTime()); if (state.units[a.id]) { var ptr = a.id; // it may be the case that we have created an element via @@ -538,7 +542,7 @@ export const unsetAttribute_ = (tryHydration) => (a) => (state) => () => { } }; export const setText_ = (a) => (state) => () => { - // console.log("setText_", a); + // @ console.log("setText_", a, new Date().getTime()); if (state.units[a.id]) { var ptr = a.id; state.units[ptr].main.nodeValue = a.text; @@ -547,11 +551,12 @@ export const setText_ = (a) => (state) => () => { export const makePursx_ = (runOnJust) => (tryHydration) => (maybe) => (a) => (state) => () => { - // console.log("makePursx_", a); + // @ console.log("makePursx_", a, new Date().getTime()); var dom; var tmp; var ptr = a.id; var html = a.html; + var dynFamily = a.dynFamily; var verb = a.verb; var cache = a.cache; var parent = a.parent; @@ -573,6 +578,7 @@ export const makePursx_ = scope: scope, parent: parent, main: dom, + dynFamily: dynFamily, }; dom.$dekuId = ptr; return true; @@ -605,6 +611,7 @@ export const makePursx_ = listeners: {}, pos: a.pos, scope: scope, + dynFamily: dynFamily, parent: parent, main: tmp.firstChild, }; @@ -650,7 +657,7 @@ export const makePursx_ = }; export const makeRoot_ = (a) => (state) => () => { - // console.log("makeRoot_", a); + // @ console.log("makeRoot_", a, new Date().getTime()); var ptr = a.id; state.units[ptr] = { main: a.root, @@ -659,7 +666,7 @@ export const makeRoot_ = (a) => (state) => () => { }; export const giveNewParent_ = (just) => (runOnJust) => (b) => (state) => () => { - // console.log("giveNewParent_", b); + // @ console.log("giveNewParent_", b, new Date().getTime()); const insertAt = (ptr, parent, node) => { if (state.units[ptr].startBeacon) { // we continue this operation until we hit the end beacon @@ -723,11 +730,10 @@ export const giveNewParent_ = (just) => (runOnJust) => (b) => (state) => () => { didInsert = true; break; } - if (state.units[dkid].dynFamily !== state.units[ptr].dynFamily) { + if (state.units[dkid].dynFamily !== a.dynFamily) { i++; continue; } - // if we've found equal positions already we stop here // as all we care about is the pos fixer-upper happening above if (didInsert) { @@ -772,7 +778,7 @@ export const giveNewParent_ = (just) => (runOnJust) => (b) => (state) => () => { }; export const disconnectElement_ = (a) => (state) => () => { - // console.log("disconnectElement_", a); + // @ console.log("disconnectElement_", a, new Date().getTime()); if (state.units[a.id]) { var ptr = a.id; if ( @@ -813,8 +819,11 @@ export const stateHasKey = (id) => (state) => () => { }; export const deleteFromCache_ = (a) => (state) => () => { - // console.log("deleteFromCache_", a); + // @ console.log("deleteFromCache_", a, new Date().getTime()); if (state.units[a.id]) { + if (state.units[a.id].unsubscribe) { + state.units[a.id].unsubscribe(); + } delete state.units[a.id]; } }; diff --git a/deku-core/src/Deku/Interpret.purs b/deku-core/src/Deku/Interpret.purs index b7c77d9c..308fe510 100644 --- a/deku-core/src/Deku/Interpret.purs +++ b/deku-core/src/Deku/Interpret.purs @@ -6,13 +6,16 @@ module Deku.Interpret ( EliminatableInstruction(..) , FFIDOMSnapshot(..) - , FunctionOfFFIDOMSnapshot(..) , FunctionOfFFIDOMSnapshotU + , FunctionOfArrayInstructionsU + , EffectfulExecutor + , EffectfulPayload , Instruction(..) , RenderableInstruction(..) - , FreeEFunctionOfFFIDOMSnapshotU - , FreeEFunctionOfFFIDOMSnapshot - , EFunctionOfFFIDOMSnapshot(..) + , STPayload + , forcePayloadE + , deferPayloadE + , __internalDekuFlatten , fullDOMInterpret , getAllComments , hydratingDOMInterpret @@ -25,40 +28,33 @@ module Deku.Interpret import Prelude import Bolson.Control as BC -import Bolson.Core (Element(..), PSR, Scope(..)) -import Bolson.Core as Bolson -import Control.Monad.Free (Free, liftF, wrap) +import Bolson.Core (Scope(..)) import Control.Monad.ST (ST) +import Control.Monad.ST.Class (class MonadST, liftST) import Control.Monad.ST.Global (Global) import Control.Monad.ST.Global as Region import Control.Monad.ST.Internal as Ref -import Control.Plus (empty) +import Data.Array as Array +import Data.Foldable (for_) +import Data.List ((:)) +import Data.List as List +import Data.Map as Map import Data.Maybe (Maybe(..), maybe) +import Data.Monoid.Endo (Endo(..)) import Data.Newtype (unwrap) import Data.String.Utils (includes) -import Deku.Core (DOMInterpret(..), Nut', NutF(..), Node(..)) +import Deku.Core (DOMInterpret(..), Node', Nut(..), Nut', NutF(..), flattenArgs) import Deku.Core as Core import Effect (Effect) -import FRP.Event (Event) +import FRP.Event (create, subscribe) +import FRP.Poll (sample) import Safe.Coerce (coerce) -import Test.QuickCheck (arbitrary, mkSeed) -import Test.QuickCheck.Gen (Gen, evalGen) -- foreign data FFIDOMSnapshot -type FunctionOfFFIDOMSnapshot a = - (FFIDOMSnapshot -> Effect a) - -type FunctionOfFFIDOMSnapshotU = FunctionOfFFIDOMSnapshot Unit - -newtype EFunctionOfFFIDOMSnapshot a = EFunctionOfFFIDOMSnapshot - (Event (FunctionOfFFIDOMSnapshot a)) - -derive instance Functor EFunctionOfFFIDOMSnapshot - -type FreeEFunctionOfFFIDOMSnapshot a = Free EFunctionOfFFIDOMSnapshot a -type FreeEFunctionOfFFIDOMSnapshotU = FreeEFunctionOfFFIDOMSnapshot Unit +type FunctionOfFFIDOMSnapshotU = + FFIDOMSnapshot -> Effect Unit foreign import makeFFIDOMSnapshot :: Effect FFIDOMSnapshot @@ -130,80 +126,93 @@ foreign import deleteFromCache_ foreign import giveNewParent_ :: (Int -> Maybe Int) -> RunOnJust - -> Core.GiveNewParent FreeEFunctionOfFFIDOMSnapshotU + -> Core.GiveNewParent EffectfulPayload -> FunctionOfFFIDOMSnapshotU giveNewParentOrReconstruct - :: DOMInterpret FreeEFunctionOfFFIDOMSnapshotU + :: DOMInterpret EffectfulPayload + -> EffectfulExecutor -> (Int -> Maybe Int) -> RunOnJust - -> Core.GiveNewParent FreeEFunctionOfFFIDOMSnapshotU - -> FreeEFunctionOfFFIDOMSnapshotU -giveNewParentOrReconstruct di just roj gnp = join $ liftF - $ EFunctionOfFFIDOMSnapshot - $ pure \ffi -> do - let - hasIdAndInScope = do - pure $ liftF $ EFunctionOfFFIDOMSnapshot $ pure $ - giveNewParent_ just roj gnp - needsFreshNut = - do - let - { dynFamily - , ez - , parent - , pos - , raiseId - , scope - } = gnp - let - ( ee - :: EFunctionOfFFIDOMSnapshot - (Free EFunctionOfFFIDOMSnapshot Unit) - ) = EFunctionOfFFIDOMSnapshot $ map (\a _ -> pure a) $ - __internalDekuFlatten - { dynFamily - , ez - , parent: Just parent - , pos - , raiseId - , scope - } - di - gnp.ctor - pure (wrap ee) - hasId <- stateHasKey gnp.id ffi - if hasId then do - scope <- getScope gnp.id ffi - case scope, gnp.scope of - Global, _ -> hasIdAndInScope - Local x, Local y -> - if includes x y then hasIdAndInScope else needsFreshNut - _, _ -> needsFreshNut - else needsFreshNut + -> Core.GiveNewParent EffectfulPayload + -> EffectfulPayload +giveNewParentOrReconstruct + di@ + ( DOMInterpret + { associateWithUnsubscribe + } + ) + executor + just + roj + gnp + ffi = do + let + hasIdAndInScope = giveNewParent_ just roj gnp ffi + needsFreshNut = + do + let + { dynFamily + , ez + , parent + , pos + , raiseId + , scope + } = gnp + myId <- liftST $ Ref.new Nothing + let + newRaiseId = raiseId *> void <<< liftST <<< flip Ref.write myId <<< + Just + let + ohBehave = __internalDekuFlatten + gnp.ctor + { dynFamily + , ez + , deferralPath: gnp.deferralPath + , parent: Just parent + , pos + , raiseId: newRaiseId + , scope + } + di + pump <- liftST create + unsubscribe <- liftST $ subscribe + (sample ohBehave pump.event) + executor + pump.push identity + fetchedId <- liftST $ Ref.read myId + for_ fetchedId $ executor <<< associateWithUnsubscribe <<< + { unsubscribe, id: _ } + hasId <- stateHasKey gnp.id ffi + if hasId then do + scope <- getScope gnp.id ffi + case scope, gnp.scope of + Global, _ -> hasIdAndInScope + Local x, Local y -> do + -- the free thing won't work + -- that's fine, though + -- we can issue `associateWithUnsubscribe` + -- add an `unsubscribe` field in the ffi + -- and then thunk this on delete from cache + if includes x y then hasIdAndInScope else needsFreshNut + _, _ -> needsFreshNut + else needsFreshNut __internalDekuFlatten :: forall payload - . PSR (pos :: Maybe Int, dynFamily :: Maybe String, ez :: Boolean) - -> DOMInterpret payload - -> NutF payload - -> Event payload -__internalDekuFlatten a b c = BC.flatten - { doLogic: \pos (DOMInterpret { sendToPos: sendToPos' }) id -> sendToPos' - { id, pos } - , ids: unwrap >>> _.ids - , disconnectElement: - \(DOMInterpret { disconnectElement }) { id, scope, parent } -> - disconnectElement { id, scope, parent, scopeEq: eq } - , toElt: \(Node e) -> Element e - } + . NutF payload + -> Node' payload +__internalDekuFlatten c a b = BC.flatten flattenArgs + ((coerce :: NutF payload -> Nut' payload) c) a b - ((coerce :: NutF payload -> Nut' payload) c) foreign import disconnectElement_ :: Core.DisconnectElement -> FunctionOfFFIDOMSnapshotU +foreign import associateWithUnsubscribe_ + :: Core.AssociateWithUnsubscribe -> FunctionOfFFIDOMSnapshotU + foreign import setHydrating :: FunctionOfFFIDOMSnapshotU foreign import unSetHydrating :: FunctionOfFFIDOMSnapshotU @@ -214,46 +223,38 @@ foreign import getScope :: String -> FFIDOMSnapshot -> Effect Scope fullDOMInterpret :: Ref.STRef Region.Global Int - -> Core.DOMInterpret FreeEFunctionOfFFIDOMSnapshotU -fullDOMInterpret seed = + -> Ref.STRef Global (Map.Map (List.List Int) (Array EffectfulPayload)) + -> EffectfulExecutor + -> Core.DOMInterpret EffectfulPayload +fullDOMInterpret seed deferredCache executor = let l = Core.DOMInterpret { ids: do s <- Ref.read seed - let - o = show - (evalGen (arbitrary :: Gen Int) { newSeed: mkSeed s, size: 5 }) void $ Ref.modify (add 1) seed - pure o - , makeElement: liftF <<< EFunctionOfFFIDOMSnapshot <<< pure <<< - makeElement_ - runOnJust - false - , makeDynBeacon: liftF <<< EFunctionOfFFIDOMSnapshot <<< pure <<< - makeDynBeacon_ runOnJust false - , attributeParent: liftF <<< EFunctionOfFFIDOMSnapshot <<< pure <<< - attributeParent_ runOnJust - , makeRoot: liftF <<< EFunctionOfFFIDOMSnapshot <<< pure <<< makeRoot_ - , makeText: liftF <<< EFunctionOfFFIDOMSnapshot <<< pure <<< makeText_ - runOnJust - false - (maybe unit) - , makePursx: liftF <<< EFunctionOfFFIDOMSnapshot <<< pure <<< makePursx_ - runOnJust - false - (maybe unit) - , setProp: liftF <<< EFunctionOfFFIDOMSnapshot <<< pure <<< setProp_ false - , setCb: liftF <<< EFunctionOfFFIDOMSnapshot <<< pure <<< setCb_ false - , unsetAttribute: liftF <<< EFunctionOfFFIDOMSnapshot <<< pure <<< - unsetAttribute_ false - , setText: liftF <<< EFunctionOfFFIDOMSnapshot <<< pure <<< setText_ - , sendToPos: liftF <<< EFunctionOfFFIDOMSnapshot <<< pure <<< sendToPos - , removeDynBeacon: liftF <<< EFunctionOfFFIDOMSnapshot <<< pure <<< + pure s + , associateWithUnsubscribe: associateWithUnsubscribe_ + , deferPayload: deferPayloadE deferredCache + , forcePayload: forcePayloadE deferredCache executor + , makeElement: makeElement_ runOnJust false + , makeDynBeacon: makeDynBeacon_ runOnJust false + , attributeParent: attributeParent_ runOnJust + , makeRoot: makeRoot_ + , makeText: makeText_ runOnJust false (maybe unit) + , makePursx: makePursx_ runOnJust false (maybe unit) + , setProp: setProp_ false + , setCb: setCb_ false + , unsetAttribute: unsetAttribute_ false + , setText: setText_ + , sendToPos: sendToPos + , removeDynBeacon: removeDynBeacon_ - , deleteFromCache: liftF <<< EFunctionOfFFIDOMSnapshot <<< pure <<< + , deleteFromCache: deleteFromCache_ - , giveNewParent: \gnp -> giveNewParentOrReconstruct l Just runOnJust gnp - , disconnectElement: liftF <<< EFunctionOfFFIDOMSnapshot <<< pure <<< + , giveNewParent: \gnp -> giveNewParentOrReconstruct l executor Just + runOnJust + gnp + , disconnectElement: disconnectElement_ } in @@ -272,10 +273,7 @@ data RenderableInstruction data EliminatableInstruction = SendToPos Core.SendToPos | MakeRoot Core.MakeRoot - | GiveNewParent - ( Core.GiveNewParent - (Ref.STRef Global (Array Instruction) -> ST Global Unit) - ) + | GiveNewParent (Core.GiveNewParent STPayload) | DisconnectElement Core.DisconnectElement | RemoveDynBeacon Core.RemoveDynBeacon | DeleteFromCache Core.DeleteFromCache @@ -336,9 +334,7 @@ ssrSetText a i = void $ Ref.modify (_ <> [ RenderableInstruction $ SetText a ]) ssrGiveNewParent :: forall r - . ( Core.GiveNewParent - (Ref.STRef Global (Array Instruction) -> ST Global Unit) - ) + . Core.GiveNewParent STPayload -> Ref.STRef r (Array Instruction) -> ST r Unit ssrGiveNewParent a i = void $ Ref.modify @@ -384,17 +380,77 @@ ssrDisconnectElement a i = void $ Ref.modify (_ <> [ EliminatableInstruction $ DisconnectElement a ]) i +deferPayloadE + :: forall i o + . Functor o + => MonadST Global o + => Ref.STRef Global + (Map.Map (List.List Int) (Array (i -> o Unit))) + -> List.List Int + -> (i -> o Unit) + -> i + -> o Unit +deferPayloadE deferredCache l p _ = do + void $ liftST $ Ref.modify + ( flip Map.alter l case _ of + Nothing -> Just [ p ] + Just x -> Just (x <> [ p ]) + ) + deferredCache + +forcePayloadE + :: forall i o + . Functor o + => MonadST Global o + => Ref.STRef Global + (Map.Map (List.List Int) (Array (i -> o Unit))) + -> ((i -> o Unit) -> o Unit) + -> List.List Int + -> i + -> o Unit +forcePayloadE deferredCache executor l = fn + where + fn _ = do + o <- liftST $ Ref.read deferredCache + let + tail = case _ of + n : List.Nil -> (n + 1) : List.Nil + a : b -> a : tail b + x -> x + leftBound = Just l + rightBound = Just $ tail l + { newMap, instructions } = flip (Map.foldSubmap leftBound rightBound) o + \k v -> + { newMap: Endo (Map.delete k) + , instructions: Endo $ Array.cons v + } + void $ liftST $ Ref.modify (unwrap newMap) + deferredCache + for_ (join $ unwrap instructions []) executor + +type FunctionOfArrayInstructionsU = + Ref.STRef Global (Array Instruction) -> ST Global Unit + +type STPayload = FunctionOfArrayInstructionsU + +type EffectfulPayload = FunctionOfFFIDOMSnapshotU + +type EffectfulExecutor = EffectfulPayload -> Effect Unit +type STExecutor = STPayload -> ST Global Unit + ssrDOMInterpret :: Ref.STRef Global Int - -> Core.DOMInterpret (Ref.STRef Global (Array Instruction) -> ST Global Unit) -ssrDOMInterpret seed = Core.DOMInterpret + -> Ref.STRef Global (Map.Map (List.List Int) (Array STPayload)) + -> STExecutor + -> Core.DOMInterpret STPayload +ssrDOMInterpret seed deferredCache executor = Core.DOMInterpret { ids: do s <- Ref.read seed - let - o = show - (evalGen (arbitrary :: Gen Int) { newSeed: mkSeed s, size: 5 }) void $ Ref.modify (add 1) seed - pure o + pure s + , associateWithUnsubscribe: \_ _ -> pure unit + , deferPayload: deferPayloadE deferredCache + , forcePayload: forcePayloadE deferredCache executor , makeElement: ssrMakeElement , attributeParent: \_ _ -> pure unit , makeRoot: ssrMakeRoot @@ -423,56 +479,49 @@ sendToPos a = \state -> do , parent , dynFamily , id: a.id + , deferralPath: List.Nil , pos: Just a.pos , ez: false , raiseId: mempty -- change me! - , ctor: NutF (Bolson.envy empty) + , ctor: (\(Nut x) -> x) mempty } coerce (giveNewParent_ Just runOnJust newA) state hydratingDOMInterpret :: Ref.STRef Region.Global Int - -> Core.DOMInterpret FreeEFunctionOfFFIDOMSnapshotU -hydratingDOMInterpret seed = + -> Ref.STRef Global (Map.Map (List.List Int) (Array EffectfulPayload)) + -> EffectfulExecutor + -> Core.DOMInterpret EffectfulPayload +hydratingDOMInterpret seed deferredCache executor = let l = Core.DOMInterpret { ids: do s <- Ref.read seed - let - o = show - (evalGen (arbitrary :: Gen Int) { newSeed: mkSeed s, size: 5 }) void $ Ref.modify (add 1) seed - pure o - , makeElement: liftF <<< EFunctionOfFFIDOMSnapshot <<< pure <<< - makeElement_ - runOnJust - true - , makeDynBeacon: liftF <<< EFunctionOfFFIDOMSnapshot <<< pure <<< - makeDynBeacon_ runOnJust true - , attributeParent: liftF <<< EFunctionOfFFIDOMSnapshot <<< pure <<< - attributeParent_ runOnJust - , makeRoot: liftF <<< EFunctionOfFFIDOMSnapshot <<< pure <<< makeRoot_ - , makeText: liftF <<< EFunctionOfFFIDOMSnapshot <<< pure <<< makeText_ - runOnJust - true - (maybe unit) - , makePursx: liftF <<< EFunctionOfFFIDOMSnapshot <<< pure <<< makePursx_ - runOnJust - true - (maybe unit) - , setProp: liftF <<< EFunctionOfFFIDOMSnapshot <<< pure <<< setProp_ true - , setCb: liftF <<< EFunctionOfFFIDOMSnapshot <<< pure <<< setCb_ true - , unsetAttribute: liftF <<< EFunctionOfFFIDOMSnapshot <<< pure <<< - unsetAttribute_ true - , setText: liftF <<< EFunctionOfFFIDOMSnapshot <<< pure <<< setText_ - , sendToPos: liftF <<< EFunctionOfFFIDOMSnapshot <<< pure <<< sendToPos - , deleteFromCache: liftF <<< EFunctionOfFFIDOMSnapshot <<< pure <<< + pure s + , associateWithUnsubscribe: associateWithUnsubscribe_ + , deferPayload: deferPayloadE deferredCache + , forcePayload: forcePayloadE deferredCache executor + , makeElement: makeElement_ runOnJust true + , makeDynBeacon: makeDynBeacon_ runOnJust true + , attributeParent: attributeParent_ runOnJust + , makeRoot: makeRoot_ + , makeText: makeText_ runOnJust true (maybe unit) + , makePursx: makePursx_ runOnJust true (maybe unit) + , setProp: setProp_ true + , setCb: setCb_ true + , unsetAttribute: unsetAttribute_ true + , setText: setText_ + , sendToPos: sendToPos + , deleteFromCache: deleteFromCache_ - , removeDynBeacon: liftF <<< EFunctionOfFFIDOMSnapshot <<< pure <<< + , removeDynBeacon: removeDynBeacon_ - , giveNewParent: \gnp -> giveNewParentOrReconstruct l Just runOnJust gnp - , disconnectElement: liftF <<< EFunctionOfFFIDOMSnapshot <<< pure <<< + , giveNewParent: \gnp -> giveNewParentOrReconstruct l executor Just + runOnJust + gnp + , disconnectElement: disconnectElement_ } in diff --git a/deku-core/src/Deku/Lifecycle.purs b/deku-core/src/Deku/Lifecycle.purs deleted file mode 100644 index 3a7efc57..00000000 --- a/deku-core/src/Deku/Lifecycle.purs +++ /dev/null @@ -1,40 +0,0 @@ --- | This module allows you to execute arbitrary side effects when a Deku Nut mounts and unmounts. --- | As a rule, you should avoid using these and try to build your effect system so that it is purely a response --- | to listeners, timeouts, loops and top-level events. However, sometimes, this is unergonomic or impossible, --- | in which case these functions can be helpful. -module Deku.Lifecycle where - -import Prelude - -import Deku.Core (Nut, envy) -import Effect (Effect) -import FRP.Event (makeEvent) - --- | Run effect `e` before nut `d` is added to the DOM. -onWillMount - :: Effect Unit - -> Nut - -> Nut -onWillMount e d = envy $ makeEvent \k -> do - e - k d - pure (pure unit) - --- | Run effect `e` after nut `d` is added to the DOM. -onDidMount - :: Effect Unit - -> Nut - -> Nut -onDidMount e d = envy $ makeEvent \k -> do - k d - e - pure (pure unit) - --- | Run effect `e` when nut `d` is removed from the DOM. -onDismount - :: Effect Unit - -> Nut - -> Nut -onDismount e d = envy $ makeEvent \k -> do - k d - pure e \ No newline at end of file diff --git a/deku-core/src/Deku/Pursx/Unsafe.purs b/deku-core/src/Deku/Pursx/Unsafe.purs index a59f3c2d..1702828e 100644 --- a/deku-core/src/Deku/Pursx/Unsafe.purs +++ b/deku-core/src/Deku/Pursx/Unsafe.purs @@ -3,23 +3,21 @@ module Deku.Pursx.Unsafe where import Prelude import Bolson.Control as Bolson -import Bolson.Core (Element(..), Entity(..), PSR) -import Control.Alt ((<|>)) -import Control.Monad.ST.Uncurried (mkSTFn2, runSTFn1, runSTFn2) +import Bolson.Core (Element(..), Entity(..)) import Control.Plus (empty) -import Data.Maybe (Maybe(..), maybe) -import Data.Newtype (unwrap) -import Data.Profunctor (lcmap) +import Data.Maybe (Maybe(..)) import Data.Reflectable (class Reflectable, reflectType) import Data.Symbol (class IsSymbol) -import Deku.Attribute (Attribute, AttributeValue(..), unsafeUnAttribute) -import Deku.Core (DOMInterpret(..), Nut(..), Nut', NutF(..), Node(..)) -import FRP.Event (Event, Subscriber(..), merge, makeLemmingEventO) +import Data.Traversable (for_) +import Deku.Attribute (Attribute, unsafeUnAttribute) +import Deku.Control (unsafeSetAttribute) +import Deku.Core (DOMInterpret(..), Node(..), Node', Nut(..), NutF(..), flattenArgs) +import FRP.Event (merge) +import FRP.Poll (Poll, poll, sample) import Foreign.Object as Object import Prim.Row as Row import Prim.RowList as RL import Record (get) -import Safe.Coerce (coerce) import Type.Proxy (Proxy(..)) class @@ -36,7 +34,7 @@ domableToNode (Nut df) = step1 df where step1 :: forall payload. NutF payload -> Node payload step1 (NutF (Element' n)) = n - step1 _ = Node \_ _ -> empty + step1 _ = Node $ Element \_ _ -> poll \_ -> empty instance pursxToElementConsInsert :: ( Row.Cons key (Nut) r' r @@ -54,18 +52,32 @@ instance pursxToElementConsInsert :: { cache: Object.insert (reflectType pxk) false cache , element: Nut ( NutF - ( Element' $ Node \info di -> - __internalDekuFlatten - { parent: Just (reflectType pxk <> "@!%" <> pxScope) - , scope: info.scope - , raiseId: \_ -> pure unit - , pos: info.pos - , ez: false - , dynFamily: Nothing - } - di - ((\(Nut df) -> df) (get pxk r)) - <|> (let Node y = (domableToNode element) in y) info di + ( Element' $ Node $ Element + \info di@(DOMInterpret { deferPayload, deleteFromCache }) -> + Bolson.behaving + \ee kx subscribe -> do + let Node (Element rest) = domableToNode element + let evt1 = sample (rest info di) ee + let + evt0 = sample + ( __internalDekuFlatten + ((\(Nut df) -> df) (get pxk r)) + { parent: Just + (reflectType pxk <> "@!%" <> pxScope) + , scope: info.scope + , raiseId: \_ -> pure unit + , pos: info.pos + , ez: false + , deferralPath: info.deferralPath + , dynFamily: Nothing + } + di + ) + ee + kx $ deferPayload info.deferralPath $ deleteFromCache + { id: reflectType pxk <> "@!%" <> pxScope } + + subscribe (merge [ evt0, evt1 ]) ) ) } @@ -73,54 +85,41 @@ instance pursxToElementConsInsert :: pxk = Proxy :: _ key else instance pursxToElementConsAttr :: - ( Row.Cons key (Event (Attribute deku)) r' r + ( Row.Cons key (Poll (Attribute deku)) r' r , PursxToElement rest r , Reflectable key String , IsSymbol key ) => PursxToElement - (RL.Cons key (Event (Attribute deku)) rest) + (RL.Cons key (Poll (Attribute deku)) rest) r where - pursxToElement pxScope _ r = + pursxToElement pxScope _ r = do let { cache, element } = pursxToElement pxScope (Proxy :: Proxy rest) r - in - { cache: Object.insert (reflectType pxk) true cache - , element: Nut - ( NutF - ( Element' - ( Node - \parent - di@(DOMInterpret { setProp, setCb, unsetAttribute }) -> - map - ( lcmap unsafeUnAttribute - ( \{ key, value } -> case value of - Prop' p -> setProp - { id: - ((reflectType pxk) <> "@!%" <> pxScope) - , key - , value: p - } - Cb' c -> setCb - { id: - ((reflectType pxk) <> "@!%" <> pxScope) - , key - , value: c - } - Unset' -> unsetAttribute - { id: - ((reflectType pxk) <> "@!%" <> pxScope) - , key - } - ) - ) - (get pxk r) - <|> (let Node y = (domableToNode element) in y) parent - di - ) - ) - ) - } + Node (Element rest) = domableToNode element + + elt :: forall payload. Node' payload + elt parent di@(DOMInterpret { deferPayload, deleteFromCache }) = + Bolson.behaving \ee kx subscribe -> do + let bhv = rest parent di + let myId = reflectType pxk <> "@!%" <> pxScope + subscribe $ sample (map unsafeUnAttribute (get pxk r)) + ( ( \fff xx -> fff $ unsafeSetAttribute di + myId + xx + ) <$> ee + ) + -- this may result in double deletion requests if + -- we attach multiple attributes to a single element + -- in the cache, but that's ok + -- the important thing is that, when it's cleaned up, + -- it's out of the cache + kx $ deferPayload parent.deferralPath $ deleteFromCache + { id: myId } + subscribe (sample bhv ee) + { cache: Object.insert (reflectType pxk) true cache + , element: Nut (NutF (Element' (Node (Element elt)))) + } where pxk = Proxy :: _ key @@ -128,7 +127,9 @@ instance pursxToElementNil :: PursxToElement RL.Nil r where pursxToElement _ _ _ = { cache: Object.empty - , element: Nut (NutF $ Element' $ Node \_ _ -> empty) + , element: Nut + ( NutF $ Element' $ Node $ Element \_ _ -> poll \_ -> empty + ) } unsafeMakePursx @@ -151,68 +152,49 @@ unsafeMakePursx' unsafeMakePursx' verb html r = Nut ee where ee :: forall payload. NutF payload - ee = NutF (Element' (Node go)) + ee = NutF (Element' (Node (Element go))) + go :: forall payload. Node' payload go - :: forall payload - . PSR (pos :: Maybe Int, ez :: Boolean, dynFamily :: Maybe String) - -> DOMInterpret payload - -> Event payload - go - z@{ parent, scope, raiseId, dynFamily, pos } - di@(DOMInterpret { makePursx: mpx, ids, deleteFromCache, attributeParent }) = - makeLemmingEventO $ mkSTFn2 \(Subscriber mySub) k1 -> do - me <- ids - pxScope <- ids + z@{ parent, scope, raiseId, dynFamily, pos, deferralPath } + di@ + ( DOMInterpret + { makePursx: mpx + , deferPayload + , ids + , deleteFromCache + , attributeParent + } + ) = + Bolson.behaving \eee kx subscribe -> do + me <- show <$> ids + pxScope <- show <$> ids raiseId me let { cache, element: element' } = pursxToElement pxScope (Proxy :: _ rl) r - let Node element = domableToNode element' - unsub <- runSTFn2 mySub - ( merge - [ pure $ - mpx - { id: me - , parent - , cache - , dynFamily - , pos - , pxScope: pxScope - , scope - , html - , verb - } - , element z di - , maybe empty - ( \p -> - pure $ attributeParent - { id: me, parent: p, pos, dynFamily, ez: false } - ) - parent - ] - ) - k1 - pure do - runSTFn1 k1 (deleteFromCache { id: me }) - unsub + let Node (Element element) = domableToNode element' + let bhv = element z di + kx $ mpx + { id: me + , parent + , cache + , dynFamily + , pos + , pxScope: pxScope + , scope + , html + , verb + } + for_ parent \p -> kx $ attributeParent + { id: me, parent: p, pos, dynFamily, ez: false } + kx (deferPayload deferralPath (deleteFromCache { id: me })) + subscribe (sample bhv eee) __internalDekuFlatten :: forall payload - . PSR (pos :: Maybe Int, dynFamily :: Maybe String, ez :: Boolean) - -> DOMInterpret payload - -> NutF payload - -> Event payload -__internalDekuFlatten a b c = Bolson.flatten - { doLogic: \pos (DOMInterpret { sendToPos }) id -> sendToPos { id, pos } - , ids: unwrap >>> _.ids - , disconnectElement: - \(DOMInterpret { disconnectElement }) { id, scope, parent } -> - disconnectElement { id, scope, parent, scopeEq: eq } - , toElt: \(Node e) -> Element e - } - a - b - ((coerce :: NutF payload -> Nut' payload) c) \ No newline at end of file + . NutF payload + -> Node' payload +__internalDekuFlatten (NutF c) a b = Bolson.flatten flattenArgs c a b diff --git a/deku-core/src/Deku/Toplevel.purs b/deku-core/src/Deku/Toplevel.purs index f1c6deba..da196e24 100644 --- a/deku-core/src/Deku/Toplevel.purs +++ b/deku-core/src/Deku/Toplevel.purs @@ -9,23 +9,24 @@ module Deku.Toplevel where import Prelude -import Bolson.Control as Bolson -import Bolson.Core (Element(..), PSR, Scope(..)) -import Control.Alt ((<|>)) -import Control.Monad.Free (resume) +import Bolson.Control as BControl +import Bolson.Core (Scope(..)) import Control.Monad.ST (ST) import Control.Monad.ST.Class (liftST) import Control.Monad.ST.Global (Global) import Control.Monad.ST.Internal as RRef -import Data.Either (Either(..)) +import Data.Foldable (for_, traverse_) +import Data.Map as Map import Data.Maybe (Maybe(..), maybe) import Data.Newtype (unwrap) import Deku.Control (deku) -import Deku.Core (DOMInterpret(..), Nut(..), Nut', NutF(..), Node(..)) -import Deku.Interpret (EFunctionOfFFIDOMSnapshot(..), FFIDOMSnapshot, FreeEFunctionOfFFIDOMSnapshotU, FunctionOfFFIDOMSnapshotU, fullDOMInterpret, getAllComments, hydratingDOMInterpret, makeFFIDOMSnapshot, setHydrating, ssrDOMInterpret, unSetHydrating) +import Deku.Core (Node', Nut(..), NutF(..), flattenArgs) +import Deku.Interpret (FFIDOMSnapshot, fullDOMInterpret, getAllComments, hydratingDOMInterpret, makeFFIDOMSnapshot, setHydrating, ssrDOMInterpret, unSetHydrating) import Deku.SSR (ssr') import Effect (Effect) -import FRP.Event (Event, keepLatest, makeEvent, subscribe, subscribePure) +import Effect.Exception (error, throwException) +import FRP.Poll (sample_) +import FRP.Event (create, createPure, subscribe, subscribePure) import Safe.Coerce (coerce) import Unsafe.Coerce (unsafeCoerce) import Web.DOM.Element as DOM @@ -35,47 +36,38 @@ import Web.HTML.HTMLDocument (body) import Web.HTML.HTMLElement (toElement) import Web.HTML.Window (document) -flattenToSingleEvent - :: FFIDOMSnapshot - -> Event FreeEFunctionOfFFIDOMSnapshotU - -> Event FunctionOfFFIDOMSnapshotU -flattenToSingleEvent ffi = go' 0 - where - go' n = keepLatest <<< map (go n) - - go :: Int -> FreeEFunctionOfFFIDOMSnapshotU -> Event FunctionOfFFIDOMSnapshotU - go n = resume >>> case _ of - Left (EFunctionOfFFIDOMSnapshot l) -> keepLatest (map (f n) l) - Right _ -> mempty - - f - :: Int - -> (FFIDOMSnapshot -> Effect FreeEFunctionOfFFIDOMSnapshotU) - -> Event FunctionOfFFIDOMSnapshotU - f n i = go' (n + 1) $ makeEvent \k -> do - pure unit - i ffi >>= k - pure (pure unit) - -- | Runs a deku application in a DOM element, returning a canceler that can -- | be used to cancel the application. runInElement' :: Web.DOM.Element -> Nut - -> Effect (Effect Unit) + -> Effect (Effect FFIDOMSnapshot) runInElement' elt eee = do ffi <- makeFFIDOMSnapshot - evt <- liftST (RRef.new 0) <#> (deku elt eee <<< fullDOMInterpret) - subscribe (flattenToSingleEvent ffi evt) \i -> i ffi + seed <- liftST $ RRef.new 0 + cache <- liftST $ RRef.new Map.empty + let + executor f = f ffi + bhv = deku elt eee (fullDOMInterpret seed cache executor) + bang <- liftST $ create + u <- liftST $ subscribe (sample_ bhv bang.event) executor + bang.push unit + pure do + o <- liftST $ RRef.read cache + for_ o (traverse_ executor) + liftST u + pure ffi -- | Runs a deku application in the body of a document, returning a canceler that can -- | be used to cancel the application. runInBody' :: Nut - -> Effect (Effect Unit) + -> Effect (Effect FFIDOMSnapshot) runInBody' eee = do b' <- window >>= document >>= body - maybe mempty (\elt -> runInElement' elt eee) (toElement <$> b') + maybe (throwException (error "Could not find element")) + (flip runInElement' eee) + (toElement <$> b') -- | Runs a deku application in the body of a document runInBody @@ -89,31 +81,43 @@ foreign import dekuRoot :: Effect DOM.Element -- | Hydrates an application created using `runSSR`, returning a canceler that can -- | be used to end the application. -hydrate' :: Nut -> Effect (Effect Unit) +hydrate' :: Nut -> Effect (Effect FFIDOMSnapshot) hydrate' children = do ffi <- makeFFIDOMSnapshot getAllComments ffi - di <- liftST (RRef.new 0) <#> hydratingDOMInterpret + seed <- liftST $ RRef.new 0 + cache <- liftST $ RRef.new Map.empty + let + executor f = f ffi + di = hydratingDOMInterpret seed cache executor (coerce setHydrating :: _ -> _ Unit) ffi let me = "deku-root" root <- dekuRoot - u <- subscribe - ( flattenToSingleEvent ffi - ( pure ((unwrap di).makeRoot { id: me, root }) <|> __internalDekuFlatten - { parent: Just "deku-root" - , scope: Local "rootScope" - , raiseId: \_ -> pure unit - , ez: true - , pos: Nothing - , dynFamily: Nothing - } - di - (unsafeCoerce children) - ) - ) - \i -> i ffi + headRedecorator <- liftST $ (unwrap di).ids + let + bhv = __internalDekuFlatten + (unsafeCoerce children) + { parent: Just "deku-root" + , scope: Local "rootScope" + , deferralPath: pure headRedecorator + , raiseId: \_ -> pure unit + , ez: true + , pos: Nothing + , dynFamily: Nothing + } + di + (unwrap di).makeRoot { id: me, root } ffi + bang <- liftST $ create + u <- liftST $ subscribe (sample_ bhv bang.event) executor + bang.push unit (coerce unSetHydrating :: _ -> _ Unit) ffi - pure u + pure do + o <- liftST $ RRef.read cache + for_ o (traverse_ executor) + (unwrap di).forcePayload (pure headRedecorator) ffi + (unwrap di).deleteFromCache { id: me } ffi + liftST $ u + pure ffi -- | Hydrates an application created using `runSSR`. hydrate :: Nut -> Effect Unit @@ -121,9 +125,8 @@ hydrate a = void (hydrate' a) -- | Creates a static site from a deku application. The top-level element for this site is `body`. runSSR - :: forall r - . Nut - -> ST r String + :: Nut + -> ST Global String runSSR = runSSR' "body" @@ -131,54 +134,41 @@ runSSR = runSSR' "body" -- | passed to this function as a first argument. runSSR' :: String - -> (forall r. Nut -> ST r String) + -> Nut + -> ST Global String runSSR' topTag = go where go - :: forall r. Nut -> ST r String - go (Nut children) = do + :: Nut -> ST Global String + go (Nut children) = ssr' topTag <$> do + seed <- RRef.new 0 + instr <- RRef.new [] + cache <- liftST $ RRef.new Map.empty + let di = ssrDOMInterpret seed cache mempty + -- we thunk to create the head redecorator + headRedecorator <- liftST $ (unwrap di).ids let - unglobal = unsafeCoerce :: ST Global String -> ST r String - - unglobal - ( ssr' topTag - <$> - ( do - seed <- RRef.new 0 - instr <- RRef.new [] - let di = ssrDOMInterpret seed - void $ subscribePure - ( ( __internalDekuFlatten - { parent: Just "deku-root" - , scope: Local "rootScope" - , raiseId: \_ -> pure unit - , ez: true - , pos: Nothing - , dynFamily: Nothing - } - di - children - ) - ) - \i -> i instr - RRef.read instr - ) - ) + bhv = __internalDekuFlatten + children + { parent: Just "deku-root" + , scope: Local "rootScope" + , raiseId: \_ -> pure unit + , deferralPath: pure headRedecorator + , ez: true + , pos: Nothing + , dynFamily: Nothing + } + di + bang <- createPure + _ <- subscribePure (sample_ bhv bang.event) (\f -> f instr) + bang.push unit + RRef.read instr __internalDekuFlatten :: forall payload - . PSR (pos :: Maybe Int, dynFamily :: Maybe String, ez :: Boolean) - -> DOMInterpret payload - -> NutF payload - -> Event payload -__internalDekuFlatten a b c = Bolson.flatten - { doLogic: \pos (DOMInterpret { sendToPos }) id -> sendToPos { id, pos } - , ids: unwrap >>> _.ids - , disconnectElement: - \(DOMInterpret { disconnectElement }) { id, scope, parent } -> - disconnectElement { id, scope, parent, scopeEq: eq } - , toElt: \(Node e) -> Element e - } - a + . NutF payload + -> Node' payload +__internalDekuFlatten a b c = BControl.flatten flattenArgs + ((\(NutF x) -> x) a) b - ((coerce :: NutF payload -> Nut' payload) c) \ No newline at end of file + c diff --git a/deku-dom/src/Deku/DOM.purs b/deku-dom/src/Deku/DOM.purs index c85d922d..1737dfab 100644 --- a/deku-dom/src/Deku/DOM.purs +++ b/deku-dom/src/Deku/DOM.purs @@ -7,286 +7,427 @@ module Deku.DOM , class TagToDeku , html , html_ + , html__ , head , head_ + , head__ , title , title_ + , title__ , base , base_ + , base__ , link , link_ + , link__ , meta , meta_ + , meta__ , style , style_ + , style__ , body , body_ + , body__ , article , article_ + , article__ , section , section_ + , section__ , nav , nav_ + , nav__ , aside , aside_ + , aside__ , h1 , h1_ + , h1__ , h2 , h2_ + , h2__ , h3 , h3_ + , h3__ , h4 , h4_ + , h4__ , h5 , h5_ + , h5__ , h6 , h6_ + , h6__ , hgroup , hgroup_ + , hgroup__ , header , header_ + , header__ , footer , footer_ + , footer__ , address , address_ + , address__ , p , p_ + , p__ , hr , hr_ + , hr__ , pre , pre_ + , pre__ , blockquote , blockquote_ + , blockquote__ , ol , ol_ + , ol__ , ul , ul_ + , ul__ , menu , menu_ + , menu__ , li , li_ + , li__ , dl , dl_ + , dl__ , dt , dt_ + , dt__ , dd , dd_ + , dd__ , figure , figure_ + , figure__ , figcaption , figcaption_ + , figcaption__ , main , main_ + , main__ , search , search_ + , search__ , div , div_ + , div__ , a , a_ + , a__ , em , em_ + , em__ , strong , strong_ + , strong__ , small , small_ + , small__ , s , s_ + , s__ , cite , cite_ + , cite__ , q , q_ + , q__ , dfn , dfn_ + , dfn__ , abbr , abbr_ + , abbr__ , ruby , ruby_ + , ruby__ , rt , rt_ + , rt__ , rp , rp_ + , rp__ , xdata , xdata_ + , xdata__ , time , time_ + , time__ , code , code_ + , code__ , var , var_ + , var__ , samp , samp_ + , samp__ , kbd , kbd_ + , kbd__ , sub , sub_ + , sub__ , sup , sup_ + , sup__ , i , i_ + , i__ , b , b_ + , b__ , u , u_ + , u__ , mark , mark_ + , mark__ , bdi , bdi_ + , bdi__ , bdo , bdo_ + , bdo__ , span , span_ + , span__ , br , br_ + , br__ , wbr , wbr_ + , wbr__ , ins , ins_ + , ins__ , del , del_ + , del__ , picture , picture_ + , picture__ , source , source_ + , source__ , img , img_ + , img__ , iframe , iframe_ + , iframe__ , embed , embed_ + , embed__ , object , object_ + , object__ , video , video_ + , video__ , audio , audio_ + , audio__ , track , track_ + , track__ , map , map_ + , map__ , area , area_ + , area__ , table , table_ + , table__ , caption , caption_ + , caption__ , colgroup , colgroup_ + , colgroup__ , col , col_ + , col__ , tbody , tbody_ + , tbody__ , thead , thead_ + , thead__ , tfoot , tfoot_ + , tfoot__ , tr , tr_ + , tr__ , td , td_ + , td__ , th , th_ + , th__ , form , form_ + , form__ , label , label_ + , label__ , input , input_ + , input__ , button , button_ + , button__ , select , select_ + , select__ , datalist , datalist_ + , datalist__ , optgroup , optgroup_ + , optgroup__ , option , option_ + , option__ , textarea , textarea_ + , textarea__ , output , output_ + , output__ , progress , progress_ + , progress__ , meter , meter_ + , meter__ , fieldset , fieldset_ + , fieldset__ , legend , legend_ + , legend__ , details , details_ + , details__ , summary , summary_ + , summary__ , dialog , dialog_ + , dialog__ , script , script_ + , script__ , noscript , noscript_ + , noscript__ , template , template_ + , template__ , slot , slot_ + , slot__ , canvas , canvas_ + , canvas__ , applet , applet_ + , applet__ , acronym , acronym_ + , acronym__ , bgsound , bgsound_ + , bgsound__ , dir , dir_ + , dir__ , frame , frame_ + , frame__ , frameset , frameset_ + , frameset__ , noframes , noframes_ + , noframes__ , isindex , isindex_ + , isindex__ , keygen , keygen_ + , keygen__ , listing , listing_ + , listing__ , menuitem , menuitem_ + , menuitem__ , nextid , nextid_ + , nextid__ , noembed , noembed_ + , noembed__ , param , param_ + , param__ , plaintext , plaintext_ + , plaintext__ , rb , rb_ + , rb__ , rtc , rtc_ + , rtc__ , strike , strike_ + , strike__ , xmp , xmp_ + , xmp__ , basefont , basefont_ + , basefont__ , big , big_ + , big__ , blink , blink_ + , blink__ , center , center_ + , center__ , font , font_ + , font__ , marquee , marquee_ + , marquee__ , multicol , multicol_ + , multicol__ , nobr , nobr_ + , nobr__ , spacer , spacer_ + , spacer__ , tt , tt_ + , tt__ , ARIAMixin , HTMLElement , HTMLUnknownElement @@ -375,10 +516,11 @@ module Deku.DOM ) where import Deku.Control (text, text_) as Deku.Control -import FRP.Event as FRP.Event +import FRP.Poll as FRP.Poll import Data.Maybe (Maybe(..)) import Deku.Attribute (Attribute) as Deku.Attribute import Deku.Control (elementify2) +import Deku.Control as DC import Deku.Core (Nut) import Type.Proxy (Proxy) import Web.Event.Internal.Types as Web.Event.Internal.Types @@ -734,7 +876,6 @@ type HTMLObjectElement (r :: Row Type) = , usemap :: String , autocomplete :: String , disabled :: String - , dirname :: String , form :: String , height :: String , width :: String @@ -984,7 +1125,6 @@ type HTMLButtonElement (r :: Row Type) = , formaction :: String , action :: String , disabled :: String - , dirname :: String , name :: String , form :: String , value :: String @@ -997,7 +1137,6 @@ type HTMLSelectElement (r :: Row Type) = ( __tag :: Proxy "HTMLSelectElement" , autocomplete :: String , disabled :: String - , dirname :: String , name :: String , form :: String , required :: String @@ -1046,7 +1185,6 @@ type HTMLOutputElement (r :: Row Type) = ( __tag :: Proxy "HTMLOutputElement" , autocomplete :: String , disabled :: String - , dirname :: String , name :: String , form :: String , for :: String @@ -1071,7 +1209,6 @@ type HTMLFieldSetElement (r :: Row Type) = ( __tag :: Proxy "HTMLFieldSetElement" , autocomplete :: String , disabled :: String - , dirname :: String , name :: String , form :: String | HTMLElement r @@ -1235,679 +1372,904 @@ type Element (r :: Row Type) = instance TagToDeku "html" (HTMLHtmlElement ()) -html :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLHtmlElement ()))) -> Array Nut -> Nut +html :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLHtmlElement ()))) -> Array Nut -> Nut html = elementify2 Nothing "html" html_ :: Array Nut -> Nut html_ = html [] +html__ :: String -> Nut +html__ t = html [] [ DC.text_ t ] + instance TagToDeku "head" (HTMLHeadElement ()) -head :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLHeadElement ()))) -> Array Nut -> Nut +head :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLHeadElement ()))) -> Array Nut -> Nut head = elementify2 Nothing "head" head_ :: Array Nut -> Nut head_ = head [] +head__ :: String -> Nut +head__ t = head [] [ DC.text_ t ] + instance TagToDeku "title" (HTMLTitleElement ()) -title - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLTitleElement ()))) -> Array Nut -> Nut +title :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLTitleElement ()))) -> Array Nut -> Nut title = elementify2 Nothing "title" title_ :: Array Nut -> Nut title_ = title [] +title__ :: String -> Nut +title__ t = title [] [ DC.text_ t ] + instance TagToDeku "base" (HTMLBaseElement ()) -base :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLBaseElement ()))) -> Array Nut -> Nut +base :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLBaseElement ()))) -> Array Nut -> Nut base = elementify2 Nothing "base" base_ :: Array Nut -> Nut base_ = base [] +base__ :: String -> Nut +base__ t = base [] [ DC.text_ t ] + instance TagToDeku "link" (HTMLLinkElement ()) -link :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLLinkElement ()))) -> Array Nut -> Nut +link :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLLinkElement ()))) -> Array Nut -> Nut link = elementify2 Nothing "link" link_ :: Array Nut -> Nut link_ = link [] +link__ :: String -> Nut +link__ t = link [] [ DC.text_ t ] + instance TagToDeku "meta" (HTMLMetaElement ()) -meta :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLMetaElement ()))) -> Array Nut -> Nut +meta :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLMetaElement ()))) -> Array Nut -> Nut meta = elementify2 Nothing "meta" meta_ :: Array Nut -> Nut meta_ = meta [] +meta__ :: String -> Nut +meta__ t = meta [] [ DC.text_ t ] + instance TagToDeku "style" (HTMLStyleElement ()) -style - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLStyleElement ()))) -> Array Nut -> Nut +style :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLStyleElement ()))) -> Array Nut -> Nut style = elementify2 Nothing "style" style_ :: Array Nut -> Nut style_ = style [] +style__ :: String -> Nut +style__ t = style [] [ DC.text_ t ] + instance TagToDeku "body" (HTMLBodyElement ()) -body :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLBodyElement ()))) -> Array Nut -> Nut +body :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLBodyElement ()))) -> Array Nut -> Nut body = elementify2 Nothing "body" body_ :: Array Nut -> Nut body_ = body [] +body__ :: String -> Nut +body__ t = body [] [ DC.text_ t ] + instance TagToDeku "article" (HTMLElement ()) -article :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut +article :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut article = elementify2 Nothing "article" article_ :: Array Nut -> Nut article_ = article [] +article__ :: String -> Nut +article__ t = article [] [ DC.text_ t ] + instance TagToDeku "section" (HTMLElement ()) -section :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut +section :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut section = elementify2 Nothing "section" section_ :: Array Nut -> Nut section_ = section [] +section__ :: String -> Nut +section__ t = section [] [ DC.text_ t ] + instance TagToDeku "nav" (HTMLElement ()) -nav :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut +nav :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut nav = elementify2 Nothing "nav" nav_ :: Array Nut -> Nut nav_ = nav [] +nav__ :: String -> Nut +nav__ t = nav [] [ DC.text_ t ] + instance TagToDeku "aside" (HTMLElement ()) -aside :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut +aside :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut aside = elementify2 Nothing "aside" aside_ :: Array Nut -> Nut aside_ = aside [] +aside__ :: String -> Nut +aside__ t = aside [] [ DC.text_ t ] + instance TagToDeku "h1" (HTMLHeadingElement ()) -h1 - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLHeadingElement ()))) -> Array Nut -> Nut +h1 :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLHeadingElement ()))) -> Array Nut -> Nut h1 = elementify2 Nothing "h1" h1_ :: Array Nut -> Nut h1_ = h1 [] +h1__ :: String -> Nut +h1__ t = h1 [] [ DC.text_ t ] + instance TagToDeku "h2" (HTMLHeadingElement ()) -h2 - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLHeadingElement ()))) -> Array Nut -> Nut +h2 :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLHeadingElement ()))) -> Array Nut -> Nut h2 = elementify2 Nothing "h2" h2_ :: Array Nut -> Nut h2_ = h2 [] +h2__ :: String -> Nut +h2__ t = h2 [] [ DC.text_ t ] + instance TagToDeku "h3" (HTMLHeadingElement ()) -h3 - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLHeadingElement ()))) -> Array Nut -> Nut +h3 :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLHeadingElement ()))) -> Array Nut -> Nut h3 = elementify2 Nothing "h3" h3_ :: Array Nut -> Nut h3_ = h3 [] +h3__ :: String -> Nut +h3__ t = h3 [] [ DC.text_ t ] + instance TagToDeku "h4" (HTMLHeadingElement ()) -h4 - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLHeadingElement ()))) -> Array Nut -> Nut +h4 :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLHeadingElement ()))) -> Array Nut -> Nut h4 = elementify2 Nothing "h4" h4_ :: Array Nut -> Nut h4_ = h4 [] +h4__ :: String -> Nut +h4__ t = h4 [] [ DC.text_ t ] + instance TagToDeku "h5" (HTMLHeadingElement ()) -h5 - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLHeadingElement ()))) -> Array Nut -> Nut +h5 :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLHeadingElement ()))) -> Array Nut -> Nut h5 = elementify2 Nothing "h5" h5_ :: Array Nut -> Nut h5_ = h5 [] +h5__ :: String -> Nut +h5__ t = h5 [] [ DC.text_ t ] + instance TagToDeku "h6" (HTMLHeadingElement ()) -h6 - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLHeadingElement ()))) -> Array Nut -> Nut +h6 :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLHeadingElement ()))) -> Array Nut -> Nut h6 = elementify2 Nothing "h6" h6_ :: Array Nut -> Nut h6_ = h6 [] +h6__ :: String -> Nut +h6__ t = h6 [] [ DC.text_ t ] + instance TagToDeku "hgroup" (HTMLElement ()) -hgroup :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut +hgroup :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut hgroup = elementify2 Nothing "hgroup" hgroup_ :: Array Nut -> Nut hgroup_ = hgroup [] +hgroup__ :: String -> Nut +hgroup__ t = hgroup [] [ DC.text_ t ] + instance TagToDeku "header" (HTMLElement ()) -header :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut +header :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut header = elementify2 Nothing "header" header_ :: Array Nut -> Nut header_ = header [] +header__ :: String -> Nut +header__ t = header [] [ DC.text_ t ] + instance TagToDeku "footer" (HTMLElement ()) -footer :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut +footer :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut footer = elementify2 Nothing "footer" footer_ :: Array Nut -> Nut footer_ = footer [] +footer__ :: String -> Nut +footer__ t = footer [] [ DC.text_ t ] + instance TagToDeku "address" (HTMLElement ()) -address :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut +address :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut address = elementify2 Nothing "address" address_ :: Array Nut -> Nut address_ = address [] +address__ :: String -> Nut +address__ t = address [] [ DC.text_ t ] + instance TagToDeku "p" (HTMLParagraphElement ()) -p - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLParagraphElement ()))) - -> Array Nut - -> Nut +p :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLParagraphElement ()))) -> Array Nut -> Nut p = elementify2 Nothing "p" p_ :: Array Nut -> Nut p_ = p [] +p__ :: String -> Nut +p__ t = p [] [ DC.text_ t ] + instance TagToDeku "hr" (HTMLHRElement ()) -hr :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLHRElement ()))) -> Array Nut -> Nut +hr :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLHRElement ()))) -> Array Nut -> Nut hr = elementify2 Nothing "hr" hr_ :: Array Nut -> Nut hr_ = hr [] +hr__ :: String -> Nut +hr__ t = hr [] [ DC.text_ t ] + instance TagToDeku "pre" (HTMLPreElement ()) -pre :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLPreElement ()))) -> Array Nut -> Nut +pre :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLPreElement ()))) -> Array Nut -> Nut pre = elementify2 Nothing "pre" pre_ :: Array Nut -> Nut pre_ = pre [] +pre__ :: String -> Nut +pre__ t = pre [] [ DC.text_ t ] + instance TagToDeku "blockquote" (HTMLQuoteElement ()) blockquote - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLQuoteElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLQuoteElement ()))) -> Array Nut -> Nut blockquote = elementify2 Nothing "blockquote" blockquote_ :: Array Nut -> Nut blockquote_ = blockquote [] +blockquote__ :: String -> Nut +blockquote__ t = blockquote [] [ DC.text_ t ] + instance TagToDeku "ol" (HTMLOListElement ()) -ol :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLOListElement ()))) -> Array Nut -> Nut +ol :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLOListElement ()))) -> Array Nut -> Nut ol = elementify2 Nothing "ol" ol_ :: Array Nut -> Nut ol_ = ol [] +ol__ :: String -> Nut +ol__ t = ol [] [ DC.text_ t ] + instance TagToDeku "ul" (HTMLUListElement ()) -ul :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLUListElement ()))) -> Array Nut -> Nut +ul :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLUListElement ()))) -> Array Nut -> Nut ul = elementify2 Nothing "ul" ul_ :: Array Nut -> Nut ul_ = ul [] +ul__ :: String -> Nut +ul__ t = ul [] [ DC.text_ t ] + instance TagToDeku "menu" (HTMLMenuElement ()) -menu :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLMenuElement ()))) -> Array Nut -> Nut +menu :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLMenuElement ()))) -> Array Nut -> Nut menu = elementify2 Nothing "menu" menu_ :: Array Nut -> Nut menu_ = menu [] +menu__ :: String -> Nut +menu__ t = menu [] [ DC.text_ t ] + instance TagToDeku "li" (HTMLLIElement ()) -li :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLLIElement ()))) -> Array Nut -> Nut +li :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLLIElement ()))) -> Array Nut -> Nut li = elementify2 Nothing "li" li_ :: Array Nut -> Nut li_ = li [] +li__ :: String -> Nut +li__ t = li [] [ DC.text_ t ] + instance TagToDeku "dl" (HTMLDListElement ()) -dl :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLDListElement ()))) -> Array Nut -> Nut +dl :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLDListElement ()))) -> Array Nut -> Nut dl = elementify2 Nothing "dl" dl_ :: Array Nut -> Nut dl_ = dl [] +dl__ :: String -> Nut +dl__ t = dl [] [ DC.text_ t ] + instance TagToDeku "dt" (HTMLElement ()) -dt :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut +dt :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut dt = elementify2 Nothing "dt" dt_ :: Array Nut -> Nut dt_ = dt [] +dt__ :: String -> Nut +dt__ t = dt [] [ DC.text_ t ] + instance TagToDeku "dd" (HTMLElement ()) -dd :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut +dd :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut dd = elementify2 Nothing "dd" dd_ :: Array Nut -> Nut dd_ = dd [] +dd__ :: String -> Nut +dd__ t = dd [] [ DC.text_ t ] + instance TagToDeku "figure" (HTMLElement ()) -figure :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut +figure :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut figure = elementify2 Nothing "figure" figure_ :: Array Nut -> Nut figure_ = figure [] +figure__ :: String -> Nut +figure__ t = figure [] [ DC.text_ t ] + instance TagToDeku "figcaption" (HTMLElement ()) -figcaption - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut +figcaption :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut figcaption = elementify2 Nothing "figcaption" figcaption_ :: Array Nut -> Nut figcaption_ = figcaption [] +figcaption__ :: String -> Nut +figcaption__ t = figcaption [] [ DC.text_ t ] + instance TagToDeku "main" (HTMLElement ()) -main :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut +main :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut main = elementify2 Nothing "main" main_ :: Array Nut -> Nut main_ = main [] +main__ :: String -> Nut +main__ t = main [] [ DC.text_ t ] + instance TagToDeku "search" (HTMLElement ()) -search :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut +search :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut search = elementify2 Nothing "search" search_ :: Array Nut -> Nut search_ = search [] +search__ :: String -> Nut +search__ t = search [] [ DC.text_ t ] + instance TagToDeku "div" (HTMLDivElement ()) -div :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLDivElement ()))) -> Array Nut -> Nut +div :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLDivElement ()))) -> Array Nut -> Nut div = elementify2 Nothing "div" div_ :: Array Nut -> Nut div_ = div [] +div__ :: String -> Nut +div__ t = div [] [ DC.text_ t ] + instance TagToDeku "a" (HTMLAnchorElement ()) -a :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLAnchorElement ()))) -> Array Nut -> Nut +a :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLAnchorElement ()))) -> Array Nut -> Nut a = elementify2 Nothing "a" a_ :: Array Nut -> Nut a_ = a [] +a__ :: String -> Nut +a__ t = a [] [ DC.text_ t ] + instance TagToDeku "em" (HTMLElement ()) -em :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut +em :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut em = elementify2 Nothing "em" em_ :: Array Nut -> Nut em_ = em [] +em__ :: String -> Nut +em__ t = em [] [ DC.text_ t ] + instance TagToDeku "strong" (HTMLElement ()) -strong :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut +strong :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut strong = elementify2 Nothing "strong" strong_ :: Array Nut -> Nut strong_ = strong [] +strong__ :: String -> Nut +strong__ t = strong [] [ DC.text_ t ] + instance TagToDeku "small" (HTMLElement ()) -small :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut +small :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut small = elementify2 Nothing "small" small_ :: Array Nut -> Nut small_ = small [] +small__ :: String -> Nut +small__ t = small [] [ DC.text_ t ] + instance TagToDeku "s" (HTMLElement ()) -s :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut +s :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut s = elementify2 Nothing "s" s_ :: Array Nut -> Nut s_ = s [] +s__ :: String -> Nut +s__ t = s [] [ DC.text_ t ] + instance TagToDeku "cite" (HTMLElement ()) -cite :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut +cite :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut cite = elementify2 Nothing "cite" cite_ :: Array Nut -> Nut cite_ = cite [] +cite__ :: String -> Nut +cite__ t = cite [] [ DC.text_ t ] + instance TagToDeku "q" (HTMLQuoteElement ()) -q :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLQuoteElement ()))) -> Array Nut -> Nut +q :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLQuoteElement ()))) -> Array Nut -> Nut q = elementify2 Nothing "q" q_ :: Array Nut -> Nut q_ = q [] +q__ :: String -> Nut +q__ t = q [] [ DC.text_ t ] + instance TagToDeku "dfn" (HTMLElement ()) -dfn :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut +dfn :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut dfn = elementify2 Nothing "dfn" dfn_ :: Array Nut -> Nut dfn_ = dfn [] +dfn__ :: String -> Nut +dfn__ t = dfn [] [ DC.text_ t ] + instance TagToDeku "abbr" (HTMLElement ()) -abbr :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut +abbr :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut abbr = elementify2 Nothing "abbr" abbr_ :: Array Nut -> Nut abbr_ = abbr [] +abbr__ :: String -> Nut +abbr__ t = abbr [] [ DC.text_ t ] + instance TagToDeku "ruby" (HTMLElement ()) -ruby :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut +ruby :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut ruby = elementify2 Nothing "ruby" ruby_ :: Array Nut -> Nut ruby_ = ruby [] +ruby__ :: String -> Nut +ruby__ t = ruby [] [ DC.text_ t ] + instance TagToDeku "rt" (HTMLElement ()) -rt :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut +rt :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut rt = elementify2 Nothing "rt" rt_ :: Array Nut -> Nut rt_ = rt [] +rt__ :: String -> Nut +rt__ t = rt [] [ DC.text_ t ] + instance TagToDeku "rp" (HTMLElement ()) -rp :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut +rp :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut rp = elementify2 Nothing "rp" rp_ :: Array Nut -> Nut rp_ = rp [] +rp__ :: String -> Nut +rp__ t = rp [] [ DC.text_ t ] + instance TagToDeku "data" (HTMLDataElement ()) -xdata - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLDataElement ()))) -> Array Nut -> Nut +xdata :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLDataElement ()))) -> Array Nut -> Nut xdata = elementify2 Nothing "data" xdata_ :: Array Nut -> Nut xdata_ = xdata [] +xdata__ :: String -> Nut +xdata__ t = xdata [] [ DC.text_ t ] + instance TagToDeku "time" (HTMLTimeElement ()) -time :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLTimeElement ()))) -> Array Nut -> Nut +time :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLTimeElement ()))) -> Array Nut -> Nut time = elementify2 Nothing "time" time_ :: Array Nut -> Nut time_ = time [] +time__ :: String -> Nut +time__ t = time [] [ DC.text_ t ] + instance TagToDeku "code" (HTMLElement ()) -code :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut +code :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut code = elementify2 Nothing "code" code_ :: Array Nut -> Nut code_ = code [] +code__ :: String -> Nut +code__ t = code [] [ DC.text_ t ] + instance TagToDeku "var" (HTMLElement ()) -var :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut +var :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut var = elementify2 Nothing "var" var_ :: Array Nut -> Nut var_ = var [] +var__ :: String -> Nut +var__ t = var [] [ DC.text_ t ] + instance TagToDeku "samp" (HTMLElement ()) -samp :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut +samp :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut samp = elementify2 Nothing "samp" samp_ :: Array Nut -> Nut samp_ = samp [] +samp__ :: String -> Nut +samp__ t = samp [] [ DC.text_ t ] + instance TagToDeku "kbd" (HTMLElement ()) -kbd :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut +kbd :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut kbd = elementify2 Nothing "kbd" kbd_ :: Array Nut -> Nut kbd_ = kbd [] +kbd__ :: String -> Nut +kbd__ t = kbd [] [ DC.text_ t ] + instance TagToDeku "sub" (HTMLElement ()) -sub :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut +sub :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut sub = elementify2 Nothing "sub" sub_ :: Array Nut -> Nut sub_ = sub [] +sub__ :: String -> Nut +sub__ t = sub [] [ DC.text_ t ] + instance TagToDeku "sup" (HTMLElement ()) -sup :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut +sup :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut sup = elementify2 Nothing "sup" sup_ :: Array Nut -> Nut sup_ = sup [] +sup__ :: String -> Nut +sup__ t = sup [] [ DC.text_ t ] + instance TagToDeku "i" (HTMLElement ()) -i :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut +i :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut i = elementify2 Nothing "i" i_ :: Array Nut -> Nut i_ = i [] +i__ :: String -> Nut +i__ t = i [] [ DC.text_ t ] + instance TagToDeku "b" (HTMLElement ()) -b :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut +b :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut b = elementify2 Nothing "b" b_ :: Array Nut -> Nut b_ = b [] +b__ :: String -> Nut +b__ t = b [] [ DC.text_ t ] + instance TagToDeku "u" (HTMLElement ()) -u :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut +u :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut u = elementify2 Nothing "u" u_ :: Array Nut -> Nut u_ = u [] +u__ :: String -> Nut +u__ t = u [] [ DC.text_ t ] + instance TagToDeku "mark" (HTMLElement ()) -mark :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut +mark :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut mark = elementify2 Nothing "mark" mark_ :: Array Nut -> Nut mark_ = mark [] +mark__ :: String -> Nut +mark__ t = mark [] [ DC.text_ t ] + instance TagToDeku "bdi" (HTMLElement ()) -bdi :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut +bdi :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut bdi = elementify2 Nothing "bdi" bdi_ :: Array Nut -> Nut bdi_ = bdi [] +bdi__ :: String -> Nut +bdi__ t = bdi [] [ DC.text_ t ] + instance TagToDeku "bdo" (HTMLElement ()) -bdo :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut +bdo :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut bdo = elementify2 Nothing "bdo" bdo_ :: Array Nut -> Nut bdo_ = bdo [] +bdo__ :: String -> Nut +bdo__ t = bdo [] [ DC.text_ t ] + instance TagToDeku "span" (HTMLSpanElement ()) -span :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLSpanElement ()))) -> Array Nut -> Nut +span :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLSpanElement ()))) -> Array Nut -> Nut span = elementify2 Nothing "span" span_ :: Array Nut -> Nut span_ = span [] +span__ :: String -> Nut +span__ t = span [] [ DC.text_ t ] + instance TagToDeku "br" (HTMLBRElement ()) -br :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLBRElement ()))) -> Array Nut -> Nut +br :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLBRElement ()))) -> Array Nut -> Nut br = elementify2 Nothing "br" br_ :: Array Nut -> Nut br_ = br [] +br__ :: String -> Nut +br__ t = br [] [ DC.text_ t ] + instance TagToDeku "wbr" (HTMLElement ()) -wbr :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut +wbr :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut wbr = elementify2 Nothing "wbr" wbr_ :: Array Nut -> Nut wbr_ = wbr [] +wbr__ :: String -> Nut +wbr__ t = wbr [] [ DC.text_ t ] + instance TagToDeku "ins" (HTMLModElement ()) -ins :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLModElement ()))) -> Array Nut -> Nut +ins :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLModElement ()))) -> Array Nut -> Nut ins = elementify2 Nothing "ins" ins_ :: Array Nut -> Nut ins_ = ins [] +ins__ :: String -> Nut +ins__ t = ins [] [ DC.text_ t ] + instance TagToDeku "del" (HTMLModElement ()) -del :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLModElement ()))) -> Array Nut -> Nut +del :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLModElement ()))) -> Array Nut -> Nut del = elementify2 Nothing "del" del_ :: Array Nut -> Nut del_ = del [] +del__ :: String -> Nut +del__ t = del [] [ DC.text_ t ] + instance TagToDeku "picture" (HTMLPictureElement ()) picture - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLPictureElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLPictureElement ()))) -> Array Nut -> Nut picture = elementify2 Nothing "picture" picture_ :: Array Nut -> Nut picture_ = picture [] +picture__ :: String -> Nut +picture__ t = picture [] [ DC.text_ t ] + instance TagToDeku "source" (HTMLSourceElement ()) source - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLSourceElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLSourceElement ()))) -> Array Nut -> Nut source = elementify2 Nothing "source" source_ :: Array Nut -> Nut source_ = source [] +source__ :: String -> Nut +source__ t = source [] [ DC.text_ t ] + instance TagToDeku "img" (HTMLImageElement ()) -img :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLImageElement ()))) -> Array Nut -> Nut +img :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLImageElement ()))) -> Array Nut -> Nut img = elementify2 Nothing "img" img_ :: Array Nut -> Nut img_ = img [] +img__ :: String -> Nut +img__ t = img [] [ DC.text_ t ] + instance TagToDeku "iframe" (HTMLIFrameElement ()) iframe - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLIFrameElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLIFrameElement ()))) -> Array Nut -> Nut iframe = elementify2 Nothing "iframe" iframe_ :: Array Nut -> Nut iframe_ = iframe [] +iframe__ :: String -> Nut +iframe__ t = iframe [] [ DC.text_ t ] + instance TagToDeku "embed" (HTMLEmbedElement ()) -embed - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLEmbedElement ()))) -> Array Nut -> Nut +embed :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLEmbedElement ()))) -> Array Nut -> Nut embed = elementify2 Nothing "embed" embed_ :: Array Nut -> Nut embed_ = embed [] +embed__ :: String -> Nut +embed__ t = embed [] [ DC.text_ t ] + instance TagToDeku "object" (HTMLObjectElement ()) object - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLObjectElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLObjectElement ()))) -> Array Nut -> Nut object = elementify2 Nothing "object" object_ :: Array Nut -> Nut object_ = object [] +object__ :: String -> Nut +object__ t = object [] [ DC.text_ t ] + instance TagToDeku "video" (HTMLVideoElement ()) -video - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLVideoElement ()))) -> Array Nut -> Nut +video :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLVideoElement ()))) -> Array Nut -> Nut video = elementify2 Nothing "video" video_ :: Array Nut -> Nut video_ = video [] +video__ :: String -> Nut +video__ t = video [] [ DC.text_ t ] + instance TagToDeku "audio" (HTMLAudioElement ()) -audio - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLAudioElement ()))) -> Array Nut -> Nut +audio :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLAudioElement ()))) -> Array Nut -> Nut audio = elementify2 Nothing "audio" audio_ :: Array Nut -> Nut audio_ = audio [] +audio__ :: String -> Nut +audio__ t = audio [] [ DC.text_ t ] + instance TagToDeku "track" (HTMLTrackElement ()) -track - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLTrackElement ()))) -> Array Nut -> Nut +track :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLTrackElement ()))) -> Array Nut -> Nut track = elementify2 Nothing "track" track_ :: Array Nut -> Nut track_ = track [] +track__ :: String -> Nut +track__ t = track [] [ DC.text_ t ] + instance TagToDeku "map" (HTMLMapElement ()) -map :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLMapElement ()))) -> Array Nut -> Nut +map :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLMapElement ()))) -> Array Nut -> Nut map = elementify2 Nothing "map" map_ :: Array Nut -> Nut map_ = map [] +map__ :: String -> Nut +map__ t = map [] [ DC.text_ t ] + instance TagToDeku "area" (HTMLAreaElement ()) -area :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLAreaElement ()))) -> Array Nut -> Nut +area :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLAreaElement ()))) -> Array Nut -> Nut area = elementify2 Nothing "area" area_ :: Array Nut -> Nut area_ = area [] +area__ :: String -> Nut +area__ t = area [] [ DC.text_ t ] + instance TagToDeku "table" (HTMLTableElement ()) -table - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLTableElement ()))) -> Array Nut -> Nut +table :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLTableElement ()))) -> Array Nut -> Nut table = elementify2 Nothing "table" table_ :: Array Nut -> Nut table_ = table [] +table__ :: String -> Nut +table__ t = table [] [ DC.text_ t ] + instance TagToDeku "caption" (HTMLTableCaptionElement ()) caption - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLTableCaptionElement ()))) + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLTableCaptionElement ()))) -> Array Nut -> Nut caption = elementify2 Nothing "caption" @@ -1915,28 +2277,37 @@ caption = elementify2 Nothing "caption" caption_ :: Array Nut -> Nut caption_ = caption [] +caption__ :: String -> Nut +caption__ t = caption [] [ DC.text_ t ] + instance TagToDeku "colgroup" (HTMLTableColElement ()) colgroup - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLTableColElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLTableColElement ()))) -> Array Nut -> Nut colgroup = elementify2 Nothing "colgroup" colgroup_ :: Array Nut -> Nut colgroup_ = colgroup [] +colgroup__ :: String -> Nut +colgroup__ t = colgroup [] [ DC.text_ t ] + instance TagToDeku "col" (HTMLTableColElement ()) col - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLTableColElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLTableColElement ()))) -> Array Nut -> Nut col = elementify2 Nothing "col" col_ :: Array Nut -> Nut col_ = col [] +col__ :: String -> Nut +col__ t = col [] [ DC.text_ t ] + instance TagToDeku "tbody" (HTMLTableSectionElement ()) tbody - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLTableSectionElement ()))) + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLTableSectionElement ()))) -> Array Nut -> Nut tbody = elementify2 Nothing "tbody" @@ -1944,10 +2315,13 @@ tbody = elementify2 Nothing "tbody" tbody_ :: Array Nut -> Nut tbody_ = tbody [] +tbody__ :: String -> Nut +tbody__ t = tbody [] [ DC.text_ t ] + instance TagToDeku "thead" (HTMLTableSectionElement ()) thead - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLTableSectionElement ()))) + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLTableSectionElement ()))) -> Array Nut -> Nut thead = elementify2 Nothing "thead" @@ -1955,10 +2329,13 @@ thead = elementify2 Nothing "thead" thead_ :: Array Nut -> Nut thead_ = thead [] +thead__ :: String -> Nut +thead__ t = thead [] [ DC.text_ t ] + instance TagToDeku "tfoot" (HTMLTableSectionElement ()) tfoot - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLTableSectionElement ()))) + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLTableSectionElement ()))) -> Array Nut -> Nut tfoot = elementify2 Nothing "tfoot" @@ -1966,476 +2343,627 @@ tfoot = elementify2 Nothing "tfoot" tfoot_ :: Array Nut -> Nut tfoot_ = tfoot [] +tfoot__ :: String -> Nut +tfoot__ t = tfoot [] [ DC.text_ t ] + instance TagToDeku "tr" (HTMLTableRowElement ()) -tr - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLTableRowElement ()))) -> Array Nut -> Nut +tr :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLTableRowElement ()))) -> Array Nut -> Nut tr = elementify2 Nothing "tr" tr_ :: Array Nut -> Nut tr_ = tr [] +tr__ :: String -> Nut +tr__ t = tr [] [ DC.text_ t ] + instance TagToDeku "td" (HTMLTableCellElement ()) td - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLTableCellElement ()))) - -> Array Nut - -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLTableCellElement ()))) -> Array Nut -> Nut td = elementify2 Nothing "td" td_ :: Array Nut -> Nut td_ = td [] +td__ :: String -> Nut +td__ t = td [] [ DC.text_ t ] + instance TagToDeku "th" (HTMLTableCellElement ()) th - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLTableCellElement ()))) - -> Array Nut - -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLTableCellElement ()))) -> Array Nut -> Nut th = elementify2 Nothing "th" th_ :: Array Nut -> Nut th_ = th [] +th__ :: String -> Nut +th__ t = th [] [ DC.text_ t ] + instance TagToDeku "form" (HTMLFormElement ()) -form :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLFormElement ()))) -> Array Nut -> Nut +form :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLFormElement ()))) -> Array Nut -> Nut form = elementify2 Nothing "form" form_ :: Array Nut -> Nut form_ = form [] +form__ :: String -> Nut +form__ t = form [] [ DC.text_ t ] + instance TagToDeku "label" (HTMLLabelElement ()) -label - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLLabelElement ()))) -> Array Nut -> Nut +label :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLLabelElement ()))) -> Array Nut -> Nut label = elementify2 Nothing "label" label_ :: Array Nut -> Nut label_ = label [] +label__ :: String -> Nut +label__ t = label [] [ DC.text_ t ] + instance TagToDeku "input" (HTMLInputElement ()) -input - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLInputElement ()))) -> Array Nut -> Nut +input :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLInputElement ()))) -> Array Nut -> Nut input = elementify2 Nothing "input" input_ :: Array Nut -> Nut input_ = input [] +input__ :: String -> Nut +input__ t = input [] [ DC.text_ t ] + instance TagToDeku "button" (HTMLButtonElement ()) button - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLButtonElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLButtonElement ()))) -> Array Nut -> Nut button = elementify2 Nothing "button" button_ :: Array Nut -> Nut button_ = button [] +button__ :: String -> Nut +button__ t = button [] [ DC.text_ t ] + instance TagToDeku "select" (HTMLSelectElement ()) select - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLSelectElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLSelectElement ()))) -> Array Nut -> Nut select = elementify2 Nothing "select" select_ :: Array Nut -> Nut select_ = select [] +select__ :: String -> Nut +select__ t = select [] [ DC.text_ t ] + instance TagToDeku "datalist" (HTMLDataListElement ()) datalist - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLDataListElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLDataListElement ()))) -> Array Nut -> Nut datalist = elementify2 Nothing "datalist" datalist_ :: Array Nut -> Nut datalist_ = datalist [] +datalist__ :: String -> Nut +datalist__ t = datalist [] [ DC.text_ t ] + instance TagToDeku "optgroup" (HTMLOptGroupElement ()) optgroup - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLOptGroupElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLOptGroupElement ()))) -> Array Nut -> Nut optgroup = elementify2 Nothing "optgroup" optgroup_ :: Array Nut -> Nut optgroup_ = optgroup [] +optgroup__ :: String -> Nut +optgroup__ t = optgroup [] [ DC.text_ t ] + instance TagToDeku "option" (HTMLOptionElement ()) option - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLOptionElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLOptionElement ()))) -> Array Nut -> Nut option = elementify2 Nothing "option" option_ :: Array Nut -> Nut option_ = option [] +option__ :: String -> Nut +option__ t = option [] [ DC.text_ t ] + instance TagToDeku "textarea" (HTMLTextAreaElement ()) textarea - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLTextAreaElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLTextAreaElement ()))) -> Array Nut -> Nut textarea = elementify2 Nothing "textarea" textarea_ :: Array Nut -> Nut textarea_ = textarea [] +textarea__ :: String -> Nut +textarea__ t = textarea [] [ DC.text_ t ] + instance TagToDeku "output" (HTMLOutputElement ()) output - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLOutputElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLOutputElement ()))) -> Array Nut -> Nut output = elementify2 Nothing "output" output_ :: Array Nut -> Nut output_ = output [] +output__ :: String -> Nut +output__ t = output [] [ DC.text_ t ] + instance TagToDeku "progress" (HTMLProgressElement ()) progress - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLProgressElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLProgressElement ()))) -> Array Nut -> Nut progress = elementify2 Nothing "progress" progress_ :: Array Nut -> Nut progress_ = progress [] +progress__ :: String -> Nut +progress__ t = progress [] [ DC.text_ t ] + instance TagToDeku "meter" (HTMLMeterElement ()) -meter - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLMeterElement ()))) -> Array Nut -> Nut +meter :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLMeterElement ()))) -> Array Nut -> Nut meter = elementify2 Nothing "meter" meter_ :: Array Nut -> Nut meter_ = meter [] +meter__ :: String -> Nut +meter__ t = meter [] [ DC.text_ t ] + instance TagToDeku "fieldset" (HTMLFieldSetElement ()) fieldset - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLFieldSetElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLFieldSetElement ()))) -> Array Nut -> Nut fieldset = elementify2 Nothing "fieldset" fieldset_ :: Array Nut -> Nut fieldset_ = fieldset [] +fieldset__ :: String -> Nut +fieldset__ t = fieldset [] [ DC.text_ t ] + instance TagToDeku "legend" (HTMLLegendElement ()) legend - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLLegendElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLLegendElement ()))) -> Array Nut -> Nut legend = elementify2 Nothing "legend" legend_ :: Array Nut -> Nut legend_ = legend [] +legend__ :: String -> Nut +legend__ t = legend [] [ DC.text_ t ] + instance TagToDeku "details" (HTMLDetailsElement ()) details - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLDetailsElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLDetailsElement ()))) -> Array Nut -> Nut details = elementify2 Nothing "details" details_ :: Array Nut -> Nut details_ = details [] +details__ :: String -> Nut +details__ t = details [] [ DC.text_ t ] + instance TagToDeku "summary" (HTMLElement ()) -summary :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut +summary :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut summary = elementify2 Nothing "summary" summary_ :: Array Nut -> Nut summary_ = summary [] +summary__ :: String -> Nut +summary__ t = summary [] [ DC.text_ t ] + instance TagToDeku "dialog" (HTMLDialogElement ()) dialog - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLDialogElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLDialogElement ()))) -> Array Nut -> Nut dialog = elementify2 Nothing "dialog" dialog_ :: Array Nut -> Nut dialog_ = dialog [] +dialog__ :: String -> Nut +dialog__ t = dialog [] [ DC.text_ t ] + instance TagToDeku "script" (HTMLScriptElement ()) script - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLScriptElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLScriptElement ()))) -> Array Nut -> Nut script = elementify2 Nothing "script" script_ :: Array Nut -> Nut script_ = script [] +script__ :: String -> Nut +script__ t = script [] [ DC.text_ t ] + instance TagToDeku "noscript" (HTMLElement ()) -noscript :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut +noscript :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut noscript = elementify2 Nothing "noscript" noscript_ :: Array Nut -> Nut noscript_ = noscript [] +noscript__ :: String -> Nut +noscript__ t = noscript [] [ DC.text_ t ] + instance TagToDeku "template" (HTMLTemplateElement ()) template - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLTemplateElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLTemplateElement ()))) -> Array Nut -> Nut template = elementify2 Nothing "template" template_ :: Array Nut -> Nut template_ = template [] +template__ :: String -> Nut +template__ t = template [] [ DC.text_ t ] + instance TagToDeku "slot" (HTMLSlotElement ()) -slot :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLSlotElement ()))) -> Array Nut -> Nut +slot :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLSlotElement ()))) -> Array Nut -> Nut slot = elementify2 Nothing "slot" slot_ :: Array Nut -> Nut slot_ = slot [] +slot__ :: String -> Nut +slot__ t = slot [] [ DC.text_ t ] + instance TagToDeku "canvas" (HTMLCanvasElement ()) canvas - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLCanvasElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLCanvasElement ()))) -> Array Nut -> Nut canvas = elementify2 Nothing "canvas" canvas_ :: Array Nut -> Nut canvas_ = canvas [] +canvas__ :: String -> Nut +canvas__ t = canvas [] [ DC.text_ t ] + instance TagToDeku "applet" (HTMLUnknownElement ()) applet - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLUnknownElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLUnknownElement ()))) -> Array Nut -> Nut applet = elementify2 Nothing "applet" applet_ :: Array Nut -> Nut applet_ = applet [] +applet__ :: String -> Nut +applet__ t = applet [] [ DC.text_ t ] + instance TagToDeku "acronym" (HTMLElement ()) -acronym :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut +acronym :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut acronym = elementify2 Nothing "acronym" acronym_ :: Array Nut -> Nut acronym_ = acronym [] +acronym__ :: String -> Nut +acronym__ t = acronym [] [ DC.text_ t ] + instance TagToDeku "bgsound" (HTMLUnknownElement ()) bgsound - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLUnknownElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLUnknownElement ()))) -> Array Nut -> Nut bgsound = elementify2 Nothing "bgsound" bgsound_ :: Array Nut -> Nut bgsound_ = bgsound [] +bgsound__ :: String -> Nut +bgsound__ t = bgsound [] [ DC.text_ t ] + instance TagToDeku "dir" (HTMLDirectoryElement ()) dir - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLDirectoryElement ()))) - -> Array Nut - -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLDirectoryElement ()))) -> Array Nut -> Nut dir = elementify2 Nothing "dir" dir_ :: Array Nut -> Nut dir_ = dir [] +dir__ :: String -> Nut +dir__ t = dir [] [ DC.text_ t ] + instance TagToDeku "frame" (HTMLFrameElement ()) -frame - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLFrameElement ()))) -> Array Nut -> Nut +frame :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLFrameElement ()))) -> Array Nut -> Nut frame = elementify2 Nothing "frame" frame_ :: Array Nut -> Nut frame_ = frame [] +frame__ :: String -> Nut +frame__ t = frame [] [ DC.text_ t ] + instance TagToDeku "frameset" (HTMLFrameSetElement ()) frameset - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLFrameSetElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLFrameSetElement ()))) -> Array Nut -> Nut frameset = elementify2 Nothing "frameset" frameset_ :: Array Nut -> Nut frameset_ = frameset [] +frameset__ :: String -> Nut +frameset__ t = frameset [] [ DC.text_ t ] + instance TagToDeku "noframes" (HTMLElement ()) -noframes :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut +noframes :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut noframes = elementify2 Nothing "noframes" noframes_ :: Array Nut -> Nut noframes_ = noframes [] +noframes__ :: String -> Nut +noframes__ t = noframes [] [ DC.text_ t ] + instance TagToDeku "isindex" (HTMLUnknownElement ()) isindex - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLUnknownElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLUnknownElement ()))) -> Array Nut -> Nut isindex = elementify2 Nothing "isindex" isindex_ :: Array Nut -> Nut isindex_ = isindex [] +isindex__ :: String -> Nut +isindex__ t = isindex [] [ DC.text_ t ] + instance TagToDeku "keygen" (HTMLUnknownElement ()) keygen - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLUnknownElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLUnknownElement ()))) -> Array Nut -> Nut keygen = elementify2 Nothing "keygen" keygen_ :: Array Nut -> Nut keygen_ = keygen [] +keygen__ :: String -> Nut +keygen__ t = keygen [] [ DC.text_ t ] + instance TagToDeku "listing" (HTMLPreElement ()) -listing - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLPreElement ()))) -> Array Nut -> Nut +listing :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLPreElement ()))) -> Array Nut -> Nut listing = elementify2 Nothing "listing" listing_ :: Array Nut -> Nut listing_ = listing [] +listing__ :: String -> Nut +listing__ t = listing [] [ DC.text_ t ] + instance TagToDeku "menuitem" (HTMLElement ()) -menuitem :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut +menuitem :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut menuitem = elementify2 Nothing "menuitem" menuitem_ :: Array Nut -> Nut menuitem_ = menuitem [] +menuitem__ :: String -> Nut +menuitem__ t = menuitem [] [ DC.text_ t ] + instance TagToDeku "nextid" (HTMLUnknownElement ()) nextid - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLUnknownElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLUnknownElement ()))) -> Array Nut -> Nut nextid = elementify2 Nothing "nextid" nextid_ :: Array Nut -> Nut nextid_ = nextid [] +nextid__ :: String -> Nut +nextid__ t = nextid [] [ DC.text_ t ] + instance TagToDeku "noembed" (HTMLElement ()) -noembed :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut +noembed :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut noembed = elementify2 Nothing "noembed" noembed_ :: Array Nut -> Nut noembed_ = noembed [] +noembed__ :: String -> Nut +noembed__ t = noembed [] [ DC.text_ t ] + instance TagToDeku "param" (HTMLParamElement ()) -param - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLParamElement ()))) -> Array Nut -> Nut +param :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLParamElement ()))) -> Array Nut -> Nut param = elementify2 Nothing "param" param_ :: Array Nut -> Nut param_ = param [] +param__ :: String -> Nut +param__ t = param [] [ DC.text_ t ] + instance TagToDeku "plaintext" (HTMLElement ()) -plaintext - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut +plaintext :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut plaintext = elementify2 Nothing "plaintext" plaintext_ :: Array Nut -> Nut plaintext_ = plaintext [] +plaintext__ :: String -> Nut +plaintext__ t = plaintext [] [ DC.text_ t ] + instance TagToDeku "rb" (HTMLElement ()) -rb :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut +rb :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut rb = elementify2 Nothing "rb" rb_ :: Array Nut -> Nut rb_ = rb [] +rb__ :: String -> Nut +rb__ t = rb [] [ DC.text_ t ] + instance TagToDeku "rtc" (HTMLElement ()) -rtc :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut +rtc :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut rtc = elementify2 Nothing "rtc" rtc_ :: Array Nut -> Nut rtc_ = rtc [] +rtc__ :: String -> Nut +rtc__ t = rtc [] [ DC.text_ t ] + instance TagToDeku "strike" (HTMLElement ()) -strike :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut +strike :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut strike = elementify2 Nothing "strike" strike_ :: Array Nut -> Nut strike_ = strike [] +strike__ :: String -> Nut +strike__ t = strike [] [ DC.text_ t ] + instance TagToDeku "xmp" (HTMLPreElement ()) -xmp :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLPreElement ()))) -> Array Nut -> Nut +xmp :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLPreElement ()))) -> Array Nut -> Nut xmp = elementify2 Nothing "xmp" xmp_ :: Array Nut -> Nut xmp_ = xmp [] +xmp__ :: String -> Nut +xmp__ t = xmp [] [ DC.text_ t ] + instance TagToDeku "basefont" (HTMLElement ()) -basefont :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut +basefont :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut basefont = elementify2 Nothing "basefont" basefont_ :: Array Nut -> Nut basefont_ = basefont [] +basefont__ :: String -> Nut +basefont__ t = basefont [] [ DC.text_ t ] + instance TagToDeku "big" (HTMLElement ()) -big :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut +big :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut big = elementify2 Nothing "big" big_ :: Array Nut -> Nut big_ = big [] +big__ :: String -> Nut +big__ t = big [] [ DC.text_ t ] + instance TagToDeku "blink" (HTMLUnknownElement ()) blink - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLUnknownElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLUnknownElement ()))) -> Array Nut -> Nut blink = elementify2 Nothing "blink" blink_ :: Array Nut -> Nut blink_ = blink [] +blink__ :: String -> Nut +blink__ t = blink [] [ DC.text_ t ] + instance TagToDeku "center" (HTMLElement ()) -center :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut +center :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut center = elementify2 Nothing "center" center_ :: Array Nut -> Nut center_ = center [] +center__ :: String -> Nut +center__ t = center [] [ DC.text_ t ] + instance TagToDeku "font" (HTMLFontElement ()) -font :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLFontElement ()))) -> Array Nut -> Nut +font :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLFontElement ()))) -> Array Nut -> Nut font = elementify2 Nothing "font" font_ :: Array Nut -> Nut font_ = font [] +font__ :: String -> Nut +font__ t = font [] [ DC.text_ t ] + instance TagToDeku "marquee" (HTMLMarqueeElement ()) marquee - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLMarqueeElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLMarqueeElement ()))) -> Array Nut -> Nut marquee = elementify2 Nothing "marquee" marquee_ :: Array Nut -> Nut marquee_ = marquee [] +marquee__ :: String -> Nut +marquee__ t = marquee [] [ DC.text_ t ] + instance TagToDeku "multicol" (HTMLUnknownElement ()) multicol - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLUnknownElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLUnknownElement ()))) -> Array Nut -> Nut multicol = elementify2 Nothing "multicol" multicol_ :: Array Nut -> Nut multicol_ = multicol [] +multicol__ :: String -> Nut +multicol__ t = multicol [] [ DC.text_ t ] + instance TagToDeku "nobr" (HTMLElement ()) -nobr :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut +nobr :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut nobr = elementify2 Nothing "nobr" nobr_ :: Array Nut -> Nut nobr_ = nobr [] +nobr__ :: String -> Nut +nobr__ t = nobr [] [ DC.text_ t ] + instance TagToDeku "spacer" (HTMLUnknownElement ()) spacer - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLUnknownElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLUnknownElement ()))) -> Array Nut -> Nut spacer = elementify2 Nothing "spacer" spacer_ :: Array Nut -> Nut spacer_ = spacer [] +spacer__ :: String -> Nut +spacer__ t = spacer [] [ DC.text_ t ] + instance TagToDeku "tt" (HTMLElement ()) -tt :: Array (FRP.Event.Event (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut +tt :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (HTMLElement ()))) -> Array Nut -> Nut tt = elementify2 Nothing "tt" tt_ :: Array Nut -> Nut tt_ = tt [] + +tt__ :: String -> Nut +tt__ t = tt [] [ DC.text_ t ] diff --git a/deku-dom/src/Deku/DOM/Attributes.purs b/deku-dom/src/Deku/DOM/Attributes.purs index 941d5049..e1e5820d 100644 --- a/deku-dom/src/Deku/DOM/Attributes.purs +++ b/deku-dom/src/Deku/DOM/Attributes.purs @@ -387,8 +387,6 @@ module Deku.DOM.Attributes , autocompleteBilling , autocompleteShipping , autocompleteSection - , dirname - , dirname_ , form , form_ , xdata @@ -488,6 +486,8 @@ module Deku.DOM.Attributes , minlength_ , maxlength , maxlength_ + , dirname + , dirname_ , placeholder , placeholder_ , list @@ -687,65 +687,59 @@ module Deku.DOM.Attributes import Control.Applicative (pure) as Applicative import Control.Category ((<<<)) import Data.Functor (map) as Functor -import FRP.Event as FRP.Event +import FRP.Poll as FRP.Poll import Deku.DOM.Combinators (unset) as Combinators import Deku.Attribute as Deku.Attribute tabindex :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (tabindex :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (tabindex :: String | r)) tabindex = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "tabindex", value: _ } <<< Deku.Attribute.prop') -tabindex_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (tabindex :: String | r)) +tabindex_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (tabindex :: String | r)) tabindex_ = tabindex <<< Applicative.pure nonce :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (nonce :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (nonce :: String | r)) nonce = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "nonce", value: _ } <<< Deku.Attribute.prop') -nonce_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (nonce :: String | r)) +nonce_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (nonce :: String | r)) nonce_ = nonce <<< Applicative.pure slot - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (slot :: String | r)) + :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (slot :: String | r)) slot = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "slot", value: _ } <<< Deku.Attribute.prop') -slot_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (slot :: String | r)) +slot_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (slot :: String | r)) slot_ = slot <<< Applicative.pure -id - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (id :: String | r)) +id :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (id :: String | r)) id = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "id", value: _ } <<< Deku.Attribute.prop') -id_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (id :: String | r)) +id_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (id :: String | r)) id_ = id <<< Applicative.pure klass :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (klass :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (klass :: String | r)) klass = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "class", value: _ } <<< Deku.Attribute.prop') -klass_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (klass :: String | r)) +klass_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (klass :: String | r)) klass_ = klass <<< Applicative.pure popovertargetaction :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (popovertargetaction :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (popovertargetaction :: String | r)) popovertargetaction = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "popovertargetaction", value: _ } <<< Deku.Attribute.prop' @@ -754,2737 +748,2625 @@ popovertargetaction = Functor.map popovertargetaction_ :: forall r . String - -> FRP.Event.Event (Deku.Attribute.Attribute (popovertargetaction :: String | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (popovertargetaction :: String | r)) popovertargetaction_ = popovertargetaction <<< Applicative.pure popovertargetactionHide - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (popovertargetaction :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (popovertargetaction :: String | r)) popovertargetactionHide = popovertargetaction_ "hide" popovertargetactionShow - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (popovertargetaction :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (popovertargetaction :: String | r)) popovertargetactionShow = popovertargetaction_ "show" popovertargetactionToggle - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (popovertargetaction :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (popovertargetaction :: String | r)) popovertargetactionToggle = popovertargetaction_ "toggle" popovertarget :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (popovertarget :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (popovertarget :: String | r)) popovertarget = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "popovertarget", value: _ } <<< Deku.Attribute.prop') popovertarget_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (popovertarget :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (popovertarget :: String | r)) popovertarget_ = popovertarget <<< Applicative.pure popover :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (popover :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (popover :: String | r)) popover = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "popover", value: _ } <<< Deku.Attribute.prop') -popover_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (popover :: String | r)) +popover_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (popover :: String | r)) popover_ = popover <<< Applicative.pure -popoverManual :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (popover :: String | r)) +popoverManual :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (popover :: String | r)) popoverManual = popover_ "manual" -popoverAuto :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (popover :: String | r)) +popoverAuto :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (popover :: String | r)) popoverAuto = popover_ "auto" draggable :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (draggable :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (draggable :: String | r)) draggable = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "draggable", value: _ } <<< Deku.Attribute.prop') draggable_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (draggable :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (draggable :: String | r)) draggable_ = draggable <<< Applicative.pure enterkeyhint :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (enterkeyhint :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (enterkeyhint :: String | r)) enterkeyhint = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "enterkeyhint", value: _ } <<< Deku.Attribute.prop') enterkeyhint_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (enterkeyhint :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (enterkeyhint :: String | r)) enterkeyhint_ = enterkeyhint <<< Applicative.pure -enterkeyhintSend - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (enterkeyhint :: String | r)) +enterkeyhintSend :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (enterkeyhint :: String | r)) enterkeyhintSend = enterkeyhint_ "send" enterkeyhintSearch - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (enterkeyhint :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (enterkeyhint :: String | r)) enterkeyhintSearch = enterkeyhint_ "search" enterkeyhintPrevious - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (enterkeyhint :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (enterkeyhint :: String | r)) enterkeyhintPrevious = enterkeyhint_ "previous" -enterkeyhintNext - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (enterkeyhint :: String | r)) +enterkeyhintNext :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (enterkeyhint :: String | r)) enterkeyhintNext = enterkeyhint_ "next" -enterkeyhintGo :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (enterkeyhint :: String | r)) +enterkeyhintGo :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (enterkeyhint :: String | r)) enterkeyhintGo = enterkeyhint_ "go" -enterkeyhintDone - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (enterkeyhint :: String | r)) +enterkeyhintDone :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (enterkeyhint :: String | r)) enterkeyhintDone = enterkeyhint_ "done" enterkeyhintEnter - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (enterkeyhint :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (enterkeyhint :: String | r)) enterkeyhintEnter = enterkeyhint_ "enter" inputmode :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (inputmode :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (inputmode :: String | r)) inputmode = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "inputmode", value: _ } <<< Deku.Attribute.prop') inputmode_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (inputmode :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (inputmode :: String | r)) inputmode_ = inputmode <<< Applicative.pure -inputmodeSearch :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (inputmode :: String | r)) +inputmodeSearch :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (inputmode :: String | r)) inputmodeSearch = inputmode_ "search" -inputmodeDecimal :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (inputmode :: String | r)) +inputmodeDecimal :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (inputmode :: String | r)) inputmodeDecimal = inputmode_ "decimal" -inputmodeNumeric :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (inputmode :: String | r)) +inputmodeNumeric :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (inputmode :: String | r)) inputmodeNumeric = inputmode_ "numeric" -inputmodeEmail :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (inputmode :: String | r)) +inputmodeEmail :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (inputmode :: String | r)) inputmodeEmail = inputmode_ "email" -inputmodeUrl :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (inputmode :: String | r)) +inputmodeUrl :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (inputmode :: String | r)) inputmodeUrl = inputmode_ "url" -inputmodeTel :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (inputmode :: String | r)) +inputmodeTel :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (inputmode :: String | r)) inputmodeTel = inputmode_ "tel" -inputmodeText :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (inputmode :: String | r)) +inputmodeText :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (inputmode :: String | r)) inputmodeText = inputmode_ "text" -inputmodeNone :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (inputmode :: String | r)) +inputmodeNone :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (inputmode :: String | r)) inputmodeNone = inputmode_ "none" autocapitalize :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (autocapitalize :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (autocapitalize :: String | r)) autocapitalize = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "autocapitalize", value: _ } <<< Deku.Attribute.prop') autocapitalize_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (autocapitalize :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (autocapitalize :: String | r)) autocapitalize_ = autocapitalize <<< Applicative.pure autocapitalizeCharacters - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocapitalize :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocapitalize :: String | r)) autocapitalizeCharacters = autocapitalize_ "characters" autocapitalizeWords - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocapitalize :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocapitalize :: String | r)) autocapitalizeWords = autocapitalize_ "words" autocapitalizeSentences - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocapitalize :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocapitalize :: String | r)) autocapitalizeSentences = autocapitalize_ "sentences" autocapitalizeOn - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocapitalize :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocapitalize :: String | r)) autocapitalizeOn = autocapitalize_ "on" autocapitalizeNone - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocapitalize :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocapitalize :: String | r)) autocapitalizeNone = autocapitalize_ "none" autocapitalizeOff - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocapitalize :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocapitalize :: String | r)) autocapitalizeOff = autocapitalize_ "off" spellcheck :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (spellcheck :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (spellcheck :: String | r)) spellcheck = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "spellcheck", value: _ } <<< Deku.Attribute.prop') spellcheck_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (spellcheck :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (spellcheck :: String | r)) spellcheck_ = spellcheck <<< Applicative.pure contenteditable :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (contenteditable :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (contenteditable :: String | r)) contenteditable = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "contenteditable", value: _ } <<< Deku.Attribute.prop') contenteditable_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (contenteditable :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (contenteditable :: String | r)) contenteditable_ = contenteditable <<< Applicative.pure accesskey :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (accesskey :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (accesskey :: String | r)) accesskey = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "accesskey", value: _ } <<< Deku.Attribute.prop') accesskey_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (accesskey :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (accesskey :: String | r)) accesskey_ = accesskey <<< Applicative.pure autofocus :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (autofocus :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (autofocus :: String | r)) autofocus = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "autofocus", value: _ } <<< Deku.Attribute.prop') autofocus_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (autofocus :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (autofocus :: String | r)) autofocus_ = autofocus <<< Applicative.pure hidden :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (hidden :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (hidden :: String | r)) hidden = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "hidden", value: _ } <<< Deku.Attribute.prop') -hidden_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (hidden :: String | r)) +hidden_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (hidden :: String | r)) hidden_ = hidden <<< Applicative.pure -hiddenHidden :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (hidden :: String | r)) +hiddenHidden :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (hidden :: String | r)) hiddenHidden = hidden_ "hidden" -hiddenUntilFound :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (hidden :: String | r)) +hiddenUntilFound :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (hidden :: String | r)) hiddenUntilFound = hidden_ "until-found" itemprop :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (itemprop :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (itemprop :: String | r)) itemprop = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "itemprop", value: _ } <<< Deku.Attribute.prop') -itemprop_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (itemprop :: String | r)) +itemprop_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (itemprop :: String | r)) itemprop_ = itemprop <<< Applicative.pure itemref :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (itemref :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (itemref :: String | r)) itemref = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "itemref", value: _ } <<< Deku.Attribute.prop') -itemref_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (itemref :: String | r)) +itemref_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (itemref :: String | r)) itemref_ = itemref <<< Applicative.pure itemid :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (itemid :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (itemid :: String | r)) itemid = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "itemid", value: _ } <<< Deku.Attribute.prop') -itemid_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (itemid :: String | r)) +itemid_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (itemid :: String | r)) itemid_ = itemid <<< Applicative.pure itemtype :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (itemtype :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (itemtype :: String | r)) itemtype = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "itemtype", value: _ } <<< Deku.Attribute.prop') -itemtype_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (itemtype :: String | r)) +itemtype_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (itemtype :: String | r)) itemtype_ = itemtype <<< Applicative.pure itemscope :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (itemscope :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (itemscope :: String | r)) itemscope = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "itemscope", value: _ } <<< Deku.Attribute.prop') itemscope_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (itemscope :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (itemscope :: String | r)) itemscope_ = itemscope <<< Applicative.pure -is - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (is :: String | r)) +is :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (is :: String | r)) is = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "is", value: _ } <<< Deku.Attribute.prop') -is_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (is :: String | r)) +is_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (is :: String | r)) is_ = is <<< Applicative.pure title :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (title :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (title :: String | r)) title = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "title", value: _ } <<< Deku.Attribute.prop') -title_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (title :: String | r)) +title_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (title :: String | r)) title_ = title <<< Applicative.pure style :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (style :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (style :: String | r)) style = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "style", value: _ } <<< Deku.Attribute.prop') -style_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (style :: String | r)) +style_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (style :: String | r)) style_ = style <<< Applicative.pure dir - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (dir :: String | r)) + :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (dir :: String | r)) dir = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "dir", value: _ } <<< Deku.Attribute.prop') -dir_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (dir :: String | r)) +dir_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (dir :: String | r)) dir_ = dir <<< Applicative.pure -dirAuto :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (dir :: String | r)) +dirAuto :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (dir :: String | r)) dirAuto = dir_ "auto" -dirRtl :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (dir :: String | r)) +dirRtl :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (dir :: String | r)) dirRtl = dir_ "rtl" -dirLtr :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (dir :: String | r)) +dirLtr :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (dir :: String | r)) dirLtr = dir_ "ltr" translate :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (translate :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (translate :: String | r)) translate = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "translate", value: _ } <<< Deku.Attribute.prop') translate_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (translate :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (translate :: String | r)) translate_ = translate <<< Applicative.pure lang - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (lang :: String | r)) + :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (lang :: String | r)) lang = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "lang", value: _ } <<< Deku.Attribute.prop') -lang_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (lang :: String | r)) +lang_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (lang :: String | r)) lang_ = lang <<< Applicative.pure target :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (target :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (target :: String | r)) target = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "target", value: _ } <<< Deku.Attribute.prop') -target_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (target :: String | r)) +target_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (target :: String | r)) target_ = target <<< Applicative.pure href - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (href :: String | r)) + :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (href :: String | r)) href = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "href", value: _ } <<< Deku.Attribute.prop') -href_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (href :: String | r)) +href_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (href :: String | r)) href_ = href <<< Applicative.pure urn - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (urn :: String | r)) + :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (urn :: String | r)) urn = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "urn", value: _ } <<< Deku.Attribute.prop') -urn_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (urn :: String | r)) +urn_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (urn :: String | r)) urn_ = urn <<< Applicative.pure rev - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (rev :: String | r)) + :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (rev :: String | r)) rev = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "rev", value: _ } <<< Deku.Attribute.prop') -rev_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (rev :: String | r)) +rev_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (rev :: String | r)) rev_ = rev <<< Applicative.pure methods :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (methods :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (methods :: String | r)) methods = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "methods", value: _ } <<< Deku.Attribute.prop') -methods_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (methods :: String | r)) +methods_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (methods :: String | r)) methods_ = methods <<< Applicative.pure charset :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (charset :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (charset :: String | r)) charset = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "charset", value: _ } <<< Deku.Attribute.prop') -charset_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (charset :: String | r)) +charset_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (charset :: String | r)) charset_ = charset <<< Applicative.pure fetchpriority :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (fetchpriority :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (fetchpriority :: String | r)) fetchpriority = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "fetchpriority", value: _ } <<< Deku.Attribute.prop') fetchpriority_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (fetchpriority :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (fetchpriority :: String | r)) fetchpriority_ = fetchpriority <<< Applicative.pure fetchpriorityAuto - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (fetchpriority :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (fetchpriority :: String | r)) fetchpriorityAuto = fetchpriority_ "auto" fetchpriorityLow - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (fetchpriority :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (fetchpriority :: String | r)) fetchpriorityLow = fetchpriority_ "low" fetchpriorityHigh - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (fetchpriority :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (fetchpriority :: String | r)) fetchpriorityHigh = fetchpriority_ "high" disabled :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (disabled :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (disabled :: String | r)) disabled = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "disabled", value: _ } <<< Deku.Attribute.prop') -disabled_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (disabled :: String | r)) +disabled_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (disabled :: String | r)) disabled_ = disabled <<< Applicative.pure color :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (color :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (color :: String | r)) color = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "color", value: _ } <<< Deku.Attribute.prop') -color_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (color :: String | r)) +color_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (color :: String | r)) color_ = color <<< Applicative.pure blocking :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (blocking :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (blocking :: String | r)) blocking = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "blocking", value: _ } <<< Deku.Attribute.prop') -blocking_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (blocking :: String | r)) +blocking_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (blocking :: String | r)) blocking_ = blocking <<< Applicative.pure -as - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (as :: String | r)) +as :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (as :: String | r)) as = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "as", value: _ } <<< Deku.Attribute.prop') -as_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (as :: String | r)) +as_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (as :: String | r)) as_ = as <<< Applicative.pure sizes :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (sizes :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (sizes :: String | r)) sizes = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "sizes", value: _ } <<< Deku.Attribute.prop') -sizes_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (sizes :: String | r)) +sizes_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (sizes :: String | r)) sizes_ = sizes <<< Applicative.pure imagesizes :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (imagesizes :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (imagesizes :: String | r)) imagesizes = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "imagesizes", value: _ } <<< Deku.Attribute.prop') imagesizes_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (imagesizes :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (imagesizes :: String | r)) imagesizes_ = imagesizes <<< Applicative.pure imagesrcset :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (imagesrcset :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (imagesrcset :: String | r)) imagesrcset = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "imagesrcset", value: _ } <<< Deku.Attribute.prop') imagesrcset_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (imagesrcset :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (imagesrcset :: String | r)) imagesrcset_ = imagesrcset <<< Applicative.pure referrerpolicy :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (referrerpolicy :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (referrerpolicy :: String | r)) referrerpolicy = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "referrerpolicy", value: _ } <<< Deku.Attribute.prop') referrerpolicy_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (referrerpolicy :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (referrerpolicy :: String | r)) referrerpolicy_ = referrerpolicy <<< Applicative.pure xtype :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (xtype :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (xtype :: String | r)) xtype = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "type", value: _ } <<< Deku.Attribute.prop') -xtype_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (xtype :: String | r)) +xtype_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (xtype :: String | r)) xtype_ = xtype <<< Applicative.pure -xtypeButton :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (xtype :: String | r)) +xtypeButton :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (xtype :: String | r)) xtypeButton = xtype_ "button" -xtypeReset :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (xtype :: String | r)) +xtypeReset :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (xtype :: String | r)) xtypeReset = xtype_ "reset" -xtypeSubmit :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (xtype :: String | r)) +xtypeSubmit :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (xtype :: String | r)) xtypeSubmit = xtype_ "submit" -xtypeImage :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (xtype :: String | r)) +xtypeImage :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (xtype :: String | r)) xtypeImage = xtype_ "image" -xtypeFile :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (xtype :: String | r)) +xtypeFile :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (xtype :: String | r)) xtypeFile = xtype_ "file" -xtypeRadio :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (xtype :: String | r)) +xtypeRadio :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (xtype :: String | r)) xtypeRadio = xtype_ "radio" -xtypeCheckbox :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (xtype :: String | r)) +xtypeCheckbox :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (xtype :: String | r)) xtypeCheckbox = xtype_ "checkbox" -xtypeColor :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (xtype :: String | r)) +xtypeColor :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (xtype :: String | r)) xtypeColor = xtype_ "color" -xtypeRange :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (xtype :: String | r)) +xtypeRange :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (xtype :: String | r)) xtypeRange = xtype_ "range" -xtypeNumber :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (xtype :: String | r)) +xtypeNumber :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (xtype :: String | r)) xtypeNumber = xtype_ "number" -xtypeDatetimeLocal :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (xtype :: String | r)) +xtypeDatetimeLocal :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (xtype :: String | r)) xtypeDatetimeLocal = xtype_ "datetime-local" -xtypeTime :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (xtype :: String | r)) +xtypeTime :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (xtype :: String | r)) xtypeTime = xtype_ "time" -xtypeWeek :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (xtype :: String | r)) +xtypeWeek :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (xtype :: String | r)) xtypeWeek = xtype_ "week" -xtypeMonth :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (xtype :: String | r)) +xtypeMonth :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (xtype :: String | r)) xtypeMonth = xtype_ "month" -xtypeDate :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (xtype :: String | r)) +xtypeDate :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (xtype :: String | r)) xtypeDate = xtype_ "date" -xtypePassword :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (xtype :: String | r)) +xtypePassword :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (xtype :: String | r)) xtypePassword = xtype_ "password" -xtypeEmail :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (xtype :: String | r)) +xtypeEmail :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (xtype :: String | r)) xtypeEmail = xtype_ "email" -xtypeUrl :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (xtype :: String | r)) +xtypeUrl :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (xtype :: String | r)) xtypeUrl = xtype_ "url" -xtypeTel :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (xtype :: String | r)) +xtypeTel :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (xtype :: String | r)) xtypeTel = xtype_ "tel" -xtypeSearch :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (xtype :: String | r)) +xtypeSearch :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (xtype :: String | r)) xtypeSearch = xtype_ "search" -xtypeText :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (xtype :: String | r)) +xtypeText :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (xtype :: String | r)) xtypeText = xtype_ "text" -xtypeHidden :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (xtype :: String | r)) +xtypeHidden :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (xtype :: String | r)) xtypeHidden = xtype_ "hidden" -xtypeUpperI :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (xtype :: String | r)) +xtypeUpperI :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (xtype :: String | r)) xtypeUpperI = xtype_ "I" -xtypeLowerI :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (xtype :: String | r)) +xtypeLowerI :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (xtype :: String | r)) xtypeLowerI = xtype_ "i" -xtypeUpperA :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (xtype :: String | r)) +xtypeUpperA :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (xtype :: String | r)) xtypeUpperA = xtype_ "A" -xtypeLowerA :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (xtype :: String | r)) +xtypeLowerA :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (xtype :: String | r)) xtypeLowerA = xtype_ "a" -xtype1 :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (xtype :: String | r)) +xtype1 :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (xtype :: String | r)) xtype1 = xtype_ "1" hreflang :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (hreflang :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (hreflang :: String | r)) hreflang = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "hreflang", value: _ } <<< Deku.Attribute.prop') -hreflang_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (hreflang :: String | r)) +hreflang_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (hreflang :: String | r)) hreflang_ = hreflang <<< Applicative.pure integrity :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (integrity :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (integrity :: String | r)) integrity = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "integrity", value: _ } <<< Deku.Attribute.prop') integrity_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (integrity :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (integrity :: String | r)) integrity_ = integrity <<< Applicative.pure media :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (media :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (media :: String | r)) media = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "media", value: _ } <<< Deku.Attribute.prop') -media_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (media :: String | r)) +media_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (media :: String | r)) media_ = media <<< Applicative.pure crossorigin :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (crossorigin :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (crossorigin :: String | r)) crossorigin = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "crossorigin", value: _ } <<< Deku.Attribute.prop') crossorigin_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (crossorigin :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (crossorigin :: String | r)) crossorigin_ = crossorigin <<< Applicative.pure crossoriginUseCredentials - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (crossorigin :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (crossorigin :: String | r)) crossoriginUseCredentials = crossorigin_ "use-credentials" crossoriginAnonymous - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (crossorigin :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (crossorigin :: String | r)) crossoriginAnonymous = crossorigin_ "anonymous" rel - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (rel :: String | r)) + :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (rel :: String | r)) rel = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "rel", value: _ } <<< Deku.Attribute.prop') -rel_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (rel :: String | r)) +rel_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (rel :: String | r)) rel_ = rel <<< Applicative.pure -relPrev :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (rel :: String | r)) +relPrev :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (rel :: String | r)) relPrev = rel_ "prev" -relNext :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (rel :: String | r)) +relNext :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (rel :: String | r)) relNext = rel_ "next" -relTag :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (rel :: String | r)) +relTag :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (rel :: String | r)) relTag = rel_ "tag" -relStylesheet :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (rel :: String | r)) +relStylesheet :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (rel :: String | r)) relStylesheet = rel_ "stylesheet" -relSearch :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (rel :: String | r)) +relSearch :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (rel :: String | r)) relSearch = rel_ "search" -relPreload :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (rel :: String | r)) +relPreload :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (rel :: String | r)) relPreload = rel_ "preload" -relPrefetch :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (rel :: String | r)) +relPrefetch :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (rel :: String | r)) relPrefetch = rel_ "prefetch" -relPreconnect :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (rel :: String | r)) +relPreconnect :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (rel :: String | r)) relPreconnect = rel_ "preconnect" -relPingback :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (rel :: String | r)) +relPingback :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (rel :: String | r)) relPingback = rel_ "pingback" -relOpener :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (rel :: String | r)) +relOpener :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (rel :: String | r)) relOpener = rel_ "opener" -relNoreferrer :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (rel :: String | r)) +relNoreferrer :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (rel :: String | r)) relNoreferrer = rel_ "noreferrer" -relNoopener :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (rel :: String | r)) +relNoopener :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (rel :: String | r)) relNoopener = rel_ "noopener" -relNofollow :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (rel :: String | r)) +relNofollow :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (rel :: String | r)) relNofollow = rel_ "nofollow" -relModulepreload :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (rel :: String | r)) +relModulepreload :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (rel :: String | r)) relModulepreload = rel_ "modulepreload" -relManifest :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (rel :: String | r)) +relManifest :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (rel :: String | r)) relManifest = rel_ "manifest" -relLicense :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (rel :: String | r)) +relLicense :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (rel :: String | r)) relLicense = rel_ "license" -relIcon :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (rel :: String | r)) +relIcon :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (rel :: String | r)) relIcon = rel_ "icon" -relHelp :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (rel :: String | r)) +relHelp :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (rel :: String | r)) relHelp = rel_ "help" -relExternal :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (rel :: String | r)) +relExternal :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (rel :: String | r)) relExternal = rel_ "external" -relDnsPrefetch :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (rel :: String | r)) +relDnsPrefetch :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (rel :: String | r)) relDnsPrefetch = rel_ "dns-prefetch" -relCanonical :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (rel :: String | r)) +relCanonical :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (rel :: String | r)) relCanonical = rel_ "canonical" -relBookmark :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (rel :: String | r)) +relBookmark :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (rel :: String | r)) relBookmark = rel_ "bookmark" -relAuthor :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (rel :: String | r)) +relAuthor :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (rel :: String | r)) relAuthor = rel_ "author" -relAlternate :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (rel :: String | r)) +relAlternate :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (rel :: String | r)) relAlternate = rel_ "alternate" scheme :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (scheme :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (scheme :: String | r)) scheme = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "scheme", value: _ } <<< Deku.Attribute.prop') -scheme_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (scheme :: String | r)) +scheme_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (scheme :: String | r)) scheme_ = scheme <<< Applicative.pure httpEquiv :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (httpEquiv :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (httpEquiv :: String | r)) httpEquiv = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "http-equiv", value: _ } <<< Deku.Attribute.prop') httpEquiv_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (httpEquiv :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (httpEquiv :: String | r)) httpEquiv_ = httpEquiv <<< Applicative.pure httpEquivContentSecurityPolicy - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (httpEquiv :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (httpEquiv :: String | r)) httpEquivContentSecurityPolicy = httpEquiv_ "content-security-policy" httpEquivXUaCompatible - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (httpEquiv :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (httpEquiv :: String | r)) httpEquivXUaCompatible = httpEquiv_ "x-ua-compatible" -httpEquivSetCookie - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (httpEquiv :: String | r)) +httpEquivSetCookie :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (httpEquiv :: String | r)) httpEquivSetCookie = httpEquiv_ "set-cookie" -httpEquivRefresh :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (httpEquiv :: String | r)) +httpEquivRefresh :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (httpEquiv :: String | r)) httpEquivRefresh = httpEquiv_ "refresh" httpEquivDefaultStyle - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (httpEquiv :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (httpEquiv :: String | r)) httpEquivDefaultStyle = httpEquiv_ "default-style" httpEquivContentType - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (httpEquiv :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (httpEquiv :: String | r)) httpEquivContentType = httpEquiv_ "content-type" httpEquivContentLanguage - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (httpEquiv :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (httpEquiv :: String | r)) httpEquivContentLanguage = httpEquiv_ "content-language" name - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (name :: String | r)) + :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (name :: String | r)) name = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "name", value: _ } <<< Deku.Attribute.prop') -name_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (name :: String | r)) +name_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (name :: String | r)) name_ = name <<< Applicative.pure -nameColorScheme :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (name :: String | r)) +nameColorScheme :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (name :: String | r)) nameColorScheme = name_ "color-scheme" -nameThemeColor :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (name :: String | r)) +nameThemeColor :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (name :: String | r)) nameThemeColor = name_ "theme-color" -nameReferrer :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (name :: String | r)) +nameReferrer :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (name :: String | r)) nameReferrer = name_ "referrer" -nameKeywords :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (name :: String | r)) +nameKeywords :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (name :: String | r)) nameKeywords = name_ "keywords" -nameGenerator :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (name :: String | r)) +nameGenerator :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (name :: String | r)) nameGenerator = name_ "generator" -nameDescription :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (name :: String | r)) +nameDescription :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (name :: String | r)) nameDescription = name_ "description" -nameAuthor :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (name :: String | r)) +nameAuthor :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (name :: String | r)) nameAuthor = name_ "author" -nameApplicationName :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (name :: String | r)) +nameApplicationName :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (name :: String | r)) nameApplicationName = name_ "application-name" content :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (content :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (content :: String | r)) content = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "content", value: _ } <<< Deku.Attribute.prop') -content_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (content :: String | r)) +content_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (content :: String | r)) content_ = content <<< Applicative.pure cite - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (cite :: String | r)) + :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (cite :: String | r)) cite = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "cite", value: _ } <<< Deku.Attribute.prop') -cite_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (cite :: String | r)) +cite_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (cite :: String | r)) cite_ = cite <<< Applicative.pure compact :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (compact :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (compact :: String | r)) compact = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "compact", value: _ } <<< Deku.Attribute.prop') -compact_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (compact :: String | r)) +compact_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (compact :: String | r)) compact_ = compact <<< Applicative.pure start :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (start :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (start :: String | r)) start = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "start", value: _ } <<< Deku.Attribute.prop') -start_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (start :: String | r)) +start_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (start :: String | r)) start_ = start <<< Applicative.pure reversed :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (reversed :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (reversed :: String | r)) reversed = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "reversed", value: _ } <<< Deku.Attribute.prop') -reversed_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (reversed :: String | r)) +reversed_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (reversed :: String | r)) reversed_ = reversed <<< Applicative.pure value :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (value :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (value :: String | r)) value = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "value", value: _ } <<< Deku.Attribute.prop') -value_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (value :: String | r)) +value_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (value :: String | r)) value_ = value <<< Applicative.pure datetime :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (datetime :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (datetime :: String | r)) datetime = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "datetime", value: _ } <<< Deku.Attribute.prop') -datetime_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (datetime :: String | r)) +datetime_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (datetime :: String | r)) datetime_ = datetime <<< Applicative.pure shape :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (shape :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (shape :: String | r)) shape = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "shape", value: _ } <<< Deku.Attribute.prop') -shape_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (shape :: String | r)) +shape_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (shape :: String | r)) shape_ = shape <<< Applicative.pure -shapeRectangleState :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (shape :: String | r)) +shapeRectangleState :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (shape :: String | r)) shapeRectangleState = shape_ "rectangle state" -shapePolygonState :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (shape :: String | r)) +shapePolygonState :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (shape :: String | r)) shapePolygonState = shape_ "polygon state" -shapeDefaultState :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (shape :: String | r)) +shapeDefaultState :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (shape :: String | r)) shapeDefaultState = shape_ "default state" -shapeCircleState :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (shape :: String | r)) +shapeCircleState :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (shape :: String | r)) shapeCircleState = shape_ "circle state" coords :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (coords :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (coords :: String | r)) coords = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "coords", value: _ } <<< Deku.Attribute.prop') -coords_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (coords :: String | r)) +coords_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (coords :: String | r)) coords_ = coords <<< Applicative.pure ping - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (ping :: String | r)) + :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (ping :: String | r)) ping = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "ping", value: _ } <<< Deku.Attribute.prop') -ping_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (ping :: String | r)) +ping_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (ping :: String | r)) ping_ = ping <<< Applicative.pure download :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (download :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (download :: String | r)) download = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "download", value: _ } <<< Deku.Attribute.prop') -download_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (download :: String | r)) +download_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (download :: String | r)) download_ = download <<< Applicative.pure nohref :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (nohref :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (nohref :: String | r)) nohref = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "nohref", value: _ } <<< Deku.Attribute.prop') -nohref_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (nohref :: String | r)) +nohref_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (nohref :: String | r)) nohref_ = nohref <<< Applicative.pure alt - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (alt :: String | r)) + :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (alt :: String | r)) alt = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "alt", value: _ } <<< Deku.Attribute.prop') -alt_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (alt :: String | r)) +alt_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (alt :: String | r)) alt_ = alt <<< Applicative.pure height :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (height :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (height :: String | r)) height = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "height", value: _ } <<< Deku.Attribute.prop') -height_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (height :: String | r)) +height_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (height :: String | r)) height_ = height <<< Applicative.pure width :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (width :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (width :: String | r)) width = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "width", value: _ } <<< Deku.Attribute.prop') -width_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (width :: String | r)) +width_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (width :: String | r)) width_ = width <<< Applicative.pure src - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (src :: String | r)) + :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (src :: String | r)) src = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "src", value: _ } <<< Deku.Attribute.prop') -src_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (src :: String | r)) +src_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (src :: String | r)) src_ = src <<< Applicative.pure srcset :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (srcset :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (srcset :: String | r)) srcset = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "srcset", value: _ } <<< Deku.Attribute.prop') -srcset_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (srcset :: String | r)) +srcset_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (srcset :: String | r)) srcset_ = srcset <<< Applicative.pure vspace :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (vspace :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (vspace :: String | r)) vspace = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "vspace", value: _ } <<< Deku.Attribute.prop') -vspace_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (vspace :: String | r)) +vspace_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (vspace :: String | r)) vspace_ = vspace <<< Applicative.pure hspace :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (hspace :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (hspace :: String | r)) hspace = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "hspace", value: _ } <<< Deku.Attribute.prop') -hspace_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (hspace :: String | r)) +hspace_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (hspace :: String | r)) hspace_ = hspace <<< Applicative.pure border :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (border :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (border :: String | r)) border = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "border", value: _ } <<< Deku.Attribute.prop') -border_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (border :: String | r)) +border_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (border :: String | r)) border_ = border <<< Applicative.pure align :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (align :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (align :: String | r)) align = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "align", value: _ } <<< Deku.Attribute.prop') -align_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (align :: String | r)) +align_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (align :: String | r)) align_ = align <<< Applicative.pure lowsrc :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (lowsrc :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (lowsrc :: String | r)) lowsrc = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "lowsrc", value: _ } <<< Deku.Attribute.prop') -lowsrc_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (lowsrc :: String | r)) +lowsrc_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (lowsrc :: String | r)) lowsrc_ = lowsrc <<< Applicative.pure longdesc :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (longdesc :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (longdesc :: String | r)) longdesc = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "longdesc", value: _ } <<< Deku.Attribute.prop') -longdesc_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (longdesc :: String | r)) +longdesc_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (longdesc :: String | r)) longdesc_ = longdesc <<< Applicative.pure usemap :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (usemap :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (usemap :: String | r)) usemap = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "usemap", value: _ } <<< Deku.Attribute.prop') -usemap_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (usemap :: String | r)) +usemap_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (usemap :: String | r)) usemap_ = usemap <<< Applicative.pure ismap :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (ismap :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (ismap :: String | r)) ismap = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "ismap", value: _ } <<< Deku.Attribute.prop') -ismap_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (ismap :: String | r)) +ismap_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (ismap :: String | r)) ismap_ = ismap <<< Applicative.pure loading :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (loading :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (loading :: String | r)) loading = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "loading", value: _ } <<< Deku.Attribute.prop') -loading_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (loading :: String | r)) +loading_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (loading :: String | r)) loading_ = loading <<< Applicative.pure -loadingEager :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (loading :: String | r)) +loadingEager :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (loading :: String | r)) loadingEager = loading_ "eager" -loadingLazy :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (loading :: String | r)) +loadingLazy :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (loading :: String | r)) loadingLazy = loading_ "lazy" decoding :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (decoding :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (decoding :: String | r)) decoding = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "decoding", value: _ } <<< Deku.Attribute.prop') -decoding_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (decoding :: String | r)) +decoding_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (decoding :: String | r)) decoding_ = decoding <<< Applicative.pure -decodingAuto :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (decoding :: String | r)) +decodingAuto :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (decoding :: String | r)) decodingAuto = decoding_ "auto" -decodingAsync :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (decoding :: String | r)) +decodingAsync :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (decoding :: String | r)) decodingAsync = decoding_ "async" -decodingSync :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (decoding :: String | r)) +decodingSync :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (decoding :: String | r)) decodingSync = decoding_ "sync" scrolling :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (scrolling :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (scrolling :: String | r)) scrolling = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "scrolling", value: _ } <<< Deku.Attribute.prop') scrolling_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (scrolling :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (scrolling :: String | r)) scrolling_ = scrolling <<< Applicative.pure marginwidth :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (marginwidth :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (marginwidth :: String | r)) marginwidth = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "marginwidth", value: _ } <<< Deku.Attribute.prop') marginwidth_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (marginwidth :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (marginwidth :: String | r)) marginwidth_ = marginwidth <<< Applicative.pure marginheight :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (marginheight :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (marginheight :: String | r)) marginheight = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "marginheight", value: _ } <<< Deku.Attribute.prop') marginheight_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (marginheight :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (marginheight :: String | r)) marginheight_ = marginheight <<< Applicative.pure framespacing :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (framespacing :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (framespacing :: String | r)) framespacing = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "framespacing", value: _ } <<< Deku.Attribute.prop') framespacing_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (framespacing :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (framespacing :: String | r)) framespacing_ = framespacing <<< Applicative.pure frameborder :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (frameborder :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (frameborder :: String | r)) frameborder = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "frameborder", value: _ } <<< Deku.Attribute.prop') frameborder_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (frameborder :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (frameborder :: String | r)) frameborder_ = frameborder <<< Applicative.pure allowtransparency :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (allowtransparency :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (allowtransparency :: String | r)) allowtransparency = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "allowtransparency", value: _ } <<< Deku.Attribute.prop' ) allowtransparency_ - :: forall r - . String - -> FRP.Event.Event (Deku.Attribute.Attribute (allowtransparency :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (allowtransparency :: String | r)) allowtransparency_ = allowtransparency <<< Applicative.pure allowfullscreen :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (allowfullscreen :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (allowfullscreen :: String | r)) allowfullscreen = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "allowfullscreen", value: _ } <<< Deku.Attribute.prop') allowfullscreen_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (allowfullscreen :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (allowfullscreen :: String | r)) allowfullscreen_ = allowfullscreen <<< Applicative.pure allow :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (allow :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (allow :: String | r)) allow = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "allow", value: _ } <<< Deku.Attribute.prop') -allow_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (allow :: String | r)) +allow_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (allow :: String | r)) allow_ = allow <<< Applicative.pure sandbox :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (sandbox :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (sandbox :: String | r)) sandbox = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "sandbox", value: _ } <<< Deku.Attribute.prop') -sandbox_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (sandbox :: String | r)) +sandbox_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (sandbox :: String | r)) sandbox_ = sandbox <<< Applicative.pure sandboxAllowTopNavigationToCustomProtocols - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (sandbox :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (sandbox :: String | r)) sandboxAllowTopNavigationToCustomProtocols = sandbox_ "allow-top-navigation-to-custom-protocols" -sandboxAllowDownloads - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (sandbox :: String | r)) +sandboxAllowDownloads :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (sandbox :: String | r)) sandboxAllowDownloads = sandbox_ "allow-downloads" sandboxAllowPresentation - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (sandbox :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (sandbox :: String | r)) sandboxAllowPresentation = sandbox_ "allow-presentation" sandboxAllowOrientationLock - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (sandbox :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (sandbox :: String | r)) sandboxAllowOrientationLock = sandbox_ "allow-orientation-lock" -sandboxAllowModals :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (sandbox :: String | r)) +sandboxAllowModals :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (sandbox :: String | r)) sandboxAllowModals = sandbox_ "allow-modals" sandboxAllowPopupsToEscapeSandbox - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (sandbox :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (sandbox :: String | r)) sandboxAllowPopupsToEscapeSandbox = sandbox_ "allow-popups-to-escape-sandbox" -sandboxAllowScripts :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (sandbox :: String | r)) +sandboxAllowScripts :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (sandbox :: String | r)) sandboxAllowScripts = sandbox_ "allow-scripts" sandboxAllowPointerLock - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (sandbox :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (sandbox :: String | r)) sandboxAllowPointerLock = sandbox_ "allow-pointer-lock" -sandboxAllowForms :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (sandbox :: String | r)) +sandboxAllowForms :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (sandbox :: String | r)) sandboxAllowForms = sandbox_ "allow-forms" sandboxAllowSameOrigin - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (sandbox :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (sandbox :: String | r)) sandboxAllowSameOrigin = sandbox_ "allow-same-origin" sandboxAllowTopNavigationByUserActivation - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (sandbox :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (sandbox :: String | r)) sandboxAllowTopNavigationByUserActivation = sandbox_ "allow-top-navigation-by-user-activation" sandboxAllowTopNavigation - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (sandbox :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (sandbox :: String | r)) sandboxAllowTopNavigation = sandbox_ "allow-top-navigation" -sandboxAllowPopups :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (sandbox :: String | r)) +sandboxAllowPopups :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (sandbox :: String | r)) sandboxAllowPopups = sandbox_ "allow-popups" srcdoc :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (srcdoc :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (srcdoc :: String | r)) srcdoc = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "srcdoc", value: _ } <<< Deku.Attribute.prop') -srcdoc_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (srcdoc :: String | r)) +srcdoc_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (srcdoc :: String | r)) srcdoc_ = srcdoc <<< Applicative.pure typemustmatch :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (typemustmatch :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (typemustmatch :: String | r)) typemustmatch = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "typemustmatch", value: _ } <<< Deku.Attribute.prop') typemustmatch_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (typemustmatch :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (typemustmatch :: String | r)) typemustmatch_ = typemustmatch <<< Applicative.pure standby :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (standby :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (standby :: String | r)) standby = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "standby", value: _ } <<< Deku.Attribute.prop') -standby_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (standby :: String | r)) +standby_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (standby :: String | r)) standby_ = standby <<< Applicative.pure declare :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (declare :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (declare :: String | r)) declare = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "declare", value: _ } <<< Deku.Attribute.prop') -declare_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (declare :: String | r)) +declare_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (declare :: String | r)) declare_ = declare <<< Applicative.pure codetype :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (codetype :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (codetype :: String | r)) codetype = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "codetype", value: _ } <<< Deku.Attribute.prop') -codetype_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (codetype :: String | r)) +codetype_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (codetype :: String | r)) codetype_ = codetype <<< Applicative.pure codebase :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (codebase :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (codebase :: String | r)) codebase = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "codebase", value: _ } <<< Deku.Attribute.prop') -codebase_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (codebase :: String | r)) +codebase_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (codebase :: String | r)) codebase_ = codebase <<< Applicative.pure code - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (code :: String | r)) + :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (code :: String | r)) code = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "code", value: _ } <<< Deku.Attribute.prop') -code_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (code :: String | r)) +code_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (code :: String | r)) code_ = code <<< Applicative.pure classid :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (classid :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (classid :: String | r)) classid = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "classid", value: _ } <<< Deku.Attribute.prop') -classid_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (classid :: String | r)) +classid_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (classid :: String | r)) classid_ = classid <<< Applicative.pure archive :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (archive :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (archive :: String | r)) archive = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "archive", value: _ } <<< Deku.Attribute.prop') -archive_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (archive :: String | r)) +archive_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (archive :: String | r)) archive_ = archive <<< Applicative.pure autocomplete :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocomplete = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "autocomplete", value: _ } <<< Deku.Attribute.prop') autocomplete_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocomplete_ = autocomplete <<< Applicative.pure -autocompleteImpp - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) +autocompleteImpp :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteImpp = autocomplete_ "impp" autocompleteEmail - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteEmail = autocomplete_ "email" autocompleteTelExtension - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteTelExtension = autocomplete_ "tel-extension" autocompleteTelLocalSuffix - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteTelLocalSuffix = autocomplete_ "tel-local-suffix" autocompleteTelLocalPrefix - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteTelLocalPrefix = autocomplete_ "tel-local-prefix" autocompleteTelLocal - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteTelLocal = autocomplete_ "tel-local" autocompleteTelAreaCode - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteTelAreaCode = autocomplete_ "tel-area-code" autocompleteTelNational - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteTelNational = autocomplete_ "tel-national" autocompleteTelCountryCode - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteTelCountryCode = autocomplete_ "tel-country-code" -autocompleteTel - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) +autocompleteTel :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteTel = autocomplete_ "tel" autocompletePhoto - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompletePhoto = autocomplete_ "photo" -autocompleteUrl - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) +autocompleteUrl :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteUrl = autocomplete_ "url" -autocompleteSex - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) +autocompleteSex :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteSex = autocomplete_ "sex" autocompleteBdayYear - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteBdayYear = autocomplete_ "bday-year" autocompleteBdayMonth - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteBdayMonth = autocomplete_ "bday-month" autocompleteBdayDay - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteBdayDay = autocomplete_ "bday-day" -autocompleteBday - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) +autocompleteBday :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteBday = autocomplete_ "bday" autocompleteLanguage - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteLanguage = autocomplete_ "language" autocompleteTransactionAmount - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteTransactionAmount = autocomplete_ "transaction-amount" autocompleteTransactionCurrency - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteTransactionCurrency = autocomplete_ "transaction-currency" autocompleteCcType - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteCcType = autocomplete_ "cc-type" autocompleteCcCsc - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteCcCsc = autocomplete_ "cc-csc" autocompleteCcExpYear - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteCcExpYear = autocomplete_ "cc-exp-year" autocompleteCcExpMonth - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteCcExpMonth = autocomplete_ "cc-exp-month" autocompleteCcExp - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteCcExp = autocomplete_ "cc-exp" autocompleteCcNumber - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteCcNumber = autocomplete_ "cc-number" autocompleteCcFamilyName - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteCcFamilyName = autocomplete_ "cc-family-name" autocompleteCcAdditionalName - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteCcAdditionalName = autocomplete_ "cc-additional-name" autocompleteCcGivenName - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteCcGivenName = autocomplete_ "cc-given-name" autocompleteCcName - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteCcName = autocomplete_ "cc-name" autocompletePostalCode - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompletePostalCode = autocomplete_ "postal-code" autocompleteCountryName - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteCountryName = autocomplete_ "country-name" autocompleteCountry - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteCountry = autocomplete_ "country" autocompleteAddressLevel1 - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteAddressLevel1 = autocomplete_ "address-level1" autocompleteAddressLevel2 - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteAddressLevel2 = autocomplete_ "address-level2" autocompleteAddressLevel3 - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteAddressLevel3 = autocomplete_ "address-level3" autocompleteAddressLevel4 - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteAddressLevel4 = autocomplete_ "address-level4" autocompleteAddressLine3 - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteAddressLine3 = autocomplete_ "address-line3" autocompleteAddressLine2 - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteAddressLine2 = autocomplete_ "address-line2" autocompleteAddressLine1 - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteAddressLine1 = autocomplete_ "address-line1" autocompleteStreetAddress - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteStreetAddress = autocomplete_ "street-address" autocompleteOrganization - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteOrganization = autocomplete_ "organization" autocompleteOneTimeCode - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteOneTimeCode = autocomplete_ "one-time-code" autocompleteCurrentPassword - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteCurrentPassword = autocomplete_ "current-password" autocompleteNewPassword - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteNewPassword = autocomplete_ "new-password" autocompleteUsername - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteUsername = autocomplete_ "username" autocompleteOrganizationTitle - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteOrganizationTitle = autocomplete_ "organization-title" autocompleteNickname - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteNickname = autocomplete_ "nickname" autocompleteHonorificSuffix - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteHonorificSuffix = autocomplete_ "honorific-suffix" autocompleteFamilyName - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteFamilyName = autocomplete_ "family-name" autocompleteAdditionalName - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteAdditionalName = autocomplete_ "additional-name" autocompleteGivenName - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteGivenName = autocomplete_ "given-name" autocompleteHonorificPrefix - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteHonorificPrefix = autocomplete_ "honorific-prefix" -autocompleteName - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) +autocompleteName :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteName = autocomplete_ "name" -autocompleteOn :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) +autocompleteOn :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteOn = autocomplete_ "on" -autocompleteOff - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) +autocompleteOff :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteOff = autocomplete_ "off" autocompletePager - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompletePager = autocomplete_ "pager" -autocompleteFax - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) +autocompleteFax :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteFax = autocomplete_ "fax" autocompleteMobile - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteMobile = autocomplete_ "mobile" -autocompleteWork - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) +autocompleteWork :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteWork = autocomplete_ "work" -autocompleteHome - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) +autocompleteHome :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteHome = autocomplete_ "home" autocompleteBilling - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteBilling = autocomplete_ "billing" autocompleteShipping - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteShipping = autocomplete_ "shipping" autocompleteSection - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (autocomplete :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (autocomplete :: String | r)) autocompleteSection = autocomplete_ "section-" -dirname - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (dirname :: String | r)) -dirname = Functor.map - (Deku.Attribute.unsafeAttribute <<< { key: "dirname", value: _ } <<< Deku.Attribute.prop') - -dirname_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (dirname :: String | r)) -dirname_ = dirname <<< Applicative.pure - form - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (form :: String | r)) + :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (form :: String | r)) form = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "form", value: _ } <<< Deku.Attribute.prop') -form_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (form :: String | r)) +form_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (form :: String | r)) form_ = form <<< Applicative.pure xdata :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (xdata :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (xdata :: String | r)) xdata = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "data", value: _ } <<< Deku.Attribute.prop') -xdata_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (xdata :: String | r)) +xdata_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (xdata :: String | r)) xdata_ = xdata <<< Applicative.pure muted :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (muted :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (muted :: String | r)) muted = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "muted", value: _ } <<< Deku.Attribute.prop') -muted_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (muted :: String | r)) +muted_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (muted :: String | r)) muted_ = muted <<< Applicative.pure controls :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (controls :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (controls :: String | r)) controls = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "controls", value: _ } <<< Deku.Attribute.prop') -controls_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (controls :: String | r)) +controls_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (controls :: String | r)) controls_ = controls <<< Applicative.pure autoplay :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (autoplay :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (autoplay :: String | r)) autoplay = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "autoplay", value: _ } <<< Deku.Attribute.prop') -autoplay_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (autoplay :: String | r)) +autoplay_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (autoplay :: String | r)) autoplay_ = autoplay <<< Applicative.pure loop - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (loop :: String | r)) + :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (loop :: String | r)) loop = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "loop", value: _ } <<< Deku.Attribute.prop') -loop_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (loop :: String | r)) +loop_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (loop :: String | r)) loop_ = loop <<< Applicative.pure preload :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (preload :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (preload :: String | r)) preload = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "preload", value: _ } <<< Deku.Attribute.prop') -preload_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (preload :: String | r)) +preload_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (preload :: String | r)) preload_ = preload <<< Applicative.pure -preloadAuto :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (preload :: String | r)) +preloadAuto :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (preload :: String | r)) preloadAuto = preload_ "auto" -preloadMetadata :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (preload :: String | r)) +preloadMetadata :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (preload :: String | r)) preloadMetadata = preload_ "metadata" -preloadNone :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (preload :: String | r)) +preloadNone :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (preload :: String | r)) preloadNone = preload_ "none" playsinline :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (playsinline :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (playsinline :: String | r)) playsinline = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "playsinline", value: _ } <<< Deku.Attribute.prop') playsinline_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (playsinline :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (playsinline :: String | r)) playsinline_ = playsinline <<< Applicative.pure poster :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (poster :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (poster :: String | r)) poster = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "poster", value: _ } <<< Deku.Attribute.prop') -poster_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (poster :: String | r)) +poster_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (poster :: String | r)) poster_ = poster <<< Applicative.pure default :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (default :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (default :: String | r)) default = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "default", value: _ } <<< Deku.Attribute.prop') -default_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (default :: String | r)) +default_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (default :: String | r)) default_ = default <<< Applicative.pure label :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (label :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (label :: String | r)) label = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "label", value: _ } <<< Deku.Attribute.prop') -label_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (label :: String | r)) +label_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (label :: String | r)) label_ = label <<< Applicative.pure srclang :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (srclang :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (srclang :: String | r)) srclang = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "srclang", value: _ } <<< Deku.Attribute.prop') -srclang_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (srclang :: String | r)) +srclang_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (srclang :: String | r)) srclang_ = srclang <<< Applicative.pure kind - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (kind :: String | r)) + :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (kind :: String | r)) kind = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "kind", value: _ } <<< Deku.Attribute.prop') -kind_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (kind :: String | r)) +kind_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (kind :: String | r)) kind_ = kind <<< Applicative.pure -kindMetadata :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (kind :: String | r)) +kindMetadata :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (kind :: String | r)) kindMetadata = kind_ "metadata" -kindChapters :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (kind :: String | r)) +kindChapters :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (kind :: String | r)) kindChapters = kind_ "chapters" -kindDescriptions :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (kind :: String | r)) +kindDescriptions :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (kind :: String | r)) kindDescriptions = kind_ "descriptions" -kindCaptions :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (kind :: String | r)) +kindCaptions :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (kind :: String | r)) kindCaptions = kind_ "captions" -kindSubtitles :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (kind :: String | r)) +kindSubtitles :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (kind :: String | r)) kindSubtitles = kind_ "subtitles" valign :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (valign :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (valign :: String | r)) valign = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "valign", value: _ } <<< Deku.Attribute.prop') -valign_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (valign :: String | r)) +valign_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (valign :: String | r)) valign_ = valign <<< Applicative.pure charoff :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (charoff :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (charoff :: String | r)) charoff = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "charoff", value: _ } <<< Deku.Attribute.prop') -charoff_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (charoff :: String | r)) +charoff_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (charoff :: String | r)) charoff_ = charoff <<< Applicative.pure char - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (char :: String | r)) + :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (char :: String | r)) char = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "char", value: _ } <<< Deku.Attribute.prop') -char_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (char :: String | r)) +char_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (char :: String | r)) char_ = char <<< Applicative.pure span - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (span :: String | r)) + :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (span :: String | r)) span = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "span", value: _ } <<< Deku.Attribute.prop') -span_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (span :: String | r)) +span_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (span :: String | r)) span_ = span <<< Applicative.pure nowrap :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (nowrap :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (nowrap :: String | r)) nowrap = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "nowrap", value: _ } <<< Deku.Attribute.prop') -nowrap_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (nowrap :: String | r)) +nowrap_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (nowrap :: String | r)) nowrap_ = nowrap <<< Applicative.pure bgcolor :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (bgcolor :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (bgcolor :: String | r)) bgcolor = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "bgcolor", value: _ } <<< Deku.Attribute.prop') -bgcolor_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (bgcolor :: String | r)) +bgcolor_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (bgcolor :: String | r)) bgcolor_ = bgcolor <<< Applicative.pure scope :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (scope :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (scope :: String | r)) scope = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "scope", value: _ } <<< Deku.Attribute.prop') -scope_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (scope :: String | r)) +scope_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (scope :: String | r)) scope_ = scope <<< Applicative.pure -scopeAuto :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (scope :: String | r)) +scopeAuto :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (scope :: String | r)) scopeAuto = scope_ "auto" -scopeColgroup :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (scope :: String | r)) +scopeColgroup :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (scope :: String | r)) scopeColgroup = scope_ "colgroup" -scopeRowgroup :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (scope :: String | r)) +scopeRowgroup :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (scope :: String | r)) scopeRowgroup = scope_ "rowgroup" -scopeCol :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (scope :: String | r)) +scopeCol :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (scope :: String | r)) scopeCol = scope_ "col" -scopeRow :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (scope :: String | r)) +scopeRow :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (scope :: String | r)) scopeRow = scope_ "row" axis - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (axis :: String | r)) + :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (axis :: String | r)) axis = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "axis", value: _ } <<< Deku.Attribute.prop') -axis_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (axis :: String | r)) +axis_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (axis :: String | r)) axis_ = axis <<< Applicative.pure abbr - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (abbr :: String | r)) + :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (abbr :: String | r)) abbr = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "abbr", value: _ } <<< Deku.Attribute.prop') -abbr_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (abbr :: String | r)) +abbr_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (abbr :: String | r)) abbr_ = abbr <<< Applicative.pure headers :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (headers :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (headers :: String | r)) headers = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "headers", value: _ } <<< Deku.Attribute.prop') -headers_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (headers :: String | r)) +headers_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (headers :: String | r)) headers_ = headers <<< Applicative.pure rowspan :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (rowspan :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (rowspan :: String | r)) rowspan = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "rowspan", value: _ } <<< Deku.Attribute.prop') -rowspan_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (rowspan :: String | r)) +rowspan_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (rowspan :: String | r)) rowspan_ = rowspan <<< Applicative.pure colspan :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (colspan :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (colspan :: String | r)) colspan = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "colspan", value: _ } <<< Deku.Attribute.prop') -colspan_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (colspan :: String | r)) +colspan_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (colspan :: String | r)) colspan_ = colspan <<< Applicative.pure accept :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (accept :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (accept :: String | r)) accept = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "accept", value: _ } <<< Deku.Attribute.prop') -accept_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (accept :: String | r)) +accept_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (accept :: String | r)) accept_ = accept <<< Applicative.pure formnovalidate :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (formnovalidate :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (formnovalidate :: String | r)) formnovalidate = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "formnovalidate", value: _ } <<< Deku.Attribute.prop') formnovalidate_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (formnovalidate :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (formnovalidate :: String | r)) formnovalidate_ = formnovalidate <<< Applicative.pure novalidate :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (novalidate :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (novalidate :: String | r)) novalidate = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "novalidate", value: _ } <<< Deku.Attribute.prop') novalidate_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (novalidate :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (novalidate :: String | r)) novalidate_ = novalidate <<< Applicative.pure formtarget :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (formtarget :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (formtarget :: String | r)) formtarget = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "formtarget", value: _ } <<< Deku.Attribute.prop') formtarget_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (formtarget :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (formtarget :: String | r)) formtarget_ = formtarget <<< Applicative.pure formenctype :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (formenctype :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (formenctype :: String | r)) formenctype = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "formenctype", value: _ } <<< Deku.Attribute.prop') formenctype_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (formenctype :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (formenctype :: String | r)) formenctype_ = formenctype <<< Applicative.pure enctype :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (enctype :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (enctype :: String | r)) enctype = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "enctype", value: _ } <<< Deku.Attribute.prop') -enctype_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (enctype :: String | r)) +enctype_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (enctype :: String | r)) enctype_ = enctype <<< Applicative.pure -enctypeTextPlain :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (enctype :: String | r)) +enctypeTextPlain :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (enctype :: String | r)) enctypeTextPlain = enctype_ "text/plain" enctypeMultipartFormData - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (enctype :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (enctype :: String | r)) enctypeMultipartFormData = enctype_ "multipart/form-data" enctypeApplicationXWwwFormUrlencoded - :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (enctype :: String | r)) + :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (enctype :: String | r)) enctypeApplicationXWwwFormUrlencoded = enctype_ "application/x-www-form-urlencoded" formmethod :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (formmethod :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (formmethod :: String | r)) formmethod = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "formmethod", value: _ } <<< Deku.Attribute.prop') formmethod_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (formmethod :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (formmethod :: String | r)) formmethod_ = formmethod <<< Applicative.pure method :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (method :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (method :: String | r)) method = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "method", value: _ } <<< Deku.Attribute.prop') -method_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (method :: String | r)) +method_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (method :: String | r)) method_ = method <<< Applicative.pure -methodDialog :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (method :: String | r)) +methodDialog :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (method :: String | r)) methodDialog = method_ "dialog" -methodPost :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (method :: String | r)) +methodPost :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (method :: String | r)) methodPost = method_ "post" -methodGet :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (method :: String | r)) +methodGet :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (method :: String | r)) methodGet = method_ "get" formaction :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (formaction :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (formaction :: String | r)) formaction = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "formaction", value: _ } <<< Deku.Attribute.prop') formaction_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (formaction :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (formaction :: String | r)) formaction_ = formaction <<< Applicative.pure action :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (action :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (action :: String | r)) action = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "action", value: _ } <<< Deku.Attribute.prop') -action_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (action :: String | r)) +action_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (action :: String | r)) action_ = action <<< Applicative.pure acceptCharset :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (acceptCharset :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (acceptCharset :: String | r)) acceptCharset = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "accept-charset", value: _ } <<< Deku.Attribute.prop') acceptCharset_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (acceptCharset :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (acceptCharset :: String | r)) acceptCharset_ = acceptCharset <<< Applicative.pure for - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (for :: String | r)) + :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (for :: String | r)) for = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "for", value: _ } <<< Deku.Attribute.prop') -for_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (for :: String | r)) +for_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (for :: String | r)) for_ = for <<< Applicative.pure capture :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (capture :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (capture :: String | r)) capture = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "capture", value: _ } <<< Deku.Attribute.prop') -capture_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (capture :: String | r)) +capture_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (capture :: String | r)) capture_ = capture <<< Applicative.pure minlength :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (minlength :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (minlength :: String | r)) minlength = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "minlength", value: _ } <<< Deku.Attribute.prop') minlength_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (minlength :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (minlength :: String | r)) minlength_ = minlength <<< Applicative.pure maxlength :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (maxlength :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (maxlength :: String | r)) maxlength = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "maxlength", value: _ } <<< Deku.Attribute.prop') maxlength_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (maxlength :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (maxlength :: String | r)) maxlength_ = maxlength <<< Applicative.pure +dirname + :: forall r + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (dirname :: String | r)) +dirname = Functor.map + (Deku.Attribute.unsafeAttribute <<< { key: "dirname", value: _ } <<< Deku.Attribute.prop') + +dirname_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (dirname :: String | r)) +dirname_ = dirname <<< Applicative.pure + placeholder :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (placeholder :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (placeholder :: String | r)) placeholder = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "placeholder", value: _ } <<< Deku.Attribute.prop') placeholder_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (placeholder :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (placeholder :: String | r)) placeholder_ = placeholder <<< Applicative.pure list - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (list :: String | r)) + :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (list :: String | r)) list = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "list", value: _ } <<< Deku.Attribute.prop') -list_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (list :: String | r)) +list_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (list :: String | r)) list_ = list <<< Applicative.pure step - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (step :: String | r)) + :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (step :: String | r)) step = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "step", value: _ } <<< Deku.Attribute.prop') -step_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (step :: String | r)) +step_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (step :: String | r)) step_ = step <<< Applicative.pure max - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (max :: String | r)) + :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (max :: String | r)) max = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "max", value: _ } <<< Deku.Attribute.prop') -max_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (max :: String | r)) +max_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (max :: String | r)) max_ = max <<< Applicative.pure min - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (min :: String | r)) + :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (min :: String | r)) min = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "min", value: _ } <<< Deku.Attribute.prop') -min_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (min :: String | r)) +min_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (min :: String | r)) min_ = min <<< Applicative.pure pattern :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (pattern :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (pattern :: String | r)) pattern = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "pattern", value: _ } <<< Deku.Attribute.prop') -pattern_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (pattern :: String | r)) +pattern_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (pattern :: String | r)) pattern_ = pattern <<< Applicative.pure multiple :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (multiple :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (multiple :: String | r)) multiple = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "multiple", value: _ } <<< Deku.Attribute.prop') -multiple_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (multiple :: String | r)) +multiple_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (multiple :: String | r)) multiple_ = multiple <<< Applicative.pure required :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (required :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (required :: String | r)) required = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "required", value: _ } <<< Deku.Attribute.prop') -required_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (required :: String | r)) +required_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (required :: String | r)) required_ = required <<< Applicative.pure readonly :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (readonly :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (readonly :: String | r)) readonly = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "readonly", value: _ } <<< Deku.Attribute.prop') -readonly_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (readonly :: String | r)) +readonly_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (readonly :: String | r)) readonly_ = readonly <<< Applicative.pure size - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (size :: String | r)) + :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (size :: String | r)) size = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "size", value: _ } <<< Deku.Attribute.prop') -size_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (size :: String | r)) +size_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (size :: String | r)) size_ = size <<< Applicative.pure checked :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (checked :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (checked :: String | r)) checked = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "checked", value: _ } <<< Deku.Attribute.prop') -checked_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (checked :: String | r)) +checked_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (checked :: String | r)) checked_ = checked <<< Applicative.pure selected :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (selected :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (selected :: String | r)) selected = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "selected", value: _ } <<< Deku.Attribute.prop') -selected_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (selected :: String | r)) +selected_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (selected :: String | r)) selected_ = selected <<< Applicative.pure wrap - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (wrap :: String | r)) + :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (wrap :: String | r)) wrap = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "wrap", value: _ } <<< Deku.Attribute.prop') -wrap_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (wrap :: String | r)) +wrap_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (wrap :: String | r)) wrap_ = wrap <<< Applicative.pure -wrapHard :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (wrap :: String | r)) +wrapHard :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (wrap :: String | r)) wrapHard = wrap_ "hard" -wrapSoft :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (wrap :: String | r)) +wrapSoft :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (wrap :: String | r)) wrapSoft = wrap_ "soft" rows - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (rows :: String | r)) + :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (rows :: String | r)) rows = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "rows", value: _ } <<< Deku.Attribute.prop') -rows_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (rows :: String | r)) +rows_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (rows :: String | r)) rows_ = rows <<< Applicative.pure cols - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (cols :: String | r)) + :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (cols :: String | r)) cols = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "cols", value: _ } <<< Deku.Attribute.prop') -cols_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (cols :: String | r)) +cols_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (cols :: String | r)) cols_ = cols <<< Applicative.pure optimum :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (optimum :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (optimum :: String | r)) optimum = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "optimum", value: _ } <<< Deku.Attribute.prop') -optimum_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (optimum :: String | r)) +optimum_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (optimum :: String | r)) optimum_ = optimum <<< Applicative.pure high - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (high :: String | r)) + :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (high :: String | r)) high = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "high", value: _ } <<< Deku.Attribute.prop') -high_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (high :: String | r)) +high_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (high :: String | r)) high_ = high <<< Applicative.pure low - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (low :: String | r)) + :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (low :: String | r)) low = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "low", value: _ } <<< Deku.Attribute.prop') -low_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (low :: String | r)) +low_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (low :: String | r)) low_ = low <<< Applicative.pure open - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (open :: String | r)) + :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (open :: String | r)) open = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "open", value: _ } <<< Deku.Attribute.prop') -open_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (open :: String | r)) +open_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (open :: String | r)) open_ = open <<< Applicative.pure event :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (event :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (event :: String | r)) event = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "event", value: _ } <<< Deku.Attribute.prop') -event_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (event :: String | r)) +event_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (event :: String | r)) event_ = event <<< Applicative.pure language :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (language :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (language :: String | r)) language = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "language", value: _ } <<< Deku.Attribute.prop') -language_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (language :: String | r)) +language_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (language :: String | r)) language_ = language <<< Applicative.pure defer :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (defer :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (defer :: String | r)) defer = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "defer", value: _ } <<< Deku.Attribute.prop') -defer_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (defer :: String | r)) +defer_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (defer :: String | r)) defer_ = defer <<< Applicative.pure async :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (async :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (async :: String | r)) async = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "async", value: _ } <<< Deku.Attribute.prop') -async_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (async :: String | r)) +async_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (async :: String | r)) async_ = async <<< Applicative.pure nomodule :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (nomodule :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (nomodule :: String | r)) nomodule = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "nomodule", value: _ } <<< Deku.Attribute.prop') -nomodule_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (nomodule :: String | r)) +nomodule_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (nomodule :: String | r)) nomodule_ = nomodule <<< Applicative.pure profile :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (profile :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (profile :: String | r)) profile = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "profile", value: _ } <<< Deku.Attribute.prop') -profile_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (profile :: String | r)) +profile_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (profile :: String | r)) profile_ = profile <<< Applicative.pure version :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (version :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (version :: String | r)) version = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "version", value: _ } <<< Deku.Attribute.prop') -version_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (version :: String | r)) +version_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (version :: String | r)) version_ = version <<< Applicative.pure manifest :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (manifest :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (manifest :: String | r)) manifest = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "manifest", value: _ } <<< Deku.Attribute.prop') -manifest_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (manifest :: String | r)) +manifest_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (manifest :: String | r)) manifest_ = manifest <<< Applicative.pure rules :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (rules :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (rules :: String | r)) rules = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "rules", value: _ } <<< Deku.Attribute.prop') -rules_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (rules :: String | r)) +rules_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (rules :: String | r)) rules_ = rules <<< Applicative.pure frame :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (frame :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (frame :: String | r)) frame = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "frame", value: _ } <<< Deku.Attribute.prop') -frame_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (frame :: String | r)) +frame_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (frame :: String | r)) frame_ = frame <<< Applicative.pure cellspacing :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (cellspacing :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (cellspacing :: String | r)) cellspacing = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "cellspacing", value: _ } <<< Deku.Attribute.prop') cellspacing_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (cellspacing :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (cellspacing :: String | r)) cellspacing_ = cellspacing <<< Applicative.pure cellpadding :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (cellpadding :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (cellpadding :: String | r)) cellpadding = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "cellpadding", value: _ } <<< Deku.Attribute.prop') cellpadding_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (cellpadding :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (cellpadding :: String | r)) cellpadding_ = cellpadding <<< Applicative.pure bordercolor :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (bordercolor :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (bordercolor :: String | r)) bordercolor = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "bordercolor", value: _ } <<< Deku.Attribute.prop') bordercolor_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (bordercolor :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (bordercolor :: String | r)) bordercolor_ = bordercolor <<< Applicative.pure summary :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (summary :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (summary :: String | r)) summary = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "summary", value: _ } <<< Deku.Attribute.prop') -summary_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (summary :: String | r)) +summary_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (summary :: String | r)) summary_ = summary <<< Applicative.pure datapagesize :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (datapagesize :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (datapagesize :: String | r)) datapagesize = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "datapagesize", value: _ } <<< Deku.Attribute.prop') datapagesize_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (datapagesize :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (datapagesize :: String | r)) datapagesize_ = datapagesize <<< Applicative.pure vlink :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (vlink :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (vlink :: String | r)) vlink = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "vlink", value: _ } <<< Deku.Attribute.prop') -vlink_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (vlink :: String | r)) +vlink_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (vlink :: String | r)) vlink_ = vlink <<< Applicative.pure topmargin :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (topmargin :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (topmargin :: String | r)) topmargin = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "topmargin", value: _ } <<< Deku.Attribute.prop') topmargin_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (topmargin :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (topmargin :: String | r)) topmargin_ = topmargin <<< Applicative.pure text - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (text :: String | r)) + :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (text :: String | r)) text = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "text", value: _ } <<< Deku.Attribute.prop') -text_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (text :: String | r)) +text_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (text :: String | r)) text_ = text <<< Applicative.pure rightmargin :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (rightmargin :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (rightmargin :: String | r)) rightmargin = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "rightmargin", value: _ } <<< Deku.Attribute.prop') rightmargin_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (rightmargin :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (rightmargin :: String | r)) rightmargin_ = rightmargin <<< Applicative.pure link - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (link :: String | r)) + :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (link :: String | r)) link = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "link", value: _ } <<< Deku.Attribute.prop') -link_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (link :: String | r)) +link_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (link :: String | r)) link_ = link <<< Applicative.pure leftmargin :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (leftmargin :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (leftmargin :: String | r)) leftmargin = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "leftmargin", value: _ } <<< Deku.Attribute.prop') leftmargin_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (leftmargin :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (leftmargin :: String | r)) leftmargin_ = leftmargin <<< Applicative.pure bottommargin :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (bottommargin :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (bottommargin :: String | r)) bottommargin = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "bottommargin", value: _ } <<< Deku.Attribute.prop') bottommargin_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (bottommargin :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (bottommargin :: String | r)) bottommargin_ = bottommargin <<< Applicative.pure alink :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (alink :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (alink :: String | r)) alink = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "alink", value: _ } <<< Deku.Attribute.prop') -alink_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (alink :: String | r)) +alink_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (alink :: String | r)) alink_ = alink <<< Applicative.pure clear :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (clear :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (clear :: String | r)) clear = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "clear", value: _ } <<< Deku.Attribute.prop') -clear_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (clear :: String | r)) +clear_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (clear :: String | r)) clear_ = clear <<< Applicative.pure noshade :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (noshade :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (noshade :: String | r)) noshade = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "noshade", value: _ } <<< Deku.Attribute.prop') -noshade_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (noshade :: String | r)) +noshade_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (noshade :: String | r)) noshade_ = noshade <<< Applicative.pure truespeed :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (truespeed :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (truespeed :: String | r)) truespeed = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "truespeed", value: _ } <<< Deku.Attribute.prop') truespeed_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (truespeed :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (truespeed :: String | r)) truespeed_ = truespeed <<< Applicative.pure direction :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (direction :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (direction :: String | r)) direction = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "direction", value: _ } <<< Deku.Attribute.prop') direction_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (direction :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (direction :: String | r)) direction_ = direction <<< Applicative.pure behavior :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (behavior :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (behavior :: String | r)) behavior = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "behavior", value: _ } <<< Deku.Attribute.prop') -behavior_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (behavior :: String | r)) +behavior_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (behavior :: String | r)) behavior_ = behavior <<< Applicative.pure ariaValuetext :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (ariaValuetext :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaValuetext :: String | r)) ariaValuetext = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "aria-valuetext", value: _ } <<< Deku.Attribute.prop') ariaValuetext_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (ariaValuetext :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaValuetext :: String | r)) ariaValuetext_ = ariaValuetext <<< Applicative.pure ariaValuenow :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (ariaValuenow :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaValuenow :: String | r)) ariaValuenow = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "aria-valuenow", value: _ } <<< Deku.Attribute.prop') ariaValuenow_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (ariaValuenow :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaValuenow :: String | r)) ariaValuenow_ = ariaValuenow <<< Applicative.pure ariaValuemin :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (ariaValuemin :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaValuemin :: String | r)) ariaValuemin = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "aria-valuemin", value: _ } <<< Deku.Attribute.prop') ariaValuemin_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (ariaValuemin :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaValuemin :: String | r)) ariaValuemin_ = ariaValuemin <<< Applicative.pure ariaValuemax :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (ariaValuemax :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaValuemax :: String | r)) ariaValuemax = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "aria-valuemax", value: _ } <<< Deku.Attribute.prop') ariaValuemax_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (ariaValuemax :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaValuemax :: String | r)) ariaValuemax_ = ariaValuemax <<< Applicative.pure ariaSort :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (ariaSort :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaSort :: String | r)) ariaSort = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "aria-sort", value: _ } <<< Deku.Attribute.prop') -ariaSort_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (ariaSort :: String | r)) +ariaSort_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaSort :: String | r)) ariaSort_ = ariaSort <<< Applicative.pure ariaSetsize :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (ariaSetsize :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaSetsize :: String | r)) ariaSetsize = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "aria-setsize", value: _ } <<< Deku.Attribute.prop') ariaSetsize_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (ariaSetsize :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaSetsize :: String | r)) ariaSetsize_ = ariaSetsize <<< Applicative.pure ariaSelected :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (ariaSelected :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaSelected :: String | r)) ariaSelected = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "aria-selected", value: _ } <<< Deku.Attribute.prop') ariaSelected_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (ariaSelected :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaSelected :: String | r)) ariaSelected_ = ariaSelected <<< Applicative.pure ariaRowspan :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (ariaRowspan :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaRowspan :: String | r)) ariaRowspan = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "aria-rowspan", value: _ } <<< Deku.Attribute.prop') ariaRowspan_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (ariaRowspan :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaRowspan :: String | r)) ariaRowspan_ = ariaRowspan <<< Applicative.pure ariaRowindextext :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (ariaRowindextext :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaRowindextext :: String | r)) ariaRowindextext = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "aria-rowindextext", value: _ } <<< Deku.Attribute.prop' ) ariaRowindextext_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (ariaRowindextext :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaRowindextext :: String | r)) ariaRowindextext_ = ariaRowindextext <<< Applicative.pure ariaRowindex :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (ariaRowindex :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaRowindex :: String | r)) ariaRowindex = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "aria-rowindex", value: _ } <<< Deku.Attribute.prop') ariaRowindex_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (ariaRowindex :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaRowindex :: String | r)) ariaRowindex_ = ariaRowindex <<< Applicative.pure ariaRowcount :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (ariaRowcount :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaRowcount :: String | r)) ariaRowcount = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "aria-rowcount", value: _ } <<< Deku.Attribute.prop') ariaRowcount_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (ariaRowcount :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaRowcount :: String | r)) ariaRowcount_ = ariaRowcount <<< Applicative.pure ariaRoledescription :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (ariaRoledescription :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaRoledescription :: String | r)) ariaRoledescription = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "aria-roledescription", value: _ } <<< Deku.Attribute.prop' @@ -3493,94 +3375,93 @@ ariaRoledescription = Functor.map ariaRoledescription_ :: forall r . String - -> FRP.Event.Event (Deku.Attribute.Attribute (ariaRoledescription :: String | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaRoledescription :: String | r)) ariaRoledescription_ = ariaRoledescription <<< Applicative.pure ariaRequired :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (ariaRequired :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaRequired :: String | r)) ariaRequired = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "aria-required", value: _ } <<< Deku.Attribute.prop') ariaRequired_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (ariaRequired :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaRequired :: String | r)) ariaRequired_ = ariaRequired <<< Applicative.pure ariaReadonly :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (ariaReadonly :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaReadonly :: String | r)) ariaReadonly = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "aria-readonly", value: _ } <<< Deku.Attribute.prop') ariaReadonly_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (ariaReadonly :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaReadonly :: String | r)) ariaReadonly_ = ariaReadonly <<< Applicative.pure ariaPressed :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (ariaPressed :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaPressed :: String | r)) ariaPressed = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "aria-pressed", value: _ } <<< Deku.Attribute.prop') ariaPressed_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (ariaPressed :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaPressed :: String | r)) ariaPressed_ = ariaPressed <<< Applicative.pure ariaPosinset :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (ariaPosinset :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaPosinset :: String | r)) ariaPosinset = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "aria-posinset", value: _ } <<< Deku.Attribute.prop') ariaPosinset_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (ariaPosinset :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaPosinset :: String | r)) ariaPosinset_ = ariaPosinset <<< Applicative.pure ariaPlaceholder :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (ariaPlaceholder :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaPlaceholder :: String | r)) ariaPlaceholder = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "aria-placeholder", value: _ } <<< Deku.Attribute.prop' ) ariaPlaceholder_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (ariaPlaceholder :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaPlaceholder :: String | r)) ariaPlaceholder_ = ariaPlaceholder <<< Applicative.pure ariaOwns :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (ariaOwns :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaOwns :: String | r)) ariaOwns = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "aria-owns", value: _ } <<< Deku.Attribute.prop') -ariaOwns_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (ariaOwns :: String | r)) +ariaOwns_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaOwns :: String | r)) ariaOwns_ = ariaOwns <<< Applicative.pure ariaOrientation :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (ariaOrientation :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaOrientation :: String | r)) ariaOrientation = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "aria-orientation", value: _ } <<< Deku.Attribute.prop' ) ariaOrientation_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (ariaOrientation :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaOrientation :: String | r)) ariaOrientation_ = ariaOrientation <<< Applicative.pure ariaMultiselectable :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (ariaMultiselectable :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaMultiselectable :: String | r)) ariaMultiselectable = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "aria-multiselectable", value: _ } <<< Deku.Attribute.prop' @@ -3589,322 +3470,320 @@ ariaMultiselectable = Functor.map ariaMultiselectable_ :: forall r . String - -> FRP.Event.Event (Deku.Attribute.Attribute (ariaMultiselectable :: String | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaMultiselectable :: String | r)) ariaMultiselectable_ = ariaMultiselectable <<< Applicative.pure ariaMultiline :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (ariaMultiline :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaMultiline :: String | r)) ariaMultiline = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "aria-multiline", value: _ } <<< Deku.Attribute.prop') ariaMultiline_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (ariaMultiline :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaMultiline :: String | r)) ariaMultiline_ = ariaMultiline <<< Applicative.pure ariaModal :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (ariaModal :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaModal :: String | r)) ariaModal = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "aria-modal", value: _ } <<< Deku.Attribute.prop') ariaModal_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (ariaModal :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaModal :: String | r)) ariaModal_ = ariaModal <<< Applicative.pure ariaLive :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (ariaLive :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaLive :: String | r)) ariaLive = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "aria-live", value: _ } <<< Deku.Attribute.prop') -ariaLive_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (ariaLive :: String | r)) +ariaLive_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaLive :: String | r)) ariaLive_ = ariaLive <<< Applicative.pure ariaLevel :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (ariaLevel :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaLevel :: String | r)) ariaLevel = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "aria-level", value: _ } <<< Deku.Attribute.prop') ariaLevel_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (ariaLevel :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaLevel :: String | r)) ariaLevel_ = ariaLevel <<< Applicative.pure ariaLabelledby :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (ariaLabelledby :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaLabelledby :: String | r)) ariaLabelledby = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "aria-labelledby", value: _ } <<< Deku.Attribute.prop') ariaLabelledby_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (ariaLabelledby :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaLabelledby :: String | r)) ariaLabelledby_ = ariaLabelledby <<< Applicative.pure ariaLabel :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (ariaLabel :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaLabel :: String | r)) ariaLabel = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "aria-label", value: _ } <<< Deku.Attribute.prop') ariaLabel_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (ariaLabel :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaLabel :: String | r)) ariaLabel_ = ariaLabel <<< Applicative.pure ariaKeyshortcuts :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (ariaKeyshortcuts :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaKeyshortcuts :: String | r)) ariaKeyshortcuts = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "aria-keyshortcuts", value: _ } <<< Deku.Attribute.prop' ) ariaKeyshortcuts_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (ariaKeyshortcuts :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaKeyshortcuts :: String | r)) ariaKeyshortcuts_ = ariaKeyshortcuts <<< Applicative.pure ariaInvalid :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (ariaInvalid :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaInvalid :: String | r)) ariaInvalid = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "aria-invalid", value: _ } <<< Deku.Attribute.prop') ariaInvalid_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (ariaInvalid :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaInvalid :: String | r)) ariaInvalid_ = ariaInvalid <<< Applicative.pure ariaHidden :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (ariaHidden :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaHidden :: String | r)) ariaHidden = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "aria-hidden", value: _ } <<< Deku.Attribute.prop') ariaHidden_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (ariaHidden :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaHidden :: String | r)) ariaHidden_ = ariaHidden <<< Applicative.pure ariaHaspopup :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (ariaHaspopup :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaHaspopup :: String | r)) ariaHaspopup = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "aria-haspopup", value: _ } <<< Deku.Attribute.prop') ariaHaspopup_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (ariaHaspopup :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaHaspopup :: String | r)) ariaHaspopup_ = ariaHaspopup <<< Applicative.pure ariaFlowto :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (ariaFlowto :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaFlowto :: String | r)) ariaFlowto = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "aria-flowto", value: _ } <<< Deku.Attribute.prop') ariaFlowto_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (ariaFlowto :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaFlowto :: String | r)) ariaFlowto_ = ariaFlowto <<< Applicative.pure ariaExpanded :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (ariaExpanded :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaExpanded :: String | r)) ariaExpanded = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "aria-expanded", value: _ } <<< Deku.Attribute.prop') ariaExpanded_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (ariaExpanded :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaExpanded :: String | r)) ariaExpanded_ = ariaExpanded <<< Applicative.pure ariaErrormessage :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (ariaErrormessage :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaErrormessage :: String | r)) ariaErrormessage = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "aria-errormessage", value: _ } <<< Deku.Attribute.prop' ) ariaErrormessage_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (ariaErrormessage :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaErrormessage :: String | r)) ariaErrormessage_ = ariaErrormessage <<< Applicative.pure ariaDisabled :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (ariaDisabled :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaDisabled :: String | r)) ariaDisabled = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "aria-disabled", value: _ } <<< Deku.Attribute.prop') ariaDisabled_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (ariaDisabled :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaDisabled :: String | r)) ariaDisabled_ = ariaDisabled <<< Applicative.pure ariaDetails :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (ariaDetails :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaDetails :: String | r)) ariaDetails = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "aria-details", value: _ } <<< Deku.Attribute.prop') ariaDetails_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (ariaDetails :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaDetails :: String | r)) ariaDetails_ = ariaDetails <<< Applicative.pure ariaDescription :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (ariaDescription :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaDescription :: String | r)) ariaDescription = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "aria-description", value: _ } <<< Deku.Attribute.prop' ) ariaDescription_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (ariaDescription :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaDescription :: String | r)) ariaDescription_ = ariaDescription <<< Applicative.pure ariaDescribedby :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (ariaDescribedby :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaDescribedby :: String | r)) ariaDescribedby = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "aria-describedby", value: _ } <<< Deku.Attribute.prop' ) ariaDescribedby_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (ariaDescribedby :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaDescribedby :: String | r)) ariaDescribedby_ = ariaDescribedby <<< Applicative.pure ariaCurrent :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (ariaCurrent :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaCurrent :: String | r)) ariaCurrent = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "aria-current", value: _ } <<< Deku.Attribute.prop') ariaCurrent_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (ariaCurrent :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaCurrent :: String | r)) ariaCurrent_ = ariaCurrent <<< Applicative.pure ariaControls :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (ariaControls :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaControls :: String | r)) ariaControls = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "aria-controls", value: _ } <<< Deku.Attribute.prop') ariaControls_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (ariaControls :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaControls :: String | r)) ariaControls_ = ariaControls <<< Applicative.pure ariaColspan :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (ariaColspan :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaColspan :: String | r)) ariaColspan = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "aria-colspan", value: _ } <<< Deku.Attribute.prop') ariaColspan_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (ariaColspan :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaColspan :: String | r)) ariaColspan_ = ariaColspan <<< Applicative.pure ariaColindextext :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (ariaColindextext :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaColindextext :: String | r)) ariaColindextext = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "aria-colindextext", value: _ } <<< Deku.Attribute.prop' ) ariaColindextext_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (ariaColindextext :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaColindextext :: String | r)) ariaColindextext_ = ariaColindextext <<< Applicative.pure ariaColindex :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (ariaColindex :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaColindex :: String | r)) ariaColindex = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "aria-colindex", value: _ } <<< Deku.Attribute.prop') ariaColindex_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (ariaColindex :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaColindex :: String | r)) ariaColindex_ = ariaColindex <<< Applicative.pure ariaColcount :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (ariaColcount :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaColcount :: String | r)) ariaColcount = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "aria-colcount", value: _ } <<< Deku.Attribute.prop') ariaColcount_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (ariaColcount :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaColcount :: String | r)) ariaColcount_ = ariaColcount <<< Applicative.pure ariaChecked :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (ariaChecked :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaChecked :: String | r)) ariaChecked = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "aria-checked", value: _ } <<< Deku.Attribute.prop') ariaChecked_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (ariaChecked :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaChecked :: String | r)) ariaChecked_ = ariaChecked <<< Applicative.pure ariaBusy :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (ariaBusy :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaBusy :: String | r)) ariaBusy = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "aria-busy", value: _ } <<< Deku.Attribute.prop') -ariaBusy_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (ariaBusy :: String | r)) +ariaBusy_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaBusy :: String | r)) ariaBusy_ = ariaBusy <<< Applicative.pure ariaAutocomplete :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (ariaAutocomplete :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaAutocomplete :: String | r)) ariaAutocomplete = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "aria-autocomplete", value: _ } <<< Deku.Attribute.prop' ) ariaAutocomplete_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (ariaAutocomplete :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaAutocomplete :: String | r)) ariaAutocomplete_ = ariaAutocomplete <<< Applicative.pure ariaAtomic :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (ariaAtomic :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaAtomic :: String | r)) ariaAtomic = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "aria-atomic", value: _ } <<< Deku.Attribute.prop') ariaAtomic_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (ariaAtomic :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaAtomic :: String | r)) ariaAtomic_ = ariaAtomic <<< Applicative.pure ariaActivedescendant :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (ariaActivedescendant :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaActivedescendant :: String | r)) ariaActivedescendant = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "aria-activedescendant", value: _ } <<< Deku.Attribute.prop' @@ -3913,15 +3792,13 @@ ariaActivedescendant = Functor.map ariaActivedescendant_ :: forall r . String - -> FRP.Event.Event (Deku.Attribute.Attribute (ariaActivedescendant :: String | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (ariaActivedescendant :: String | r)) ariaActivedescendant_ = ariaActivedescendant <<< Applicative.pure role - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (role :: String | r)) + :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (role :: String | r)) role = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "role", value: _ } <<< Deku.Attribute.prop') -role_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (role :: String | r)) +role_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (role :: String | r)) role_ = role <<< Applicative.pure diff --git a/deku-dom/src/Deku/DOM/Combinators.purs b/deku-dom/src/Deku/DOM/Combinators.purs index 9564c66c..12e2ba67 100644 --- a/deku-dom/src/Deku/DOM/Combinators.purs +++ b/deku-dom/src/Deku/DOM/Combinators.purs @@ -8,7 +8,7 @@ import Deku.DOM.Self as Self import Effect (Effect) import Effect.Aff (Milliseconds(..), delay, launchAff_) import Effect.Class (liftEffect) -import FRP.Event (Event) +import FRP.Poll (Poll) import Type.Proxy (Proxy) import Web.DOM (Element) import Web.Event.Event as Web @@ -16,65 +16,65 @@ import Web.HTML.HTMLInputElement (checked, fromEventTarget, value, valueAsNumber -- | Runs an effect when the element triggers the given event. runOn :: forall e r - . ( Event ( e -> Effect Unit ) -> Event ( Attribute r ) ) - -> Event ( Effect Unit ) - -> Event ( Attribute r ) + . ( Poll ( e -> Effect Unit ) -> Poll ( Attribute r ) ) + -> Poll ( Effect Unit ) + -> Poll ( Attribute r ) runOn listener = listener <<< map const -- | Shorthand version of `runOn`. runOn_ :: forall e r - . ( Event ( e -> Effect Unit ) -> Event ( Attribute r ) ) + . ( Poll ( e -> Effect Unit ) -> Poll ( Attribute r ) ) -> Effect Unit - -> Event ( Attribute r ) + -> Poll ( Attribute r ) runOn_ listener = runOn listener <<< pure -- | Runs an effect with the `checked` value of the target element when it triggers the given event. checkedOn :: forall r - . ( Event ( Web.Event -> Effect Unit ) -> Event ( Attribute r ) ) - -> Event ( Boolean -> Effect Unit ) - -> Event ( Attribute r ) + . ( Poll ( Web.Event -> Effect Unit ) -> Poll ( Attribute r ) ) + -> Poll ( Boolean -> Effect Unit ) + -> Poll ( Attribute r ) checkedOn listener = listener <<< map \push e -> for_ ( Web.target e >>= fromEventTarget ) $ checked >=> push -- | Shorthand version of `checkedOn`. checkedOn_ :: forall r - . ( Event ( Web.Event -> Effect Unit ) -> Event ( Attribute r ) ) + . ( Poll ( Web.Event -> Effect Unit ) -> Poll ( Attribute r ) ) -> ( Boolean -> Effect Unit ) - -> Event ( Attribute r ) + -> Poll ( Attribute r ) checkedOn_ listener = checkedOn listener <<< pure -- | Runs an effect with the `valueAsNumber` property of the target element when it triggers the given event. numberOn :: forall r - . ( Event ( Web.Event -> Effect Unit ) -> Event ( Attribute r ) ) - -> Event ( Number -> Effect Unit ) - -> Event ( Attribute r ) + . ( Poll ( Web.Event -> Effect Unit ) -> Poll ( Attribute r ) ) + -> Poll ( Number -> Effect Unit ) + -> Poll ( Attribute r ) numberOn listener = listener <<< map \push e -> for_ ( Web.target e >>= fromEventTarget ) $ valueAsNumber >=> push -- | Shorthand version of `numberOn`. numberOn_ :: forall r - . ( Event ( Web.Event -> Effect Unit ) -> Event ( Attribute r ) ) + . ( Poll ( Web.Event -> Effect Unit ) -> Poll ( Attribute r ) ) -> ( Number -> Effect Unit ) - -> Event ( Attribute r ) + -> Poll ( Attribute r ) numberOn_ listener = numberOn listener <<< pure -- | Runs an effect with the `value` property of the target element when it triggers the given event. valueOn :: forall r - . ( Event ( Web.Event -> Effect Unit ) -> Event ( Attribute r ) ) - -> Event ( String -> Effect Unit ) - -> Event ( Attribute r ) + . ( Poll ( Web.Event -> Effect Unit ) -> Poll ( Attribute r ) ) + -> Poll ( String -> Effect Unit ) + -> Poll ( Attribute r ) valueOn listener = listener <<< map \push e -> for_ ( Web.target e >>= fromEventTarget ) $ value >=> push -- | Shorthand version of `valueOn`. valueOn_ :: forall r - . ( Event ( Web.Event -> Effect Unit ) -> Event ( Attribute r ) ) + . ( Poll ( Web.Event -> Effect Unit ) -> Poll ( Attribute r ) ) -> ( String -> Effect Unit ) - -> Event ( Attribute r ) + -> Poll ( Attribute r ) valueOn_ listener = valueOn listener <<< pure @@ -86,9 +86,9 @@ valueOn_ listener = unset :: forall e a r . Monoid a - => (Event a -> Event (Attribute r)) - -> Event e - -> Event (Attribute r) + => (Poll a -> Poll (Attribute r)) + -> Poll e + -> Poll (Attribute r) unset attr trigger = unsafeAttribute <<< _ { value = Unset' } <<< unsafeUnAttribute <$> attr (const mempty <$> trigger) @@ -101,7 +101,7 @@ unset attr trigger = injectElement :: forall e . (Element -> Effect Unit) - -> Event (Attribute e) + -> Poll (Attribute e) injectElement f = Self.self_ \s -> launchAff_ do delay $ Milliseconds 0.0 @@ -112,7 +112,7 @@ injectElementT :: forall r typedElement tag . Self.IsSelf typedElement tag => (typedElement -> Effect Unit) - -> Event (Attribute (__tag :: Proxy tag | r)) + -> Poll (Attribute (__tag :: Proxy tag | r)) injectElementT f = Self.selfT_ \s -> launchAff_ do delay $ Milliseconds 0.0 diff --git a/deku-dom/src/Deku/DOM/Listeners.purs b/deku-dom/src/Deku/DOM/Listeners.purs index cdd65940..3e31bf78 100644 --- a/deku-dom/src/Deku/DOM/Listeners.purs +++ b/deku-dom/src/Deku/DOM/Listeners.purs @@ -288,7 +288,7 @@ module Deku.DOM.Listeners import Control.Applicative (pure) as Applicative import Control.Category ((<<<)) import Data.Functor (map) as Functor -import FRP.Event as FRP.Event +import FRP.Poll as FRP.Poll import Deku.DOM.Combinators (unset, injectElement, injectElementT, runOn, runOn_, numberOn, numberOn_, checkedOn, checkedOn_, valueOn, valueOn_) as Combinators import Deku.Attribute as Deku.Attribute import Web.Event.Internal.Types as Web.Event.Internal.Types @@ -307,8 +307,8 @@ import Web.UIEvent.CompositionEvent as Web.UIEvent.CompositionEvent volumechange :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (volumechange :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (volumechange :: Web.Event.Internal.Types.Event | r)) volumechange = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "volumechange", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -318,13 +318,13 @@ volumechange = Functor.map volumechange_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (volumechange :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (volumechange :: Web.Event.Internal.Types.Event | r)) volumechange_ = volumechange <<< Applicative.pure resize :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (resize :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (resize :: Web.Event.Internal.Types.Event | r)) resize = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "resize", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -334,13 +334,13 @@ resize = Functor.map resize_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (resize :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (resize :: Web.Event.Internal.Types.Event | r)) resize_ = resize <<< Applicative.pure ratechange :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (ratechange :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (ratechange :: Web.Event.Internal.Types.Event | r)) ratechange = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "ratechange", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -350,13 +350,13 @@ ratechange = Functor.map ratechange_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (ratechange :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (ratechange :: Web.Event.Internal.Types.Event | r)) ratechange_ = ratechange <<< Applicative.pure pause :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (pause :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (pause :: Web.Event.Internal.Types.Event | r)) pause = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "pause", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -366,13 +366,13 @@ pause = Functor.map pause_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (pause :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (pause :: Web.Event.Internal.Types.Event | r)) pause_ = pause <<< Applicative.pure play :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (play :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (play :: Web.Event.Internal.Types.Event | r)) play = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "play", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -382,13 +382,13 @@ play = Functor.map play_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (play :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (play :: Web.Event.Internal.Types.Event | r)) play_ = play <<< Applicative.pure timeupdate :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (timeupdate :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (timeupdate :: Web.Event.Internal.Types.Event | r)) timeupdate = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "timeupdate", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -398,14 +398,13 @@ timeupdate = Functor.map timeupdate_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (timeupdate :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (timeupdate :: Web.Event.Internal.Types.Event | r)) timeupdate_ = timeupdate <<< Applicative.pure durationchange :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event - (Deku.Attribute.Attribute (durationchange :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (durationchange :: Web.Event.Internal.Types.Event | r)) durationchange = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "durationchange", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -415,14 +414,13 @@ durationchange = Functor.map durationchange_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event - (Deku.Attribute.Attribute (durationchange :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (durationchange :: Web.Event.Internal.Types.Event | r)) durationchange_ = durationchange <<< Applicative.pure ended :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (ended :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (ended :: Web.Event.Internal.Types.Event | r)) ended = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "ended", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -432,13 +430,13 @@ ended = Functor.map ended_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (ended :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (ended :: Web.Event.Internal.Types.Event | r)) ended_ = ended <<< Applicative.pure seeked :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (seeked :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (seeked :: Web.Event.Internal.Types.Event | r)) seeked = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "seeked", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -448,13 +446,13 @@ seeked = Functor.map seeked_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (seeked :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (seeked :: Web.Event.Internal.Types.Event | r)) seeked_ = seeked <<< Applicative.pure seeking :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (seeking :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (seeking :: Web.Event.Internal.Types.Event | r)) seeking = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "seeking", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -464,13 +462,13 @@ seeking = Functor.map seeking_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (seeking :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (seeking :: Web.Event.Internal.Types.Event | r)) seeking_ = seeking <<< Applicative.pure waiting :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (waiting :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (waiting :: Web.Event.Internal.Types.Event | r)) waiting = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "waiting", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -480,13 +478,13 @@ waiting = Functor.map waiting_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (waiting :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (waiting :: Web.Event.Internal.Types.Event | r)) waiting_ = waiting <<< Applicative.pure playing :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (playing :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (playing :: Web.Event.Internal.Types.Event | r)) playing = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "playing", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -496,14 +494,13 @@ playing = Functor.map playing_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (playing :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (playing :: Web.Event.Internal.Types.Event | r)) playing_ = playing <<< Applicative.pure canplaythrough :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event - (Deku.Attribute.Attribute (canplaythrough :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (canplaythrough :: Web.Event.Internal.Types.Event | r)) canplaythrough = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "canplaythrough", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -513,14 +510,13 @@ canplaythrough = Functor.map canplaythrough_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event - (Deku.Attribute.Attribute (canplaythrough :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (canplaythrough :: Web.Event.Internal.Types.Event | r)) canplaythrough_ = canplaythrough <<< Applicative.pure canplay :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (canplay :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (canplay :: Web.Event.Internal.Types.Event | r)) canplay = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "canplay", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -530,13 +526,13 @@ canplay = Functor.map canplay_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (canplay :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (canplay :: Web.Event.Internal.Types.Event | r)) canplay_ = canplay <<< Applicative.pure loadeddata :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (loadeddata :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (loadeddata :: Web.Event.Internal.Types.Event | r)) loadeddata = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "loadeddata", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -546,14 +542,13 @@ loadeddata = Functor.map loadeddata_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (loadeddata :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (loadeddata :: Web.Event.Internal.Types.Event | r)) loadeddata_ = loadeddata <<< Applicative.pure loadedmetadata :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event - (Deku.Attribute.Attribute (loadedmetadata :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (loadedmetadata :: Web.Event.Internal.Types.Event | r)) loadedmetadata = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "loadedmetadata", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -563,14 +558,13 @@ loadedmetadata = Functor.map loadedmetadata_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event - (Deku.Attribute.Attribute (loadedmetadata :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (loadedmetadata :: Web.Event.Internal.Types.Event | r)) loadedmetadata_ = loadedmetadata <<< Applicative.pure stalled :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (stalled :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (stalled :: Web.Event.Internal.Types.Event | r)) stalled = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "stalled", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -580,13 +574,13 @@ stalled = Functor.map stalled_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (stalled :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (stalled :: Web.Event.Internal.Types.Event | r)) stalled_ = stalled <<< Applicative.pure emptied :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (emptied :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (emptied :: Web.Event.Internal.Types.Event | r)) emptied = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "emptied", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -596,13 +590,13 @@ emptied = Functor.map emptied_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (emptied :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (emptied :: Web.Event.Internal.Types.Event | r)) emptied_ = emptied <<< Applicative.pure error :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (error :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (error :: Web.Event.Internal.Types.Event | r)) error = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "error", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -612,13 +606,13 @@ error = Functor.map error_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (error :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (error :: Web.Event.Internal.Types.Event | r)) error_ = error <<< Applicative.pure abort :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (abort :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (abort :: Web.Event.Internal.Types.Event | r)) abort = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "abort", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -628,13 +622,13 @@ abort = Functor.map abort_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (abort :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (abort :: Web.Event.Internal.Types.Event | r)) abort_ = abort <<< Applicative.pure suspend :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (suspend :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (suspend :: Web.Event.Internal.Types.Event | r)) suspend = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "suspend", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -644,13 +638,13 @@ suspend = Functor.map suspend_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (suspend :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (suspend :: Web.Event.Internal.Types.Event | r)) suspend_ = suspend <<< Applicative.pure progress :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (progress :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (progress :: Web.Event.Internal.Types.Event | r)) progress = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "progress", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -660,13 +654,13 @@ progress = Functor.map progress_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (progress :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (progress :: Web.Event.Internal.Types.Event | r)) progress_ = progress <<< Applicative.pure loadstart :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (loadstart :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (loadstart :: Web.Event.Internal.Types.Event | r)) loadstart = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "loadstart", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -676,13 +670,13 @@ loadstart = Functor.map loadstart_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (loadstart :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (loadstart :: Web.Event.Internal.Types.Event | r)) loadstart_ = loadstart <<< Applicative.pure removetrack :: forall r - . FRP.Event.Event (Web.HTML.Event.TrackEvent.TrackEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + . FRP.Poll.Poll (Web.HTML.Event.TrackEvent.TrackEvent -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (removetrack :: Web.HTML.Event.TrackEvent.TrackEvent | r)) removetrack = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "removetrack", value: _ } <<< Deku.Attribute.cb' @@ -693,15 +687,14 @@ removetrack = Functor.map removetrack_ :: forall r . (Web.HTML.Event.TrackEvent.TrackEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + -> FRP.Poll.Poll (Deku.Attribute.Attribute (removetrack :: Web.HTML.Event.TrackEvent.TrackEvent | r)) removetrack_ = removetrack <<< Applicative.pure addtrack :: forall r - . FRP.Event.Event (Web.HTML.Event.TrackEvent.TrackEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event - (Deku.Attribute.Attribute (addtrack :: Web.HTML.Event.TrackEvent.TrackEvent | r)) + . FRP.Poll.Poll (Web.HTML.Event.TrackEvent.TrackEvent -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (addtrack :: Web.HTML.Event.TrackEvent.TrackEvent | r)) addtrack = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "addtrack", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -711,14 +704,13 @@ addtrack = Functor.map addtrack_ :: forall r . (Web.HTML.Event.TrackEvent.TrackEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event - (Deku.Attribute.Attribute (addtrack :: Web.HTML.Event.TrackEvent.TrackEvent | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (addtrack :: Web.HTML.Event.TrackEvent.TrackEvent | r)) addtrack_ = addtrack <<< Applicative.pure change :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (change :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (change :: Web.Event.Internal.Types.Event | r)) change = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "change", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -728,13 +720,13 @@ change = Functor.map change_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (change :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (change :: Web.Event.Internal.Types.Event | r)) change_ = change <<< Applicative.pure load :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (load :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (load :: Web.Event.Internal.Types.Event | r)) load = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "load", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -744,13 +736,13 @@ load = Functor.map load_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (load :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (load :: Web.Event.Internal.Types.Event | r)) load_ = load <<< Applicative.pure cuechange :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (cuechange :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (cuechange :: Web.Event.Internal.Types.Event | r)) cuechange = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "cuechange", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -760,13 +752,13 @@ cuechange = Functor.map cuechange_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (cuechange :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (cuechange :: Web.Event.Internal.Types.Event | r)) cuechange_ = cuechange <<< Applicative.pure exit :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (exit :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (exit :: Web.Event.Internal.Types.Event | r)) exit = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "exit", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -776,13 +768,13 @@ exit = Functor.map exit_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (exit :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (exit :: Web.Event.Internal.Types.Event | r)) exit_ = exit <<< Applicative.pure enter :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (enter :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (enter :: Web.Event.Internal.Types.Event | r)) enter = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "enter", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -792,13 +784,13 @@ enter = Functor.map enter_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (enter :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (enter :: Web.Event.Internal.Types.Event | r)) enter_ = enter <<< Applicative.pure transitioncancel :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (transitioncancel :: Web.Event.Internal.Types.Event | r)) transitioncancel = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "transitioncancel", value: _ } <<< Deku.Attribute.cb' @@ -809,15 +801,14 @@ transitioncancel = Functor.map transitioncancel_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + -> FRP.Poll.Poll (Deku.Attribute.Attribute (transitioncancel :: Web.Event.Internal.Types.Event | r)) transitioncancel_ = transitioncancel <<< Applicative.pure transitionend :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event - (Deku.Attribute.Attribute (transitionend :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (transitionend :: Web.Event.Internal.Types.Event | r)) transitionend = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "transitionend", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -827,14 +818,13 @@ transitionend = Functor.map transitionend_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event - (Deku.Attribute.Attribute (transitionend :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (transitionend :: Web.Event.Internal.Types.Event | r)) transitionend_ = transitionend <<< Applicative.pure transitionstart :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (transitionstart :: Web.Event.Internal.Types.Event | r)) transitionstart = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "transitionstart", value: _ } <<< Deku.Attribute.cb' @@ -845,15 +835,14 @@ transitionstart = Functor.map transitionstart_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + -> FRP.Poll.Poll (Deku.Attribute.Attribute (transitionstart :: Web.Event.Internal.Types.Event | r)) transitionstart_ = transitionstart <<< Applicative.pure transitionrun :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event - (Deku.Attribute.Attribute (transitionrun :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (transitionrun :: Web.Event.Internal.Types.Event | r)) transitionrun = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "transitionrun", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -863,14 +852,13 @@ transitionrun = Functor.map transitionrun_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event - (Deku.Attribute.Attribute (transitionrun :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (transitionrun :: Web.Event.Internal.Types.Event | r)) transitionrun_ = transitionrun <<< Applicative.pure animationcancel :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (animationcancel :: Web.Event.Internal.Types.Event | r)) animationcancel = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "animationcancel", value: _ } <<< Deku.Attribute.cb' @@ -881,14 +869,14 @@ animationcancel = Functor.map animationcancel_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + -> FRP.Poll.Poll (Deku.Attribute.Attribute (animationcancel :: Web.Event.Internal.Types.Event | r)) animationcancel_ = animationcancel <<< Applicative.pure animationend :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (animationend :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (animationend :: Web.Event.Internal.Types.Event | r)) animationend = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "animationend", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -898,13 +886,13 @@ animationend = Functor.map animationend_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (animationend :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (animationend :: Web.Event.Internal.Types.Event | r)) animationend_ = animationend <<< Applicative.pure animationiteration :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (animationiteration :: Web.Event.Internal.Types.Event | r)) animationiteration = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "animationiteration", value: _ } @@ -916,15 +904,14 @@ animationiteration = Functor.map animationiteration_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + -> FRP.Poll.Poll (Deku.Attribute.Attribute (animationiteration :: Web.Event.Internal.Types.Event | r)) animationiteration_ = animationiteration <<< Applicative.pure animationstart :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event - (Deku.Attribute.Attribute (animationstart :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (animationstart :: Web.Event.Internal.Types.Event | r)) animationstart = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "animationstart", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -934,14 +921,13 @@ animationstart = Functor.map animationstart_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event - (Deku.Attribute.Attribute (animationstart :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (animationstart :: Web.Event.Internal.Types.Event | r)) animationstart_ = animationstart <<< Applicative.pure lostpointercapture :: forall r - . FRP.Event.Event (Web.PointerEvent.PointerEvent.PointerEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + . FRP.Poll.Poll (Web.PointerEvent.PointerEvent.PointerEvent -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll ( Deku.Attribute.Attribute (lostpointercapture :: Web.PointerEvent.PointerEvent.PointerEvent | r) ) @@ -955,7 +941,7 @@ lostpointercapture = Functor.map lostpointercapture_ :: forall r . (Web.PointerEvent.PointerEvent.PointerEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + -> FRP.Poll.Poll ( Deku.Attribute.Attribute (lostpointercapture :: Web.PointerEvent.PointerEvent.PointerEvent | r) ) @@ -963,8 +949,8 @@ lostpointercapture_ = lostpointercapture <<< Applicative.pure gotpointercapture :: forall r - . FRP.Event.Event (Web.PointerEvent.PointerEvent.PointerEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + . FRP.Poll.Poll (Web.PointerEvent.PointerEvent.PointerEvent -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll ( Deku.Attribute.Attribute (gotpointercapture :: Web.PointerEvent.PointerEvent.PointerEvent | r) ) @@ -977,7 +963,7 @@ gotpointercapture = Functor.map gotpointercapture_ :: forall r . (Web.PointerEvent.PointerEvent.PointerEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + -> FRP.Poll.Poll ( Deku.Attribute.Attribute (gotpointercapture :: Web.PointerEvent.PointerEvent.PointerEvent | r) ) @@ -985,8 +971,8 @@ gotpointercapture_ = gotpointercapture <<< Applicative.pure pointerleave :: forall r - . FRP.Event.Event (Web.PointerEvent.PointerEvent.PointerEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + . FRP.Poll.Poll (Web.PointerEvent.PointerEvent.PointerEvent -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (pointerleave :: Web.PointerEvent.PointerEvent.PointerEvent | r)) pointerleave = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "pointerleave", value: _ } <<< Deku.Attribute.cb' @@ -997,14 +983,14 @@ pointerleave = Functor.map pointerleave_ :: forall r . (Web.PointerEvent.PointerEvent.PointerEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + -> FRP.Poll.Poll (Deku.Attribute.Attribute (pointerleave :: Web.PointerEvent.PointerEvent.PointerEvent | r)) pointerleave_ = pointerleave <<< Applicative.pure pointerout :: forall r - . FRP.Event.Event (Web.PointerEvent.PointerEvent.PointerEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + . FRP.Poll.Poll (Web.PointerEvent.PointerEvent.PointerEvent -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (pointerout :: Web.PointerEvent.PointerEvent.PointerEvent | r)) pointerout = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "pointerout", value: _ } <<< Deku.Attribute.cb' @@ -1015,14 +1001,14 @@ pointerout = Functor.map pointerout_ :: forall r . (Web.PointerEvent.PointerEvent.PointerEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + -> FRP.Poll.Poll (Deku.Attribute.Attribute (pointerout :: Web.PointerEvent.PointerEvent.PointerEvent | r)) pointerout_ = pointerout <<< Applicative.pure pointercancel :: forall r - . FRP.Event.Event (Web.PointerEvent.PointerEvent.PointerEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + . FRP.Poll.Poll (Web.PointerEvent.PointerEvent.PointerEvent -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (pointercancel :: Web.PointerEvent.PointerEvent.PointerEvent | r)) pointercancel = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "pointercancel", value: _ } <<< Deku.Attribute.cb' @@ -1033,14 +1019,14 @@ pointercancel = Functor.map pointercancel_ :: forall r . (Web.PointerEvent.PointerEvent.PointerEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + -> FRP.Poll.Poll (Deku.Attribute.Attribute (pointercancel :: Web.PointerEvent.PointerEvent.PointerEvent | r)) pointercancel_ = pointercancel <<< Applicative.pure pointerup :: forall r - . FRP.Event.Event (Web.PointerEvent.PointerEvent.PointerEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + . FRP.Poll.Poll (Web.PointerEvent.PointerEvent.PointerEvent -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (pointerup :: Web.PointerEvent.PointerEvent.PointerEvent | r)) pointerup = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "pointerup", value: _ } <<< Deku.Attribute.cb' @@ -1051,14 +1037,14 @@ pointerup = Functor.map pointerup_ :: forall r . (Web.PointerEvent.PointerEvent.PointerEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + -> FRP.Poll.Poll (Deku.Attribute.Attribute (pointerup :: Web.PointerEvent.PointerEvent.PointerEvent | r)) pointerup_ = pointerup <<< Applicative.pure pointerrawupdate :: forall r - . FRP.Event.Event (Web.PointerEvent.PointerEvent.PointerEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + . FRP.Poll.Poll (Web.PointerEvent.PointerEvent.PointerEvent -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (pointerrawupdate :: Web.PointerEvent.PointerEvent.PointerEvent | r)) pointerrawupdate = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "pointerrawupdate", value: _ } <<< Deku.Attribute.cb' @@ -1069,14 +1055,14 @@ pointerrawupdate = Functor.map pointerrawupdate_ :: forall r . (Web.PointerEvent.PointerEvent.PointerEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + -> FRP.Poll.Poll (Deku.Attribute.Attribute (pointerrawupdate :: Web.PointerEvent.PointerEvent.PointerEvent | r)) pointerrawupdate_ = pointerrawupdate <<< Applicative.pure pointermove :: forall r - . FRP.Event.Event (Web.PointerEvent.PointerEvent.PointerEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + . FRP.Poll.Poll (Web.PointerEvent.PointerEvent.PointerEvent -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (pointermove :: Web.PointerEvent.PointerEvent.PointerEvent | r)) pointermove = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "pointermove", value: _ } <<< Deku.Attribute.cb' @@ -1087,14 +1073,14 @@ pointermove = Functor.map pointermove_ :: forall r . (Web.PointerEvent.PointerEvent.PointerEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + -> FRP.Poll.Poll (Deku.Attribute.Attribute (pointermove :: Web.PointerEvent.PointerEvent.PointerEvent | r)) pointermove_ = pointermove <<< Applicative.pure pointerdown :: forall r - . FRP.Event.Event (Web.PointerEvent.PointerEvent.PointerEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + . FRP.Poll.Poll (Web.PointerEvent.PointerEvent.PointerEvent -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (pointerdown :: Web.PointerEvent.PointerEvent.PointerEvent | r)) pointerdown = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "pointerdown", value: _ } <<< Deku.Attribute.cb' @@ -1105,14 +1091,14 @@ pointerdown = Functor.map pointerdown_ :: forall r . (Web.PointerEvent.PointerEvent.PointerEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + -> FRP.Poll.Poll (Deku.Attribute.Attribute (pointerdown :: Web.PointerEvent.PointerEvent.PointerEvent | r)) pointerdown_ = pointerdown <<< Applicative.pure pointerenter :: forall r - . FRP.Event.Event (Web.PointerEvent.PointerEvent.PointerEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + . FRP.Poll.Poll (Web.PointerEvent.PointerEvent.PointerEvent -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (pointerenter :: Web.PointerEvent.PointerEvent.PointerEvent | r)) pointerenter = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "pointerenter", value: _ } <<< Deku.Attribute.cb' @@ -1123,14 +1109,14 @@ pointerenter = Functor.map pointerenter_ :: forall r . (Web.PointerEvent.PointerEvent.PointerEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + -> FRP.Poll.Poll (Deku.Attribute.Attribute (pointerenter :: Web.PointerEvent.PointerEvent.PointerEvent | r)) pointerenter_ = pointerenter <<< Applicative.pure pointerover :: forall r - . FRP.Event.Event (Web.PointerEvent.PointerEvent.PointerEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + . FRP.Poll.Poll (Web.PointerEvent.PointerEvent.PointerEvent -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (pointerover :: Web.PointerEvent.PointerEvent.PointerEvent | r)) pointerover = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "pointerover", value: _ } <<< Deku.Attribute.cb' @@ -1141,14 +1127,14 @@ pointerover = Functor.map pointerover_ :: forall r . (Web.PointerEvent.PointerEvent.PointerEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + -> FRP.Poll.Poll (Deku.Attribute.Attribute (pointerover :: Web.PointerEvent.PointerEvent.PointerEvent | r)) pointerover_ = pointerover <<< Applicative.pure dragend :: forall r - . FRP.Event.Event (Web.HTML.Event.DragEvent.DragEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (dragend :: Web.HTML.Event.DragEvent.DragEvent | r)) + . FRP.Poll.Poll (Web.HTML.Event.DragEvent.DragEvent -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (dragend :: Web.HTML.Event.DragEvent.DragEvent | r)) dragend = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "dragend", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -1158,13 +1144,13 @@ dragend = Functor.map dragend_ :: forall r . (Web.HTML.Event.DragEvent.DragEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (dragend :: Web.HTML.Event.DragEvent.DragEvent | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (dragend :: Web.HTML.Event.DragEvent.DragEvent | r)) dragend_ = dragend <<< Applicative.pure drop :: forall r - . FRP.Event.Event (Web.HTML.Event.DragEvent.DragEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (drop :: Web.HTML.Event.DragEvent.DragEvent | r)) + . FRP.Poll.Poll (Web.HTML.Event.DragEvent.DragEvent -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (drop :: Web.HTML.Event.DragEvent.DragEvent | r)) drop = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "drop", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -1174,13 +1160,13 @@ drop = Functor.map drop_ :: forall r . (Web.HTML.Event.DragEvent.DragEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (drop :: Web.HTML.Event.DragEvent.DragEvent | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (drop :: Web.HTML.Event.DragEvent.DragEvent | r)) drop_ = drop <<< Applicative.pure dragover :: forall r - . FRP.Event.Event (Web.HTML.Event.DragEvent.DragEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (dragover :: Web.HTML.Event.DragEvent.DragEvent | r)) + . FRP.Poll.Poll (Web.HTML.Event.DragEvent.DragEvent -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (dragover :: Web.HTML.Event.DragEvent.DragEvent | r)) dragover = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "dragover", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -1190,14 +1176,13 @@ dragover = Functor.map dragover_ :: forall r . (Web.HTML.Event.DragEvent.DragEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (dragover :: Web.HTML.Event.DragEvent.DragEvent | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (dragover :: Web.HTML.Event.DragEvent.DragEvent | r)) dragover_ = dragover <<< Applicative.pure dragleave :: forall r - . FRP.Event.Event (Web.HTML.Event.DragEvent.DragEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event - (Deku.Attribute.Attribute (dragleave :: Web.HTML.Event.DragEvent.DragEvent | r)) + . FRP.Poll.Poll (Web.HTML.Event.DragEvent.DragEvent -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (dragleave :: Web.HTML.Event.DragEvent.DragEvent | r)) dragleave = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "dragleave", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -1207,15 +1192,13 @@ dragleave = Functor.map dragleave_ :: forall r . (Web.HTML.Event.DragEvent.DragEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event - (Deku.Attribute.Attribute (dragleave :: Web.HTML.Event.DragEvent.DragEvent | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (dragleave :: Web.HTML.Event.DragEvent.DragEvent | r)) dragleave_ = dragleave <<< Applicative.pure dragenter :: forall r - . FRP.Event.Event (Web.HTML.Event.DragEvent.DragEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event - (Deku.Attribute.Attribute (dragenter :: Web.HTML.Event.DragEvent.DragEvent | r)) + . FRP.Poll.Poll (Web.HTML.Event.DragEvent.DragEvent -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (dragenter :: Web.HTML.Event.DragEvent.DragEvent | r)) dragenter = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "dragenter", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -1225,14 +1208,13 @@ dragenter = Functor.map dragenter_ :: forall r . (Web.HTML.Event.DragEvent.DragEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event - (Deku.Attribute.Attribute (dragenter :: Web.HTML.Event.DragEvent.DragEvent | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (dragenter :: Web.HTML.Event.DragEvent.DragEvent | r)) dragenter_ = dragenter <<< Applicative.pure drag :: forall r - . FRP.Event.Event (Web.HTML.Event.DragEvent.DragEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (drag :: Web.HTML.Event.DragEvent.DragEvent | r)) + . FRP.Poll.Poll (Web.HTML.Event.DragEvent.DragEvent -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (drag :: Web.HTML.Event.DragEvent.DragEvent | r)) drag = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "drag", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -1242,14 +1224,13 @@ drag = Functor.map drag_ :: forall r . (Web.HTML.Event.DragEvent.DragEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (drag :: Web.HTML.Event.DragEvent.DragEvent | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (drag :: Web.HTML.Event.DragEvent.DragEvent | r)) drag_ = drag <<< Applicative.pure dragstart :: forall r - . FRP.Event.Event (Web.HTML.Event.DragEvent.DragEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event - (Deku.Attribute.Attribute (dragstart :: Web.HTML.Event.DragEvent.DragEvent | r)) + . FRP.Poll.Poll (Web.HTML.Event.DragEvent.DragEvent -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (dragstart :: Web.HTML.Event.DragEvent.DragEvent | r)) dragstart = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "dragstart", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -1259,14 +1240,13 @@ dragstart = Functor.map dragstart_ :: forall r . (Web.HTML.Event.DragEvent.DragEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event - (Deku.Attribute.Attribute (dragstart :: Web.HTML.Event.DragEvent.DragEvent | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (dragstart :: Web.HTML.Event.DragEvent.DragEvent | r)) dragstart_ = dragstart <<< Applicative.pure domNodeRemovedFromDocument :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (domNodeRemovedFromDocument :: Web.Event.Internal.Types.Event | r)) domNodeRemovedFromDocument = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "DOMNodeRemovedFromDocument", value: _ } @@ -1278,15 +1258,14 @@ domNodeRemovedFromDocument = Functor.map domNodeRemovedFromDocument_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + -> FRP.Poll.Poll (Deku.Attribute.Attribute (domNodeRemovedFromDocument :: Web.Event.Internal.Types.Event | r)) domNodeRemovedFromDocument_ = domNodeRemovedFromDocument <<< Applicative.pure domNodeRemoved :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event - (Deku.Attribute.Attribute (domNodeRemoved :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (domNodeRemoved :: Web.Event.Internal.Types.Event | r)) domNodeRemoved = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "DOMNodeRemoved", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -1296,14 +1275,13 @@ domNodeRemoved = Functor.map domNodeRemoved_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event - (Deku.Attribute.Attribute (domNodeRemoved :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (domNodeRemoved :: Web.Event.Internal.Types.Event | r)) domNodeRemoved_ = domNodeRemoved <<< Applicative.pure domNodeInsertedIntoDocument :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (domNodeInsertedIntoDocument :: Web.Event.Internal.Types.Event | r)) domNodeInsertedIntoDocument = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "DOMNodeInsertedIntoDocument", value: _ } @@ -1315,14 +1293,14 @@ domNodeInsertedIntoDocument = Functor.map domNodeInsertedIntoDocument_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + -> FRP.Poll.Poll (Deku.Attribute.Attribute (domNodeInsertedIntoDocument :: Web.Event.Internal.Types.Event | r)) domNodeInsertedIntoDocument_ = domNodeInsertedIntoDocument <<< Applicative.pure domNodeInserted :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (domNodeInserted :: Web.Event.Internal.Types.Event | r)) domNodeInserted = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "DOMNodeInserted", value: _ } <<< Deku.Attribute.cb' @@ -1333,14 +1311,14 @@ domNodeInserted = Functor.map domNodeInserted_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + -> FRP.Poll.Poll (Deku.Attribute.Attribute (domNodeInserted :: Web.Event.Internal.Types.Event | r)) domNodeInserted_ = domNodeInserted <<< Applicative.pure domCharacterDataModified :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (domCharacterDataModified :: Web.Event.Internal.Types.Event | r)) domCharacterDataModified = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "DOMCharacterDataModified", value: _ } @@ -1352,14 +1330,14 @@ domCharacterDataModified = Functor.map domCharacterDataModified_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + -> FRP.Poll.Poll (Deku.Attribute.Attribute (domCharacterDataModified :: Web.Event.Internal.Types.Event | r)) domCharacterDataModified_ = domCharacterDataModified <<< Applicative.pure domSubtreeModified :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (domSubtreeModified :: Web.Event.Internal.Types.Event | r)) domSubtreeModified = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "DOMSubtreeModified", value: _ } @@ -1371,14 +1349,14 @@ domSubtreeModified = Functor.map domSubtreeModified_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + -> FRP.Poll.Poll (Deku.Attribute.Attribute (domSubtreeModified :: Web.Event.Internal.Types.Event | r)) domSubtreeModified_ = domSubtreeModified <<< Applicative.pure unload :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (unload :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (unload :: Web.Event.Internal.Types.Event | r)) unload = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "unload", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -1388,13 +1366,13 @@ unload = Functor.map unload_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (unload :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (unload :: Web.Event.Internal.Types.Event | r)) unload_ = unload <<< Applicative.pure touchcancel :: forall r - . FRP.Event.Event (Web.TouchEvent.TouchEvent.TouchEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + . FRP.Poll.Poll (Web.TouchEvent.TouchEvent.TouchEvent -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (touchcancel :: Web.TouchEvent.TouchEvent.TouchEvent | r)) touchcancel = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "touchcancel", value: _ } <<< Deku.Attribute.cb' @@ -1405,14 +1383,14 @@ touchcancel = Functor.map touchcancel_ :: forall r . (Web.TouchEvent.TouchEvent.TouchEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + -> FRP.Poll.Poll (Deku.Attribute.Attribute (touchcancel :: Web.TouchEvent.TouchEvent.TouchEvent | r)) touchcancel_ = touchcancel <<< Applicative.pure touchmove :: forall r - . FRP.Event.Event (Web.TouchEvent.TouchEvent.TouchEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + . FRP.Poll.Poll (Web.TouchEvent.TouchEvent.TouchEvent -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (touchmove :: Web.TouchEvent.TouchEvent.TouchEvent | r)) touchmove = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "touchmove", value: _ } <<< Deku.Attribute.cb' @@ -1423,15 +1401,14 @@ touchmove = Functor.map touchmove_ :: forall r . (Web.TouchEvent.TouchEvent.TouchEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + -> FRP.Poll.Poll (Deku.Attribute.Attribute (touchmove :: Web.TouchEvent.TouchEvent.TouchEvent | r)) touchmove_ = touchmove <<< Applicative.pure touchend :: forall r - . FRP.Event.Event (Web.TouchEvent.TouchEvent.TouchEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event - (Deku.Attribute.Attribute (touchend :: Web.TouchEvent.TouchEvent.TouchEvent | r)) + . FRP.Poll.Poll (Web.TouchEvent.TouchEvent.TouchEvent -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (touchend :: Web.TouchEvent.TouchEvent.TouchEvent | r)) touchend = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "touchend", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -1441,14 +1418,13 @@ touchend = Functor.map touchend_ :: forall r . (Web.TouchEvent.TouchEvent.TouchEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event - (Deku.Attribute.Attribute (touchend :: Web.TouchEvent.TouchEvent.TouchEvent | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (touchend :: Web.TouchEvent.TouchEvent.TouchEvent | r)) touchend_ = touchend <<< Applicative.pure touchstart :: forall r - . FRP.Event.Event (Web.TouchEvent.TouchEvent.TouchEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + . FRP.Poll.Poll (Web.TouchEvent.TouchEvent.TouchEvent -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (touchstart :: Web.TouchEvent.TouchEvent.TouchEvent | r)) touchstart = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "touchstart", value: _ } <<< Deku.Attribute.cb' @@ -1459,14 +1435,14 @@ touchstart = Functor.map touchstart_ :: forall r . (Web.TouchEvent.TouchEvent.TouchEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + -> FRP.Poll.Poll (Deku.Attribute.Attribute (touchstart :: Web.TouchEvent.TouchEvent.TouchEvent | r)) touchstart_ = touchstart <<< Applicative.pure visibilitychange :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (visibilitychange :: Web.Event.Internal.Types.Event | r)) visibilitychange = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "visibilitychange", value: _ } <<< Deku.Attribute.cb' @@ -1477,14 +1453,14 @@ visibilitychange = Functor.map visibilitychange_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + -> FRP.Poll.Poll (Deku.Attribute.Attribute (visibilitychange :: Web.Event.Internal.Types.Event | r)) visibilitychange_ = visibilitychange <<< Applicative.pure readystatechange :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (readystatechange :: Web.Event.Internal.Types.Event | r)) readystatechange = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "readystatechange", value: _ } <<< Deku.Attribute.cb' @@ -1495,14 +1471,14 @@ readystatechange = Functor.map readystatechange_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + -> FRP.Poll.Poll (Deku.Attribute.Attribute (readystatechange :: Web.Event.Internal.Types.Event | r)) readystatechange_ = readystatechange <<< Applicative.pure domContentLoaded :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (domContentLoaded :: Web.Event.Internal.Types.Event | r)) domContentLoaded = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "DOMContentLoaded", value: _ } <<< Deku.Attribute.cb' @@ -1513,15 +1489,14 @@ domContentLoaded = Functor.map domContentLoaded_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + -> FRP.Poll.Poll (Deku.Attribute.Attribute (domContentLoaded :: Web.Event.Internal.Types.Event | r)) domContentLoaded_ = domContentLoaded <<< Applicative.pure domFocusOut :: forall r - . FRP.Event.Event (Web.UIEvent.FocusEvent.FocusEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event - (Deku.Attribute.Attribute (domFocusOut :: Web.UIEvent.FocusEvent.FocusEvent | r)) + . FRP.Poll.Poll (Web.UIEvent.FocusEvent.FocusEvent -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (domFocusOut :: Web.UIEvent.FocusEvent.FocusEvent | r)) domFocusOut = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "DOMFocusOut", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -1531,15 +1506,13 @@ domFocusOut = Functor.map domFocusOut_ :: forall r . (Web.UIEvent.FocusEvent.FocusEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event - (Deku.Attribute.Attribute (domFocusOut :: Web.UIEvent.FocusEvent.FocusEvent | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (domFocusOut :: Web.UIEvent.FocusEvent.FocusEvent | r)) domFocusOut_ = domFocusOut <<< Applicative.pure domFocusIn :: forall r - . FRP.Event.Event (Web.UIEvent.FocusEvent.FocusEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event - (Deku.Attribute.Attribute (domFocusIn :: Web.UIEvent.FocusEvent.FocusEvent | r)) + . FRP.Poll.Poll (Web.UIEvent.FocusEvent.FocusEvent -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (domFocusIn :: Web.UIEvent.FocusEvent.FocusEvent | r)) domFocusIn = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "DOMFocusIn", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -1549,14 +1522,13 @@ domFocusIn = Functor.map domFocusIn_ :: forall r . (Web.UIEvent.FocusEvent.FocusEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event - (Deku.Attribute.Attribute (domFocusIn :: Web.UIEvent.FocusEvent.FocusEvent | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (domFocusIn :: Web.UIEvent.FocusEvent.FocusEvent | r)) domFocusIn_ = domFocusIn <<< Applicative.pure focusout :: forall r - . FRP.Event.Event (Web.UIEvent.FocusEvent.FocusEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (focusout :: Web.UIEvent.FocusEvent.FocusEvent | r)) + . FRP.Poll.Poll (Web.UIEvent.FocusEvent.FocusEvent -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (focusout :: Web.UIEvent.FocusEvent.FocusEvent | r)) focusout = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "focusout", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -1566,13 +1538,13 @@ focusout = Functor.map focusout_ :: forall r . (Web.UIEvent.FocusEvent.FocusEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (focusout :: Web.UIEvent.FocusEvent.FocusEvent | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (focusout :: Web.UIEvent.FocusEvent.FocusEvent | r)) focusout_ = focusout <<< Applicative.pure focusin :: forall r - . FRP.Event.Event (Web.UIEvent.FocusEvent.FocusEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (focusin :: Web.UIEvent.FocusEvent.FocusEvent | r)) + . FRP.Poll.Poll (Web.UIEvent.FocusEvent.FocusEvent -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (focusin :: Web.UIEvent.FocusEvent.FocusEvent | r)) focusin = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "focusin", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -1582,13 +1554,13 @@ focusin = Functor.map focusin_ :: forall r . (Web.UIEvent.FocusEvent.FocusEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (focusin :: Web.UIEvent.FocusEvent.FocusEvent | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (focusin :: Web.UIEvent.FocusEvent.FocusEvent | r)) focusin_ = focusin <<< Applicative.pure focus :: forall r - . FRP.Event.Event (Web.UIEvent.FocusEvent.FocusEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (focus :: Web.UIEvent.FocusEvent.FocusEvent | r)) + . FRP.Poll.Poll (Web.UIEvent.FocusEvent.FocusEvent -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (focus :: Web.UIEvent.FocusEvent.FocusEvent | r)) focus = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "focus", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -1598,13 +1570,13 @@ focus = Functor.map focus_ :: forall r . (Web.UIEvent.FocusEvent.FocusEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (focus :: Web.UIEvent.FocusEvent.FocusEvent | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (focus :: Web.UIEvent.FocusEvent.FocusEvent | r)) focus_ = focus <<< Applicative.pure blur :: forall r - . FRP.Event.Event (Web.UIEvent.FocusEvent.FocusEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (blur :: Web.UIEvent.FocusEvent.FocusEvent | r)) + . FRP.Poll.Poll (Web.UIEvent.FocusEvent.FocusEvent -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (blur :: Web.UIEvent.FocusEvent.FocusEvent | r)) blur = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "blur", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -1614,13 +1586,13 @@ blur = Functor.map blur_ :: forall r . (Web.UIEvent.FocusEvent.FocusEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (blur :: Web.UIEvent.FocusEvent.FocusEvent | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (blur :: Web.UIEvent.FocusEvent.FocusEvent | r)) blur_ = blur <<< Applicative.pure unhandledrejection :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (unhandledrejection :: Web.Event.Internal.Types.Event | r)) unhandledrejection = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "unhandledrejection", value: _ } @@ -1632,14 +1604,14 @@ unhandledrejection = Functor.map unhandledrejection_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + -> FRP.Poll.Poll (Deku.Attribute.Attribute (unhandledrejection :: Web.Event.Internal.Types.Event | r)) unhandledrejection_ = unhandledrejection <<< Applicative.pure storage :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (storage :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (storage :: Web.Event.Internal.Types.Event | r)) storage = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "storage", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -1649,13 +1621,13 @@ storage = Functor.map storage_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (storage :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (storage :: Web.Event.Internal.Types.Event | r)) storage_ = storage <<< Applicative.pure rejectionhandled :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (rejectionhandled :: Web.Event.Internal.Types.Event | r)) rejectionhandled = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "rejectionhandled", value: _ } <<< Deku.Attribute.cb' @@ -1666,14 +1638,14 @@ rejectionhandled = Functor.map rejectionhandled_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + -> FRP.Poll.Poll (Deku.Attribute.Attribute (rejectionhandled :: Web.Event.Internal.Types.Event | r)) rejectionhandled_ = rejectionhandled <<< Applicative.pure popstate :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (popstate :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (popstate :: Web.Event.Internal.Types.Event | r)) popstate = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "popstate", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -1683,13 +1655,13 @@ popstate = Functor.map popstate_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (popstate :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (popstate :: Web.Event.Internal.Types.Event | r)) popstate_ = popstate <<< Applicative.pure pageshow :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (pageshow :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (pageshow :: Web.Event.Internal.Types.Event | r)) pageshow = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "pageshow", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -1699,13 +1671,13 @@ pageshow = Functor.map pageshow_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (pageshow :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (pageshow :: Web.Event.Internal.Types.Event | r)) pageshow_ = pageshow <<< Applicative.pure pagehide :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (pagehide :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (pagehide :: Web.Event.Internal.Types.Event | r)) pagehide = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "pagehide", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -1715,13 +1687,13 @@ pagehide = Functor.map pagehide_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (pagehide :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (pagehide :: Web.Event.Internal.Types.Event | r)) pagehide_ = pagehide <<< Applicative.pure online :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (online :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (online :: Web.Event.Internal.Types.Event | r)) online = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "online", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -1731,13 +1703,13 @@ online = Functor.map online_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (online :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (online :: Web.Event.Internal.Types.Event | r)) online_ = online <<< Applicative.pure offline :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (offline :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (offline :: Web.Event.Internal.Types.Event | r)) offline = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "offline", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -1747,13 +1719,13 @@ offline = Functor.map offline_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (offline :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (offline :: Web.Event.Internal.Types.Event | r)) offline_ = offline <<< Applicative.pure messageerror :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (messageerror :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (messageerror :: Web.Event.Internal.Types.Event | r)) messageerror = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "messageerror", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -1763,13 +1735,13 @@ messageerror = Functor.map messageerror_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (messageerror :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (messageerror :: Web.Event.Internal.Types.Event | r)) messageerror_ = messageerror <<< Applicative.pure message :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (message :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (message :: Web.Event.Internal.Types.Event | r)) message = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "message", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -1779,14 +1751,13 @@ message = Functor.map message_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (message :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (message :: Web.Event.Internal.Types.Event | r)) message_ = message <<< Applicative.pure languagechange :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event - (Deku.Attribute.Attribute (languagechange :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (languagechange :: Web.Event.Internal.Types.Event | r)) languagechange = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "languagechange", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -1796,14 +1767,13 @@ languagechange = Functor.map languagechange_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event - (Deku.Attribute.Attribute (languagechange :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (languagechange :: Web.Event.Internal.Types.Event | r)) languagechange_ = languagechange <<< Applicative.pure hashchange :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (hashchange :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (hashchange :: Web.Event.Internal.Types.Event | r)) hashchange = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "hashchange", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -1813,13 +1783,13 @@ hashchange = Functor.map hashchange_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (hashchange :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (hashchange :: Web.Event.Internal.Types.Event | r)) hashchange_ = hashchange <<< Applicative.pure beforeunload :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (beforeunload :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (beforeunload :: Web.Event.Internal.Types.Event | r)) beforeunload = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "beforeunload", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -1829,13 +1799,13 @@ beforeunload = Functor.map beforeunload_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (beforeunload :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (beforeunload :: Web.Event.Internal.Types.Event | r)) beforeunload_ = beforeunload <<< Applicative.pure beforeprint :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (beforeprint :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (beforeprint :: Web.Event.Internal.Types.Event | r)) beforeprint = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "beforeprint", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -1845,13 +1815,13 @@ beforeprint = Functor.map beforeprint_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (beforeprint :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (beforeprint :: Web.Event.Internal.Types.Event | r)) beforeprint_ = beforeprint <<< Applicative.pure afterprint :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (afterprint :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (afterprint :: Web.Event.Internal.Types.Event | r)) afterprint = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "afterprint", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -1861,13 +1831,13 @@ afterprint = Functor.map afterprint_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (afterprint :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (afterprint :: Web.Event.Internal.Types.Event | r)) afterprint_ = afterprint <<< Applicative.pure beforetoggle :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (beforetoggle :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (beforetoggle :: Web.Event.Internal.Types.Event | r)) beforetoggle = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "beforetoggle", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -1877,13 +1847,13 @@ beforetoggle = Functor.map beforetoggle_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (beforetoggle :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (beforetoggle :: Web.Event.Internal.Types.Event | r)) beforetoggle_ = beforetoggle <<< Applicative.pure beforematch :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (beforematch :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (beforematch :: Web.Event.Internal.Types.Event | r)) beforematch = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "beforematch", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -1893,13 +1863,13 @@ beforematch = Functor.map beforematch_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (beforematch :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (beforematch :: Web.Event.Internal.Types.Event | r)) beforematch_ = beforematch <<< Applicative.pure close :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (close :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (close :: Web.Event.Internal.Types.Event | r)) close = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "close", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -1909,13 +1879,13 @@ close = Functor.map close_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (close :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (close :: Web.Event.Internal.Types.Event | r)) close_ = close <<< Applicative.pure cancel :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (cancel :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (cancel :: Web.Event.Internal.Types.Event | r)) cancel = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "cancel", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -1925,13 +1895,13 @@ cancel = Functor.map cancel_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (cancel :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (cancel :: Web.Event.Internal.Types.Event | r)) cancel_ = cancel <<< Applicative.pure select :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (select :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (select :: Web.Event.Internal.Types.Event | r)) select = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "select", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -1941,13 +1911,13 @@ select = Functor.map select_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (select :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (select :: Web.Event.Internal.Types.Event | r)) select_ = select <<< Applicative.pure invalid :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (invalid :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (invalid :: Web.Event.Internal.Types.Event | r)) invalid = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "invalid", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -1957,13 +1927,13 @@ invalid = Functor.map invalid_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (invalid :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (invalid :: Web.Event.Internal.Types.Event | r)) invalid_ = invalid <<< Applicative.pure keypress :: forall r - . FRP.Event.Event (Web.UIEvent.KeyboardEvent.KeyboardEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + . FRP.Poll.Poll (Web.UIEvent.KeyboardEvent.KeyboardEvent -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (keypress :: Web.UIEvent.KeyboardEvent.KeyboardEvent | r)) keypress = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "keypress", value: _ } <<< Deku.Attribute.cb' @@ -1974,14 +1944,14 @@ keypress = Functor.map keypress_ :: forall r . (Web.UIEvent.KeyboardEvent.KeyboardEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + -> FRP.Poll.Poll (Deku.Attribute.Attribute (keypress :: Web.UIEvent.KeyboardEvent.KeyboardEvent | r)) keypress_ = keypress <<< Applicative.pure domAttrModified :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (domAttrModified :: Web.Event.Internal.Types.Event | r)) domAttrModified = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "DOMAttrModified", value: _ } <<< Deku.Attribute.cb' @@ -1992,14 +1962,14 @@ domAttrModified = Functor.map domAttrModified_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + -> FRP.Poll.Poll (Deku.Attribute.Attribute (domAttrModified :: Web.Event.Internal.Types.Event | r)) domAttrModified_ = domAttrModified <<< Applicative.pure domActivate :: forall r - . FRP.Event.Event (Web.UIEvent.UIEvent.UIEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (domActivate :: Web.UIEvent.UIEvent.UIEvent | r)) + . FRP.Poll.Poll (Web.UIEvent.UIEvent.UIEvent -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (domActivate :: Web.UIEvent.UIEvent.UIEvent | r)) domActivate = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "DOMActivate", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -2009,13 +1979,13 @@ domActivate = Functor.map domActivate_ :: forall r . (Web.UIEvent.UIEvent.UIEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (domActivate :: Web.UIEvent.UIEvent.UIEvent | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (domActivate :: Web.UIEvent.UIEvent.UIEvent | r)) domActivate_ = domActivate <<< Applicative.pure wheel :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (wheel :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (wheel :: Web.Event.Internal.Types.Event | r)) wheel = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "wheel", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -2025,13 +1995,13 @@ wheel = Functor.map wheel_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (wheel :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (wheel :: Web.Event.Internal.Types.Event | r)) wheel_ = wheel <<< Applicative.pure mouseup :: forall r - . FRP.Event.Event (Web.UIEvent.MouseEvent.MouseEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (mouseup :: Web.UIEvent.MouseEvent.MouseEvent | r)) + . FRP.Poll.Poll (Web.UIEvent.MouseEvent.MouseEvent -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (mouseup :: Web.UIEvent.MouseEvent.MouseEvent | r)) mouseup = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "mouseup", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -2041,13 +2011,13 @@ mouseup = Functor.map mouseup_ :: forall r . (Web.UIEvent.MouseEvent.MouseEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (mouseup :: Web.UIEvent.MouseEvent.MouseEvent | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (mouseup :: Web.UIEvent.MouseEvent.MouseEvent | r)) mouseup_ = mouseup <<< Applicative.pure mouseover :: forall r - . FRP.Event.Event (Web.UIEvent.MouseEvent.MouseEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (mouseover :: Web.UIEvent.MouseEvent.MouseEvent | r)) + . FRP.Poll.Poll (Web.UIEvent.MouseEvent.MouseEvent -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (mouseover :: Web.UIEvent.MouseEvent.MouseEvent | r)) mouseover = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "mouseover", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -2057,13 +2027,13 @@ mouseover = Functor.map mouseover_ :: forall r . (Web.UIEvent.MouseEvent.MouseEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (mouseover :: Web.UIEvent.MouseEvent.MouseEvent | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (mouseover :: Web.UIEvent.MouseEvent.MouseEvent | r)) mouseover_ = mouseover <<< Applicative.pure mouseout :: forall r - . FRP.Event.Event (Web.UIEvent.MouseEvent.MouseEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (mouseout :: Web.UIEvent.MouseEvent.MouseEvent | r)) + . FRP.Poll.Poll (Web.UIEvent.MouseEvent.MouseEvent -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (mouseout :: Web.UIEvent.MouseEvent.MouseEvent | r)) mouseout = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "mouseout", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -2073,13 +2043,13 @@ mouseout = Functor.map mouseout_ :: forall r . (Web.UIEvent.MouseEvent.MouseEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (mouseout :: Web.UIEvent.MouseEvent.MouseEvent | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (mouseout :: Web.UIEvent.MouseEvent.MouseEvent | r)) mouseout_ = mouseout <<< Applicative.pure mousemove :: forall r - . FRP.Event.Event (Web.UIEvent.MouseEvent.MouseEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (mousemove :: Web.UIEvent.MouseEvent.MouseEvent | r)) + . FRP.Poll.Poll (Web.UIEvent.MouseEvent.MouseEvent -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (mousemove :: Web.UIEvent.MouseEvent.MouseEvent | r)) mousemove = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "mousemove", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -2089,14 +2059,13 @@ mousemove = Functor.map mousemove_ :: forall r . (Web.UIEvent.MouseEvent.MouseEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (mousemove :: Web.UIEvent.MouseEvent.MouseEvent | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (mousemove :: Web.UIEvent.MouseEvent.MouseEvent | r)) mousemove_ = mousemove <<< Applicative.pure mouseleave :: forall r - . FRP.Event.Event (Web.UIEvent.MouseEvent.MouseEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event - (Deku.Attribute.Attribute (mouseleave :: Web.UIEvent.MouseEvent.MouseEvent | r)) + . FRP.Poll.Poll (Web.UIEvent.MouseEvent.MouseEvent -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (mouseleave :: Web.UIEvent.MouseEvent.MouseEvent | r)) mouseleave = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "mouseleave", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -2106,15 +2075,13 @@ mouseleave = Functor.map mouseleave_ :: forall r . (Web.UIEvent.MouseEvent.MouseEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event - (Deku.Attribute.Attribute (mouseleave :: Web.UIEvent.MouseEvent.MouseEvent | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (mouseleave :: Web.UIEvent.MouseEvent.MouseEvent | r)) mouseleave_ = mouseleave <<< Applicative.pure mouseenter :: forall r - . FRP.Event.Event (Web.UIEvent.MouseEvent.MouseEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event - (Deku.Attribute.Attribute (mouseenter :: Web.UIEvent.MouseEvent.MouseEvent | r)) + . FRP.Poll.Poll (Web.UIEvent.MouseEvent.MouseEvent -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (mouseenter :: Web.UIEvent.MouseEvent.MouseEvent | r)) mouseenter = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "mouseenter", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -2124,14 +2091,13 @@ mouseenter = Functor.map mouseenter_ :: forall r . (Web.UIEvent.MouseEvent.MouseEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event - (Deku.Attribute.Attribute (mouseenter :: Web.UIEvent.MouseEvent.MouseEvent | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (mouseenter :: Web.UIEvent.MouseEvent.MouseEvent | r)) mouseenter_ = mouseenter <<< Applicative.pure mousedown :: forall r - . FRP.Event.Event (Web.UIEvent.MouseEvent.MouseEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (mousedown :: Web.UIEvent.MouseEvent.MouseEvent | r)) + . FRP.Poll.Poll (Web.UIEvent.MouseEvent.MouseEvent -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (mousedown :: Web.UIEvent.MouseEvent.MouseEvent | r)) mousedown = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "mousedown", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -2141,14 +2107,13 @@ mousedown = Functor.map mousedown_ :: forall r . (Web.UIEvent.MouseEvent.MouseEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (mousedown :: Web.UIEvent.MouseEvent.MouseEvent | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (mousedown :: Web.UIEvent.MouseEvent.MouseEvent | r)) mousedown_ = mousedown <<< Applicative.pure keyup :: forall r - . FRP.Event.Event (Web.UIEvent.KeyboardEvent.KeyboardEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event - (Deku.Attribute.Attribute (keyup :: Web.UIEvent.KeyboardEvent.KeyboardEvent | r)) + . FRP.Poll.Poll (Web.UIEvent.KeyboardEvent.KeyboardEvent -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (keyup :: Web.UIEvent.KeyboardEvent.KeyboardEvent | r)) keyup = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "keyup", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -2158,14 +2123,13 @@ keyup = Functor.map keyup_ :: forall r . (Web.UIEvent.KeyboardEvent.KeyboardEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event - (Deku.Attribute.Attribute (keyup :: Web.UIEvent.KeyboardEvent.KeyboardEvent | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (keyup :: Web.UIEvent.KeyboardEvent.KeyboardEvent | r)) keyup_ = keyup <<< Applicative.pure keydown :: forall r - . FRP.Event.Event (Web.UIEvent.KeyboardEvent.KeyboardEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + . FRP.Poll.Poll (Web.UIEvent.KeyboardEvent.KeyboardEvent -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (keydown :: Web.UIEvent.KeyboardEvent.KeyboardEvent | r)) keydown = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "keydown", value: _ } <<< Deku.Attribute.cb' @@ -2176,14 +2140,14 @@ keydown = Functor.map keydown_ :: forall r . (Web.UIEvent.KeyboardEvent.KeyboardEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + -> FRP.Poll.Poll (Deku.Attribute.Attribute (keydown :: Web.UIEvent.KeyboardEvent.KeyboardEvent | r)) keydown_ = keydown <<< Applicative.pure input :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (input :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (input :: Web.Event.Internal.Types.Event | r)) input = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "input", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -2193,13 +2157,13 @@ input = Functor.map input_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (input :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (input :: Web.Event.Internal.Types.Event | r)) input_ = input <<< Applicative.pure dblclick :: forall r - . FRP.Event.Event (Web.UIEvent.MouseEvent.MouseEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (dblclick :: Web.UIEvent.MouseEvent.MouseEvent | r)) + . FRP.Poll.Poll (Web.UIEvent.MouseEvent.MouseEvent -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (dblclick :: Web.UIEvent.MouseEvent.MouseEvent | r)) dblclick = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "dblclick", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -2209,13 +2173,13 @@ dblclick = Functor.map dblclick_ :: forall r . (Web.UIEvent.MouseEvent.MouseEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (dblclick :: Web.UIEvent.MouseEvent.MouseEvent | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (dblclick :: Web.UIEvent.MouseEvent.MouseEvent | r)) dblclick_ = dblclick <<< Applicative.pure contextmenu :: forall r - . FRP.Event.Event (Web.PointerEvent.PointerEvent.PointerEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + . FRP.Poll.Poll (Web.PointerEvent.PointerEvent.PointerEvent -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (contextmenu :: Web.PointerEvent.PointerEvent.PointerEvent | r)) contextmenu = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "contextmenu", value: _ } <<< Deku.Attribute.cb' @@ -2226,14 +2190,14 @@ contextmenu = Functor.map contextmenu_ :: forall r . (Web.PointerEvent.PointerEvent.PointerEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + -> FRP.Poll.Poll (Deku.Attribute.Attribute (contextmenu :: Web.PointerEvent.PointerEvent.PointerEvent | r)) contextmenu_ = contextmenu <<< Applicative.pure compositionend :: forall r - . FRP.Event.Event (Web.UIEvent.CompositionEvent.CompositionEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + . FRP.Poll.Poll (Web.UIEvent.CompositionEvent.CompositionEvent -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll ( Deku.Attribute.Attribute (compositionend :: Web.UIEvent.CompositionEvent.CompositionEvent | r) ) @@ -2246,7 +2210,7 @@ compositionend = Functor.map compositionend_ :: forall r . (Web.UIEvent.CompositionEvent.CompositionEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + -> FRP.Poll.Poll ( Deku.Attribute.Attribute (compositionend :: Web.UIEvent.CompositionEvent.CompositionEvent | r) ) @@ -2254,8 +2218,8 @@ compositionend_ = compositionend <<< Applicative.pure compositionupdate :: forall r - . FRP.Event.Event (Web.UIEvent.CompositionEvent.CompositionEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + . FRP.Poll.Poll (Web.UIEvent.CompositionEvent.CompositionEvent -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll ( Deku.Attribute.Attribute (compositionupdate :: Web.UIEvent.CompositionEvent.CompositionEvent | r) ) @@ -2268,7 +2232,7 @@ compositionupdate = Functor.map compositionupdate_ :: forall r . (Web.UIEvent.CompositionEvent.CompositionEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + -> FRP.Poll.Poll ( Deku.Attribute.Attribute (compositionupdate :: Web.UIEvent.CompositionEvent.CompositionEvent | r) ) @@ -2276,8 +2240,8 @@ compositionupdate_ = compositionupdate <<< Applicative.pure compositionstart :: forall r - . FRP.Event.Event (Web.UIEvent.CompositionEvent.CompositionEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + . FRP.Poll.Poll (Web.UIEvent.CompositionEvent.CompositionEvent -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll ( Deku.Attribute.Attribute (compositionstart :: Web.UIEvent.CompositionEvent.CompositionEvent | r) ) @@ -2290,7 +2254,7 @@ compositionstart = Functor.map compositionstart_ :: forall r . (Web.UIEvent.CompositionEvent.CompositionEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + -> FRP.Poll.Poll ( Deku.Attribute.Attribute (compositionstart :: Web.UIEvent.CompositionEvent.CompositionEvent | r) ) @@ -2298,8 +2262,8 @@ compositionstart_ = compositionstart <<< Applicative.pure click :: forall r - . FRP.Event.Event (Web.PointerEvent.PointerEvent.PointerEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + . FRP.Poll.Poll (Web.PointerEvent.PointerEvent.PointerEvent -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (click :: Web.PointerEvent.PointerEvent.PointerEvent | r)) click = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "click", value: _ } <<< Deku.Attribute.cb' @@ -2310,14 +2274,14 @@ click = Functor.map click_ :: forall r . (Web.PointerEvent.PointerEvent.PointerEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + -> FRP.Poll.Poll (Deku.Attribute.Attribute (click :: Web.PointerEvent.PointerEvent.PointerEvent | r)) click_ = click <<< Applicative.pure beforeinput :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (beforeinput :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (beforeinput :: Web.Event.Internal.Types.Event | r)) beforeinput = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "beforeinput", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -2327,13 +2291,13 @@ beforeinput = Functor.map beforeinput_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (beforeinput :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (beforeinput :: Web.Event.Internal.Types.Event | r)) beforeinput_ = beforeinput <<< Applicative.pure auxclick :: forall r - . FRP.Event.Event (Web.PointerEvent.PointerEvent.PointerEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + . FRP.Poll.Poll (Web.PointerEvent.PointerEvent.PointerEvent -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (auxclick :: Web.PointerEvent.PointerEvent.PointerEvent | r)) auxclick = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "auxclick", value: _ } <<< Deku.Attribute.cb' @@ -2344,14 +2308,14 @@ auxclick = Functor.map auxclick_ :: forall r . (Web.PointerEvent.PointerEvent.PointerEvent -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + -> FRP.Poll.Poll (Deku.Attribute.Attribute (auxclick :: Web.PointerEvent.PointerEvent.PointerEvent | r)) auxclick_ = auxclick <<< Applicative.pure connect :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (connect :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (connect :: Web.Event.Internal.Types.Event | r)) connect = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "connect", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -2361,13 +2325,13 @@ connect = Functor.map connect_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (connect :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (connect :: Web.Event.Internal.Types.Event | r)) connect_ = connect <<< Applicative.pure contextrestored :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (contextrestored :: Web.Event.Internal.Types.Event | r)) contextrestored = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "contextrestored", value: _ } <<< Deku.Attribute.cb' @@ -2378,14 +2342,14 @@ contextrestored = Functor.map contextrestored_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + -> FRP.Poll.Poll (Deku.Attribute.Attribute (contextrestored :: Web.Event.Internal.Types.Event | r)) contextrestored_ = contextrestored <<< Applicative.pure contextlost :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (contextlost :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (contextlost :: Web.Event.Internal.Types.Event | r)) contextlost = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "contextlost", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -2395,13 +2359,13 @@ contextlost = Functor.map contextlost_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (contextlost :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (contextlost :: Web.Event.Internal.Types.Event | r)) contextlost_ = contextlost <<< Applicative.pure navigatesuccess :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (navigatesuccess :: Web.Event.Internal.Types.Event | r)) navigatesuccess = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "navigatesuccess", value: _ } <<< Deku.Attribute.cb' @@ -2412,15 +2376,14 @@ navigatesuccess = Functor.map navigatesuccess_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + -> FRP.Poll.Poll (Deku.Attribute.Attribute (navigatesuccess :: Web.Event.Internal.Types.Event | r)) navigatesuccess_ = navigatesuccess <<< Applicative.pure navigateerror :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event - (Deku.Attribute.Attribute (navigateerror :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (navigateerror :: Web.Event.Internal.Types.Event | r)) navigateerror = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "navigateerror", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -2430,14 +2393,13 @@ navigateerror = Functor.map navigateerror_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event - (Deku.Attribute.Attribute (navigateerror :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (navigateerror :: Web.Event.Internal.Types.Event | r)) navigateerror_ = navigateerror <<< Applicative.pure navigate :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (navigate :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (navigate :: Web.Event.Internal.Types.Event | r)) navigate = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "navigate", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -2447,13 +2409,13 @@ navigate = Functor.map navigate_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (navigate :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (navigate :: Web.Event.Internal.Types.Event | r)) navigate_ = navigate <<< Applicative.pure currententrychange :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (currententrychange :: Web.Event.Internal.Types.Event | r)) currententrychange = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "currententrychange", value: _ } @@ -2465,14 +2427,14 @@ currententrychange = Functor.map currententrychange_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event + -> FRP.Poll.Poll (Deku.Attribute.Attribute (currententrychange :: Web.Event.Internal.Types.Event | r)) currententrychange_ = currententrychange <<< Applicative.pure dispose :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (dispose :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (dispose :: Web.Event.Internal.Types.Event | r)) dispose = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "dispose", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -2482,13 +2444,13 @@ dispose = Functor.map dispose_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (dispose :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (dispose :: Web.Event.Internal.Types.Event | r)) dispose_ = dispose <<< Applicative.pure open :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (open :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (open :: Web.Event.Internal.Types.Event | r)) open = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "open", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -2498,13 +2460,13 @@ open = Functor.map open_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (open :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (open :: Web.Event.Internal.Types.Event | r)) open_ = open <<< Applicative.pure submit :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (submit :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (submit :: Web.Event.Internal.Types.Event | r)) submit = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "submit", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -2514,13 +2476,13 @@ submit = Functor.map submit_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (submit :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (submit :: Web.Event.Internal.Types.Event | r)) submit_ = submit <<< Applicative.pure reset :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (reset :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (reset :: Web.Event.Internal.Types.Event | r)) reset = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "reset", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -2530,13 +2492,13 @@ reset = Functor.map reset_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (reset :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (reset :: Web.Event.Internal.Types.Event | r)) reset_ = reset <<< Applicative.pure formdata :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (formdata :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (formdata :: Web.Event.Internal.Types.Event | r)) formdata = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "formdata", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -2546,13 +2508,13 @@ formdata = Functor.map formdata_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (formdata :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (formdata :: Web.Event.Internal.Types.Event | r)) formdata_ = formdata <<< Applicative.pure toggle :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (toggle :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (toggle :: Web.Event.Internal.Types.Event | r)) toggle = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "toggle", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -2562,13 +2524,13 @@ toggle = Functor.map toggle_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (toggle :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (toggle :: Web.Event.Internal.Types.Event | r)) toggle_ = toggle <<< Applicative.pure devicechange :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (devicechange :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (devicechange :: Web.Event.Internal.Types.Event | r)) devicechange = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "devicechange", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -2578,14 +2540,13 @@ devicechange = Functor.map devicechange_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (devicechange :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (devicechange :: Web.Event.Internal.Types.Event | r)) devicechange_ = devicechange <<< Applicative.pure captureaction :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event - (Deku.Attribute.Attribute (captureaction :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (captureaction :: Web.Event.Internal.Types.Event | r)) captureaction = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "captureaction", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -2595,14 +2556,13 @@ captureaction = Functor.map captureaction_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event - (Deku.Attribute.Attribute (captureaction :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (captureaction :: Web.Event.Internal.Types.Event | r)) captureaction_ = captureaction <<< Applicative.pure unmute :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (unmute :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (unmute :: Web.Event.Internal.Types.Event | r)) unmute = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "unmute", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -2612,13 +2572,13 @@ unmute = Functor.map unmute_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (unmute :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (unmute :: Web.Event.Internal.Types.Event | r)) unmute_ = unmute <<< Applicative.pure mute :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (mute :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (mute :: Web.Event.Internal.Types.Event | r)) mute = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "mute", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -2628,13 +2588,13 @@ mute = Functor.map mute_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (mute :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (mute :: Web.Event.Internal.Types.Event | r)) mute_ = mute <<< Applicative.pure resume :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (resume :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (resume :: Web.Event.Internal.Types.Event | r)) resume = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "resume", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -2644,14 +2604,13 @@ resume = Functor.map resume_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (resume :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (resume :: Web.Event.Internal.Types.Event | r)) resume_ = resume <<< Applicative.pure dataavailable :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event - (Deku.Attribute.Attribute (dataavailable :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (dataavailable :: Web.Event.Internal.Types.Event | r)) dataavailable = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "dataavailable", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -2661,14 +2620,13 @@ dataavailable = Functor.map dataavailable_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event - (Deku.Attribute.Attribute (dataavailable :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (dataavailable :: Web.Event.Internal.Types.Event | r)) dataavailable_ = dataavailable <<< Applicative.pure stop :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (stop :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (stop :: Web.Event.Internal.Types.Event | r)) stop = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "stop", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -2678,13 +2636,13 @@ stop = Functor.map stop_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (stop :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (stop :: Web.Event.Internal.Types.Event | r)) stop_ = stop <<< Applicative.pure start :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (start :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (start :: Web.Event.Internal.Types.Event | r)) start = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "start", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -2694,5 +2652,5 @@ start = Functor.map start_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (start :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (start :: Web.Event.Internal.Types.Event | r)) start_ = start <<< Applicative.pure diff --git a/deku-dom/src/Deku/DOM/MathML.purs b/deku-dom/src/Deku/DOM/MathML.purs index d6dfa98a..c5aa516e 100644 --- a/deku-dom/src/Deku/DOM/MathML.purs +++ b/deku-dom/src/Deku/DOM/MathML.purs @@ -5,71 +5,102 @@ module Deku.DOM.MathML ( class TagToDeku , math , math_ + , math__ , mtext , mtext_ + , mtext__ , mi , mi_ + , mi__ , mn , mn_ + , mn__ , mo , mo_ + , mo__ , mspace , mspace_ + , mspace__ , ms , ms_ + , ms__ , mrow , mrow_ + , mrow__ , mfrac , mfrac_ + , mfrac__ , msqrt , msqrt_ + , msqrt__ , mroot , mroot_ + , mroot__ , mstyle , mstyle_ + , mstyle__ , merror , merror_ + , merror__ , mpadded , mpadded_ + , mpadded__ , mphantom , mphantom_ + , mphantom__ , msub , msub_ + , msub__ , msup , msup_ + , msup__ , msubsup , msubsup_ + , msubsup__ , munder , munder_ + , munder__ , mover , mover_ + , mover__ , munderover , munderover_ + , munderover__ , mmultiscripts , mmultiscripts_ + , mmultiscripts__ , mprescripts , mprescripts_ + , mprescripts__ , mtable , mtable_ + , mtable__ , mtr , mtr_ + , mtr__ , mtd , mtd_ + , mtd__ , maction , maction_ + , maction__ , semantics , semantics_ + , semantics__ , annotation , annotation_ + , annotation__ , annotationXml , annotationXml_ + , annotationXml__ , MathMLElement ) where -import FRP.Event as FRP.Event +import FRP.Poll as FRP.Poll import Data.Maybe (Maybe(..)) import Deku.Attribute (Attribute) as Deku.Attribute import Deku.Control (elementify2) +import Deku.Control as DC import Deku.Core (Nut) import Type.Proxy (Proxy) import Deku.DOM (Element, GlobalEventHandlers, HTMLOrSVGElement) @@ -105,250 +136,336 @@ type MathMLElement (r :: Row Type) = instance TagToDeku "math" (MathMLElement ()) -math :: Array (FRP.Event.Event (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut +math :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut math = elementify2 (Just "http://www.w3.org/1998/Math/MathML") "math" math_ :: Array Nut -> Nut math_ = math [] +math__ :: String -> Nut +math__ t = math [] [ DC.text_ t ] + instance TagToDeku "mtext" (MathMLElement ()) -mtext :: Array (FRP.Event.Event (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut +mtext :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut mtext = elementify2 (Just "http://www.w3.org/1998/Math/MathML") "mtext" mtext_ :: Array Nut -> Nut mtext_ = mtext [] +mtext__ :: String -> Nut +mtext__ t = mtext [] [ DC.text_ t ] + instance TagToDeku "mi" (MathMLElement ()) -mi :: Array (FRP.Event.Event (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut +mi :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut mi = elementify2 (Just "http://www.w3.org/1998/Math/MathML") "mi" mi_ :: Array Nut -> Nut mi_ = mi [] +mi__ :: String -> Nut +mi__ t = mi [] [ DC.text_ t ] + instance TagToDeku "mn" (MathMLElement ()) -mn :: Array (FRP.Event.Event (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut +mn :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut mn = elementify2 (Just "http://www.w3.org/1998/Math/MathML") "mn" mn_ :: Array Nut -> Nut mn_ = mn [] +mn__ :: String -> Nut +mn__ t = mn [] [ DC.text_ t ] + instance TagToDeku "mo" (MathMLElement ()) -mo :: Array (FRP.Event.Event (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut +mo :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut mo = elementify2 (Just "http://www.w3.org/1998/Math/MathML") "mo" mo_ :: Array Nut -> Nut mo_ = mo [] +mo__ :: String -> Nut +mo__ t = mo [] [ DC.text_ t ] + instance TagToDeku "mspace" (MathMLElement ()) -mspace :: Array (FRP.Event.Event (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut +mspace :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut mspace = elementify2 (Just "http://www.w3.org/1998/Math/MathML") "mspace" mspace_ :: Array Nut -> Nut mspace_ = mspace [] +mspace__ :: String -> Nut +mspace__ t = mspace [] [ DC.text_ t ] + instance TagToDeku "ms" (MathMLElement ()) -ms :: Array (FRP.Event.Event (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut +ms :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut ms = elementify2 (Just "http://www.w3.org/1998/Math/MathML") "ms" ms_ :: Array Nut -> Nut ms_ = ms [] +ms__ :: String -> Nut +ms__ t = ms [] [ DC.text_ t ] + instance TagToDeku "mrow" (MathMLElement ()) -mrow :: Array (FRP.Event.Event (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut +mrow :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut mrow = elementify2 (Just "http://www.w3.org/1998/Math/MathML") "mrow" mrow_ :: Array Nut -> Nut mrow_ = mrow [] +mrow__ :: String -> Nut +mrow__ t = mrow [] [ DC.text_ t ] + instance TagToDeku "mfrac" (MathMLElement ()) -mfrac :: Array (FRP.Event.Event (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut +mfrac :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut mfrac = elementify2 (Just "http://www.w3.org/1998/Math/MathML") "mfrac" mfrac_ :: Array Nut -> Nut mfrac_ = mfrac [] +mfrac__ :: String -> Nut +mfrac__ t = mfrac [] [ DC.text_ t ] + instance TagToDeku "msqrt" (MathMLElement ()) -msqrt :: Array (FRP.Event.Event (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut +msqrt :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut msqrt = elementify2 (Just "http://www.w3.org/1998/Math/MathML") "msqrt" msqrt_ :: Array Nut -> Nut msqrt_ = msqrt [] +msqrt__ :: String -> Nut +msqrt__ t = msqrt [] [ DC.text_ t ] + instance TagToDeku "mroot" (MathMLElement ()) -mroot :: Array (FRP.Event.Event (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut +mroot :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut mroot = elementify2 (Just "http://www.w3.org/1998/Math/MathML") "mroot" mroot_ :: Array Nut -> Nut mroot_ = mroot [] +mroot__ :: String -> Nut +mroot__ t = mroot [] [ DC.text_ t ] + instance TagToDeku "mstyle" (MathMLElement ()) -mstyle :: Array (FRP.Event.Event (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut +mstyle :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut mstyle = elementify2 (Just "http://www.w3.org/1998/Math/MathML") "mstyle" mstyle_ :: Array Nut -> Nut mstyle_ = mstyle [] +mstyle__ :: String -> Nut +mstyle__ t = mstyle [] [ DC.text_ t ] + instance TagToDeku "merror" (MathMLElement ()) -merror :: Array (FRP.Event.Event (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut +merror :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut merror = elementify2 (Just "http://www.w3.org/1998/Math/MathML") "merror" merror_ :: Array Nut -> Nut merror_ = merror [] +merror__ :: String -> Nut +merror__ t = merror [] [ DC.text_ t ] + instance TagToDeku "mpadded" (MathMLElement ()) -mpadded - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut +mpadded :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut mpadded = elementify2 (Just "http://www.w3.org/1998/Math/MathML") "mpadded" mpadded_ :: Array Nut -> Nut mpadded_ = mpadded [] +mpadded__ :: String -> Nut +mpadded__ t = mpadded [] [ DC.text_ t ] + instance TagToDeku "mphantom" (MathMLElement ()) -mphantom - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut +mphantom :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut mphantom = elementify2 (Just "http://www.w3.org/1998/Math/MathML") "mphantom" mphantom_ :: Array Nut -> Nut mphantom_ = mphantom [] +mphantom__ :: String -> Nut +mphantom__ t = mphantom [] [ DC.text_ t ] + instance TagToDeku "msub" (MathMLElement ()) -msub :: Array (FRP.Event.Event (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut +msub :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut msub = elementify2 (Just "http://www.w3.org/1998/Math/MathML") "msub" msub_ :: Array Nut -> Nut msub_ = msub [] +msub__ :: String -> Nut +msub__ t = msub [] [ DC.text_ t ] + instance TagToDeku "msup" (MathMLElement ()) -msup :: Array (FRP.Event.Event (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut +msup :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut msup = elementify2 (Just "http://www.w3.org/1998/Math/MathML") "msup" msup_ :: Array Nut -> Nut msup_ = msup [] +msup__ :: String -> Nut +msup__ t = msup [] [ DC.text_ t ] + instance TagToDeku "msubsup" (MathMLElement ()) -msubsup - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut +msubsup :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut msubsup = elementify2 (Just "http://www.w3.org/1998/Math/MathML") "msubsup" msubsup_ :: Array Nut -> Nut msubsup_ = msubsup [] +msubsup__ :: String -> Nut +msubsup__ t = msubsup [] [ DC.text_ t ] + instance TagToDeku "munder" (MathMLElement ()) -munder :: Array (FRP.Event.Event (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut +munder :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut munder = elementify2 (Just "http://www.w3.org/1998/Math/MathML") "munder" munder_ :: Array Nut -> Nut munder_ = munder [] +munder__ :: String -> Nut +munder__ t = munder [] [ DC.text_ t ] + instance TagToDeku "mover" (MathMLElement ()) -mover :: Array (FRP.Event.Event (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut +mover :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut mover = elementify2 (Just "http://www.w3.org/1998/Math/MathML") "mover" mover_ :: Array Nut -> Nut mover_ = mover [] +mover__ :: String -> Nut +mover__ t = mover [] [ DC.text_ t ] + instance TagToDeku "munderover" (MathMLElement ()) munderover - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut munderover = elementify2 (Just "http://www.w3.org/1998/Math/MathML") "munderover" munderover_ :: Array Nut -> Nut munderover_ = munderover [] +munderover__ :: String -> Nut +munderover__ t = munderover [] [ DC.text_ t ] + instance TagToDeku "mmultiscripts" (MathMLElement ()) mmultiscripts - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut mmultiscripts = elementify2 (Just "http://www.w3.org/1998/Math/MathML") "mmultiscripts" mmultiscripts_ :: Array Nut -> Nut mmultiscripts_ = mmultiscripts [] +mmultiscripts__ :: String -> Nut +mmultiscripts__ t = mmultiscripts [] [ DC.text_ t ] + instance TagToDeku "mprescripts" (MathMLElement ()) mprescripts - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut mprescripts = elementify2 (Just "http://www.w3.org/1998/Math/MathML") "mprescripts" mprescripts_ :: Array Nut -> Nut mprescripts_ = mprescripts [] +mprescripts__ :: String -> Nut +mprescripts__ t = mprescripts [] [ DC.text_ t ] + instance TagToDeku "mtable" (MathMLElement ()) -mtable :: Array (FRP.Event.Event (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut +mtable :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut mtable = elementify2 (Just "http://www.w3.org/1998/Math/MathML") "mtable" mtable_ :: Array Nut -> Nut mtable_ = mtable [] +mtable__ :: String -> Nut +mtable__ t = mtable [] [ DC.text_ t ] + instance TagToDeku "mtr" (MathMLElement ()) -mtr :: Array (FRP.Event.Event (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut +mtr :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut mtr = elementify2 (Just "http://www.w3.org/1998/Math/MathML") "mtr" mtr_ :: Array Nut -> Nut mtr_ = mtr [] +mtr__ :: String -> Nut +mtr__ t = mtr [] [ DC.text_ t ] + instance TagToDeku "mtd" (MathMLElement ()) -mtd :: Array (FRP.Event.Event (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut +mtd :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut mtd = elementify2 (Just "http://www.w3.org/1998/Math/MathML") "mtd" mtd_ :: Array Nut -> Nut mtd_ = mtd [] +mtd__ :: String -> Nut +mtd__ t = mtd [] [ DC.text_ t ] + instance TagToDeku "maction" (MathMLElement ()) -maction - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut +maction :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut maction = elementify2 (Just "http://www.w3.org/1998/Math/MathML") "maction" maction_ :: Array Nut -> Nut maction_ = maction [] +maction__ :: String -> Nut +maction__ t = maction [] [ DC.text_ t ] + instance TagToDeku "semantics" (MathMLElement ()) semantics - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut semantics = elementify2 (Just "http://www.w3.org/1998/Math/MathML") "semantics" semantics_ :: Array Nut -> Nut semantics_ = semantics [] +semantics__ :: String -> Nut +semantics__ t = semantics [] [ DC.text_ t ] + instance TagToDeku "annotation" (MathMLElement ()) annotation - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut annotation = elementify2 (Just "http://www.w3.org/1998/Math/MathML") "annotation" annotation_ :: Array Nut -> Nut annotation_ = annotation [] +annotation__ :: String -> Nut +annotation__ t = annotation [] [ DC.text_ t ] + instance TagToDeku "annotation-xml" (MathMLElement ()) annotationXml - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (MathMLElement ()))) -> Array Nut -> Nut annotationXml = elementify2 (Just "http://www.w3.org/1998/Math/MathML") "annotation-xml" annotationXml_ :: Array Nut -> Nut annotationXml_ = annotationXml [] + +annotationXml__ :: String -> Nut +annotationXml__ t = annotationXml [] [ DC.text_ t ] diff --git a/deku-dom/src/Deku/DOM/MathML/Attributes.purs b/deku-dom/src/Deku/DOM/MathML/Attributes.purs index 069302e9..f3cb196f 100644 --- a/deku-dom/src/Deku/DOM/MathML/Attributes.purs +++ b/deku-dom/src/Deku/DOM/MathML/Attributes.purs @@ -54,245 +54,241 @@ module Deku.DOM.MathML.Attributes import Control.Applicative (pure) as Applicative import Control.Category ((<<<)) import Data.Functor (map) as Functor -import FRP.Event as FRP.Event +import FRP.Poll as FRP.Poll import Deku.DOM.Combinators (unset) as Combinators import Deku.Attribute as Deku.Attribute encoding :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (encoding :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (encoding :: String | r)) encoding = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "encoding", value: _ } <<< Deku.Attribute.prop') -encoding_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (encoding :: String | r)) +encoding_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (encoding :: String | r)) encoding_ = encoding <<< Applicative.pure selection :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (selection :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (selection :: String | r)) selection = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "selection", value: _ } <<< Deku.Attribute.prop') selection_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (selection :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (selection :: String | r)) selection_ = selection <<< Applicative.pure actiontype :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (actiontype :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (actiontype :: String | r)) actiontype = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "actiontype", value: _ } <<< Deku.Attribute.prop') actiontype_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (actiontype :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (actiontype :: String | r)) actiontype_ = actiontype <<< Applicative.pure accentunder :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (accentunder :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (accentunder :: String | r)) accentunder = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "accentunder", value: _ } <<< Deku.Attribute.prop') accentunder_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (accentunder :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (accentunder :: String | r)) accentunder_ = accentunder <<< Applicative.pure accent :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (accent :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (accent :: String | r)) accent = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "accent", value: _ } <<< Deku.Attribute.prop') -accent_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (accent :: String | r)) +accent_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (accent :: String | r)) accent_ = accent <<< Applicative.pure voffset :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (voffset :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (voffset :: String | r)) voffset = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "voffset", value: _ } <<< Deku.Attribute.prop') -voffset_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (voffset :: String | r)) +voffset_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (voffset :: String | r)) voffset_ = voffset <<< Applicative.pure lspace :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (lspace :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (lspace :: String | r)) lspace = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "lspace", value: _ } <<< Deku.Attribute.prop') -lspace_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (lspace :: String | r)) +lspace_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (lspace :: String | r)) lspace_ = lspace <<< Applicative.pure depth :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (depth :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (depth :: String | r)) depth = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "depth", value: _ } <<< Deku.Attribute.prop') -depth_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (depth :: String | r)) +depth_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (depth :: String | r)) depth_ = depth <<< Applicative.pure height :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (height :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (height :: String | r)) height = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "height", value: _ } <<< Deku.Attribute.prop') -height_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (height :: String | r)) +height_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (height :: String | r)) height_ = height <<< Applicative.pure width :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (width :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (width :: String | r)) width = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "width", value: _ } <<< Deku.Attribute.prop') -width_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (width :: String | r)) +width_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (width :: String | r)) width_ = width <<< Applicative.pure linethickness :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (linethickness :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (linethickness :: String | r)) linethickness = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "linethickness", value: _ } <<< Deku.Attribute.prop') linethickness_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (linethickness :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (linethickness :: String | r)) linethickness_ = linethickness <<< Applicative.pure maxsize :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (maxsize :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (maxsize :: String | r)) maxsize = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "maxsize", value: _ } <<< Deku.Attribute.prop') -maxsize_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (maxsize :: String | r)) +maxsize_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (maxsize :: String | r)) maxsize_ = maxsize <<< Applicative.pure minsize :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (minsize :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (minsize :: String | r)) minsize = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "minsize", value: _ } <<< Deku.Attribute.prop') -minsize_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (minsize :: String | r)) +minsize_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (minsize :: String | r)) minsize_ = minsize <<< Applicative.pure rspace :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (rspace :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (rspace :: String | r)) rspace = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "rspace", value: _ } <<< Deku.Attribute.prop') -rspace_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (rspace :: String | r)) +rspace_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (rspace :: String | r)) rspace_ = rspace <<< Applicative.pure movablelimits :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (movablelimits :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (movablelimits :: String | r)) movablelimits = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "movablelimits", value: _ } <<< Deku.Attribute.prop') movablelimits_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (movablelimits :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (movablelimits :: String | r)) movablelimits_ = movablelimits <<< Applicative.pure largeop :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (largeop :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (largeop :: String | r)) largeop = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "largeop", value: _ } <<< Deku.Attribute.prop') -largeop_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (largeop :: String | r)) +largeop_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (largeop :: String | r)) largeop_ = largeop <<< Applicative.pure symmetric :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (symmetric :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (symmetric :: String | r)) symmetric = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "symmetric", value: _ } <<< Deku.Attribute.prop') symmetric_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (symmetric :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (symmetric :: String | r)) symmetric_ = symmetric <<< Applicative.pure stretchy :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (stretchy :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (stretchy :: String | r)) stretchy = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "stretchy", value: _ } <<< Deku.Attribute.prop') -stretchy_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (stretchy :: String | r)) +stretchy_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (stretchy :: String | r)) stretchy_ = stretchy <<< Applicative.pure form - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (form :: String | r)) + :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (form :: String | r)) form = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "form", value: _ } <<< Deku.Attribute.prop') -form_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (form :: String | r)) +form_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (form :: String | r)) form_ = form <<< Applicative.pure separator :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (separator :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (separator :: String | r)) separator = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "separator", value: _ } <<< Deku.Attribute.prop') separator_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (separator :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (separator :: String | r)) separator_ = separator <<< Applicative.pure fence :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (fence :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (fence :: String | r)) fence = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "fence", value: _ } <<< Deku.Attribute.prop') -fence_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (fence :: String | r)) +fence_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (fence :: String | r)) fence_ = fence <<< Applicative.pure alttext :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (alttext :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (alttext :: String | r)) alttext = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "alttext", value: _ } <<< Deku.Attribute.prop') -alttext_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (alttext :: String | r)) +alttext_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (alttext :: String | r)) alttext_ = alttext <<< Applicative.pure display :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (display :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (display :: String | r)) display = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "display", value: _ } <<< Deku.Attribute.prop') -display_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (display :: String | r)) +display_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (display :: String | r)) display_ = display <<< Applicative.pure diff --git a/deku-dom/src/Deku/DOM/SVG.purs b/deku-dom/src/Deku/DOM/SVG.purs index 30004790..c8df3aa0 100644 --- a/deku-dom/src/Deku/DOM/SVG.purs +++ b/deku-dom/src/Deku/DOM/SVG.purs @@ -5,130 +5,193 @@ module Deku.DOM.SVG ( class TagToDeku , svg , svg_ + , svg__ , g , g_ + , g__ , defs , defs_ + , defs__ , symbol , symbol_ + , symbol__ , use , use_ + , use__ , switch , switch_ + , switch__ , title , title_ + , title__ , desc , desc_ + , desc__ , metadata , metadata_ + , metadata__ , style , style_ + , style__ , path , path_ + , path__ , rect , rect_ + , rect__ , circle , circle_ + , circle__ , ellipse , ellipse_ + , ellipse__ , line , line_ + , line__ , polyline , polyline_ + , polyline__ , polygon , polygon_ + , polygon__ , text , text_ + , text__ , tspan , tspan_ + , tspan__ , textPath , textPath_ + , textPath__ , image , image_ + , image__ , foreignObject , foreignObject_ + , foreignObject__ , marker , marker_ + , marker__ , linearGradient , linearGradient_ + , linearGradient__ , radialGradient , radialGradient_ + , radialGradient__ , stop , stop_ + , stop__ , pattern , pattern_ + , pattern__ , script , script_ + , script__ , a , a_ + , a__ , view , view_ + , view__ , animate , animate_ + , animate__ , set , set_ + , set__ , animateMotion , animateMotion_ + , animateMotion__ , mpath , mpath_ + , mpath__ , animateTransform , animateTransform_ + , animateTransform__ , filter , filter_ + , filter__ , feBlend , feBlend_ + , feBlend__ , feColorMatrix , feColorMatrix_ + , feColorMatrix__ , feComponentTransfer , feComponentTransfer_ + , feComponentTransfer__ , feFuncR , feFuncR_ + , feFuncR__ , feFuncG , feFuncG_ + , feFuncG__ , feFuncB , feFuncB_ + , feFuncB__ , feFuncA , feFuncA_ + , feFuncA__ , feComposite , feComposite_ + , feComposite__ , feConvolveMatrix , feConvolveMatrix_ + , feConvolveMatrix__ , feDiffuseLighting , feDiffuseLighting_ + , feDiffuseLighting__ , feDisplacementMap , feDisplacementMap_ + , feDisplacementMap__ , feDropShadow , feDropShadow_ + , feDropShadow__ , feFlood , feFlood_ + , feFlood__ , feGaussianBlur , feGaussianBlur_ + , feGaussianBlur__ , feImage , feImage_ + , feImage__ , feMerge , feMerge_ + , feMerge__ , feMergeNode , feMergeNode_ + , feMergeNode__ , feMorphology , feMorphology_ + , feMorphology__ , feOffset , feOffset_ + , feOffset__ , feSpecularLighting , feSpecularLighting_ + , feSpecularLighting__ , feTile , feTile_ + , feTile__ , feTurbulence , feTurbulence_ + , feTurbulence__ , feDistantLight , feDistantLight_ + , feDistantLight__ , fePointLight , fePointLight_ + , fePointLight__ , feSpotLight , feSpotLight_ + , feSpotLight__ , clipPath , clipPath_ + , clipPath__ , mask , mask_ + , mask__ , SVGClipPathElement , SVGMaskElement , SVGFilterElement @@ -210,10 +273,11 @@ module Deku.DOM.SVG , SvgPresentation ) where -import FRP.Event as FRP.Event +import FRP.Poll as FRP.Poll import Data.Maybe (Maybe(..)) import Deku.Attribute (Attribute) as Deku.Attribute import Deku.Control (elementify2) +import Deku.Control as DC import Deku.Core (Nut) import Type.Proxy (Proxy) import Web.Event.Internal.Types as Web.Event.Internal.Types @@ -893,188 +957,247 @@ type SvgPresentation (r :: Row Type) = instance TagToDeku "svg" (SVGSVGElement ()) -svg :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGSVGElement ()))) -> Array Nut -> Nut +svg :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGSVGElement ()))) -> Array Nut -> Nut svg = elementify2 (Just "http://www.w3.org/2000/svg") "svg" svg_ :: Array Nut -> Nut svg_ = svg [] +svg__ :: String -> Nut +svg__ t = svg [] [ DC.text_ t ] + instance TagToDeku "g" (SVGGElement ()) -g :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGGElement ()))) -> Array Nut -> Nut +g :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGGElement ()))) -> Array Nut -> Nut g = elementify2 (Just "http://www.w3.org/2000/svg") "g" g_ :: Array Nut -> Nut g_ = g [] +g__ :: String -> Nut +g__ t = g [] [ DC.text_ t ] + instance TagToDeku "defs" (SVGDefsElement ()) -defs :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGDefsElement ()))) -> Array Nut -> Nut +defs :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGDefsElement ()))) -> Array Nut -> Nut defs = elementify2 (Just "http://www.w3.org/2000/svg") "defs" defs_ :: Array Nut -> Nut defs_ = defs [] +defs__ :: String -> Nut +defs__ t = defs [] [ DC.text_ t ] + instance TagToDeku "symbol" (SVGSymbolElement ()) symbol - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGSymbolElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGSymbolElement ()))) -> Array Nut -> Nut symbol = elementify2 (Just "http://www.w3.org/2000/svg") "symbol" symbol_ :: Array Nut -> Nut symbol_ = symbol [] +symbol__ :: String -> Nut +symbol__ t = symbol [] [ DC.text_ t ] + instance TagToDeku "use" (SVGUseElement ()) -use :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGUseElement ()))) -> Array Nut -> Nut +use :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGUseElement ()))) -> Array Nut -> Nut use = elementify2 (Just "http://www.w3.org/2000/svg") "use" use_ :: Array Nut -> Nut use_ = use [] +use__ :: String -> Nut +use__ t = use [] [ DC.text_ t ] + instance TagToDeku "switch" (SVGSwitchElement ()) switch - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGSwitchElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGSwitchElement ()))) -> Array Nut -> Nut switch = elementify2 (Just "http://www.w3.org/2000/svg") "switch" switch_ :: Array Nut -> Nut switch_ = switch [] +switch__ :: String -> Nut +switch__ t = switch [] [ DC.text_ t ] + instance TagToDeku "title" (SVGTitleElement ()) -title - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGTitleElement ()))) -> Array Nut -> Nut +title :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGTitleElement ()))) -> Array Nut -> Nut title = elementify2 (Just "http://www.w3.org/2000/svg") "title" title_ :: Array Nut -> Nut title_ = title [] +title__ :: String -> Nut +title__ t = title [] [ DC.text_ t ] + instance TagToDeku "desc" (SVGDescElement ()) -desc :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGDescElement ()))) -> Array Nut -> Nut +desc :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGDescElement ()))) -> Array Nut -> Nut desc = elementify2 (Just "http://www.w3.org/2000/svg") "desc" desc_ :: Array Nut -> Nut desc_ = desc [] +desc__ :: String -> Nut +desc__ t = desc [] [ DC.text_ t ] + instance TagToDeku "metadata" (SVGMetadataElement ()) metadata - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGMetadataElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGMetadataElement ()))) -> Array Nut -> Nut metadata = elementify2 (Just "http://www.w3.org/2000/svg") "metadata" metadata_ :: Array Nut -> Nut metadata_ = metadata [] +metadata__ :: String -> Nut +metadata__ t = metadata [] [ DC.text_ t ] + instance TagToDeku "style" (SVGStyleElement ()) -style - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGStyleElement ()))) -> Array Nut -> Nut +style :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGStyleElement ()))) -> Array Nut -> Nut style = elementify2 (Just "http://www.w3.org/2000/svg") "style" style_ :: Array Nut -> Nut style_ = style [] +style__ :: String -> Nut +style__ t = style [] [ DC.text_ t ] + instance TagToDeku "path" (SVGPathElement ()) -path :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGPathElement ()))) -> Array Nut -> Nut +path :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGPathElement ()))) -> Array Nut -> Nut path = elementify2 (Just "http://www.w3.org/2000/svg") "path" path_ :: Array Nut -> Nut path_ = path [] +path__ :: String -> Nut +path__ t = path [] [ DC.text_ t ] + instance TagToDeku "rect" (SVGRectElement ()) -rect :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGRectElement ()))) -> Array Nut -> Nut +rect :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGRectElement ()))) -> Array Nut -> Nut rect = elementify2 (Just "http://www.w3.org/2000/svg") "rect" rect_ :: Array Nut -> Nut rect_ = rect [] +rect__ :: String -> Nut +rect__ t = rect [] [ DC.text_ t ] + instance TagToDeku "circle" (SVGCircleElement ()) circle - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGCircleElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGCircleElement ()))) -> Array Nut -> Nut circle = elementify2 (Just "http://www.w3.org/2000/svg") "circle" circle_ :: Array Nut -> Nut circle_ = circle [] +circle__ :: String -> Nut +circle__ t = circle [] [ DC.text_ t ] + instance TagToDeku "ellipse" (SVGEllipseElement ()) ellipse - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGEllipseElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGEllipseElement ()))) -> Array Nut -> Nut ellipse = elementify2 (Just "http://www.w3.org/2000/svg") "ellipse" ellipse_ :: Array Nut -> Nut ellipse_ = ellipse [] +ellipse__ :: String -> Nut +ellipse__ t = ellipse [] [ DC.text_ t ] + instance TagToDeku "line" (SVGLineElement ()) -line :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGLineElement ()))) -> Array Nut -> Nut +line :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGLineElement ()))) -> Array Nut -> Nut line = elementify2 (Just "http://www.w3.org/2000/svg") "line" line_ :: Array Nut -> Nut line_ = line [] +line__ :: String -> Nut +line__ t = line [] [ DC.text_ t ] + instance TagToDeku "polyline" (SVGPolylineElement ()) polyline - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGPolylineElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGPolylineElement ()))) -> Array Nut -> Nut polyline = elementify2 (Just "http://www.w3.org/2000/svg") "polyline" polyline_ :: Array Nut -> Nut polyline_ = polyline [] +polyline__ :: String -> Nut +polyline__ t = polyline [] [ DC.text_ t ] + instance TagToDeku "polygon" (SVGPolygonElement ()) polygon - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGPolygonElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGPolygonElement ()))) -> Array Nut -> Nut polygon = elementify2 (Just "http://www.w3.org/2000/svg") "polygon" polygon_ :: Array Nut -> Nut polygon_ = polygon [] +polygon__ :: String -> Nut +polygon__ t = polygon [] [ DC.text_ t ] + instance TagToDeku "text" (SVGTextElement ()) -text :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGTextElement ()))) -> Array Nut -> Nut +text :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGTextElement ()))) -> Array Nut -> Nut text = elementify2 (Just "http://www.w3.org/2000/svg") "text" text_ :: Array Nut -> Nut text_ = text [] +text__ :: String -> Nut +text__ t = text [] [ DC.text_ t ] + instance TagToDeku "tspan" (SVGTSpanElement ()) -tspan - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGTSpanElement ()))) -> Array Nut -> Nut +tspan :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGTSpanElement ()))) -> Array Nut -> Nut tspan = elementify2 (Just "http://www.w3.org/2000/svg") "tspan" tspan_ :: Array Nut -> Nut tspan_ = tspan [] +tspan__ :: String -> Nut +tspan__ t = tspan [] [ DC.text_ t ] + instance TagToDeku "textPath" (SVGTextPathElement ()) textPath - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGTextPathElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGTextPathElement ()))) -> Array Nut -> Nut textPath = elementify2 (Just "http://www.w3.org/2000/svg") "textPath" textPath_ :: Array Nut -> Nut textPath_ = textPath [] +textPath__ :: String -> Nut +textPath__ t = textPath [] [ DC.text_ t ] + instance TagToDeku "image" (SVGImageElement ()) -image - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGImageElement ()))) -> Array Nut -> Nut +image :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGImageElement ()))) -> Array Nut -> Nut image = elementify2 (Just "http://www.w3.org/2000/svg") "image" image_ :: Array Nut -> Nut image_ = image [] +image__ :: String -> Nut +image__ t = image [] [ DC.text_ t ] + instance TagToDeku "foreignObject" (SVGForeignObjectElement ()) foreignObject - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGForeignObjectElement ()))) + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGForeignObjectElement ()))) -> Array Nut -> Nut foreignObject = elementify2 (Just "http://www.w3.org/2000/svg") "foreignObject" @@ -1082,19 +1205,25 @@ foreignObject = elementify2 (Just "http://www.w3.org/2000/svg") "foreignObject" foreignObject_ :: Array Nut -> Nut foreignObject_ = foreignObject [] +foreignObject__ :: String -> Nut +foreignObject__ t = foreignObject [] [ DC.text_ t ] + instance TagToDeku "marker" (SVGMarkerElement ()) marker - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGMarkerElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGMarkerElement ()))) -> Array Nut -> Nut marker = elementify2 (Just "http://www.w3.org/2000/svg") "marker" marker_ :: Array Nut -> Nut marker_ = marker [] +marker__ :: String -> Nut +marker__ t = marker [] [ DC.text_ t ] + instance TagToDeku "linearGradient" (SVGLinearGradientElement ()) linearGradient - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGLinearGradientElement ()))) + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGLinearGradientElement ()))) -> Array Nut -> Nut linearGradient = elementify2 (Just "http://www.w3.org/2000/svg") "linearGradient" @@ -1102,10 +1231,13 @@ linearGradient = elementify2 (Just "http://www.w3.org/2000/svg") "linearGradient linearGradient_ :: Array Nut -> Nut linearGradient_ = linearGradient [] +linearGradient__ :: String -> Nut +linearGradient__ t = linearGradient [] [ DC.text_ t ] + instance TagToDeku "radialGradient" (SVGRadialGradientElement ()) radialGradient - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGRadialGradientElement ()))) + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGRadialGradientElement ()))) -> Array Nut -> Nut radialGradient = elementify2 (Just "http://www.w3.org/2000/svg") "radialGradient" @@ -1113,69 +1245,93 @@ radialGradient = elementify2 (Just "http://www.w3.org/2000/svg") "radialGradient radialGradient_ :: Array Nut -> Nut radialGradient_ = radialGradient [] +radialGradient__ :: String -> Nut +radialGradient__ t = radialGradient [] [ DC.text_ t ] + instance TagToDeku "stop" (SVGStopElement ()) -stop :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGStopElement ()))) -> Array Nut -> Nut +stop :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGStopElement ()))) -> Array Nut -> Nut stop = elementify2 (Just "http://www.w3.org/2000/svg") "stop" stop_ :: Array Nut -> Nut stop_ = stop [] +stop__ :: String -> Nut +stop__ t = stop [] [ DC.text_ t ] + instance TagToDeku "pattern" (SVGPatternElement ()) pattern - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGPatternElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGPatternElement ()))) -> Array Nut -> Nut pattern = elementify2 (Just "http://www.w3.org/2000/svg") "pattern" pattern_ :: Array Nut -> Nut pattern_ = pattern [] +pattern__ :: String -> Nut +pattern__ t = pattern [] [ DC.text_ t ] + instance TagToDeku "script" (SVGScriptElement ()) script - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGScriptElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGScriptElement ()))) -> Array Nut -> Nut script = elementify2 (Just "http://www.w3.org/2000/svg") "script" script_ :: Array Nut -> Nut script_ = script [] +script__ :: String -> Nut +script__ t = script [] [ DC.text_ t ] + instance TagToDeku "a" (SVGAElement ()) -a :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGAElement ()))) -> Array Nut -> Nut +a :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGAElement ()))) -> Array Nut -> Nut a = elementify2 (Just "http://www.w3.org/2000/svg") "a" a_ :: Array Nut -> Nut a_ = a [] +a__ :: String -> Nut +a__ t = a [] [ DC.text_ t ] + instance TagToDeku "view" (SVGViewElement ()) -view :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGViewElement ()))) -> Array Nut -> Nut +view :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGViewElement ()))) -> Array Nut -> Nut view = elementify2 (Just "http://www.w3.org/2000/svg") "view" view_ :: Array Nut -> Nut view_ = view [] +view__ :: String -> Nut +view__ t = view [] [ DC.text_ t ] + instance TagToDeku "animate" (SVGAnimateElement ()) animate - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGAnimateElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGAnimateElement ()))) -> Array Nut -> Nut animate = elementify2 (Just "http://www.w3.org/2000/svg") "animate" animate_ :: Array Nut -> Nut animate_ = animate [] +animate__ :: String -> Nut +animate__ t = animate [] [ DC.text_ t ] + instance TagToDeku "set" (SVGSetElement ()) -set :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGSetElement ()))) -> Array Nut -> Nut +set :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGSetElement ()))) -> Array Nut -> Nut set = elementify2 (Just "http://www.w3.org/2000/svg") "set" set_ :: Array Nut -> Nut set_ = set [] +set__ :: String -> Nut +set__ t = set [] [ DC.text_ t ] + instance TagToDeku "animateMotion" (SVGAnimateMotionElement ()) animateMotion - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGAnimateMotionElement ()))) + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGAnimateMotionElement ()))) -> Array Nut -> Nut animateMotion = elementify2 (Just "http://www.w3.org/2000/svg") "animateMotion" @@ -1183,19 +1339,24 @@ animateMotion = elementify2 (Just "http://www.w3.org/2000/svg") "animateMotion" animateMotion_ :: Array Nut -> Nut animateMotion_ = animateMotion [] +animateMotion__ :: String -> Nut +animateMotion__ t = animateMotion [] [ DC.text_ t ] + instance TagToDeku "mpath" (SVGMPathElement ()) -mpath - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGMPathElement ()))) -> Array Nut -> Nut +mpath :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGMPathElement ()))) -> Array Nut -> Nut mpath = elementify2 (Just "http://www.w3.org/2000/svg") "mpath" mpath_ :: Array Nut -> Nut mpath_ = mpath [] +mpath__ :: String -> Nut +mpath__ t = mpath [] [ DC.text_ t ] + instance TagToDeku "animateTransform" (SVGAnimateTransformElement ()) animateTransform - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGAnimateTransformElement ()))) + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGAnimateTransformElement ()))) -> Array Nut -> Nut animateTransform = elementify2 (Just "http://www.w3.org/2000/svg") "animateTransform" @@ -1203,28 +1364,37 @@ animateTransform = elementify2 (Just "http://www.w3.org/2000/svg") "animateTrans animateTransform_ :: Array Nut -> Nut animateTransform_ = animateTransform [] +animateTransform__ :: String -> Nut +animateTransform__ t = animateTransform [] [ DC.text_ t ] + instance TagToDeku "filter" (SVGFilterElement ()) filter - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGFilterElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGFilterElement ()))) -> Array Nut -> Nut filter = elementify2 (Just "http://www.w3.org/2000/svg") "filter" filter_ :: Array Nut -> Nut filter_ = filter [] +filter__ :: String -> Nut +filter__ t = filter [] [ DC.text_ t ] + instance TagToDeku "feBlend" (SVGFEBlendElement ()) feBlend - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGFEBlendElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGFEBlendElement ()))) -> Array Nut -> Nut feBlend = elementify2 (Just "http://www.w3.org/2000/svg") "feBlend" feBlend_ :: Array Nut -> Nut feBlend_ = feBlend [] +feBlend__ :: String -> Nut +feBlend__ t = feBlend [] [ DC.text_ t ] + instance TagToDeku "feColorMatrix" (SVGFEColorMatrixElement ()) feColorMatrix - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGFEColorMatrixElement ()))) + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGFEColorMatrixElement ()))) -> Array Nut -> Nut feColorMatrix = elementify2 (Just "http://www.w3.org/2000/svg") "feColorMatrix" @@ -1232,10 +1402,13 @@ feColorMatrix = elementify2 (Just "http://www.w3.org/2000/svg") "feColorMatrix" feColorMatrix_ :: Array Nut -> Nut feColorMatrix_ = feColorMatrix [] +feColorMatrix__ :: String -> Nut +feColorMatrix__ t = feColorMatrix [] [ DC.text_ t ] + instance TagToDeku "feComponentTransfer" (SVGFEComponentTransferElement ()) feComponentTransfer - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGFEComponentTransferElement ()))) + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGFEComponentTransferElement ()))) -> Array Nut -> Nut feComponentTransfer = elementify2 (Just "http://www.w3.org/2000/svg") "feComponentTransfer" @@ -1243,57 +1416,73 @@ feComponentTransfer = elementify2 (Just "http://www.w3.org/2000/svg") "feCompone feComponentTransfer_ :: Array Nut -> Nut feComponentTransfer_ = feComponentTransfer [] +feComponentTransfer__ :: String -> Nut +feComponentTransfer__ t = feComponentTransfer [] [ DC.text_ t ] + instance TagToDeku "feFuncR" (SVGFEFuncRElement ()) feFuncR - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGFEFuncRElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGFEFuncRElement ()))) -> Array Nut -> Nut feFuncR = elementify2 (Just "http://www.w3.org/2000/svg") "feFuncR" feFuncR_ :: Array Nut -> Nut feFuncR_ = feFuncR [] +feFuncR__ :: String -> Nut +feFuncR__ t = feFuncR [] [ DC.text_ t ] + instance TagToDeku "feFuncG" (SVGFEFuncGElement ()) feFuncG - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGFEFuncGElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGFEFuncGElement ()))) -> Array Nut -> Nut feFuncG = elementify2 (Just "http://www.w3.org/2000/svg") "feFuncG" feFuncG_ :: Array Nut -> Nut feFuncG_ = feFuncG [] +feFuncG__ :: String -> Nut +feFuncG__ t = feFuncG [] [ DC.text_ t ] + instance TagToDeku "feFuncB" (SVGFEFuncBElement ()) feFuncB - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGFEFuncBElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGFEFuncBElement ()))) -> Array Nut -> Nut feFuncB = elementify2 (Just "http://www.w3.org/2000/svg") "feFuncB" feFuncB_ :: Array Nut -> Nut feFuncB_ = feFuncB [] +feFuncB__ :: String -> Nut +feFuncB__ t = feFuncB [] [ DC.text_ t ] + instance TagToDeku "feFuncA" (SVGFEFuncAElement ()) feFuncA - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGFEFuncAElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGFEFuncAElement ()))) -> Array Nut -> Nut feFuncA = elementify2 (Just "http://www.w3.org/2000/svg") "feFuncA" feFuncA_ :: Array Nut -> Nut feFuncA_ = feFuncA [] +feFuncA__ :: String -> Nut +feFuncA__ t = feFuncA [] [ DC.text_ t ] + instance TagToDeku "feComposite" (SVGFECompositeElement ()) feComposite - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGFECompositeElement ()))) - -> Array Nut - -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGFECompositeElement ()))) -> Array Nut -> Nut feComposite = elementify2 (Just "http://www.w3.org/2000/svg") "feComposite" feComposite_ :: Array Nut -> Nut feComposite_ = feComposite [] +feComposite__ :: String -> Nut +feComposite__ t = feComposite [] [ DC.text_ t ] + instance TagToDeku "feConvolveMatrix" (SVGFEConvolveMatrixElement ()) feConvolveMatrix - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGFEConvolveMatrixElement ()))) + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGFEConvolveMatrixElement ()))) -> Array Nut -> Nut feConvolveMatrix = elementify2 (Just "http://www.w3.org/2000/svg") "feConvolveMatrix" @@ -1301,10 +1490,13 @@ feConvolveMatrix = elementify2 (Just "http://www.w3.org/2000/svg") "feConvolveMa feConvolveMatrix_ :: Array Nut -> Nut feConvolveMatrix_ = feConvolveMatrix [] +feConvolveMatrix__ :: String -> Nut +feConvolveMatrix__ t = feConvolveMatrix [] [ DC.text_ t ] + instance TagToDeku "feDiffuseLighting" (SVGFEDiffuseLightingElement ()) feDiffuseLighting - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGFEDiffuseLightingElement ()))) + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGFEDiffuseLightingElement ()))) -> Array Nut -> Nut feDiffuseLighting = elementify2 (Just "http://www.w3.org/2000/svg") "feDiffuseLighting" @@ -1312,10 +1504,13 @@ feDiffuseLighting = elementify2 (Just "http://www.w3.org/2000/svg") "feDiffuseLi feDiffuseLighting_ :: Array Nut -> Nut feDiffuseLighting_ = feDiffuseLighting [] +feDiffuseLighting__ :: String -> Nut +feDiffuseLighting__ t = feDiffuseLighting [] [ DC.text_ t ] + instance TagToDeku "feDisplacementMap" (SVGFEDisplacementMapElement ()) feDisplacementMap - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGFEDisplacementMapElement ()))) + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGFEDisplacementMapElement ()))) -> Array Nut -> Nut feDisplacementMap = elementify2 (Just "http://www.w3.org/2000/svg") "feDisplacementMap" @@ -1323,10 +1518,13 @@ feDisplacementMap = elementify2 (Just "http://www.w3.org/2000/svg") "feDisplacem feDisplacementMap_ :: Array Nut -> Nut feDisplacementMap_ = feDisplacementMap [] +feDisplacementMap__ :: String -> Nut +feDisplacementMap__ t = feDisplacementMap [] [ DC.text_ t ] + instance TagToDeku "feDropShadow" (SVGFEDropShadowElement ()) feDropShadow - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGFEDropShadowElement ()))) + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGFEDropShadowElement ()))) -> Array Nut -> Nut feDropShadow = elementify2 (Just "http://www.w3.org/2000/svg") "feDropShadow" @@ -1334,19 +1532,25 @@ feDropShadow = elementify2 (Just "http://www.w3.org/2000/svg") "feDropShadow" feDropShadow_ :: Array Nut -> Nut feDropShadow_ = feDropShadow [] +feDropShadow__ :: String -> Nut +feDropShadow__ t = feDropShadow [] [ DC.text_ t ] + instance TagToDeku "feFlood" (SVGFEFloodElement ()) feFlood - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGFEFloodElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGFEFloodElement ()))) -> Array Nut -> Nut feFlood = elementify2 (Just "http://www.w3.org/2000/svg") "feFlood" feFlood_ :: Array Nut -> Nut feFlood_ = feFlood [] +feFlood__ :: String -> Nut +feFlood__ t = feFlood [] [ DC.text_ t ] + instance TagToDeku "feGaussianBlur" (SVGFEGaussianBlurElement ()) feGaussianBlur - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGFEGaussianBlurElement ()))) + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGFEGaussianBlurElement ()))) -> Array Nut -> Nut feGaussianBlur = elementify2 (Just "http://www.w3.org/2000/svg") "feGaussianBlur" @@ -1354,39 +1558,49 @@ feGaussianBlur = elementify2 (Just "http://www.w3.org/2000/svg") "feGaussianBlur feGaussianBlur_ :: Array Nut -> Nut feGaussianBlur_ = feGaussianBlur [] +feGaussianBlur__ :: String -> Nut +feGaussianBlur__ t = feGaussianBlur [] [ DC.text_ t ] + instance TagToDeku "feImage" (SVGFEImageElement ()) feImage - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGFEImageElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGFEImageElement ()))) -> Array Nut -> Nut feImage = elementify2 (Just "http://www.w3.org/2000/svg") "feImage" feImage_ :: Array Nut -> Nut feImage_ = feImage [] +feImage__ :: String -> Nut +feImage__ t = feImage [] [ DC.text_ t ] + instance TagToDeku "feMerge" (SVGFEMergeElement ()) feMerge - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGFEMergeElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGFEMergeElement ()))) -> Array Nut -> Nut feMerge = elementify2 (Just "http://www.w3.org/2000/svg") "feMerge" feMerge_ :: Array Nut -> Nut feMerge_ = feMerge [] +feMerge__ :: String -> Nut +feMerge__ t = feMerge [] [ DC.text_ t ] + instance TagToDeku "feMergeNode" (SVGFEMergeNodeElement ()) feMergeNode - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGFEMergeNodeElement ()))) - -> Array Nut - -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGFEMergeNodeElement ()))) -> Array Nut -> Nut feMergeNode = elementify2 (Just "http://www.w3.org/2000/svg") "feMergeNode" feMergeNode_ :: Array Nut -> Nut feMergeNode_ = feMergeNode [] +feMergeNode__ :: String -> Nut +feMergeNode__ t = feMergeNode [] [ DC.text_ t ] + instance TagToDeku "feMorphology" (SVGFEMorphologyElement ()) feMorphology - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGFEMorphologyElement ()))) + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGFEMorphologyElement ()))) -> Array Nut -> Nut feMorphology = elementify2 (Just "http://www.w3.org/2000/svg") "feMorphology" @@ -1394,19 +1608,25 @@ feMorphology = elementify2 (Just "http://www.w3.org/2000/svg") "feMorphology" feMorphology_ :: Array Nut -> Nut feMorphology_ = feMorphology [] +feMorphology__ :: String -> Nut +feMorphology__ t = feMorphology [] [ DC.text_ t ] + instance TagToDeku "feOffset" (SVGFEOffsetElement ()) feOffset - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGFEOffsetElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGFEOffsetElement ()))) -> Array Nut -> Nut feOffset = elementify2 (Just "http://www.w3.org/2000/svg") "feOffset" feOffset_ :: Array Nut -> Nut feOffset_ = feOffset [] +feOffset__ :: String -> Nut +feOffset__ t = feOffset [] [ DC.text_ t ] + instance TagToDeku "feSpecularLighting" (SVGFESpecularLightingElement ()) feSpecularLighting - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGFESpecularLightingElement ()))) + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGFESpecularLightingElement ()))) -> Array Nut -> Nut feSpecularLighting = elementify2 (Just "http://www.w3.org/2000/svg") "feSpecularLighting" @@ -1414,19 +1634,25 @@ feSpecularLighting = elementify2 (Just "http://www.w3.org/2000/svg") "feSpecular feSpecularLighting_ :: Array Nut -> Nut feSpecularLighting_ = feSpecularLighting [] +feSpecularLighting__ :: String -> Nut +feSpecularLighting__ t = feSpecularLighting [] [ DC.text_ t ] + instance TagToDeku "feTile" (SVGFETileElement ()) feTile - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGFETileElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGFETileElement ()))) -> Array Nut -> Nut feTile = elementify2 (Just "http://www.w3.org/2000/svg") "feTile" feTile_ :: Array Nut -> Nut feTile_ = feTile [] +feTile__ :: String -> Nut +feTile__ t = feTile [] [ DC.text_ t ] + instance TagToDeku "feTurbulence" (SVGFETurbulenceElement ()) feTurbulence - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGFETurbulenceElement ()))) + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGFETurbulenceElement ()))) -> Array Nut -> Nut feTurbulence = elementify2 (Just "http://www.w3.org/2000/svg") "feTurbulence" @@ -1434,10 +1660,13 @@ feTurbulence = elementify2 (Just "http://www.w3.org/2000/svg") "feTurbulence" feTurbulence_ :: Array Nut -> Nut feTurbulence_ = feTurbulence [] +feTurbulence__ :: String -> Nut +feTurbulence__ t = feTurbulence [] [ DC.text_ t ] + instance TagToDeku "feDistantLight" (SVGFEDistantLightElement ()) feDistantLight - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGFEDistantLightElement ()))) + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGFEDistantLightElement ()))) -> Array Nut -> Nut feDistantLight = elementify2 (Just "http://www.w3.org/2000/svg") "feDistantLight" @@ -1445,10 +1674,13 @@ feDistantLight = elementify2 (Just "http://www.w3.org/2000/svg") "feDistantLight feDistantLight_ :: Array Nut -> Nut feDistantLight_ = feDistantLight [] +feDistantLight__ :: String -> Nut +feDistantLight__ t = feDistantLight [] [ DC.text_ t ] + instance TagToDeku "fePointLight" (SVGFEPointLightElement ()) fePointLight - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGFEPointLightElement ()))) + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGFEPointLightElement ()))) -> Array Nut -> Nut fePointLight = elementify2 (Just "http://www.w3.org/2000/svg") "fePointLight" @@ -1456,30 +1688,40 @@ fePointLight = elementify2 (Just "http://www.w3.org/2000/svg") "fePointLight" fePointLight_ :: Array Nut -> Nut fePointLight_ = fePointLight [] +fePointLight__ :: String -> Nut +fePointLight__ t = fePointLight [] [ DC.text_ t ] + instance TagToDeku "feSpotLight" (SVGFESpotLightElement ()) feSpotLight - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGFESpotLightElement ()))) - -> Array Nut - -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGFESpotLightElement ()))) -> Array Nut -> Nut feSpotLight = elementify2 (Just "http://www.w3.org/2000/svg") "feSpotLight" feSpotLight_ :: Array Nut -> Nut feSpotLight_ = feSpotLight [] +feSpotLight__ :: String -> Nut +feSpotLight__ t = feSpotLight [] [ DC.text_ t ] + instance TagToDeku "clipPath" (SVGClipPathElement ()) clipPath - :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGClipPathElement ()))) -> Array Nut -> Nut + :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGClipPathElement ()))) -> Array Nut -> Nut clipPath = elementify2 (Just "http://www.w3.org/2000/svg") "clipPath" clipPath_ :: Array Nut -> Nut clipPath_ = clipPath [] +clipPath__ :: String -> Nut +clipPath__ t = clipPath [] [ DC.text_ t ] + instance TagToDeku "mask" (SVGMaskElement ()) -mask :: Array (FRP.Event.Event (Deku.Attribute.Attribute (SVGMaskElement ()))) -> Array Nut -> Nut +mask :: Array (FRP.Poll.Poll (Deku.Attribute.Attribute (SVGMaskElement ()))) -> Array Nut -> Nut mask = elementify2 (Just "http://www.w3.org/2000/svg") "mask" mask_ :: Array Nut -> Nut mask_ = mask [] + +mask__ :: String -> Nut +mask__ t = mask [] [ DC.text_ t ] diff --git a/deku-dom/src/Deku/DOM/SVG/Attributes.purs b/deku-dom/src/Deku/DOM/SVG/Attributes.purs index 82de171c..1436d6cb 100644 --- a/deku-dom/src/Deku/DOM/SVG/Attributes.purs +++ b/deku-dom/src/Deku/DOM/SVG/Attributes.purs @@ -381,455 +381,409 @@ module Deku.DOM.SVG.Attributes import Control.Applicative (pure) as Applicative import Control.Category ((<<<)) import Data.Functor (map) as Functor -import FRP.Event as FRP.Event +import FRP.Poll as FRP.Poll import Deku.DOM.Combinators (unset) as Combinators import Deku.Attribute as Deku.Attribute refY - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (refY :: String | r)) + :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (refY :: String | r)) refY = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "refY", value: _ } <<< Deku.Attribute.prop') -refY_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (refY :: String | r)) +refY_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (refY :: String | r)) refY_ = refY <<< Applicative.pure refX - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (refX :: String | r)) + :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (refX :: String | r)) refX = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "refX", value: _ } <<< Deku.Attribute.prop') -refX_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (refX :: String | r)) +refX_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (refX :: String | r)) refX_ = refX <<< Applicative.pure xlinkTitle :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (xlinkTitle :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (xlinkTitle :: String | r)) xlinkTitle = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "xlink:title", value: _ } <<< Deku.Attribute.prop') xlinkTitle_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (xlinkTitle :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (xlinkTitle :: String | r)) xlinkTitle_ = xlinkTitle <<< Applicative.pure xlinkHref :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (xlinkHref :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (xlinkHref :: String | r)) xlinkHref = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "xlink:href", value: _ } <<< Deku.Attribute.prop') xlinkHref_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (xlinkHref :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (xlinkHref :: String | r)) xlinkHref_ = xlinkHref <<< Applicative.pure systemLanguage :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (systemLanguage :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (systemLanguage :: String | r)) systemLanguage = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "systemLanguage", value: _ } <<< Deku.Attribute.prop') systemLanguage_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (systemLanguage :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (systemLanguage :: String | r)) systemLanguage_ = systemLanguage <<< Applicative.pure requiredExtensions :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (requiredExtensions :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (requiredExtensions :: String | r)) requiredExtensions = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "requiredExtensions", value: _ } <<< Deku.Attribute.prop' ) requiredExtensions_ - :: forall r - . String - -> FRP.Event.Event (Deku.Attribute.Attribute (requiredExtensions :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (requiredExtensions :: String | r)) requiredExtensions_ = requiredExtensions <<< Applicative.pure href - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (href :: String | r)) + :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (href :: String | r)) href = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "href", value: _ } <<< Deku.Attribute.prop') -href_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (href :: String | r)) +href_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (href :: String | r)) href_ = href <<< Applicative.pure referrerpolicy :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (referrerpolicy :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (referrerpolicy :: String | r)) referrerpolicy = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "referrerpolicy", value: _ } <<< Deku.Attribute.prop') referrerpolicy_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (referrerpolicy :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (referrerpolicy :: String | r)) referrerpolicy_ = referrerpolicy <<< Applicative.pure xtype :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (xtype :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (xtype :: String | r)) xtype = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "type", value: _ } <<< Deku.Attribute.prop') -xtype_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (xtype :: String | r)) +xtype_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (xtype :: String | r)) xtype_ = xtype <<< Applicative.pure hreflang :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (hreflang :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (hreflang :: String | r)) hreflang = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "hreflang", value: _ } <<< Deku.Attribute.prop') -hreflang_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (hreflang :: String | r)) +hreflang_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (hreflang :: String | r)) hreflang_ = hreflang <<< Applicative.pure rel - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (rel :: String | r)) + :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (rel :: String | r)) rel = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "rel", value: _ } <<< Deku.Attribute.prop') -rel_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (rel :: String | r)) +rel_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (rel :: String | r)) rel_ = rel <<< Applicative.pure ping - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (ping :: String | r)) + :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (ping :: String | r)) ping = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "ping", value: _ } <<< Deku.Attribute.prop') -ping_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (ping :: String | r)) +ping_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (ping :: String | r)) ping_ = ping <<< Applicative.pure download :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (download :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (download :: String | r)) download = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "download", value: _ } <<< Deku.Attribute.prop') -download_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (download :: String | r)) +download_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (download :: String | r)) download_ = download <<< Applicative.pure target :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (target :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (target :: String | r)) target = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "target", value: _ } <<< Deku.Attribute.prop') -target_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (target :: String | r)) +target_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (target :: String | r)) target_ = target <<< Applicative.pure origin :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (origin :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (origin :: String | r)) origin = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "origin", value: _ } <<< Deku.Attribute.prop') -origin_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (origin :: String | r)) +origin_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (origin :: String | r)) origin_ = origin <<< Applicative.pure rotate :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (rotate :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (rotate :: String | r)) rotate = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "rotate", value: _ } <<< Deku.Attribute.prop') -rotate_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (rotate :: String | r)) +rotate_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (rotate :: String | r)) rotate_ = rotate <<< Applicative.pure keyPoints :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (keyPoints :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (keyPoints :: String | r)) keyPoints = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "keyPoints", value: _ } <<< Deku.Attribute.prop') keyPoints_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (keyPoints :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (keyPoints :: String | r)) keyPoints_ = keyPoints <<< Applicative.pure accumulate :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (accumulate :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (accumulate :: String | r)) accumulate = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "accumulate", value: _ } <<< Deku.Attribute.prop') accumulate_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (accumulate :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (accumulate :: String | r)) accumulate_ = accumulate <<< Applicative.pure additive :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (additive :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (additive :: String | r)) additive = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "additive", value: _ } <<< Deku.Attribute.prop') -additive_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (additive :: String | r)) +additive_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (additive :: String | r)) additive_ = additive <<< Applicative.pure from - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (from :: String | r)) + :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (from :: String | r)) from = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "from", value: _ } <<< Deku.Attribute.prop') -from_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (from :: String | r)) +from_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (from :: String | r)) from_ = from <<< Applicative.pure keySplines :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (keySplines :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (keySplines :: String | r)) keySplines = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "keySplines", value: _ } <<< Deku.Attribute.prop') keySplines_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (keySplines :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (keySplines :: String | r)) keySplines_ = keySplines <<< Applicative.pure keyTimes :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (keyTimes :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (keyTimes :: String | r)) keyTimes = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "keyTimes", value: _ } <<< Deku.Attribute.prop') -keyTimes_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (keyTimes :: String | r)) +keyTimes_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (keyTimes :: String | r)) keyTimes_ = keyTimes <<< Applicative.pure values :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (values :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (values :: String | r)) values = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "values", value: _ } <<< Deku.Attribute.prop') -values_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (values :: String | r)) +values_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (values :: String | r)) values_ = values <<< Applicative.pure fill - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (fill :: String | r)) + :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (fill :: String | r)) fill = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "fill", value: _ } <<< Deku.Attribute.prop') -fill_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (fill :: String | r)) +fill_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (fill :: String | r)) fill_ = fill <<< Applicative.pure repeatDur :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (repeatDur :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (repeatDur :: String | r)) repeatDur = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "repeatDur", value: _ } <<< Deku.Attribute.prop') repeatDur_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (repeatDur :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (repeatDur :: String | r)) repeatDur_ = repeatDur <<< Applicative.pure repeatCount :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (repeatCount :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (repeatCount :: String | r)) repeatCount = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "repeatCount", value: _ } <<< Deku.Attribute.prop') repeatCount_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (repeatCount :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (repeatCount :: String | r)) repeatCount_ = repeatCount <<< Applicative.pure restart :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (restart :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (restart :: String | r)) restart = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "restart", value: _ } <<< Deku.Attribute.prop') -restart_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (restart :: String | r)) +restart_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (restart :: String | r)) restart_ = restart <<< Applicative.pure max - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (max :: String | r)) + :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (max :: String | r)) max = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "max", value: _ } <<< Deku.Attribute.prop') -max_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (max :: String | r)) +max_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (max :: String | r)) max_ = max <<< Applicative.pure min - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (min :: String | r)) + :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (min :: String | r)) min = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "min", value: _ } <<< Deku.Attribute.prop') -min_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (min :: String | r)) +min_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (min :: String | r)) min_ = min <<< Applicative.pure end - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (end :: String | r)) + :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (end :: String | r)) end = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "end", value: _ } <<< Deku.Attribute.prop') -end_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (end :: String | r)) +end_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (end :: String | r)) end_ = end <<< Applicative.pure dur - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (dur :: String | r)) + :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (dur :: String | r)) dur = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "dur", value: _ } <<< Deku.Attribute.prop') -dur_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (dur :: String | r)) +dur_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (dur :: String | r)) dur_ = dur <<< Applicative.pure begin :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (begin :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (begin :: String | r)) begin = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "begin", value: _ } <<< Deku.Attribute.prop') -begin_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (begin :: String | r)) +begin_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (begin :: String | r)) begin_ = begin <<< Applicative.pure attributeName :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (attributeName :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (attributeName :: String | r)) attributeName = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "attributeName", value: _ } <<< Deku.Attribute.prop') attributeName_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (attributeName :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (attributeName :: String | r)) attributeName_ = attributeName <<< Applicative.pure path - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (path :: String | r)) + :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (path :: String | r)) path = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "path", value: _ } <<< Deku.Attribute.prop') -path_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (path :: String | r)) +path_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (path :: String | r)) path_ = path <<< Applicative.pure calcMode :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (calcMode :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (calcMode :: String | r)) calcMode = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "calcMode", value: _ } <<< Deku.Attribute.prop') -calcMode_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (calcMode :: String | r)) +calcMode_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (calcMode :: String | r)) calcMode_ = calcMode <<< Applicative.pure crossorigin :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (crossorigin :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (crossorigin :: String | r)) crossorigin = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "crossorigin", value: _ } <<< Deku.Attribute.prop') crossorigin_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (crossorigin :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (crossorigin :: String | r)) crossorigin_ = crossorigin <<< Applicative.pure -y2 - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (y2 :: String | r)) +y2 :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (y2 :: String | r)) y2 = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "y2", value: _ } <<< Deku.Attribute.prop') -y2_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (y2 :: String | r)) +y2_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (y2 :: String | r)) y2_ = y2 <<< Applicative.pure -x2 - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (x2 :: String | r)) +x2 :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (x2 :: String | r)) x2 = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "x2", value: _ } <<< Deku.Attribute.prop') -x2_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (x2 :: String | r)) +x2_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (x2 :: String | r)) x2_ = x2 <<< Applicative.pure -y1 - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (y1 :: String | r)) +y1 :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (y1 :: String | r)) y1 = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "y1", value: _ } <<< Deku.Attribute.prop') -y1_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (y1 :: String | r)) +y1_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (y1 :: String | r)) y1_ = y1 <<< Applicative.pure -x1 - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (x1 :: String | r)) +x1 :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (x1 :: String | r)) x1 = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "x1", value: _ } <<< Deku.Attribute.prop') -x1_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (x1 :: String | r)) +x1_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (x1 :: String | r)) x1_ = x1 <<< Applicative.pure points :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (points :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (points :: String | r)) points = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "points", value: _ } <<< Deku.Attribute.prop') -points_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (points :: String | r)) +points_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (points :: String | r)) points_ = points <<< Applicative.pure -to - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (to :: String | r)) +to :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (to :: String | r)) to = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "to", value: _ } <<< Deku.Attribute.prop') -to_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (to :: String | r)) +to_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (to :: String | r)) to_ = to <<< Applicative.pure preserveAspectRatio :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (preserveAspectRatio :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (preserveAspectRatio :: String | r)) preserveAspectRatio = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "preserveAspectRatio", value: _ } <<< Deku.Attribute.prop' @@ -838,230 +792,209 @@ preserveAspectRatio = Functor.map preserveAspectRatio_ :: forall r . String - -> FRP.Event.Event (Deku.Attribute.Attribute (preserveAspectRatio :: String | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (preserveAspectRatio :: String | r)) preserveAspectRatio_ = preserveAspectRatio <<< Applicative.pure viewBox :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (viewBox :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (viewBox :: String | r)) viewBox = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "viewBox", value: _ } <<< Deku.Attribute.prop') -viewBox_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (viewBox :: String | r)) +viewBox_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (viewBox :: String | r)) viewBox_ = viewBox <<< Applicative.pure lengthAdjust :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (lengthAdjust :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (lengthAdjust :: String | r)) lengthAdjust = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "lengthAdjust", value: _ } <<< Deku.Attribute.prop') lengthAdjust_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (lengthAdjust :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (lengthAdjust :: String | r)) lengthAdjust_ = lengthAdjust <<< Applicative.pure textLength :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (textLength :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (textLength :: String | r)) textLength = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "textLength", value: _ } <<< Deku.Attribute.prop') textLength_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (textLength :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (textLength :: String | r)) textLength_ = textLength <<< Applicative.pure -dy - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (dy :: String | r)) +dy :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (dy :: String | r)) dy = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "dy", value: _ } <<< Deku.Attribute.prop') -dy_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (dy :: String | r)) +dy_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (dy :: String | r)) dy_ = dy <<< Applicative.pure -dx - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (dx :: String | r)) +dx :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (dx :: String | r)) dx = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "dx", value: _ } <<< Deku.Attribute.prop') -dx_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (dx :: String | r)) +dx_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (dx :: String | r)) dx_ = dx <<< Applicative.pure -y - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (y :: String | r)) +y :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (y :: String | r)) y = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "y", value: _ } <<< Deku.Attribute.prop') -y_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (y :: String | r)) +y_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (y :: String | r)) y_ = y <<< Applicative.pure -x - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (x :: String | r)) +x :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (x :: String | r)) x = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "x", value: _ } <<< Deku.Attribute.prop') -x_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (x :: String | r)) +x_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (x :: String | r)) x_ = x <<< Applicative.pure side - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (side :: String | r)) + :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (side :: String | r)) side = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "side", value: _ } <<< Deku.Attribute.prop') -side_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (side :: String | r)) +side_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (side :: String | r)) side_ = side <<< Applicative.pure spacing :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (spacing :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (spacing :: String | r)) spacing = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "spacing", value: _ } <<< Deku.Attribute.prop') -spacing_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (spacing :: String | r)) +spacing_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (spacing :: String | r)) spacing_ = spacing <<< Applicative.pure method :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (method :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (method :: String | r)) method = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "method", value: _ } <<< Deku.Attribute.prop') -method_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (method :: String | r)) +method_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (method :: String | r)) method_ = method <<< Applicative.pure startOffset :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (startOffset :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (startOffset :: String | r)) startOffset = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "startOffset", value: _ } <<< Deku.Attribute.prop') startOffset_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (startOffset :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (startOffset :: String | r)) startOffset_ = startOffset <<< Applicative.pure style :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (style :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (style :: String | r)) style = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "style", value: _ } <<< Deku.Attribute.prop') -style_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (style :: String | r)) +style_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (style :: String | r)) style_ = style <<< Applicative.pure klass :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (klass :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (klass :: String | r)) klass = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "class", value: _ } <<< Deku.Attribute.prop') -klass_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (klass :: String | r)) +klass_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (klass :: String | r)) klass_ = klass <<< Applicative.pure autofocus :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (autofocus :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (autofocus :: String | r)) autofocus = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "autofocus", value: _ } <<< Deku.Attribute.prop') autofocus_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (autofocus :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (autofocus :: String | r)) autofocus_ = autofocus <<< Applicative.pure tabindex :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (tabindex :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (tabindex :: String | r)) tabindex = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "tabindex", value: _ } <<< Deku.Attribute.prop') -tabindex_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (tabindex :: String | r)) +tabindex_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (tabindex :: String | r)) tabindex_ = tabindex <<< Applicative.pure xmlSpace :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (xmlSpace :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (xmlSpace :: String | r)) xmlSpace = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "xml:space", value: _ } <<< Deku.Attribute.prop') -xmlSpace_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (xmlSpace :: String | r)) +xmlSpace_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (xmlSpace :: String | r)) xmlSpace_ = xmlSpace <<< Applicative.pure lang - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (lang :: String | r)) + :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (lang :: String | r)) lang = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "lang", value: _ } <<< Deku.Attribute.prop') -lang_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (lang :: String | r)) +lang_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (lang :: String | r)) lang_ = lang <<< Applicative.pure -id - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (id :: String | r)) +id :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (id :: String | r)) id = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "id", value: _ } <<< Deku.Attribute.prop') -id_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (id :: String | r)) +id_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (id :: String | r)) id_ = id <<< Applicative.pure title :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (title :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (title :: String | r)) title = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "title", value: _ } <<< Deku.Attribute.prop') -title_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (title :: String | r)) +title_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (title :: String | r)) title_ = title <<< Applicative.pure media :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (media :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (media :: String | r)) media = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "media", value: _ } <<< Deku.Attribute.prop') -media_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (media :: String | r)) +media_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (media :: String | r)) media_ = media <<< Applicative.pure lightingColor :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (lightingColor :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (lightingColor :: String | r)) lightingColor = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "lighting-color", value: _ } <<< Deku.Attribute.prop') lightingColor_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (lightingColor :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (lightingColor :: String | r)) lightingColor_ = lightingColor <<< Applicative.pure colorInterpolationFilters :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (colorInterpolationFilters :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (colorInterpolationFilters :: String | r)) colorInterpolationFilters = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "color-interpolation-filters", value: _ } <<< Deku.Attribute.prop' @@ -1070,767 +1003,732 @@ colorInterpolationFilters = Functor.map colorInterpolationFilters_ :: forall r . String - -> FRP.Event.Event (Deku.Attribute.Attribute (colorInterpolationFilters :: String | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (colorInterpolationFilters :: String | r)) colorInterpolationFilters_ = colorInterpolationFilters <<< Applicative.pure floodOpacity :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (floodOpacity :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (floodOpacity :: String | r)) floodOpacity = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "flood-opacity", value: _ } <<< Deku.Attribute.prop') floodOpacity_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (floodOpacity :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (floodOpacity :: String | r)) floodOpacity_ = floodOpacity <<< Applicative.pure floodColor :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (floodColor :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (floodColor :: String | r)) floodColor = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "flood-color", value: _ } <<< Deku.Attribute.prop') floodColor_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (floodColor :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (floodColor :: String | r)) floodColor_ = floodColor <<< Applicative.pure filter :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (filter :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (filter :: String | r)) filter = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "filter", value: _ } <<< Deku.Attribute.prop') -filter_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (filter :: String | r)) +filter_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (filter :: String | r)) filter_ = filter <<< Applicative.pure strokeOpacity :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (strokeOpacity :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (strokeOpacity :: String | r)) strokeOpacity = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "stroke-opacity", value: _ } <<< Deku.Attribute.prop') strokeOpacity_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (strokeOpacity :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (strokeOpacity :: String | r)) strokeOpacity_ = strokeOpacity <<< Applicative.pure stroke :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (stroke :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (stroke :: String | r)) stroke = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "stroke", value: _ } <<< Deku.Attribute.prop') -stroke_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (stroke :: String | r)) +stroke_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (stroke :: String | r)) stroke_ = stroke <<< Applicative.pure strokeRepeat :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (strokeRepeat :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (strokeRepeat :: String | r)) strokeRepeat = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "stroke-repeat", value: _ } <<< Deku.Attribute.prop') strokeRepeat_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (strokeRepeat :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (strokeRepeat :: String | r)) strokeRepeat_ = strokeRepeat <<< Applicative.pure strokeSize :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (strokeSize :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (strokeSize :: String | r)) strokeSize = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "stroke-size", value: _ } <<< Deku.Attribute.prop') strokeSize_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (strokeSize :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (strokeSize :: String | r)) strokeSize_ = strokeSize <<< Applicative.pure strokePosition :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (strokePosition :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (strokePosition :: String | r)) strokePosition = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "stroke-position", value: _ } <<< Deku.Attribute.prop') strokePosition_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (strokePosition :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (strokePosition :: String | r)) strokePosition_ = strokePosition <<< Applicative.pure strokeOrigin :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (strokeOrigin :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (strokeOrigin :: String | r)) strokeOrigin = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "stroke-origin", value: _ } <<< Deku.Attribute.prop') strokeOrigin_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (strokeOrigin :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (strokeOrigin :: String | r)) strokeOrigin_ = strokeOrigin <<< Applicative.pure strokeImage :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (strokeImage :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (strokeImage :: String | r)) strokeImage = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "stroke-image", value: _ } <<< Deku.Attribute.prop') strokeImage_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (strokeImage :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (strokeImage :: String | r)) strokeImage_ = strokeImage <<< Applicative.pure strokeColor :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (strokeColor :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (strokeColor :: String | r)) strokeColor = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "stroke-color", value: _ } <<< Deku.Attribute.prop') strokeColor_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (strokeColor :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (strokeColor :: String | r)) strokeColor_ = strokeColor <<< Applicative.pure strokeDashJustify :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (strokeDashJustify :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (strokeDashJustify :: String | r)) strokeDashJustify = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "stroke-dash-justify", value: _ } <<< Deku.Attribute.prop' ) strokeDashJustify_ - :: forall r - . String - -> FRP.Event.Event (Deku.Attribute.Attribute (strokeDashJustify :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (strokeDashJustify :: String | r)) strokeDashJustify_ = strokeDashJustify <<< Applicative.pure strokeDashCorner :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (strokeDashCorner :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (strokeDashCorner :: String | r)) strokeDashCorner = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "stroke-dash-corner", value: _ } <<< Deku.Attribute.prop' ) strokeDashCorner_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (strokeDashCorner :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (strokeDashCorner :: String | r)) strokeDashCorner_ = strokeDashCorner <<< Applicative.pure strokeDashoffset :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (strokeDashoffset :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (strokeDashoffset :: String | r)) strokeDashoffset = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "stroke-dashoffset", value: _ } <<< Deku.Attribute.prop' ) strokeDashoffset_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (strokeDashoffset :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (strokeDashoffset :: String | r)) strokeDashoffset_ = strokeDashoffset <<< Applicative.pure strokeDasharray :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (strokeDasharray :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (strokeDasharray :: String | r)) strokeDasharray = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "stroke-dasharray", value: _ } <<< Deku.Attribute.prop' ) strokeDasharray_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (strokeDasharray :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (strokeDasharray :: String | r)) strokeDasharray_ = strokeDasharray <<< Applicative.pure strokeBreak :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (strokeBreak :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (strokeBreak :: String | r)) strokeBreak = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "stroke-break", value: _ } <<< Deku.Attribute.prop') strokeBreak_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (strokeBreak :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (strokeBreak :: String | r)) strokeBreak_ = strokeBreak <<< Applicative.pure strokeMiterlimit :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (strokeMiterlimit :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (strokeMiterlimit :: String | r)) strokeMiterlimit = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "stroke-miterlimit", value: _ } <<< Deku.Attribute.prop' ) strokeMiterlimit_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (strokeMiterlimit :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (strokeMiterlimit :: String | r)) strokeMiterlimit_ = strokeMiterlimit <<< Applicative.pure strokeLinejoin :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (strokeLinejoin :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (strokeLinejoin :: String | r)) strokeLinejoin = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "stroke-linejoin", value: _ } <<< Deku.Attribute.prop') strokeLinejoin_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (strokeLinejoin :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (strokeLinejoin :: String | r)) strokeLinejoin_ = strokeLinejoin <<< Applicative.pure strokeLinecap :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (strokeLinecap :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (strokeLinecap :: String | r)) strokeLinecap = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "stroke-linecap", value: _ } <<< Deku.Attribute.prop') strokeLinecap_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (strokeLinecap :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (strokeLinecap :: String | r)) strokeLinecap_ = strokeLinecap <<< Applicative.pure strokeAlign :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (strokeAlign :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (strokeAlign :: String | r)) strokeAlign = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "stroke-align", value: _ } <<< Deku.Attribute.prop') strokeAlign_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (strokeAlign :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (strokeAlign :: String | r)) strokeAlign_ = strokeAlign <<< Applicative.pure strokeWidth :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (strokeWidth :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (strokeWidth :: String | r)) strokeWidth = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "stroke-width", value: _ } <<< Deku.Attribute.prop') strokeWidth_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (strokeWidth :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (strokeWidth :: String | r)) strokeWidth_ = strokeWidth <<< Applicative.pure fillOpacity :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (fillOpacity :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (fillOpacity :: String | r)) fillOpacity = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "fill-opacity", value: _ } <<< Deku.Attribute.prop') fillOpacity_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (fillOpacity :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (fillOpacity :: String | r)) fillOpacity_ = fillOpacity <<< Applicative.pure fillRepeat :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (fillRepeat :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (fillRepeat :: String | r)) fillRepeat = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "fill-repeat", value: _ } <<< Deku.Attribute.prop') fillRepeat_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (fillRepeat :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (fillRepeat :: String | r)) fillRepeat_ = fillRepeat <<< Applicative.pure fillSize :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (fillSize :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (fillSize :: String | r)) fillSize = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "fill-size", value: _ } <<< Deku.Attribute.prop') -fillSize_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (fillSize :: String | r)) +fillSize_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (fillSize :: String | r)) fillSize_ = fillSize <<< Applicative.pure fillPosition :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (fillPosition :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (fillPosition :: String | r)) fillPosition = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "fill-position", value: _ } <<< Deku.Attribute.prop') fillPosition_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (fillPosition :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (fillPosition :: String | r)) fillPosition_ = fillPosition <<< Applicative.pure fillOrigin :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (fillOrigin :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (fillOrigin :: String | r)) fillOrigin = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "fill-origin", value: _ } <<< Deku.Attribute.prop') fillOrigin_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (fillOrigin :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (fillOrigin :: String | r)) fillOrigin_ = fillOrigin <<< Applicative.pure fillImage :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (fillImage :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (fillImage :: String | r)) fillImage = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "fill-image", value: _ } <<< Deku.Attribute.prop') fillImage_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (fillImage :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (fillImage :: String | r)) fillImage_ = fillImage <<< Applicative.pure fillColor :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (fillColor :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (fillColor :: String | r)) fillColor = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "fill-color", value: _ } <<< Deku.Attribute.prop') fillColor_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (fillColor :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (fillColor :: String | r)) fillColor_ = fillColor <<< Applicative.pure fillBreak :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (fillBreak :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (fillBreak :: String | r)) fillBreak = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "fill-break", value: _ } <<< Deku.Attribute.prop') fillBreak_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (fillBreak :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (fillBreak :: String | r)) fillBreak_ = fillBreak <<< Applicative.pure fillRule :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (fillRule :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (fillRule :: String | r)) fillRule = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "fill-rule", value: _ } <<< Deku.Attribute.prop') -fillRule_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (fillRule :: String | r)) +fillRule_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (fillRule :: String | r)) fillRule_ = fillRule <<< Applicative.pure pointerEvents :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (pointerEvents :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (pointerEvents :: String | r)) pointerEvents = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "pointer-events", value: _ } <<< Deku.Attribute.prop') pointerEvents_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (pointerEvents :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (pointerEvents :: String | r)) pointerEvents_ = pointerEvents <<< Applicative.pure imageRendering :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (imageRendering :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (imageRendering :: String | r)) imageRendering = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "image-rendering", value: _ } <<< Deku.Attribute.prop') imageRendering_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (imageRendering :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (imageRendering :: String | r)) imageRendering_ = imageRendering <<< Applicative.pure textRendering :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (textRendering :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (textRendering :: String | r)) textRendering = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "text-rendering", value: _ } <<< Deku.Attribute.prop') textRendering_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (textRendering :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (textRendering :: String | r)) textRendering_ = textRendering <<< Applicative.pure shapeRendering :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (shapeRendering :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (shapeRendering :: String | r)) shapeRendering = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "shape-rendering", value: _ } <<< Deku.Attribute.prop') shapeRendering_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (shapeRendering :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (shapeRendering :: String | r)) shapeRendering_ = shapeRendering <<< Applicative.pure colorInterpolation :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (colorInterpolation :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (colorInterpolation :: String | r)) colorInterpolation = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "color-interpolation", value: _ } <<< Deku.Attribute.prop' ) colorInterpolation_ - :: forall r - . String - -> FRP.Event.Event (Deku.Attribute.Attribute (colorInterpolation :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (colorInterpolation :: String | r)) colorInterpolation_ = colorInterpolation <<< Applicative.pure paintOrder :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (paintOrder :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (paintOrder :: String | r)) paintOrder = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "paint-order", value: _ } <<< Deku.Attribute.prop') paintOrder_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (paintOrder :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (paintOrder :: String | r)) paintOrder_ = paintOrder <<< Applicative.pure marker :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (marker :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (marker :: String | r)) marker = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "marker", value: _ } <<< Deku.Attribute.prop') -marker_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (marker :: String | r)) +marker_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (marker :: String | r)) marker_ = marker <<< Applicative.pure markerEnd :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (markerEnd :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (markerEnd :: String | r)) markerEnd = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "marker-end", value: _ } <<< Deku.Attribute.prop') markerEnd_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (markerEnd :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (markerEnd :: String | r)) markerEnd_ = markerEnd <<< Applicative.pure markerMid :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (markerMid :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (markerMid :: String | r)) markerMid = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "marker-mid", value: _ } <<< Deku.Attribute.prop') markerMid_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (markerMid :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (markerMid :: String | r)) markerMid_ = markerMid <<< Applicative.pure markerStart :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (markerStart :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (markerStart :: String | r)) markerStart = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "marker-start", value: _ } <<< Deku.Attribute.prop') markerStart_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (markerStart :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (markerStart :: String | r)) markerStart_ = markerStart <<< Applicative.pure textAnchor :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (textAnchor :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (textAnchor :: String | r)) textAnchor = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "text-anchor", value: _ } <<< Deku.Attribute.prop') textAnchor_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (textAnchor :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (textAnchor :: String | r)) textAnchor_ = textAnchor <<< Applicative.pure shapeMargin :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (shapeMargin :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (shapeMargin :: String | r)) shapeMargin = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "shape-margin", value: _ } <<< Deku.Attribute.prop') shapeMargin_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (shapeMargin :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (shapeMargin :: String | r)) shapeMargin_ = shapeMargin <<< Applicative.pure shapeSubtract :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (shapeSubtract :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (shapeSubtract :: String | r)) shapeSubtract = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "shape-subtract", value: _ } <<< Deku.Attribute.prop') shapeSubtract_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (shapeSubtract :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (shapeSubtract :: String | r)) shapeSubtract_ = shapeSubtract <<< Applicative.pure shapeInside :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (shapeInside :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (shapeInside :: String | r)) shapeInside = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "shape-inside", value: _ } <<< Deku.Attribute.prop') shapeInside_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (shapeInside :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (shapeInside :: String | r)) shapeInside_ = shapeInside <<< Applicative.pure inlineSize :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (inlineSize :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (inlineSize :: String | r)) inlineSize = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "inline-size", value: _ } <<< Deku.Attribute.prop') inlineSize_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (inlineSize :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (inlineSize :: String | r)) inlineSize_ = inlineSize <<< Applicative.pure -d - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (d :: String | r)) +d :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (d :: String | r)) d = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "d", value: _ } <<< Deku.Attribute.prop') -d_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (d :: String | r)) +d_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (d :: String | r)) d_ = d <<< Applicative.pure vectorEffect :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (vectorEffect :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (vectorEffect :: String | r)) vectorEffect = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "vector-effect", value: _ } <<< Deku.Attribute.prop') vectorEffect_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (vectorEffect :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (vectorEffect :: String | r)) vectorEffect_ = vectorEffect <<< Applicative.pure -ry - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (ry :: String | r)) +ry :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (ry :: String | r)) ry = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "ry", value: _ } <<< Deku.Attribute.prop') -ry_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (ry :: String | r)) +ry_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (ry :: String | r)) ry_ = ry <<< Applicative.pure -rx - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (rx :: String | r)) +rx :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (rx :: String | r)) rx = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "rx", value: _ } <<< Deku.Attribute.prop') -rx_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (rx :: String | r)) +rx_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (rx :: String | r)) rx_ = rx <<< Applicative.pure -r - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (r :: String | r)) +r :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (r :: String | r)) r = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "r", value: _ } <<< Deku.Attribute.prop') -r_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (r :: String | r)) +r_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (r :: String | r)) r_ = r <<< Applicative.pure -cy - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (cy :: String | r)) +cy :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (cy :: String | r)) cy = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "cy", value: _ } <<< Deku.Attribute.prop') -cy_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (cy :: String | r)) +cy_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (cy :: String | r)) cy_ = cy <<< Applicative.pure -cx - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (cx :: String | r)) +cx :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (cx :: String | r)) cx = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "cx", value: _ } <<< Deku.Attribute.prop') -cx_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (cx :: String | r)) +cx_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (cx :: String | r)) cx_ = cx <<< Applicative.pure orient :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (orient :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (orient :: String | r)) orient = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "orient", value: _ } <<< Deku.Attribute.prop') -orient_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (orient :: String | r)) +orient_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (orient :: String | r)) orient_ = orient <<< Applicative.pure markerHeight :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (markerHeight :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (markerHeight :: String | r)) markerHeight = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "markerHeight", value: _ } <<< Deku.Attribute.prop') markerHeight_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (markerHeight :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (markerHeight :: String | r)) markerHeight_ = markerHeight <<< Applicative.pure markerWidth :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (markerWidth :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (markerWidth :: String | r)) markerWidth = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "markerWidth", value: _ } <<< Deku.Attribute.prop') markerWidth_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (markerWidth :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (markerWidth :: String | r)) markerWidth_ = markerWidth <<< Applicative.pure markerUnits :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (markerUnits :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (markerUnits :: String | r)) markerUnits = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "markerUnits", value: _ } <<< Deku.Attribute.prop') markerUnits_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (markerUnits :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (markerUnits :: String | r)) markerUnits_ = markerUnits <<< Applicative.pure spreadMethod :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (spreadMethod :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (spreadMethod :: String | r)) spreadMethod = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "spreadMethod", value: _ } <<< Deku.Attribute.prop') spreadMethod_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (spreadMethod :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (spreadMethod :: String | r)) spreadMethod_ = spreadMethod <<< Applicative.pure gradientTransform :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (gradientTransform :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (gradientTransform :: String | r)) gradientTransform = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "gradientTransform", value: _ } <<< Deku.Attribute.prop' ) gradientTransform_ - :: forall r - . String - -> FRP.Event.Event (Deku.Attribute.Attribute (gradientTransform :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (gradientTransform :: String | r)) gradientTransform_ = gradientTransform <<< Applicative.pure gradientUnits :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (gradientUnits :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (gradientUnits :: String | r)) gradientUnits = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "gradientUnits", value: _ } <<< Deku.Attribute.prop') gradientUnits_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (gradientUnits :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (gradientUnits :: String | r)) gradientUnits_ = gradientUnits <<< Applicative.pure -fr - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (fr :: String | r)) +fr :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (fr :: String | r)) fr = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "fr", value: _ } <<< Deku.Attribute.prop') -fr_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (fr :: String | r)) +fr_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (fr :: String | r)) fr_ = fr <<< Applicative.pure -fy - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (fy :: String | r)) +fy :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (fy :: String | r)) fy = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "fy", value: _ } <<< Deku.Attribute.prop') -fy_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (fy :: String | r)) +fy_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (fy :: String | r)) fy_ = fy <<< Applicative.pure -fx - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (fx :: String | r)) +fx :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (fx :: String | r)) fx = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "fx", value: _ } <<< Deku.Attribute.prop') -fx_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (fx :: String | r)) +fx_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (fx :: String | r)) fx_ = fx <<< Applicative.pure stopOpacity :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (stopOpacity :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (stopOpacity :: String | r)) stopOpacity = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "stop-opacity", value: _ } <<< Deku.Attribute.prop') stopOpacity_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (stopOpacity :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (stopOpacity :: String | r)) stopOpacity_ = stopOpacity <<< Applicative.pure stopColor :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (stopColor :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (stopColor :: String | r)) stopColor = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "stop-color", value: _ } <<< Deku.Attribute.prop') stopColor_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (stopColor :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (stopColor :: String | r)) stopColor_ = stopColor <<< Applicative.pure offset :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (offset :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (offset :: String | r)) offset = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "offset", value: _ } <<< Deku.Attribute.prop') -offset_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (offset :: String | r)) +offset_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (offset :: String | r)) offset_ = offset <<< Applicative.pure height :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (height :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (height :: String | r)) height = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "height", value: _ } <<< Deku.Attribute.prop') -height_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (height :: String | r)) +height_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (height :: String | r)) height_ = height <<< Applicative.pure width :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (width :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (width :: String | r)) width = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "width", value: _ } <<< Deku.Attribute.prop') -width_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (width :: String | r)) +width_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (width :: String | r)) width_ = width <<< Applicative.pure patternTransform :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (patternTransform :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (patternTransform :: String | r)) patternTransform = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "patternTransform", value: _ } <<< Deku.Attribute.prop' ) patternTransform_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (patternTransform :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (patternTransform :: String | r)) patternTransform_ = patternTransform <<< Applicative.pure patternContentUnits :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (patternContentUnits :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (patternContentUnits :: String | r)) patternContentUnits = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "patternContentUnits", value: _ } <<< Deku.Attribute.prop' @@ -1839,555 +1737,525 @@ patternContentUnits = Functor.map patternContentUnits_ :: forall r . String - -> FRP.Event.Event (Deku.Attribute.Attribute (patternContentUnits :: String | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (patternContentUnits :: String | r)) patternContentUnits_ = patternContentUnits <<< Applicative.pure patternUnits :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (patternUnits :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (patternUnits :: String | r)) patternUnits = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "patternUnits", value: _ } <<< Deku.Attribute.prop') patternUnits_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (patternUnits :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (patternUnits :: String | r)) patternUnits_ = patternUnits <<< Applicative.pure filterRes :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (filterRes :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (filterRes :: String | r)) filterRes = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "filterRes", value: _ } <<< Deku.Attribute.prop') filterRes_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (filterRes :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (filterRes :: String | r)) filterRes_ = filterRes <<< Applicative.pure primitiveUnits :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (primitiveUnits :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (primitiveUnits :: String | r)) primitiveUnits = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "primitiveUnits", value: _ } <<< Deku.Attribute.prop') primitiveUnits_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (primitiveUnits :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (primitiveUnits :: String | r)) primitiveUnits_ = primitiveUnits <<< Applicative.pure filterUnits :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (filterUnits :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (filterUnits :: String | r)) filterUnits = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "filterUnits", value: _ } <<< Deku.Attribute.prop') filterUnits_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (filterUnits :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (filterUnits :: String | r)) filterUnits_ = filterUnits <<< Applicative.pure xin - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (xin :: String | r)) + :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (xin :: String | r)) xin = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "in", value: _ } <<< Deku.Attribute.prop') -xin_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (xin :: String | r)) +xin_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (xin :: String | r)) xin_ = xin <<< Applicative.pure result :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (result :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (result :: String | r)) result = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "result", value: _ } <<< Deku.Attribute.prop') -result_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (result :: String | r)) +result_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (result :: String | r)) result_ = result <<< Applicative.pure in2 - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (in2 :: String | r)) + :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (in2 :: String | r)) in2 = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "in2", value: _ } <<< Deku.Attribute.prop') -in2_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (in2 :: String | r)) +in2_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (in2 :: String | r)) in2_ = in2 <<< Applicative.pure noComposite :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (noComposite :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (noComposite :: String | r)) noComposite = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "no-composite", value: _ } <<< Deku.Attribute.prop') noComposite_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (noComposite :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (noComposite :: String | r)) noComposite_ = noComposite <<< Applicative.pure mode - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (mode :: String | r)) + :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (mode :: String | r)) mode = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "mode", value: _ } <<< Deku.Attribute.prop') -mode_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (mode :: String | r)) +mode_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (mode :: String | r)) mode_ = mode <<< Applicative.pure exponent :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (exponent :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (exponent :: String | r)) exponent = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "exponent", value: _ } <<< Deku.Attribute.prop') -exponent_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (exponent :: String | r)) +exponent_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (exponent :: String | r)) exponent_ = exponent <<< Applicative.pure amplitude :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (amplitude :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (amplitude :: String | r)) amplitude = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "amplitude", value: _ } <<< Deku.Attribute.prop') amplitude_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (amplitude :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (amplitude :: String | r)) amplitude_ = amplitude <<< Applicative.pure intercept :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (intercept :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (intercept :: String | r)) intercept = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "intercept", value: _ } <<< Deku.Attribute.prop') intercept_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (intercept :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (intercept :: String | r)) intercept_ = intercept <<< Applicative.pure slope :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (slope :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (slope :: String | r)) slope = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "slope", value: _ } <<< Deku.Attribute.prop') -slope_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (slope :: String | r)) +slope_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (slope :: String | r)) slope_ = slope <<< Applicative.pure tableValues :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (tableValues :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (tableValues :: String | r)) tableValues = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "tableValues", value: _ } <<< Deku.Attribute.prop') tableValues_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (tableValues :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (tableValues :: String | r)) tableValues_ = tableValues <<< Applicative.pure -k4 - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (k4 :: String | r)) +k4 :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (k4 :: String | r)) k4 = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "k4", value: _ } <<< Deku.Attribute.prop') -k4_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (k4 :: String | r)) +k4_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (k4 :: String | r)) k4_ = k4 <<< Applicative.pure -k3 - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (k3 :: String | r)) +k3 :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (k3 :: String | r)) k3 = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "k3", value: _ } <<< Deku.Attribute.prop') -k3_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (k3 :: String | r)) +k3_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (k3 :: String | r)) k3_ = k3 <<< Applicative.pure -k2 - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (k2 :: String | r)) +k2 :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (k2 :: String | r)) k2 = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "k2", value: _ } <<< Deku.Attribute.prop') -k2_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (k2 :: String | r)) +k2_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (k2 :: String | r)) k2_ = k2 <<< Applicative.pure -k1 - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (k1 :: String | r)) +k1 :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (k1 :: String | r)) k1 = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "k1", value: _ } <<< Deku.Attribute.prop') -k1_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (k1 :: String | r)) +k1_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (k1 :: String | r)) k1_ = k1 <<< Applicative.pure operator :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (operator :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (operator :: String | r)) operator = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "operator", value: _ } <<< Deku.Attribute.prop') -operator_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (operator :: String | r)) +operator_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (operator :: String | r)) operator_ = operator <<< Applicative.pure -operatorArithmetic :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (operator :: String | r)) +operatorArithmetic :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (operator :: String | r)) operatorArithmetic = operator_ "arithmetic" -operatorLighter :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (operator :: String | r)) +operatorLighter :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (operator :: String | r)) operatorLighter = operator_ "lighter" -operatorXor :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (operator :: String | r)) +operatorXor :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (operator :: String | r)) operatorXor = operator_ "xor" -operatorAtop :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (operator :: String | r)) +operatorAtop :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (operator :: String | r)) operatorAtop = operator_ "atop" -operatorOut :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (operator :: String | r)) +operatorOut :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (operator :: String | r)) operatorOut = operator_ "out" -operatorIn :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (operator :: String | r)) +operatorIn :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (operator :: String | r)) operatorIn = operator_ "in" -operatorOver :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (operator :: String | r)) +operatorOver :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (operator :: String | r)) operatorOver = operator_ "over" preserveAlpha :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (preserveAlpha :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (preserveAlpha :: String | r)) preserveAlpha = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "preserveAlpha", value: _ } <<< Deku.Attribute.prop') preserveAlpha_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (preserveAlpha :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (preserveAlpha :: String | r)) preserveAlpha_ = preserveAlpha <<< Applicative.pure kernelUnitLength :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (kernelUnitLength :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (kernelUnitLength :: String | r)) kernelUnitLength = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "kernelUnitLength", value: _ } <<< Deku.Attribute.prop' ) kernelUnitLength_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (kernelUnitLength :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (kernelUnitLength :: String | r)) kernelUnitLength_ = kernelUnitLength <<< Applicative.pure edgeMode :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (edgeMode :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (edgeMode :: String | r)) edgeMode = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "edgeMode", value: _ } <<< Deku.Attribute.prop') -edgeMode_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (edgeMode :: String | r)) +edgeMode_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (edgeMode :: String | r)) edgeMode_ = edgeMode <<< Applicative.pure -edgeModeWrap :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (edgeMode :: String | r)) +edgeModeWrap :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (edgeMode :: String | r)) edgeModeWrap = edgeMode_ "wrap" -edgeModeDuplicate :: forall r. FRP.Event.Event (Deku.Attribute.Attribute (edgeMode :: String | r)) +edgeModeDuplicate :: forall r. FRP.Poll.Poll (Deku.Attribute.Attribute (edgeMode :: String | r)) edgeModeDuplicate = edgeMode_ "duplicate" targetY :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (targetY :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (targetY :: String | r)) targetY = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "targetY", value: _ } <<< Deku.Attribute.prop') -targetY_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (targetY :: String | r)) +targetY_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (targetY :: String | r)) targetY_ = targetY <<< Applicative.pure targetX :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (targetX :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (targetX :: String | r)) targetX = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "targetX", value: _ } <<< Deku.Attribute.prop') -targetX_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (targetX :: String | r)) +targetX_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (targetX :: String | r)) targetX_ = targetX <<< Applicative.pure bias - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (bias :: String | r)) + :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (bias :: String | r)) bias = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "bias", value: _ } <<< Deku.Attribute.prop') -bias_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (bias :: String | r)) +bias_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (bias :: String | r)) bias_ = bias <<< Applicative.pure divisor :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (divisor :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (divisor :: String | r)) divisor = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "divisor", value: _ } <<< Deku.Attribute.prop') -divisor_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (divisor :: String | r)) +divisor_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (divisor :: String | r)) divisor_ = divisor <<< Applicative.pure kernelMatrix :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (kernelMatrix :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (kernelMatrix :: String | r)) kernelMatrix = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "kernelMatrix", value: _ } <<< Deku.Attribute.prop') kernelMatrix_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (kernelMatrix :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (kernelMatrix :: String | r)) kernelMatrix_ = kernelMatrix <<< Applicative.pure order :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (order :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (order :: String | r)) order = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "order", value: _ } <<< Deku.Attribute.prop') -order_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (order :: String | r)) +order_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (order :: String | r)) order_ = order <<< Applicative.pure diffuseConstant :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (diffuseConstant :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (diffuseConstant :: String | r)) diffuseConstant = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "diffuseConstant", value: _ } <<< Deku.Attribute.prop') diffuseConstant_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (diffuseConstant :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (diffuseConstant :: String | r)) diffuseConstant_ = diffuseConstant <<< Applicative.pure surfaceScale :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (surfaceScale :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (surfaceScale :: String | r)) surfaceScale = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "surfaceScale", value: _ } <<< Deku.Attribute.prop') surfaceScale_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (surfaceScale :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (surfaceScale :: String | r)) surfaceScale_ = surfaceScale <<< Applicative.pure yChannelSelector :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (yChannelSelector :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (yChannelSelector :: String | r)) yChannelSelector = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "yChannelSelector", value: _ } <<< Deku.Attribute.prop' ) yChannelSelector_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (yChannelSelector :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (yChannelSelector :: String | r)) yChannelSelector_ = yChannelSelector <<< Applicative.pure xChannelSelector :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (xChannelSelector :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (xChannelSelector :: String | r)) xChannelSelector = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "xChannelSelector", value: _ } <<< Deku.Attribute.prop' ) xChannelSelector_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (xChannelSelector :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (xChannelSelector :: String | r)) xChannelSelector_ = xChannelSelector <<< Applicative.pure scale :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (scale :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (scale :: String | r)) scale = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "scale", value: _ } <<< Deku.Attribute.prop') -scale_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (scale :: String | r)) +scale_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (scale :: String | r)) scale_ = scale <<< Applicative.pure stdDeviation :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (stdDeviation :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (stdDeviation :: String | r)) stdDeviation = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "stdDeviation", value: _ } <<< Deku.Attribute.prop') stdDeviation_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (stdDeviation :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (stdDeviation :: String | r)) stdDeviation_ = stdDeviation <<< Applicative.pure radius :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (radius :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (radius :: String | r)) radius = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "radius", value: _ } <<< Deku.Attribute.prop') -radius_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (radius :: String | r)) +radius_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (radius :: String | r)) radius_ = radius <<< Applicative.pure specularExponent :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (specularExponent :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (specularExponent :: String | r)) specularExponent = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "specularExponent", value: _ } <<< Deku.Attribute.prop' ) specularExponent_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (specularExponent :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (specularExponent :: String | r)) specularExponent_ = specularExponent <<< Applicative.pure specularConstant :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (specularConstant :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (specularConstant :: String | r)) specularConstant = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "specularConstant", value: _ } <<< Deku.Attribute.prop' ) specularConstant_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (specularConstant :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (specularConstant :: String | r)) specularConstant_ = specularConstant <<< Applicative.pure stitchTiles :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (stitchTiles :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (stitchTiles :: String | r)) stitchTiles = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "stitchTiles", value: _ } <<< Deku.Attribute.prop') stitchTiles_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (stitchTiles :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (stitchTiles :: String | r)) stitchTiles_ = stitchTiles <<< Applicative.pure seed - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (seed :: String | r)) + :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (seed :: String | r)) seed = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "seed", value: _ } <<< Deku.Attribute.prop') -seed_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (seed :: String | r)) +seed_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (seed :: String | r)) seed_ = seed <<< Applicative.pure numOctaves :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (numOctaves :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (numOctaves :: String | r)) numOctaves = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "numOctaves", value: _ } <<< Deku.Attribute.prop') numOctaves_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (numOctaves :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (numOctaves :: String | r)) numOctaves_ = numOctaves <<< Applicative.pure baseFrequency :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (baseFrequency :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (baseFrequency :: String | r)) baseFrequency = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "baseFrequency", value: _ } <<< Deku.Attribute.prop') baseFrequency_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (baseFrequency :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (baseFrequency :: String | r)) baseFrequency_ = baseFrequency <<< Applicative.pure elevation :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (elevation :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (elevation :: String | r)) elevation = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "elevation", value: _ } <<< Deku.Attribute.prop') elevation_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (elevation :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (elevation :: String | r)) elevation_ = elevation <<< Applicative.pure azimuth :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (azimuth :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (azimuth :: String | r)) azimuth = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "azimuth", value: _ } <<< Deku.Attribute.prop') -azimuth_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (azimuth :: String | r)) +azimuth_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (azimuth :: String | r)) azimuth_ = azimuth <<< Applicative.pure -z - :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (z :: String | r)) +z :: forall r. FRP.Poll.Poll String -> FRP.Poll.Poll (Deku.Attribute.Attribute (z :: String | r)) z = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "z", value: _ } <<< Deku.Attribute.prop') -z_ :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (z :: String | r)) +z_ :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (z :: String | r)) z_ = z <<< Applicative.pure limitingConeAngle :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (limitingConeAngle :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (limitingConeAngle :: String | r)) limitingConeAngle = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "limitingConeAngle", value: _ } <<< Deku.Attribute.prop' ) limitingConeAngle_ - :: forall r - . String - -> FRP.Event.Event (Deku.Attribute.Attribute (limitingConeAngle :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (limitingConeAngle :: String | r)) limitingConeAngle_ = limitingConeAngle <<< Applicative.pure pointsAtZ :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (pointsAtZ :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (pointsAtZ :: String | r)) pointsAtZ = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "pointsAtZ", value: _ } <<< Deku.Attribute.prop') pointsAtZ_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (pointsAtZ :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (pointsAtZ :: String | r)) pointsAtZ_ = pointsAtZ <<< Applicative.pure pointsAtY :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (pointsAtY :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (pointsAtY :: String | r)) pointsAtY = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "pointsAtY", value: _ } <<< Deku.Attribute.prop') pointsAtY_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (pointsAtY :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (pointsAtY :: String | r)) pointsAtY_ = pointsAtY <<< Applicative.pure pointsAtX :: forall r - . FRP.Event.Event String - -> FRP.Event.Event (Deku.Attribute.Attribute (pointsAtX :: String | r)) + . FRP.Poll.Poll String + -> FRP.Poll.Poll (Deku.Attribute.Attribute (pointsAtX :: String | r)) pointsAtX = Functor.map (Deku.Attribute.unsafeAttribute <<< { key: "pointsAtX", value: _ } <<< Deku.Attribute.prop') pointsAtX_ - :: forall r. String -> FRP.Event.Event (Deku.Attribute.Attribute (pointsAtX :: String | r)) + :: forall r. String -> FRP.Poll.Poll (Deku.Attribute.Attribute (pointsAtX :: String | r)) pointsAtX_ = pointsAtX <<< Applicative.pure diff --git a/deku-dom/src/Deku/DOM/SVG/Listeners.purs b/deku-dom/src/Deku/DOM/SVG/Listeners.purs index 631be6f0..80affa06 100644 --- a/deku-dom/src/Deku/DOM/SVG/Listeners.purs +++ b/deku-dom/src/Deku/DOM/SVG/Listeners.purs @@ -6,7 +6,7 @@ module Deku.DOM.SVG.Listeners (module Combinators, repeat, repeat_, end, end_, b import Control.Applicative (pure) as Applicative import Control.Category ((<<<)) import Data.Functor (map) as Functor -import FRP.Event as FRP.Event +import FRP.Poll as FRP.Poll import Deku.DOM.Combinators (unset, injectElement, injectElementT, runOn, runOn_, numberOn, numberOn_, checkedOn, checkedOn_, valueOn, valueOn_) as Combinators import Deku.Attribute as Deku.Attribute import Web.Event.Internal.Types as Web.Event.Internal.Types @@ -16,8 +16,8 @@ import Unsafe.Coerce as Unsafe.Coerce repeat :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (repeat :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (repeat :: Web.Event.Internal.Types.Event | r)) repeat = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "repeat", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -27,13 +27,13 @@ repeat = Functor.map repeat_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (repeat :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (repeat :: Web.Event.Internal.Types.Event | r)) repeat_ = repeat <<< Applicative.pure end :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (end :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (end :: Web.Event.Internal.Types.Event | r)) end = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "end", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -43,13 +43,13 @@ end = Functor.map end_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (end :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (end :: Web.Event.Internal.Types.Event | r)) end_ = end <<< Applicative.pure begin :: forall r - . FRP.Event.Event (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (begin :: Web.Event.Internal.Types.Event | r)) + . FRP.Poll.Poll (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (begin :: Web.Event.Internal.Types.Event | r)) begin = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "begin", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -59,5 +59,5 @@ begin = Functor.map begin_ :: forall r . (Web.Event.Internal.Types.Event -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (begin :: Web.Event.Internal.Types.Event | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (begin :: Web.Event.Internal.Types.Event | r)) begin_ = begin <<< Applicative.pure diff --git a/deku-dom/src/Deku/DOM/Self.purs b/deku-dom/src/Deku/DOM/Self.purs index a832cd11..88e8aae1 100644 --- a/deku-dom/src/Deku/DOM/Self.purs +++ b/deku-dom/src/Deku/DOM/Self.purs @@ -5,7 +5,7 @@ module Deku.DOM.Self where import Control.Applicative (pure) as Applicative import Control.Category ((<<<)) import Data.Functor (map) as Functor -import FRP.Event as FRP.Event +import FRP.Poll as FRP.Poll import Type.Proxy (Proxy) import Deku.Attribute as Deku.Attribute import Web.DOM.Element as Web.DOM.Element @@ -62,8 +62,8 @@ class IsSelf (element :: Type) (name :: Symbol) | element -> name -- | properties to it, etc. self :: forall r - . FRP.Event.Event (Web.DOM.Element.Element -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute r) + . FRP.Poll.Poll (Web.DOM.Element.Element -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute r) self = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "@self@", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -74,7 +74,7 @@ self = Functor.map self_ :: forall r . (Web.DOM.Element.Element -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute r) + -> FRP.Poll.Poll (Deku.Attribute.Attribute r) self_ = self <<< Applicative.pure -- | A slightly less permissive version of `Self` that associates Deku Elements to @@ -83,8 +83,8 @@ self_ = self <<< Applicative.pure selfT :: forall name e r . IsSelf e name - => FRP.Event.Event (e -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (__tag :: Proxy name | r)) + => FRP.Poll.Poll (e -> Effect.Effect Data.Unit.Unit) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (__tag :: Proxy name | r)) selfT = Functor.map ( Deku.Attribute.unsafeAttribute <<< { key: "@self@", value: _ } <<< Deku.Attribute.cb' <<< Deku.Attribute.cb @@ -96,7 +96,7 @@ selfT_ :: forall name e r . IsSelf e name => (e -> Effect.Effect Data.Unit.Unit) - -> FRP.Event.Event (Deku.Attribute.Attribute (__tag :: Proxy name | r)) + -> FRP.Poll.Poll (Deku.Attribute.Attribute (__tag :: Proxy name | r)) selfT_ = selfT <<< Applicative.pure instance IsSelf Web.HTML.HTMLAnchorElement.HTMLAnchorElement "HTMLAnchorElement" diff --git a/deku/src/Deku/Pursx.purs b/deku/src/Deku/Pursx.purs index ea380bc8..8a57b969 100644 --- a/deku/src/Deku/Pursx.purs +++ b/deku/src/Deku/Pursx.purs @@ -1,17 +1,11 @@ module Deku.Pursx where -import Prelude - -import Bolson.Core (Entity(..), PSR) -import Control.Monad.ST.Uncurried (mkSTFn2, runSTFn1, runSTFn2) -import Control.Plus (empty) -import Data.Maybe (Maybe, maybe) import Data.Reflectable (class Reflectable, reflectType) import Deku.Attribute (Attribute) -import Deku.Core (DOMInterpret(..), Node(..), Nut(..), NutF(..)) -import Deku.Pursx.Unsafe (unsafeMakePursx, class PursxToElement, pursxToElement, domableToNode) +import Deku.Core (Nut) +import Deku.Pursx.Unsafe (class PursxToElement, unsafeMakePursx, unsafeMakePursx') import Deku.DOM (class TagToDeku) -import FRP.Event (Event, Subscriber(..), merge, makeLemmingEventO) +import FRP.Poll (Poll) import Prim.Boolean (False, True) import Prim.Row as Row import Prim.RowList as RL @@ -35,7 +29,7 @@ class instance ( TagToDeku tag deku - , Row.Cons acc (Event (Attribute deku)) pursi purso + , Row.Cons acc (Poll (Attribute deku)) pursi purso ) => DoVerbForAttr verb tag acc verb tail pursi purso tail else instance @@ -2222,56 +2216,7 @@ makePursx' -> Proxy html -> { | r } -> Nut -makePursx' verb html r = Nut ee - where - ee :: forall payload. NutF payload - ee = NutF (Element' (Node go)) - - go - :: forall payload - . PSR (pos :: Maybe Int, ez :: Boolean, dynFamily :: Maybe String) - -> DOMInterpret payload - -> Event payload - go - z@{ parent, scope, raiseId, dynFamily, pos } - di@(DOMInterpret { makePursx: mpx, ids, deleteFromCache, attributeParent }) = - makeLemmingEventO $ mkSTFn2 \(Subscriber mySub) k1 -> do - me <- ids - pxScope <- ids - raiseId me - let - { cache, element: element' } = pursxToElement - pxScope - (Proxy :: _ rl) - r - let Node element = domableToNode element' - unsub <- runSTFn2 mySub - ( merge - [ pure $ - mpx - { id: me - , parent - , cache - , dynFamily - , pos - , pxScope: pxScope - , scope - , html: reflectType html - , verb: reflectType verb - } - , element z di - , maybe empty - ( \p -> - pure $ attributeParent - { id: me, parent: p, pos, dynFamily, ez: false } - ) - parent - ] - ) - k1 - pure do - runSTFn1 k1 (deleteFromCache { id: me }) - unsub +makePursx' verb html = unsafeMakePursx' (reflectType verb) (reflectType html) infixr 5 makePursx as ~~ infixr 5 unsafeMakePursx as ~!~ diff --git a/deku/test/Performance/Main.purs b/deku/test/Performance/Main.purs deleted file mode 100644 index f5db7d1f..00000000 --- a/deku/test/Performance/Main.purs +++ /dev/null @@ -1,95 +0,0 @@ -module Performance.Main where - -import Prelude hiding (compare) - -import Data.Argonaut.Core (stringifyWithIndent) -import Data.Argonaut.Encode (encodeJson) -import Data.Maybe (Maybe(..)) -import Effect (Effect) -import Effect.Aff (Milliseconds(..), launchAff_) -import Effect.Class (liftEffect) -import Effect.Class.Console as Console -import Effect.Exception (catchException) -import Node.Encoding (Encoding(..)) -import Node.FS.Sync (mkdir, writeTextFile) -import Performance.Setup.Measure (ComparisonSummary, TestType(..), compare, testTypeToString, withBrowser) -import Performance.Setup.Puppeteer as Puppeteer -import Performance.Snapshot (percentChange, snapshots) -import Test.Spec (Spec, around, describe, it) -import Test.Spec.Reporter (consoleReporter) -import Test.Spec.Runner (defaultConfig, runSpec') - -main :: Effect Unit -main = launchAff_ do - runSpec' (defaultConfig { timeout = Just (Milliseconds 60_000.0) }) - [ consoleReporter ] - do - describe "Peformance" spec - --- These tests have wide acceptance ranges because of the variability of banchmarks --- via Puppeteer in general. But they do have some light boundaries and should --- be manually reviewed in any pull request which touches library internals. -spec :: Spec Unit -spec = around withBrowser do - it "Should satisfy state benchmark" \browser -> do - -- We can safely disregard 'Failed to parse CPU profile' log messages. This - -- disables those logs from this point onwards in the program execution (all - -- following benchmarks). - liftEffect do - Puppeteer.filterConsole - catchException mempty (mkdir "test-results") - - let test = StateTest - result <- compare browser 3 test - liftEffect do - writeResult test result - Console.log - "Wrote state test results to test-results (including snapshot change)." - - it "Should satisfy todo benchmark" \browser -> do - let test = TodoTest - result <- compare browser 3 test - liftEffect do - writeResult test result - Console.log - "Wrote todo test results to test-results (including snapshot change)." - -writeResult :: TestType -> ComparisonSummary -> Effect Unit -writeResult - test - { componentAverage - , hookAverage - , dekuAverage - , componentResults - , hookResults - , dekuResults - } = do - writePath "summary" $ encodeJson - { componentAverage, hookAverage, dekuAverage } - - writePath "results" $ encodeJson - { componentResults, hookResults, dekuResults } - - writePath "change" $ encodeJson $ case test of - StateTest -> - { componentChange: - percentChange snapshots.state.componentAverage componentAverage - , hookChange: - percentChange snapshots.state.hookAverage hookAverage - , dekuChange: - percentChange snapshots.state.dekuAverage dekuAverage - } - TodoTest -> - { componentChange: - percentChange snapshots.todo.componentAverage componentAverage - , hookChange: - percentChange snapshots.todo.hookAverage hookAverage - , dekuChange: - percentChange snapshots.todo.dekuAverage dekuAverage - } - where - writePath label = - stringifyWithIndent 2 >>> writeTextFile UTF8 (mkPath label) - - mkPath label = - "test-results/" <> testTypeToString test <> "-" <> label <> ".json" diff --git a/deku/test/Performance/Setup/Measure.purs b/deku/test/Performance/Setup/Measure.purs deleted file mode 100644 index 1b673e54..00000000 --- a/deku/test/Performance/Setup/Measure.purs +++ /dev/null @@ -1,262 +0,0 @@ -module Performance.Setup.Measure where - -import Prelude hiding (compare) - -import Control.Monad.Rec.Class (forever) -import Data.Array (fold, replicate) -import Data.Array as Array -import Data.Foldable (foldl, for_, maximum, sum) -import Data.Maybe (Maybe(..), fromJust, fromMaybe, isJust) -import Data.Traversable (for) -import Effect.Aff (Aff, bracket, delay, error, forkAff, killFiber, throwError) -import Effect.Aff as Aff -import Effect.Aff.AVar as AVar -import Effect.Class (liftEffect) -import Node.Path (resolve) -import Partial.Unsafe (unsafePartial) -import Performance.Setup.Puppeteer (Browser, FilePath(..), Kilobytes(..), Milliseconds(..), Page) -import Performance.Setup.Puppeteer as Puppeteer -import Performance.Test.Todo.Shared (addNewId, checkId, editId, saveId, undoId) -import Performance.Test.Types (Test(..), completedSuffix, startSuffix, testToString) - -type PerformanceSummary = - { averageFPS :: Int - , peakHeap :: Kilobytes - , averageHeap :: Kilobytes - , scriptTime :: Milliseconds - , totalTime :: Milliseconds - } - -type ComparisonSummary = - { hookResults :: Array PerformanceSummary - , hookAverage :: PerformanceSummary - , componentResults :: Array PerformanceSummary - , componentAverage :: PerformanceSummary - , dekuResults :: Array PerformanceSummary - , dekuAverage :: PerformanceSummary - } - --- | Bracket test runs by supplying a new browser to each one -withBrowser :: (Browser -> Aff Unit) -> Aff Unit -withBrowser = bracket (Puppeteer.launch { headless: true }) - Puppeteer.closeBrowser - -data TestType = StateTest | TodoTest - -testTypeToString :: TestType -> String -testTypeToString = case _ of - StateTest -> "state-test" - TodoTest -> "todo-test" - -compare :: Browser -> Int -> TestType -> Aff ComparisonSummary -compare browser n testType = do - let runs = replicate n (compareOnce browser testType) - results <- for runs (delay (Aff.Milliseconds 100.0) *> _) - - let - hookResults = map _.hook results - componentResults = map _.component results - dekuResults = map _.deku results - hookAverage = average hookResults - componentAverage = average componentResults - dekuAverage = average dekuResults - - pure - { hookResults - , hookAverage - , componentResults - , componentAverage - , dekuResults - , dekuAverage - } - -compareOnce - :: Browser - -> TestType - -> Aff - { hook :: PerformanceSummary - , component :: PerformanceSummary - , deku :: PerformanceSummary - } -compareOnce browser = case _ of - StateTest -> do - hook <- measure browser StateHook - component <- measure browser StateComponent - deku <- measure browser StateDeku - pure { hook, component, deku } - - TodoTest -> do - hook <- measure browser TodoHook - component <- measure browser TodoComponent - deku <- measure browser TodoDeku - pure { hook, component, deku } - -measure :: Browser -> Test -> Aff PerformanceSummary -measure browser test = do - page <- Puppeteer.newPage browser - - path <- liftEffect $ resolve [] "test/test.html" - Puppeteer.goto page ("file://" <> path) - - -- Prepare by selecting the test to mount - let selector = prependHash (testToString test) - mbTestElem <- Puppeteer.waitForSelector page selector - - -- Prepare for the test by collecting garbage (for more accurate heap usage - -- metrics) and starting metrics collection - let - tracePath = FilePath $ fold - [ "test-results/", testToString test, "-trace.json" ] - - -- Initialize data for capturing heap measurements - var <- AVar.new { captures: [], count: 0 } - - -- Collect garbage in preparation for heap measurements - Puppeteer.enableHeapProfiler page - Puppeteer.collectGarbage page - - -- Start recording the performance trace, depositing the resulting trace file - -- to `tracePath` so it can be manually analyzed - Puppeteer.startTrace page tracePath - - -- Collect initial timestamp and heap usage - initialPageMetrics <- Puppeteer.pageMetrics page - - -- Start collecting heap measurements every 10 milliseconds - -- - -- TODO: It may be better to ditch the dependencies and just use this strategy - -- with `requestAnimationFrame` to measure the FPS as well. - heapFiber <- forkAff $ forever do - { heapUsed } <- Puppeteer.pageMetrics page - { captures, count } <- AVar.take var - AVar.put { captures: Array.snoc captures heapUsed, count: count + 1 } var - delay $ Aff.Milliseconds 10.0 - - -- Run the test to completion - for_ mbTestElem Puppeteer.click - runScriptForTest page test - - -- Retrieve heap captures - { captures, count } <- AVar.take var - - -- Collect final timestamp and heap usage - finalPageMetrics <- Puppeteer.pageMetrics page - - -- Stop recording the trace and write it to disk - trace <- Puppeteer.stopTrace page - Puppeteer.closePage page - killFiber (error "time's up!") heapFiber - - -- Use the trace to get the average FPS during the execution - mbModel <- Puppeteer.getPerformanceModel trace - let averageFPS = Puppeteer.getAverageFPS $ unsafePartial $ fromJust mbModel - - -- Use the trace to retrieve time spent executing scripts (JS execution) - scriptTime <- liftEffect (Puppeteer.readScriptingTime tracePath) - - -- Use the initial and final metrics to record the total time spent recording - -- the trace - let totalTime = finalPageMetrics.timestamp - initialPageMetrics.timestamp - - -- Use the heap usage captures to record the average heap usage during - -- execution, minus the heap that existed when the trace began. - let - peakHeap = fromMaybe (Kilobytes 0) $ map (_ - initialPageMetrics.heapUsed) $ - maximum captures - averageHeap = (sum captures / Kilobytes count) - initialPageMetrics.heapUsed - - pure { averageFPS, averageHeap, peakHeap, scriptTime, totalTime } - --- TODO: Replace query selectors --- --- Currently tests use query selectors to start tests and understand when a test --- has completed. But it would be better to expose an interface via the window --- object that can be used to query the Halogen application and run tests. This --- would allow tests to: --- --- 1. Query the application and await the result; when the result is received --- then the test is complete and the timer can stop. --- --- 2. Alternately, query the application and subscribe to output messages which --- will record when a test has completed. --- --- The Halogen application can register functions onto the window object at app --- startup (in the `main` function). The `Puppeteer.evaluate` function enables --- calling functions within Puppeteer, and the `Puppeteer.exposeFunction` function --- enables a function which evaluates within Puppeteer to be called from outside. --- --- Until then, though, we'll just rely on query selectors. -runScriptForTest :: Page -> Test -> Aff Unit -runScriptForTest page test = do - let selector = prependHash (testToString test) - if test == StateHook || test == StateComponent || test == StateDeku then do - n <- Puppeteer.waitForSelector page (selector <> startSuffix) - for_ n Puppeteer.click - void $ Puppeteer.waitForSelector page (selector <> completedSuffix) - - else if test == TodoHook || test == TodoComponent || test == TodoDeku then do - addNew <- Puppeteer.waitForSelector page (prependHash addNewId) - for_ addNew Puppeteer.click - - check0 <- Puppeteer.waitForSelector page (prependHash $ checkId 0) - for_ check0 Puppeteer.click - check1 <- Puppeteer.waitForSelector page (prependHash $ checkId 1) - for_ check1 Puppeteer.click - - Puppeteer.focus page (prependHash $ editId 5) - oldValue <- Puppeteer.getInputFieldValue page (prependHash $ editId 5) - Puppeteer.typeWithKeyboard page "is so fun" - save5 <- Puppeteer.waitForSelector page (prependHash $ saveId 5) - for_ save5 Puppeteer.click - newValue <- Puppeteer.getInputFieldValue page (prependHash $ editId 5) - -- assert that the value has changed - unless - ( isJust newValue && newValue == - (append <$> oldValue <*> pure "is so fun") - ) - do - throwError - ( error - ("Value not updated: " <> show oldValue <> " " <> show newValue) - ) - - undo <- Puppeteer.waitForSelector page (prependHash undoId) - for_ undo Puppeteer.click - undoValue <- Puppeteer.getInputFieldValue page (prependHash $ editId 5) - -- assert that the undo operation worked - unless (oldValue == undoValue) do - throwError - (error ("Value not undone: " <> show oldValue <> " " <> show newValue)) - - shouldBeChecked <- Puppeteer.getChecked page (prependHash $ checkId 1) - - unless (shouldBeChecked == Just true) do - throwError (error ("Checkbox not checked")) - - for_ undo Puppeteer.click - shouldBeUnchecked <- Puppeteer.getChecked page (prependHash $ checkId 1) - - unless (shouldBeUnchecked == Just false) do - throwError (error ("Checkbox still checked")) - - for_ check0 Puppeteer.click - for_ check1 Puppeteer.click - - else - throwError $ error "Impossible!!!" - -prependHash :: String -> String -prependHash str = "#" <> str - -average :: Array PerformanceSummary -> PerformanceSummary -average summaries = do - let - summary = foldl (+) zero summaries - total = Array.length summaries - - { averageFPS: summary.averageFPS / total - , averageHeap: summary.averageHeap / Kilobytes total - , peakHeap: summary.peakHeap / Kilobytes total - , scriptTime: summary.scriptTime / Milliseconds total - , totalTime: summary.totalTime / Milliseconds total - } diff --git a/deku/test/Performance/Setup/Puppeteer.js b/deku/test/Performance/Setup/Puppeteer.js deleted file mode 100644 index b3ee584a..00000000 --- a/deku/test/Performance/Setup/Puppeteer.js +++ /dev/null @@ -1,107 +0,0 @@ -import puppeteer from "puppeteer"; -import filterConsole from "filter-console"; -import tracealyzer from "tracealyzer"; -import { getPerformanceModel } from "headless-devtools"; - -export function filterConsoleImpl() { - filterConsole(["Failed to parse CPU profile."]); -} - -export function launchImpl(args) { - return function () { - return puppeteer.launch(args); - }; -} - -export function newPageImpl(browser) { - return browser.newPage(); -} - -export function debugImpl(page) { - page.on("console", (msg) => console.log("PAGE LOG:", msg.text())); - page.on("pageerror", (err) => console.log("ERROR LOG:", err.message)); -} - -export function clickImpl(elem) { - return elem.click(); -} - -export function waitForSelectorImpl(page, selector) { - return page.waitForSelector(selector); -} - -export function getInputFieldValueImpl(page, selector) { - return page.$eval(selector, (input) => { - return input.value; - }); -} - -export function getCheckedImpl(page, selector) { - return page.$eval(selector, (input) => { - return input.checked; - }); -} - -export function focusImpl(page, selector) { - return page.focus(selector); -} - -export function typeWithKeybordImpl(page, string) { - return page.keyboard.type(string); -} - -export function gotoImpl(page, path) { - return page.goto(path); -} - -export function closePageImpl(page) { - return page.close(); -} - -export function closeBrowserImpl(browser) { - return browser.close(); -} - -export function enableHeapProfilerImpl(page) { - return page._client.send("HeapProfiler.enable"); -} - -export function collectGarbageImpl(page) { - return page._client.send("HeapProfiler.collectGarbage"); -} - -export function startTraceImpl(page, path) { - return page.tracing.start({ path }); -} - -export function stopTraceImpl(page) { - return page.tracing.stop(); -} - -// Should be used on the trace produced by `page.tracing.stop()` -export function getPerformanceModelImpl(trace) { - try { - const traceJSON = JSON.parse(trace.toString()); - return getPerformanceModel(traceJSON); - } catch (e) { - return null; - } -} - -// Should be used on the model returned by `getPeformanceModel` -export function getAverageFPS(model) { - const frames = model.frames(); - const durations = frames.map((x) => x.duration); - const avg = durations.reduce((acc, item) => acc + item, 0) / durations.length; - return Math.round(1000 / avg); -} - -export function pageMetricsImpl(page) { - return page.metrics(); -} - -export function tracealyzerImpl(filename) { - return function () { - return tracealyzer(filename); - }; -} diff --git a/deku/test/Performance/Setup/Puppeteer.purs b/deku/test/Performance/Setup/Puppeteer.purs deleted file mode 100644 index 83924645..00000000 --- a/deku/test/Performance/Setup/Puppeteer.purs +++ /dev/null @@ -1,284 +0,0 @@ -module Performance.Setup.Puppeteer - ( filterConsole - , Browser - , launch - , Page - , newPage - , debug - , click - , waitForSelector - , getInputFieldValue - , getChecked - , focus - , typeWithKeyboard - , goto - , closePage - , closeBrowser - , enableHeapProfiler - , collectGarbage - , FilePath(..) - , startTrace - , Trace - , stopTrace - , PerformanceModel - , getPerformanceModel - , getAverageFPS - , Kilobytes(..) - , Milliseconds(..) - , PageMetrics - , pageMetrics - , readScriptingTime - ) where - -import Prelude - -import Control.Promise (Promise, toAffE) -import Data.Argonaut.Core (Json) -import Data.Argonaut.Decode (class DecodeJson, decodeJson, printJsonDecodeError, (.:), (.:?)) -import Data.Argonaut.Encode (class EncodeJson, encodeJson) -import Data.Either (Either(..)) -import Data.Int (round) -import Data.Int as Int -import Data.Maybe (Maybe, fromJust, fromMaybe) -import Data.Newtype (class Newtype) -import Data.Nullable (Nullable, toMaybe) -import Data.String.CodeUnits as String -import Effect (Effect) -import Effect.Aff (Aff) -import Effect.Class (liftEffect) -import Effect.Exception (throw) -import Effect.Uncurried (EffectFn1, EffectFn2, runEffectFn1, runEffectFn2) -import Node.Path as Path -import Partial.Unsafe (unsafePartial) -import Web.HTML (HTMLElement) - --- | Turn off noisy messages from the Puppeteer tests -foreign import filterConsoleImpl :: Effect Unit - -filterConsole = filterConsoleImpl :: Effect Unit - --- | An instance of a Puppeteer browser, which should be created at --- | the start of any Puppeteer session and closed at the end. -foreign import data Browser :: Type - --- | The headless :: Boolean argument specifies whether or not to run the browser in headless mode. --- | To debug/test visually, set headless to false -type LaunchArgs = - { headless :: Boolean - } - -foreign import launchImpl :: LaunchArgs -> Effect (Promise Browser) - -launch :: LaunchArgs -> Aff Browser -launch config = toAffE (launchImpl config) - --- | An instance of a Puppeteer page, which is necessary to run page-level --- | functions like collecting metrics and starting and stopping traces. -foreign import data Page :: Type - -foreign import newPageImpl :: EffectFn1 Browser (Promise Page) - --- | Create a running instance of a `Page` -newPage :: Browser -> Aff Page -newPage = toAffE1 newPageImpl - -foreign import debugImpl :: EffectFn1 Page Unit - --- | Enable logs from the Puppeteer instance -debug :: Page -> Aff Unit -debug = liftEffect <<< runEffectFn1 debugImpl - -foreign import clickImpl :: EffectFn1 HTMLElement (Promise Unit) - -click :: HTMLElement -> Aff Unit -click = toAffE1 clickImpl - -foreign import waitForSelectorImpl - :: EffectFn2 Page String (Promise (Nullable HTMLElement)) - -waitForSelector :: Page -> String -> Aff (Maybe HTMLElement) -waitForSelector page selector = map toMaybe - (toAffE2 waitForSelectorImpl page selector) - -foreign import getInputFieldValueImpl - :: EffectFn2 Page String (Promise (Nullable String)) - -getInputFieldValue :: Page -> String -> Aff (Maybe String) -getInputFieldValue page selector = map toMaybe - (toAffE2 getInputFieldValueImpl page selector) - -foreign import getCheckedImpl - :: EffectFn2 Page String (Promise (Nullable Boolean)) - -getChecked :: Page -> String -> Aff (Maybe Boolean) -getChecked page selector = map toMaybe (toAffE2 getCheckedImpl page selector) - -foreign import focusImpl :: EffectFn2 Page String (Promise Unit) - -focus :: Page -> String -> Aff Unit -focus = toAffE2 focusImpl - -foreign import typeWithKeybordImpl :: EffectFn2 Page String (Promise Unit) - -typeWithKeyboard :: Page -> String -> Aff Unit -typeWithKeyboard = toAffE2 typeWithKeybordImpl - -foreign import gotoImpl :: EffectFn2 Page Path.FilePath (Promise Unit) - -goto :: Page -> Path.FilePath -> Aff Unit -goto = toAffE2 gotoImpl - -foreign import closePageImpl :: EffectFn1 Page (Promise Unit) - --- | Terminate the running Puppeteer page -closePage :: Page -> Aff Unit -closePage = toAffE1 closePageImpl - -foreign import closeBrowserImpl :: EffectFn1 Browser (Promise Unit) - --- | Terminate the running Puppeteer browser, ending the session -closeBrowser :: Browser -> Aff Unit -closeBrowser = toAffE1 closeBrowserImpl - -foreign import enableHeapProfilerImpl :: EffectFn1 Page (Promise Unit) - --- | Turn on the heap profiler, enabling JS heap measurements and manual garbage --- | collection for more reliable benchmarking -enableHeapProfiler :: Page -> Aff Unit -enableHeapProfiler = toAffE1 enableHeapProfilerImpl - -foreign import collectGarbageImpl :: EffectFn1 Page (Promise Unit) - --- | Manually trigger garbage collection, which can be used to ensure more --- | accurate heap usage -collectGarbage :: Page -> Aff Unit -collectGarbage = toAffE1 collectGarbageImpl - -newtype FilePath = FilePath String - -derive instance Newtype FilePath _ - -foreign import startTraceImpl :: EffectFn2 Page FilePath (Promise Unit) - --- | Begin measuring a performance trace. Use `stopTrace` to complete the --- | measurement and write it to the specified file path. This trace can then --- | be loaded up in the Chrome Dev Tools. -startTrace :: Page -> FilePath -> Aff Unit -startTrace = toAffE2 startTraceImpl - --- | The opaque blob returned by a performance trace, which can be analyzed to --- | retrieve performance measurements like FPS. -foreign import data Trace :: Type - -foreign import stopTraceImpl :: EffectFn1 Page (Promise Trace) - --- | Begin measuring a performance trace. Use `stopTrace` to complete the --- | measurement. -stopTrace :: Page -> Aff Trace -stopTrace = toAffE1 stopTraceImpl - --- | The opaque blob returned by the `getPerformanceModel` function, which can --- | be used to retrieve the average frames per second over the measured duration -foreign import data PerformanceModel :: Type - -foreign import getPerformanceModelImpl - :: EffectFn1 Trace (Promise (Nullable PerformanceModel)) - -getPerformanceModel :: Trace -> Aff (Maybe PerformanceModel) -getPerformanceModel = map toMaybe <<< toAffE1 getPerformanceModelImpl - --- | Retrieve the average frames per second over the course of the performance trace -foreign import getAverageFPS :: PerformanceModel -> Int - -type JSPageMetrics = - { "JSHeapUsedSize" :: Number -- megabytes - , "Timestamp" :: Number -- microseconds - } - -foreign import pageMetricsImpl :: EffectFn1 Page (Promise JSPageMetrics) - -newtype Kilobytes = Kilobytes Int - -derive instance Newtype Kilobytes _ -derive newtype instance Eq Kilobytes -derive newtype instance Ord Kilobytes -derive newtype instance Semiring Kilobytes -derive newtype instance Ring Kilobytes -derive newtype instance CommutativeRing Kilobytes -derive newtype instance EuclideanRing Kilobytes - -instance EncodeJson Kilobytes where - encodeJson = encodeJson <<< show - -instance DecodeJson Kilobytes where - decodeJson json = decodeJson json >>= \str -> do - pure - ( Kilobytes - (unsafePartial (fromJust (Int.fromString (String.dropRight 2 str)))) - ) - -instance Show Kilobytes where - show (Kilobytes kb) = show kb <> "kb" - -newtype Milliseconds = Milliseconds Int - -derive instance Newtype Milliseconds _ -derive newtype instance Eq Milliseconds -derive newtype instance Ord Milliseconds -derive newtype instance Semiring Milliseconds -derive newtype instance Ring Milliseconds -derive newtype instance CommutativeRing Milliseconds -derive newtype instance EuclideanRing Milliseconds - -instance EncodeJson Milliseconds where - encodeJson = encodeJson <<< show - -instance Show Milliseconds where - show (Milliseconds ms) = show ms <> "ms" - -instance DecodeJson Milliseconds where - decodeJson json = decodeJson json >>= \str -> do - pure - ( Milliseconds - (unsafePartial (fromJust (Int.fromString (String.dropRight 2 str)))) - ) - --- | A snapshot of current page data -type PageMetrics = - { heapUsed :: Kilobytes - , timestamp :: Milliseconds - } - --- | Retrieve a snapshot of the current page metrics, which can be used to see --- | current heap usage and execution times -pageMetrics :: Page -> Aff PageMetrics -pageMetrics = toAffE1 pageMetricsImpl >>> map - \{ "JSHeapUsedSize": heap, "Timestamp": ts } -> - { heapUsed: Kilobytes (round (heap / 1000.0)) - , timestamp: Milliseconds (round (ts * 1000.0)) - } - --- | Retrieve the time spent in scripting during the execution -readScriptingTime :: FilePath -> Effect Milliseconds -readScriptingTime fp = do - json <- tracealyzer fp - - let - decoded = do - obj <- decodeJson json - (_ .:? "scripting") =<< (_ .: "categories") =<< obj .: "profiling" - - case decoded of - Left err -> throw $ printJsonDecodeError err - Right val -> pure $ Milliseconds $ round $ fromMaybe 0.0 val - -foreign import tracealyzerImpl :: FilePath -> Effect Json - -tracealyzer :: FilePath -> Effect Json -tracealyzer = tracealyzerImpl - -toAffE1 :: forall a b. EffectFn1 a (Promise b) -> a -> Aff b -toAffE1 fn = toAffE <<< runEffectFn1 fn - -toAffE2 :: forall a b c. EffectFn2 a b (Promise c) -> a -> b -> Aff c -toAffE2 fn a b = toAffE (runEffectFn2 fn a b) diff --git a/deku/test/Performance/Snapshot.purs b/deku/test/Performance/Snapshot.purs deleted file mode 100644 index c37895e0..00000000 --- a/deku/test/Performance/Snapshot.purs +++ /dev/null @@ -1,60 +0,0 @@ -module Performance.Snapshot where - -import Prelude - -import Data.Argonaut.Core (Json) -import Data.Argonaut.Decode (JsonDecodeError, decodeJson) -import Data.Either (Either, fromRight') -import Data.Int (toNumber) -import Data.Int as Int -import Data.Newtype (unwrap) -import Effect.Exception.Unsafe (unsafeThrow) -import Performance.Setup.Measure (PerformanceSummary) -import Performance.Snapshot.StateTest as StateTest -import Performance.Snapshot.TodoTest as TodoTest - --- A subset of the `ComparisonSummary` type in `Performance.Setup.Measure` -type Snapshot = - { componentAverage :: PerformanceSummary - , hookAverage :: PerformanceSummary - , dekuAverage :: PerformanceSummary - } - -decodeSnapshot :: Json -> Either JsonDecodeError Snapshot -decodeSnapshot = decodeJson - -snapshots :: { state :: Snapshot, todo :: Snapshot } -snapshots = fromRight' (\_ -> unsafeThrow "expected Right") do - state <- decodeJson StateTest.result - todo <- decodeJson TodoTest.result - pure { state, todo } - -type Percent = String - -formatPercent :: Int -> String -formatPercent percent = show percent <> "%" - -percentChange - :: PerformanceSummary - -> PerformanceSummary - -> { averageFPS :: Percent - , averageHeap :: Percent - , peakHeap :: Percent - , scriptTime :: Percent - } -percentChange value1 value2 = do - let - change new old = do - let - newN = toNumber new - oldN = toNumber old - formatPercent $ Int.round (((newN - oldN) / oldN) * 100.0) - { averageFPS: - change value1.averageFPS value2.averageFPS - , averageHeap: - change (unwrap value1.averageHeap) (unwrap value2.averageHeap) - , peakHeap: - change (unwrap value1.peakHeap) (unwrap value2.peakHeap) - , scriptTime: - change (unwrap value1.scriptTime) (unwrap value2.scriptTime) - } diff --git a/deku/test/Performance/Snapshot/StateTest.js b/deku/test/Performance/Snapshot/StateTest.js deleted file mode 100644 index ec9f49ac..00000000 --- a/deku/test/Performance/Snapshot/StateTest.js +++ /dev/null @@ -1,23 +0,0 @@ -export const result = { - "hookAverage": { - "totalTime": "170ms", - "scriptTime": "120ms", - "peakHeap": "2235kb", - "averageHeap": "958kb", - "averageFPS": 15 - }, - "dekuAverage": { - "totalTime": "71ms", - "scriptTime": "18ms", - "peakHeap": "894kb", - "averageHeap": "392kb", - "averageFPS": 143 - }, - "componentAverage": { - "totalTime": "105ms", - "scriptTime": "58ms", - "peakHeap": "1286kb", - "averageHeap": "439kb", - "averageFPS": 33 - } -} \ No newline at end of file diff --git a/deku/test/Performance/Snapshot/StateTest.purs b/deku/test/Performance/Snapshot/StateTest.purs deleted file mode 100644 index db84885f..00000000 --- a/deku/test/Performance/Snapshot/StateTest.purs +++ /dev/null @@ -1,7 +0,0 @@ -{- AUTOMATICALLY GENERATED, DO NOT EDIT -} - -module Performance.Snapshot.StateTest where - -import Data.Argonaut.Core (Json) - -foreign import result :: Json diff --git a/deku/test/Performance/Snapshot/TodoTest.js b/deku/test/Performance/Snapshot/TodoTest.js deleted file mode 100644 index 1d77b5c4..00000000 --- a/deku/test/Performance/Snapshot/TodoTest.js +++ /dev/null @@ -1,23 +0,0 @@ -export const result = { - "hookAverage": { - "totalTime": "759ms", - "scriptTime": "555ms", - "peakHeap": "14458kb", - "averageHeap": "7334kb", - "averageFPS": 16 - }, - "dekuAverage": { - "totalTime": "344ms", - "scriptTime": "147ms", - "peakHeap": "6700kb", - "averageHeap": "4217kb", - "averageFPS": 30 - }, - "componentAverage": { - "totalTime": "630ms", - "scriptTime": "416ms", - "peakHeap": "12781kb", - "averageHeap": "6652kb", - "averageFPS": 19 - } -} \ No newline at end of file diff --git a/deku/test/Performance/Snapshot/TodoTest.purs b/deku/test/Performance/Snapshot/TodoTest.purs deleted file mode 100644 index aa426b87..00000000 --- a/deku/test/Performance/Snapshot/TodoTest.purs +++ /dev/null @@ -1,7 +0,0 @@ -{- AUTOMATICALLY GENERATED, DO NOT EDIT -} - -module Performance.Snapshot.TodoTest where - -import Data.Argonaut.Core (Json) - -foreign import result :: Json diff --git a/deku/test/Performance/Snapshot/Write.purs b/deku/test/Performance/Snapshot/Write.purs deleted file mode 100644 index 133fff49..00000000 --- a/deku/test/Performance/Snapshot/Write.purs +++ /dev/null @@ -1,76 +0,0 @@ -module Performance.Snapshot.Write where - -import Prelude hiding (compare) - -import Data.Argonaut.Core (stringifyWithIndent) -import Data.Argonaut.Encode (encodeJson) -import Data.Foldable (fold) -import Effect (Effect) -import Effect.Aff (bracket, launchAff_) -import Effect.Class (liftEffect) -import Effect.Class.Console as Console -import Effect.Exception (catchException) -import Node.Encoding (Encoding(..)) -import Node.FS.Sync (mkdir, writeTextFile) -import Performance.Setup.Measure (TestType(..), compare) -import Performance.Setup.Puppeteer as Puppeteer -import Performance.Snapshot (Snapshot) - -main :: Effect Unit -main = launchAff_ do - bracket (Puppeteer.launch { headless: true }) Puppeteer.closeBrowser - \browser -> do - liftEffect do - Puppeteer.filterConsole - catchException mempty (mkdir "test-results") - - Console.log "Running state tests..." - state <- compare browser 6 StateTest - liftEffect do - writeSnapshot StateTest - { componentAverage: state.componentAverage - , hookAverage: state.hookAverage - , dekuAverage: state.dekuAverage - } - - Console.log "Running todo tests..." - todo <- compare browser 6 TodoTest - liftEffect do - writeSnapshot TodoTest - { componentAverage: todo.componentAverage - , hookAverage: todo.hookAverage - , dekuAverage: todo.dekuAverage - } - - Console.log "Done with snapshots!" - where - writeSnapshot :: TestType -> Snapshot -> Effect Unit - writeSnapshot test snapshot = do - writeTextFile UTF8 snapshotPath.js (snapshotTemplate snapshot) - writeTextFile UTF8 snapshotPath.purs snapshotPursTemplate - - where - moduleName = testTypeToModule test - - snapshotPath = do - let path = "test/Performance/Snapshot/" <> moduleName - { purs: path <> ".purs", js: path <> ".js" } - - snapshotPursTemplate = - fold - [ "{- AUTOMATICALLY GENERATED, DO NOT EDIT -}\n" - , "\n" - , "module Performance.Snapshot." <> moduleName <> " where\n" - , "\n" - , "import Data.Argonaut.Core (Json)\n" - , "\n" - , "foreign import result :: Json\n" - ] - - snapshotTemplate results = - "export const result = " <> stringifyWithIndent 2 (encodeJson results) - -testTypeToModule :: TestType -> String -testTypeToModule = case _ of - StateTest -> "StateTest" - TodoTest -> "TodoTest" diff --git a/deku/test/Performance/Test/App.purs b/deku/test/Performance/Test/App.purs deleted file mode 100644 index a64728a1..00000000 --- a/deku/test/Performance/Test/App.purs +++ /dev/null @@ -1,105 +0,0 @@ -module Performance.Test.App where - -import Prelude - -import Effect (Effect) -import Effect.Aff (launchAff_) -import Effect.Aff.Class (class MonadAff) -import Halogen as H -import Halogen.Aff.Util as HA -import Halogen.HTML as HH -import Halogen.HTML.Events as HE -import Halogen.HTML.Properties as HP -import Halogen.VDom.Driver (runUI) -import Performance.Test.State.Deku as State.Deku -import Performance.Test.State.Component as State.Component -import Performance.Test.State.Hook as State.Hook -import Performance.Test.Types (Test(..), completedSuffix, testToString) -import Performance.Test.Todo.Component as Todo.Component -import Performance.Test.Todo.Hook as Todo.Hook -import Performance.Test.Todo.Deku as Todo.Deku - -main :: Effect Unit -main = launchAff_ do - body <- HA.awaitBody - void $ runUI container unit body - -data TestState - = NotStarted - | Running Test - | Completed Test - -derive instance Eq TestState - -data Action = HandleStartTest Test | HandleTestComplete Test - -container :: forall q i o m. MonadAff m => H.Component q i o m -container = H.mkComponent - { initialState: \_ -> NotStarted - , render - , eval: H.mkEval $ H.defaultEval { handleAction = handleAction } - } - where - -- Used by Puppeteer to mount a test into the page so that it can be started - testAction test = do - let test' = testToString test - HH.button [ HP.id test', HE.onClick \_ -> HandleStartTest test ] - [ HH.text test' ] - - handleComplete test = - const (HandleTestComplete test) - - render state = do - HH.div_ - [ HH.div_ - [ -- Used by Puppeteer to trigger a test to be mounted into the page - testAction StateHook - , testAction StateComponent - , testAction StateDeku - , testAction TodoHook - , testAction TodoComponent - , testAction TodoDeku - - , case state of - NotStarted -> - HH.text "" - - Running StateHook -> - HH.slot State.Hook._stateHook unit State.Hook.component unit - (handleComplete StateHook) - - Running StateComponent -> - HH.slot State.Component._stateComponent unit - State.Component.component - unit - (handleComplete StateComponent) - - Running StateDeku -> - HH.slot State.Deku._stateDeku unit State.Deku.component unit - (handleComplete StateDeku) - - Running TodoHook -> - HH.slot Todo.Hook._todoHook unit Todo.Hook.container unit - (handleComplete TodoHook) - - Running TodoComponent -> - HH.slot Todo.Component._todoComponent unit - Todo.Component.container - unit - (handleComplete TodoComponent) - - Running TodoDeku -> - HH.slot Todo.Deku._todoDeku unit Todo.Deku.container unit - (handleComplete TodoDeku) - - Completed test -> - HH.div [ HP.id (testToString test <> completedSuffix) ] [] - ] - ] - - handleAction = case _ of - HandleStartTest test -> - H.put (Running test) - - HandleTestComplete test -> - H.put (Completed test) diff --git a/deku/test/Performance/Test/State/Component.purs b/deku/test/Performance/Test/State/Component.purs deleted file mode 100644 index c03e9716..00000000 --- a/deku/test/Performance/Test/State/Component.purs +++ /dev/null @@ -1,44 +0,0 @@ -module Performance.Test.State.Component where - -import Prelude - -import Data.Array.NonEmpty (replicate) -import Data.Foldable (sequence_) - -import Halogen as H -import Halogen.HTML as HH -import Halogen.HTML.Events as HE -import Halogen.HTML.Properties as HP -import Performance.Test.State.Shared (Output(..), stateUpdates) -import Performance.Test.Types (Test(..), startSuffix, testToString) -import Type.Proxy (Proxy(..)) - -_stateComponent = Proxy :: Proxy "stateComponent" - -data Action = RunState - -component :: forall q i m. H.Component q i Output m -component = - H.mkComponent - { initialState: \_ -> { n: 0, n1: 0, n2: 0, n3: 0, n4: 0 } - , render - , eval: H.mkEval $ H.defaultEval { handleAction = handleAction } - } - where - render state = - HH.div_ - [ HH.button - [ HP.id (testToString StateComponent <> startSuffix) - , HE.onClick \_ -> RunState - ] - [ HH.text "Start Test" ] - , HH.text $ show state - ] - - handleAction RunState = do - sequence_ $ replicate stateUpdates $ H.modify_ \s -> s { n = s.n + 1 } - sequence_ $ replicate stateUpdates $ H.modify_ \s -> s { n1 = s.n1 + 1 } - sequence_ $ replicate stateUpdates $ H.modify_ \s -> s { n2 = s.n2 + 1 } - sequence_ $ replicate stateUpdates $ H.modify_ \s -> s { n3 = s.n3 + 1 } - sequence_ $ replicate stateUpdates $ H.modify_ \s -> s { n4 = s.n4 + 1 } - H.raise Done diff --git a/deku/test/Performance/Test/State/Deku.purs b/deku/test/Performance/Test/State/Deku.purs deleted file mode 100644 index 869c6a21..00000000 --- a/deku/test/Performance/Test/State/Deku.purs +++ /dev/null @@ -1,95 +0,0 @@ -module Performance.Test.State.Deku where - -import Prelude - -import Control.Alt ((<|>)) -import Data.Array.NonEmpty (replicate) -import Data.Foldable (sequence_, traverse_) -import Data.Maybe (Maybe(..)) -import Deku.Core (Nut, bussed) -import Deku.DOM as D -import Deku.DOM.Attributes as DA -import Deku.DOM.Listeners as DL -import Deku.Toplevel (runInElement') -import Effect (Effect) -import Effect.Class (class MonadEffect) -import Effect.Ref as Ref -import Halogen as H -import Halogen.HTML as HH -import Halogen.HTML.Properties as HP -import Halogen.Subscription as HS -import Performance.Test.State.Shared (Output(..), stateUpdates) -import Performance.Test.Types (Test(..), startSuffix, testToString) -import Type.Proxy (Proxy(..)) -import Web.HTML.HTMLElement (toElement) - -stateUpdates' :: Int -stateUpdates' = stateUpdates - -_stateDeku = Proxy :: Proxy "stateDeku" - -data Action = MarkEnd | Initialize - -component :: forall q i m. MonadEffect m => H.Component q i Output m -component = - H.mkComponent - { initialState: \_ -> { unsub: pure unit } - , render - , eval: H.mkEval $ H.defaultEval - { initialize = Just Initialize, handleAction = handleAction } - } - where - render _ = - HH.div [ HP.ref (H.RefLabel "container") ] [] - - handleAction MarkEnd = do - { unsub } <- H.get - H.liftEffect unsub - H.raise Done - handleAction Initialize = do - H.getHTMLElementRef (H.RefLabel "container") >>= traverse_ \el → do - { emitter, listener } <- H.liftEffect $ HS.create - void $ H.subscribe emitter - unsub <- H.liftEffect do - (runInElement' (toElement el) (scene (HS.notify listener MarkEnd))) - H.modify_ _ { unsub = unsub } - pure unit - -type State = { n :: Int, n1 :: Int, n2 :: Int, n3 :: Int, n4 :: Int } - -scene - :: Effect Unit - -> Nut -scene notifyEnd = - ( bussed \setState state' -> - let - stateE = state' <|> pure { n: 0, n1: 0, n2: 0, n3: 0, n4: 0 } - in - ( D.div_ - [ D.button - [ DA.id_ (testToString StateDeku <> startSuffix) - , DL.click $ stateE <#> \state _ -> do - ref <- Ref.new state - let modify = flip Ref.modify ref - sequence_ $ replicate stateUpdates' $ modify - (\s -> s { n = s.n + 1 }) - sequence_ $ replicate stateUpdates' $ modify \s -> - s - { n1 = s.n1 + 1 } - sequence_ $ replicate stateUpdates' $ modify \s -> - s - { n2 = s.n2 + 1 } - sequence_ $ replicate stateUpdates' $ modify \s -> - s - { n3 = s.n3 + 1 } - sequence_ $ replicate stateUpdates' $ modify \s -> - s - { n4 = s.n4 + 1 } - Ref.read ref >>= setState - notifyEnd - ] - [ D.text_ "Start Test" ] - , D.text (show <$> stateE) - ] - ) - ) \ No newline at end of file diff --git a/deku/test/Performance/Test/State/Hook.purs b/deku/test/Performance/Test/State/Hook.purs deleted file mode 100644 index 78f171be..00000000 --- a/deku/test/Performance/Test/State/Hook.purs +++ /dev/null @@ -1,46 +0,0 @@ -module Performance.Test.State.Hook where - -import Prelude - -import Data.Array (replicate) -import Data.Foldable (sequence_) -import Data.Tuple.Nested ((/\)) -import Effect.Aff.Class (class MonadAff) -import Halogen as H -import Halogen.HTML as HH -import Halogen.HTML.Events as HE -import Halogen.HTML.Properties as HP -import Halogen.Hooks as Hooks -import Performance.Test.State.Shared (Output(..), stateUpdates) -import Performance.Test.Types (Test(..), startSuffix, testToString) -import Type.Proxy (Proxy(..)) - -_stateHook = Proxy :: Proxy "stateHook" - -component :: forall q i m. MonadAff m => H.Component q i Output m -component = Hooks.memoComponent (\_ _ -> false) \{ outputToken } _ -> Hooks.do - n /\ nId <- Hooks.useState { n: 0, n1: 0, n2: 0, n3: 0, n4: 0 } - - let - runState = do - sequence_ $ replicate stateUpdates $ Hooks.modify_ nId \s -> s - { n = s.n + 1 } - sequence_ $ replicate stateUpdates $ Hooks.modify_ nId \s -> s - { n1 = s.n1 + 1 } - sequence_ $ replicate stateUpdates $ Hooks.modify_ nId \s -> s - { n2 = s.n2 + 1 } - sequence_ $ replicate stateUpdates $ Hooks.modify_ nId \s -> s - { n3 = s.n3 + 1 } - sequence_ $ replicate stateUpdates $ Hooks.modify_ nId \s -> s - { n4 = s.n4 + 1 } - Hooks.raise outputToken Done - - Hooks.pure do - HH.div_ - [ HH.button - [ HP.id (testToString StateHook <> startSuffix) - , HE.onClick \_ -> runState - ] - [ HH.text "Start Test" ] - , HH.text $ show n - ] diff --git a/deku/test/Performance/Test/State/README.md b/deku/test/Performance/Test/State/README.md deleted file mode 100644 index a80953c0..00000000 --- a/deku/test/Performance/Test/State/README.md +++ /dev/null @@ -1,9 +0,0 @@ -# Performance Test: State - -This test measures Hooks overhead by comparing a component and a Hooks-based component which update state several hundred times in response to a click. This test isn't particularly useful on its own; if Hooks add a half millisecond per render + Hooks evaluation, then several hundred updates in a row will add significantly to its execution time. Of course, you would never ever do this in the real world. - -It's still useful as a small sanity check when testing changes -- the Hooks version should not be much slower than the regular component version, though it may use more heap as it stores slightly more state. - -## Mike's note - -As Deku's monadic context is `Effect`, there's no instance of `modify`. I've used an approximation via `Ref`. diff --git a/deku/test/Performance/Test/State/Shared.purs b/deku/test/Performance/Test/State/Shared.purs deleted file mode 100644 index 49fdb694..00000000 --- a/deku/test/Performance/Test/State/Shared.purs +++ /dev/null @@ -1,11 +0,0 @@ -module Performance.Test.State.Shared where - -import Prelude - -import Halogen as H - -type Slot id = forall q. H.Slot q Void id - -data Output = Done - -stateUpdates = 50 :: Int diff --git a/deku/test/Performance/Test/Todo/Component.purs b/deku/test/Performance/Test/Todo/Component.purs deleted file mode 100644 index 90460ed9..00000000 --- a/deku/test/Performance/Test/Todo/Component.purs +++ /dev/null @@ -1,223 +0,0 @@ -module Performance.Test.Todo.Component where - -import Prelude - -import Data.Array (cons, drop, filter, head, zip) -import Data.Foldable (for_) -import Data.Maybe (Maybe(..)) -import Data.Set as Set -import Data.Tuple.Nested ((/\)) -import Effect.Aff.Class (class MonadAff) -import Halogen (liftEffect) -import Halogen as H -import Halogen.HTML as HH -import Halogen.HTML.Events as HE -import Halogen.HTML.Properties as HP -import Performance.Test.Todo.Shared (CheckboxInput, CheckboxOutput(..), TodoInput, TodoOutput(..)) -import Performance.Test.Todo.Shared as Shared -import Type.Proxy (Proxy(..)) - -_todoComponent = Proxy :: Proxy "todoComponent" - -data ContainerAction - = Initialize - | HandleTodo TodoOutput - | HandleUndo - | AddNew - -data UndoAction - = UndoRename Int String - | UndoAdd Int - | UndoCompleted Int Boolean - -container :: forall q i o m. MonadAff m => H.Component q i o m -container = - H.mkComponent - { initialState: \_ -> - { state: Shared.initialContainerState - , undos: [] - , clearUndo: false - } - , render - , eval: H.mkEval $ H.defaultEval - { handleAction = handleAction, initialize = Just Initialize } - } - where - handleAction = case _ of - Initialize -> do - state <- H.gets _.state - filled <- liftEffect $ Shared.fillContainerState state - H.modify_ (_ { state = filled }) - - HandleUndo -> do - undos <- H.gets _.undos - H.modify_ (_ { clearUndo = true, undos = drop 1 undos }) - case head undos of - Just (UndoRename i t) -> H.modify_ - ( \s -> s - { state - { todos = map - (\x -> if x.id == i then x { description = t } else x) - s.state.todos - } - } - ) - Just (UndoAdd i) -> H.modify_ - (\s -> s { state { todos = filter (\x -> x.id /= i) s.state.todos } }) - Just (UndoCompleted i c) -> H.modify_ - ( \s -> s - { state - { completed = (if c then Set.insert else Set.delete) i - s.state.completed - } - } - ) - Nothing -> pure unit - - HandleTodo msg -> do - clearUndo <- H.gets _.clearUndo - when clearUndo $ H.modify_ (_ { undos = [] }) - H.modify_ (_ { clearUndo = false }) - case msg of - Save t -> do - state <- H.gets _.state - for_ (Shared.updateTodo t state.todos) \todos -> do - -- zip and update - for_ (zip state.todos todos) \(a /\ b) -> do - when (a.description /= b.description) do - H.modify_ - ( \x -> x - { undos = cons (UndoRename a.id a.description) x.undos } - ) - H.modify_ _ { state { todos = todos } } - - SetCompleted id complete -> do - H.modify_ \s -> s - { state - { completed = (if complete then Set.insert else Set.delete) id - s.state.completed - } - , undos = cons (UndoCompleted id (not complete)) s.undos - } - - AddNew -> do - state <- H.gets _.state - newState <- liftEffect $ Shared.createTodo state - H.modify_ (_ { state = newState }) - - render { state } = do - let - todos = state.todos <#> \t -> - HH.slot Shared._todo t.id todo { todo: t, completed: state.completed } - HandleTodo - - HH.div_ - [ HH.button - [ HP.id Shared.addNewId - , HE.onClick \_ -> AddNew - ] - [ HH.text "Add New" ] - , HH.button - [ HP.id Shared.undoId - , HE.onClick \_ -> HandleUndo - ] - [ HH.text "Undo" ] - , HH.div - [ HP.id Shared.todosId ] - todos - ] - -data TodoAction - = ReceiveTodoInput TodoInput - | UpdateDescription String - | SaveUpdate - | HandleCheckbox CheckboxOutput - -todo :: forall q m. MonadAff m => H.Component q TodoInput TodoOutput m -todo = H.mkComponent - { initialState: \x -> { todo: x.todo, completed: x.completed, dirty: false } - , render - , eval: H.mkEval $ H.defaultEval - { handleAction = handleAction, receive = Just <<< ReceiveTodoInput } - } - where - handleAction = case _ of - ReceiveTodoInput input -> do - state <- H.get - unless - ( state.todo.id == input.todo.id && state.completed == input.completed - && state.todo.description == input.todo.description - ) - do - when - ( state.todo.description /= input.todo.description && not - state.dirty - ) - do - H.modify_ \st -> st - { todo - { id = input.todo.id - , description = input.todo.description - } - } - H.modify_ \st -> st - { todo - { id = input.todo.id - } - , completed = input.completed - } - - UpdateDescription str -> do - H.modify_ _ { todo { description = str }, dirty = true } - - SaveUpdate -> do - state <- H.get - H.modify_ _ { dirty = false } - H.raise $ Save { id: state.todo.id, description: state.todo.description } - - HandleCheckbox (Check checked) -> do - state <- H.get - H.raise $ SetCompleted state.todo.id checked - - render state = - HH.div_ - [ HH.input - [ HP.id (Shared.editId state.todo.id) - , HE.onValueInput UpdateDescription - , HP.value state.todo.description - ] - , HH.slot Shared._checkbox unit checkbox - { id: state.todo.id, completed: state.completed } - HandleCheckbox - , HH.button - [ HP.id (Shared.saveId state.todo.id) - , HE.onClick \_ -> SaveUpdate - ] - [ HH.text "Save Changes" ] - ] - -data CheckboxAction = ReceiveCheckboxInput CheckboxInput | HandleCheck Boolean - -checkbox - :: forall q m. MonadAff m => H.Component q CheckboxInput CheckboxOutput m -checkbox = H.mkComponent - { initialState: identity - , render - , eval: H.mkEval $ H.defaultEval - { handleAction = handleAction, receive = Just <<< ReceiveCheckboxInput } - } - where - handleAction = case _ of - ReceiveCheckboxInput input -> - H.put input - - HandleCheck checked -> - H.raise $ Check checked - - render state = - HH.input - [ HP.id (Shared.checkId state.id) - , HP.checked $ Set.member state.id state.completed - , HP.type_ HP.InputCheckbox - , HE.onChecked HandleCheck - ] diff --git a/deku/test/Performance/Test/Todo/Deku.purs b/deku/test/Performance/Test/Todo/Deku.purs deleted file mode 100644 index 9cec3707..00000000 --- a/deku/test/Performance/Test/Todo/Deku.purs +++ /dev/null @@ -1,219 +0,0 @@ -module Performance.Test.Todo.Deku where - -import Prelude - -import Control.Alt ((<|>)) -import Data.Array (cons, drop, head, length, reverse, takeEnd) -import Data.Filterable (filter) -import Data.Foldable (for_, oneOfMap, traverse_) -import Data.Maybe (Maybe(..)) -import Data.Set as Set -import Data.Tuple (snd) -import Data.Tuple.Nested ((/\)) -import Deku.Control (text_) -import Deku.Core (Nut, dyn, bussedUncurried, insert_, remove) -import Deku.DOM as D -import Deku.DOM.Attributes as DA -import Deku.DOM.Listeners as DL -import Deku.Do as Deku -import Deku.Hooks (useMailboxed, useMemoized, useMemoized', useState') -import Deku.Toplevel (runInElement') -import Effect (Effect) -import Effect.Class (class MonadEffect) -import FRP.Event (Event, fold, keepLatest, mapAccum) -import Halogen (liftEffect) -import Halogen as H -import Halogen.HTML as HH -import Halogen.HTML.Properties as HP -import Performance.Test.Todo.Shared as Shared -import Type.Proxy (Proxy(..)) -import Web.HTML.HTMLElement (toElement) - -_todoDeku = Proxy :: Proxy "todoDeku" - -data ContainerAction = Initialize - -data UndoAction - = UndoRename Int String - | UndoAdd Int - | UndoCompleted Int Boolean - -data UndoStack = PushUndo UndoAction | PopUndo - -container :: forall q i o m. MonadEffect m => H.Component q i o m -container = - H.mkComponent - { initialState: \_ -> { unsub: pure unit } - , render - , eval: H.mkEval $ H.defaultEval - { initialize = Just Initialize, handleAction = handleAction } - } - where - render _ = - HH.div [ HP.ref (H.RefLabel "container") ] [] - - handleAction Initialize = do - H.getHTMLElementRef (H.RefLabel "container") >>= traverse_ \el → do - unsub <- H.liftEffect do - filled <- Shared.fillContainerState Shared.initialContainerState - runInElement' (toElement el) (containerD filled) - H.modify_ _ { unsub = unsub } - pure unit - -containerD - :: Shared.ContainerState - -> Nut -containerD initialState = Deku.do - setCompleteStatus /\ completeStatus <- useMailboxed - setRename /\ rename <- useMailboxed - setDelete /\ delete <- useMailboxed - setState /\ state' <- useState' - state <- useMemoized do - let istate = initialState - (fold (#) istate state') <|> pure istate - setUndo /\ undos <- useMemoized' \undo' -> do - let initialUndos = map (_.id >>> UndoAdd) (reverse initialState.todos) - ( pure initialUndos <|> map snd - ( fold - ( \(x /\ y) -> case _ of - PushUndo u -> (x + 1) /\ - if x == 0 then [ u ] else cons u y - PopUndo -> 0 /\ drop 1 y - ) - (1 /\ initialUndos) - undo' - ) - ) - let - toDyn = keepLatest - ( map - (\s -> oneOfMap pure (takeEnd s.nAdded s.state.todos)) - ( mapAccum - ( \i s -> do - let l = length s.todos - l /\ { state: s, nAdded: max 0 (l - i) } - ) - 0 - state - ) - ) - updateNameAt id n = setState - ( \x -> x - { todos = map - (\y -> if y.id == id then y { description = n } else y) - x.todos - } - ) - D.div_ - [ D.button - [ DA.id_ Shared.addNewId - , DL.runOn DL.click $ state <#> \st -> do - newState <- liftEffect $ Shared.createTodo st - setUndo (PushUndo (UndoAdd newState.lastIndex)) - setState - ( const newState - ) - ] - [ text_ "Add New" ] - , D.button - [ DA.id_ Shared.undoId - , DL.runOn DL.click $ undos <#> \uu -> - for_ (head uu) \u -> do - case u of - UndoRename id s -> do - updateNameAt id s - setRename { address: id, payload: s } - pure unit - UndoAdd id -> do - setState - ( \x -> x - { todos = filter - ( \y -> y.id /= id - ) - x.todos - } - ) - setDelete { address: id, payload: unit } - UndoCompleted id cs -> do - setState - ( \x -> x - { completed = - (if cs then Set.insert else Set.delete) id - x.completed - } - ) - setCompleteStatus { address: id, payload: cs } - setUndo PopUndo - ] - [ text_ "Undo" ] - , D.div [ DA.id_ Shared.todosId ] - [ dyn - ( toDyn # map - \td -> do - let - addCheckedToUndoStack cs = setUndo - (PushUndo (UndoCompleted td.id cs)) - addOldNameToUndoStack n = setUndo - (PushUndo (UndoRename td.id n)) - renameAction n = do - updateNameAt td.id n - addOldNameToUndoStack n - checkedAction cs = do - setState - ( \x -> x - { completed = - (if cs then Set.insert else Set.delete) - td.id - x.completed - } - ) - addCheckedToUndoStack (not cs) - pure - ( insert_ $ todoD td (completeStatus td.id) (rename td.id) - renameAction - checkedAction - ) <|> (delete td.id $> remove) - ) - ] - ] - -todoD - :: { id :: Int, description :: String } - -> Event Boolean - -> Event String - -> (String -> Effect Unit) - -> (Boolean -> Effect Unit) - -> Nut -todoD { id, description } completeStatus newName doEditName doChecked = Deku.do - setName /\ name' <- bussedUncurried - let name = name' <|> pure description - D.div_ - [ D.input - [ DA.id_ $ Shared.editId id - , DA.value $ pure description <|> newName - , DL.runOn DL.input $ name <#> setName ] - [] - - , checkboxD { id } completeStatus doChecked - , D.button - [ DA.id_ $ Shared.saveId id - , DL.runOn DL.click (name <#> doEditName) - ] - [ text_ "Save Changes" ] - ] - -checkboxD - :: { id :: Int } - -> Event Boolean - -> (Boolean -> Effect Unit) - -> Nut -checkboxD { id } completeStatus doChecked = Deku.do - localSetChecked /\ localChecked <- bussedUncurried - let checked = pure true <|> completeStatus - D.input - [ DA.id_ (Shared.checkId id) - , DA.xtype_ "checkbox" - , DA.checked $ completeStatus <#> show - , DL.input $ (checked <|> localChecked) <#> (\x _ -> doChecked x *> localSetChecked (not x)) - ] - [] diff --git a/deku/test/Performance/Test/Todo/Hook.purs b/deku/test/Performance/Test/Todo/Hook.purs deleted file mode 100644 index 16c09ba7..00000000 --- a/deku/test/Performance/Test/Todo/Hook.purs +++ /dev/null @@ -1,152 +0,0 @@ -module Performance.Test.Todo.Hook where - -import Prelude - -import Data.Array (cons, drop, head, zip) -import Data.Filterable (filter) -import Data.Foldable (for_) -import Data.Function (on) -import Data.Maybe (Maybe(..), maybe) -import Data.Set as Set -import Data.Tuple.Nested ((/\)) -import Effect.Aff.Class (class MonadAff) -import Halogen (liftEffect) -import Halogen as H -import Halogen.HTML as HH -import Halogen.HTML.Events as HE -import Halogen.HTML.Properties as HP -import Halogen.Hooks as Hooks -import Performance.Test.Todo.Shared (CheckboxInput, CheckboxOutput(..), TodoInput, TodoOutput(..)) -import Performance.Test.Todo.Shared as Shared -import Type.Proxy (Proxy(..)) - -_todoHook = Proxy :: Proxy "todoHook" - -data UndoAction - = UndoRename Int String - | UndoAdd Int - | UndoCompleted Int Boolean - -container :: forall q i o m. MonadAff m => H.Component q i o m -container = Hooks.component \_ _ -> Hooks.do - state /\ stateId <- Hooks.useState Shared.initialContainerState - undos /\ undosId <- Hooks.useState [] - clearUndo /\ clearUndoId <- Hooks.useState false - - let - handleTodo i = do - when clearUndo $ Hooks.put undosId [] - case i of - Save t -> do - for_ (Shared.updateTodo t state.todos) \todos -> do - for_ (zip state.todos todos) \(a /\ b) -> do - when (a.description /= b.description) do - Hooks.modify_ undosId (cons (UndoRename a.id a.description)) - - Hooks.modify_ stateId _ { todos = todos } - - SetCompleted id complete -> do - if complete then - Hooks.modify_ stateId _ - { completed = Set.insert id state.completed } - else - Hooks.modify_ stateId _ - { completed = Set.delete id state.completed } - Hooks.modify_ undosId (cons (UndoCompleted id (not complete))) - - Hooks.useLifecycleEffect do - filled <- liftEffect $ Shared.fillContainerState state - Hooks.put stateId filled - pure Nothing - - Hooks.pure do - let - todos = state.todos <#> \t -> - HH.slot Shared._todo t.id todo { todo: t, completed: state.completed } - handleTodo - - HH.div_ - [ HH.button - [ HP.id Shared.addNewId - , HE.onClick \_ -> do - newState <- liftEffect $ Shared.createTodo state - Hooks.put stateId newState - ] - [ HH.text "Add New" ] - , HH.button - [ HP.id Shared.undoId - , HE.onClick \_ -> do - Hooks.put clearUndoId true - Hooks.modify_ undosId (drop 1) - case head undos of - Just (UndoRename i t) -> Hooks.modify_ stateId - ( \s -> s - { todos = map - (\x -> if x.id == i then x { description = t } else x) - s.todos - } - - ) - Just (UndoAdd i) -> Hooks.modify_ stateId - (\s -> s { todos = filter (\x -> x.id /= i) s.todos }) - Just (UndoCompleted i c) -> Hooks.modify_ stateId - ( \s -> s - { completed = (if c then Set.insert else Set.delete) i - s.completed - } - ) - Nothing -> pure unit - ] - [ HH.text "Undo" ] - , HH.div - [ HP.id Shared.todosId ] - todos - ] - -todo :: forall q m. MonadAff m => H.Component q TodoInput TodoOutput m -todo = Hooks.memoComponent - (eq `on` _.todo.id && eq `on` _.completed && eq `on` _.todo.description) - \{ outputToken } input -> Hooks.do - dirty /\ dirtyId <- Hooks.useState false - description' /\ descriptionId <- Hooks.useState Nothing - - let - description = maybe input.todo.description - (if dirty then _ else input.todo.description) - description' - handleCheckbox (Check bool) = do - Hooks.raise outputToken $ SetCompleted input.todo.id bool - - Hooks.pure do - HH.div_ - [ HH.input - [ HP.id (Shared.editId input.todo.id) - , HE.onValueInput \i -> do - Hooks.put descriptionId (Just i) - Hooks.put dirtyId true - , HP.value description - ] - , HH.slot Shared._checkbox unit checkbox - { id: input.todo.id, completed: input.completed } - handleCheckbox - , HH.button - [ HP.id (Shared.saveId input.todo.id) - , HE.onClick \_ -> do - Hooks.put dirtyId false - Hooks.raise outputToken $ Save - { id: input.todo.id, description } - ] - [ HH.text "Save Changes" ] - ] - -checkbox - :: forall q m. MonadAff m => H.Component q CheckboxInput CheckboxOutput m -checkbox = Hooks.component \{ outputToken } input -> Hooks.do - Hooks.pure do - HH.input - [ HP.id (Shared.checkId input.id) - , HP.checked $ Set.member input.id input.completed - , HP.type_ HP.InputCheckbox - , HE.onChecked \checked -> do - Hooks.raise outputToken $ Check checked - ] diff --git a/deku/test/Performance/Test/Todo/README.md b/deku/test/Performance/Test/Todo/README.md deleted file mode 100644 index f66bd655..00000000 --- a/deku/test/Performance/Test/Todo/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Performance Test: Todo - -This test measures performance when nesting components several layers deep and updating from the root. It's intended to catch performance issues that would be relevant in the real world. - -Actions: - -- Add a new TODO -- Check and un-check a TODO -- Edit a TODO and save it - -## Mike's note - -Because of the way Deku `subgraph`-s work, a lot of the data-passing in the Halogen examples isn't necessary. I cut it out, which makes the example's design slightly different. That said, it does the same thing the others do. \ No newline at end of file diff --git a/deku/test/Performance/Test/Todo/Shared.purs b/deku/test/Performance/Test/Todo/Shared.purs deleted file mode 100644 index 695e50d2..00000000 --- a/deku/test/Performance/Test/Todo/Shared.purs +++ /dev/null @@ -1,114 +0,0 @@ -module Performance.Test.Todo.Shared where - -import Prelude - -import Data.Array as Array -import Data.Maybe (Maybe) -import Data.Set (Set) -import Data.Set as Set -import Effect (Effect) -import Effect.Random (randomInt) -import Halogen as H -import Partial.Unsafe (unsafePartial) -import Type.Proxy (Proxy(..)) - -data Query a = Run (Unit -> a) - -data TodoOutput = Save Todo | SetCompleted Int Boolean - -_todo = Proxy :: Proxy "todo" - -data CheckboxOutput = Check Boolean - -_checkbox = Proxy :: Proxy "checkbox" - -type Slot = H.Slot Query Void - -type ContainerState = - { todos :: Array Todo - , lastIndex :: Int - , completed :: Set Int - } - -initialContainerState :: ContainerState -initialContainerState = - { todos: [] - , lastIndex: 0 - , completed: Set.empty - } - -fillContainerState :: ContainerState -> Effect ContainerState -fillContainerState state = do - let lastIndex' = state.lastIndex + 100 - todos <- go state.lastIndex lastIndex' state.todos - pure $ state { todos = todos, lastIndex = lastIndex' } - where - go :: Int -> Int -> Array Todo -> Effect (Array Todo) - go n limit arr - | n == limit = pure arr - | otherwise = do - todo <- mkTodo n - go (n + 1) limit (Array.snoc arr todo) - -createTodo :: ContainerState -> Effect ContainerState -createTodo state = do - todo <- mkTodo (state.lastIndex + 1) - pure $ state { todos = Array.snoc state.todos todo, lastIndex = todo.id } - -type TodoInput = - { todo :: Todo - , completed :: Set Int - } - -type Todo = - { description :: String - , id :: Int - } - -mkTodo :: Int -> Effect Todo -mkTodo id = do - ix <- randomInt 0 9 - let description = unsafePartial (Array.unsafeIndex descriptions ix) - pure { description, id } - -updateTodo :: Todo -> Array Todo -> Maybe (Array Todo) -updateTodo todo todos = do - ix <- Array.findIndex (_.id >>> eq todo.id) todos - Array.updateAt ix todo todos - -descriptions :: Array String -descriptions = - [ "eat" - , "drink" - , "sleep" - , "party" - , "walk" - , "run" - , "hike" - , "play the drums" - , "cook" - , "chill" - ] - -addNewId :: String -addNewId = "add-new" - -undoId :: String -undoId = "undo" - -todosId :: String -todosId = "todos" - -editId :: Int -> String -editId id = "edit-" <> show id - -saveId :: Int -> String -saveId id = "save-" <> show id - -checkId :: Int -> String -checkId id = "check-" <> show id - -type CheckboxInput = - { id :: Int - , completed :: Set Int - } diff --git a/deku/test/Performance/Test/Types.purs b/deku/test/Performance/Test/Types.purs deleted file mode 100644 index c3028c0a..00000000 --- a/deku/test/Performance/Test/Types.purs +++ /dev/null @@ -1,27 +0,0 @@ -module Performance.Test.Types where - -import Prelude - -data Test - = StateHook - | StateComponent - | StateDeku - | TodoHook - | TodoComponent - | TodoDeku - -derive instance Eq Test -derive instance Ord Test - -testToString :: Test -> String -testToString = case _ of - StateHook -> "state-hook" - StateComponent -> "state-component" - StateDeku -> "state-deku" - TodoHook -> "todo-hook" - TodoComponent -> "todo-component" - TodoDeku -> "todo-deku" - --- Used by a test along with its string id to control test start / stop -startSuffix = "-start" :: String -completedSuffix = "-complete" :: String diff --git a/deku/test/Test/Main.js b/deku/test/Test/Main.js index 2b342174..190e6e3e 100644 --- a/deku/test/Test/Main.js +++ b/deku/test/Test/Main.js @@ -1 +1,9 @@ -export const hackyInnerHTML = (id) => (s) => () => document.getElementById(id).innerHTML = s \ No newline at end of file +export const hackyInnerHTML = (id) => (s) => () => document.getElementById(id).innerHTML = s + +export const doStateAssertionsForTests_ = (state) => (n) => () => { + if (Object.keys(state.units).length > n) { + console.error("State should be empty after tests"); + console.dir(state, {depth: null}) + throw new Error("State should be empty after tests") + } +} \ No newline at end of file diff --git a/deku/test/Test/Main.purs b/deku/test/Test/Main.purs index 4384485f..a29a7f95 100644 --- a/deku/test/Test/Main.purs +++ b/deku/test/Test/Main.purs @@ -6,32 +6,54 @@ import Control.Alt ((<|>)) import Control.Monad.ST.Global (Global) import Control.Monad.ST.Internal (ST) import Control.Plus (empty) -import Data.Array ((..)) -import Data.Filterable (filter) -import Data.Foldable (intercalate, oneOfMap) +import Data.Array (replicate, (!!), (..)) +import Data.Array as Array +import Data.Filterable (compact, filter) +import Data.Foldable (intercalate, for_, traverse_) +import Data.FunctorWithIndex (mapWithIndex) +import Data.Maybe (Maybe(..), fromMaybe, maybe) +import Data.Traversable (sequence) import Data.Tuple (Tuple(..), snd) import Data.Tuple.Nested (type (/\), (/\)) -import Deku.Control (blank, globalPortal1, portal1, switcher, text, text_, (<#~>)) +import Deku.Control (globalPortal1, portal1, text, text_) import Deku.Core (Hook, Nut, fixed) import Deku.DOM as D import Deku.DOM.Attributes as DA +import Deku.DOM.Combinators (injectElementT) import Deku.DOM.Listeners as DL import Deku.Do as Deku -import Deku.Hooks (useDyn, useDynAtBeginning, useDynAtEnd, useEffect, useMemoized, useRef, useState, useState') -import Deku.Lifecycle (onDidMount, onDismount, onWillMount) +import Deku.Hooks (dynOptions, guard, guardWith, useDyn, useDynWith, useDynAtBeginning, useDynAtEnd, useDynAtEndWith, useHot, useHotRant, useRant, useRef, useState, useState', (<#~>)) +import Deku.Hooks as DH +import Deku.Interpret (FFIDOMSnapshot) import Deku.Pursx ((~~)) import Deku.Toplevel (hydrate', runInBody', runSSR) import Effect (Effect) -import FRP.Event (Event, fold, mapAccum) +import Effect.Random (random, randomInt) +import FRP.Event (fold, mapAccum, folded, keepLatest, makeEvent, subscribe) +import FRP.Poll (Poll, poll, effectToPoll, merge, mergeMap) +import Record (union) import Type.Proxy (Proxy(..)) +import Web.HTML (window) +import Web.HTML.HTMLInputElement as InputElement +import Web.HTML.Window (alert) foreign import hackyInnerHTML :: String -> String -> Effect Unit - -runNoSSR :: Nut -> Effect (Effect Unit) -runNoSSR = runInBody' - -runWithSSR :: Nut -> Effect (Effect Unit) -runWithSSR = hydrate' +foreign import doStateAssertionsForTests_ + :: FFIDOMSnapshot -> Int -> Effect Unit + +runNoSSR :: Nut -> Int -> Effect (Effect Unit) +runNoSSR n i = do + x <- runInBody' n + pure do + ffi <- x + doStateAssertionsForTests_ ffi i + +runWithSSR :: Nut -> Int -> Effect (Effect Unit) +runWithSSR n i = do + x <- hydrate' n + pure do + ffi <- x + doStateAssertionsForTests_ ffi i ssr :: Nut -> ST Global String ssr i = pure "" <> runSSR i @@ -39,6 +61,11 @@ ssr i = pure "" <> runSSR i sanityCheck :: Nut sanityCheck = D.span [ DA.id_ "hello" ] [ text_ "Hello" ] +twoElements :: Nut +twoElements = Deku.do + D.div [ DA.id_ "maindiv" ] + [ D.div_ [ text_ "hello" ], D.div_ [ text_ "world" ] ] + elementsInCorrectOrder :: Nut elementsInCorrectOrder = do let @@ -63,7 +90,7 @@ elementsInCorrectOrder = do dynAppearsCorrectlyAtBeginning :: Nut dynAppearsCorrectlyAtBeginning = Deku.do let - counter :: forall a. Event a -> Event Int + counter :: forall a. Poll a -> Poll Int counter event = fold (\a _ -> a + 1) (-1) event setItem /\ item <- useState' D.div [ DA.id_ "div0" ] @@ -78,7 +105,7 @@ dynAppearsCorrectlyAtBeginning = Deku.do dynAppearsCorrectlyAtEnd :: Nut dynAppearsCorrectlyAtEnd = Deku.do let - counter :: forall a. Event a -> Event Int + counter :: forall a. Poll a -> Poll Int counter event = fold (\a _ -> a + 1) (-1) event setItem /\ item <- useState' D.div [ DA.id_ "div0" ] @@ -93,7 +120,7 @@ dynAppearsCorrectlyAtEnd = Deku.do deeplyNestedPreservesOrder :: Nut deeplyNestedPreservesOrder = Deku.do let - counter :: forall a. Event a -> Event Int + counter :: forall a. Poll a -> Poll Int counter event = fold (\a _ -> a + 1) (-1) event setItem /\ item <- useState' let @@ -125,8 +152,9 @@ sendsToPosition = Deku.do [ text_ "foo" , D.span [ DA.id_ "div1" ] [ text_ "bar" ] , Deku.do - { value: i, sendTo } <- useDynAtEnd (oneOfMap pure [ 0, 1, 2, 3, 4 ]) - useEffect (if i == 3 then posIdx else empty) sendTo + { value: i } <- + useDynAtEndWith (mergeMap pure [ 0, 1, 2, 3, 4 ]) + $ dynOptions { sendTo = \i -> if i == 3 then posIdx else empty } D.span [ DA.id_ ("dyn" <> show i) ] [ text_ (show i) ] , D.button [ DA.id_ "pos", DL.click_ \_ -> setPosIdx 1 ] [ text_ "send to pos" ] @@ -139,8 +167,9 @@ sendsToPositionFixed = Deku.do [ text_ "foo" , D.span [ DA.id_ "div1" ] [ text_ "bar" ] , Deku.do - { value: i, sendTo } <- useDynAtEnd (oneOfMap pure [ 0, 1, 2, 3, 4 ]) - useEffect (if i == 3 then posIdx else empty) sendTo + { value: i } <- + useDynAtEndWith (mergeMap pure [ 0, 1, 2, 3, 4 ]) + $ dynOptions { sendTo = \i -> if i == 3 then posIdx else empty } fixed [ D.span [ DA.id_ ("dyn" <> show i <> "a") ] [ text_ (show i <> "a") ] @@ -162,20 +191,20 @@ insertsAtCorrectPositions = D.div [ DA.id_ "div0" ] -- are inserted in the scrambled order so that they read -- 0-1-2-3-4 from top to bottom { value: i } <- useDyn - ((Tuple <*> identity) <$> oneOfMap pure [ 3, 0, 4, 2, 1 ]) + ((Tuple <*> identity) <$> mergeMap pure [ 3, 0, 4, 2, 1 ]) D.span [ DA.id_ ("dyn" <> show i) ] [ text_ (show i) ] ] switcherWorksForCompositionalElements :: Nut switcherWorksForCompositionalElements = Deku.do let - counter :: forall a. Event a -> Event Int + counter :: forall a. Poll a -> Poll Int counter event = fold (\a _ -> 1 + a) (-1) event setItem /\ item <- useState unit D.div [ DA.id_ "div0" ] [ text_ "foo" , D.span [ DA.id_ "div1" ] [ text_ "bar" ] - , counter item # switcher \i -> fixed + , counter item <#~> \i -> fixed ( [ 0, 1, 2 ] <#> \j -> D.span [ DA.id_ $ "id" <> show j ] [ text_ (show i <> "-" <> show j) ] ) @@ -194,7 +223,7 @@ tabbedNavigationWithPursx = Deku.do , D.button [ DA.id_ "contact-btn", DL.click_ \_ -> setItem 2 ] [ text_ "contact" ] ] - , item # switcher case _ of + , item <#~> case _ of 0 -> (Proxy :: _ "

home

") ~~ {} 1 -> (Proxy :: _ "

about ~me~

") ~~ { me: text_ "deku" } @@ -208,19 +237,13 @@ tabbedNavigationWithPursx = Deku.do portalsCompose :: Nut portalsCompose = Deku.do let - counter :: forall a. Event a -> Event Int - counter event = fold (\a _ -> a + 1) 0 event - setItem /\ item' <- useState' - item <- useMemoized (counter item' <|> pure 0) + counter :: forall a. Poll a -> Poll Int + counter event = fold (\a _ -> a + 1) (-1) event + setItem /\ item <- useState unit globalPortal1 (D.div_ [ text_ "a", D.span_ [ text_ "b" ], text_ "c" ]) \e -> do let - switchMe n = item # switcher - ( (_ `mod` 3) >>> case _ of - i - | i == n -> e - | otherwise -> blank - ) + switchMe n = guard (counter item <#> (_ `mod` 3) >>> eq n) e D.div [ DA.id_ "maindiv" ] [ D.div_ [ text_ "d0" ] , switchMe 0 @@ -235,31 +258,35 @@ portalsCompose = Deku.do globalPortalsRetainPortalnessWhenSentOutOfScope :: Nut globalPortalsRetainPortalnessWhenSentOutOfScope = Deku.do let - counter :: forall a. Event a -> Event (Int /\ a) + counter :: forall a. Poll a -> Poll (Int /\ a) counter event = mapAccum (\a b -> (a + 1) /\ ((a + 1) /\ b)) (-1) event - limitTo :: Int -> Event ~> Event + limitTo :: Int -> Poll ~> Poll limitTo i e = map snd $ filter (\(n /\ _) -> n < i) $ counter e setPortalInContext /\ portalInContext <- useState true setPortedNut /\ portedNut <- useState' - D.div_ + D.div [ DA.id_ "test-frame" ] [ D.div [ DA.id_ "outer-scope" ] [ limitTo 2 (Tuple <$> portalInContext <*> portedNut) <#~> \(Tuple tf p) -> if not tf then p else D.div_ [ text_ "no dice!" ] ] , ( globalPortal1 (D.div_ [ text_ "foo" ]) \e -> - Deku.do - useEffect (pure unit) (const (setPortedNut e)) - D.div [ DA.id_ "inner-scope" ] - [ (Tuple <$> portalInContext <*> portedNut) - <#~> \(Tuple tf p) -> - if tf then p else D.div_ [ text_ "no dice!" ] - ] + D.div_ + [ D.button + [ DA.id_ "push-ported-nut", DL.click_ \_ -> setPortedNut e ] + [ text_ "push ported nut" ] + , D.div [ DA.id_ "inner-scope" ] + [ (Tuple <$> portalInContext <*> portedNut) + <#~> \(Tuple tf p) -> + if tf then p + else D.div [ DA.id_ "inner-switch" ] [ text_ "no dice!" ] + ] + ] ) , D.button [ DA.id_ "portal-btn" - , DL.runOn DL.click $ portalInContext <#> not >>> setPortalInContext + , DL.click $ portalInContext <#> not >>> setPortalInContext >>> pure ] [ text_ "switch" ] @@ -268,10 +295,10 @@ globalPortalsRetainPortalnessWhenSentOutOfScope = Deku.do localPortalsLosePortalnessWhenSentOutOfScope :: Nut localPortalsLosePortalnessWhenSentOutOfScope = Deku.do let - counter :: forall a. Event a -> Event (Int /\ a) + counter :: forall a. Poll a -> Poll (Int /\ a) counter event = mapAccum (\a b -> (a + 1) /\ ((a + 1) /\ b)) (-1) event - limitTo :: Int -> Event ~> Event + limitTo :: Int -> Poll ~> Poll limitTo i e = map snd $ filter (\(n /\ _) -> n < i) $ counter e setPortalInContext /\ portalInContext <- useState true setPortedNut /\ portedNut <- useState' @@ -282,13 +309,16 @@ localPortalsLosePortalnessWhenSentOutOfScope = Deku.do if not tf then p else D.div_ [ text_ "no dice!" ] ] , portal1 (D.div_ [ text_ "foo" ]) \e -> - Deku.do - useEffect (pure unit) (const (setPortedNut e)) - D.div [ DA.id_ "inner-scope" ] - [ (Tuple <$> portalInContext <*> portedNut) - <#~> \(Tuple tf p) -> - if tf then p else D.div_ [ text_ "no dice!" ] - ] + D.div_ + [ D.button + [ DA.id_ "push-ported-nut", DL.click_ \_ -> setPortedNut e ] + [ text_ "push ported nut" ] + , D.div [ DA.id_ "inner-scope" ] + [ (Tuple <$> portalInContext <*> portedNut) + <#~> \(Tuple tf p) -> + if tf then p else D.div_ [ text_ "no dice!" ] + ] + ] , D.button [ DA.id_ "portal-btn" , DL.runOn DL.click $ portalInContext <#> not >>> setPortalInContext @@ -303,35 +333,52 @@ pursXComposes = Deku.do { me: fixed [ text_ "milieu", text_ " ", text_ "après-milieu" ] } ] -lifecycle :: Nut -lifecycle = Deku.do - setItem /\ item <- useState 0 - D.div [ DA.id_ "div0" ] - [ D.div_ - [ D.button [ DA.id_ "home-btn", DL.click_ \_ -> setItem 0 ] - [ text_ "home" ] - , D.button [ DA.id_ "about-btn", DL.click_ \_ -> setItem 1 ] - [ text_ "about" ] - , D.button [ DA.id_ "contact-btn", DL.click_ \_ -> setItem 2 ] - [ text_ "contact" ] - ] - , D.span [ DA.id_ "hack" ] [] - , item # switcher case _ of - 0 -> D.span_ [ text_ "a" ] - 1 -> onWillMount (hackyInnerHTML "hack" "hello") $ D.span_ [ text_ "b" ] - _ -> onDismount (hackyInnerHTML "hack" "goodbye") $ D.span_ - [ text_ "c" ] +switchersCompose :: Nut +switchersCompose = Deku.do + let + counter :: forall a. Poll a -> Poll Int + counter event = fold (\a _ -> a + 1) (-1) event + setItem /\ item <- useState unit + D.div [ DA.id_ "maindiv" ] + [ D.div [ DA.id_ "div0" ] [ text_ "d0" ] + , counter item <#~> (_ `mod` 2) >>> case _ of + 0 -> D.div [ DA.id_ "div1a" ] [ text_ "d1a" ] + _ -> D.div [ DA.id_ "div1b" ] [ text_ "d1b" ] + , D.div [ DA.id_ "div2" ] [ text_ "d2" ] + , D.button [ DA.id_ "incr", DL.click_ \_ -> setItem unit ] [ text_ "click" ] ] -lifecycleWillAndDidMount :: Nut -lifecycleWillAndDidMount = D.div_ - [ Deku.do - setInt /\ int <- useState' - onWillMount (setInt 42) (D.span [ DA.id_ "span1" ] [ text (show <$> int) ]) - , Deku.do - setInt /\ int <- useState' - onDidMount (setInt 42) (D.span [ DA.id_ "span2" ] [ text (show <$> int) ]) - ] +todoMVC :: Nut +todoMVC = Deku.do + setItem /\ item <- useState' + setInput /\ input <- useState' + iref <- useRef Nothing (Just <$> input) + let + guardAgainstEmpty e = do + v <- InputElement.value e + if v == "" then + window >>= alert "Item cannot be empty" + else setItem v + top = + D.div_ + [ D.input + [ DA.value_ "Tasko primo" + , injectElementT setInput + ] + [] + , D.button + [ DA.id_ "add" + , DL.click_ \_ -> do + iref >>= traverse_ guardAgainstEmpty + ] + [ text_ "Add" ] + ] + D.div_ + [ top + , Deku.do + { value: Tuple i t } <- useDynAtBeginning (mapWithIndex Tuple item) + D.div [ DA.id_ $ "item" <> show i ] [ text_ t ] + ] unsetUnsets :: Nut unsetUnsets = Deku.do @@ -349,7 +396,7 @@ unsetUnsets = Deku.do ] emptyTextIsSet :: Nut -emptyTextIsSet = text mempty +emptyTextIsSet = text (empty :: Poll String) useRefWorks :: Nut useRefWorks = Deku.do @@ -375,37 +422,422 @@ useRefWorks = Deku.do ) ] -useEffectWorks :: Nut -useEffectWorks = Deku.do - let startsAt = 0 - setCounter /\ counter <- useState startsAt - useEffect counter \i -> when (i `mod` 4 == 1) do - setCounter (i + 1) +customHooksDoTheirThing :: Nut +customHooksDoTheirThing = Deku.do + setCounter /\ counter <- useState' + e1 /\ e2 <- myHook counter D.div_ [ D.button - [ DL.runOn DL.click $ counter <#> add 1 >>> setCounter + [ DL.click $ (counter <|> pure 0) <#> add 1 >>> setCounter >>> pure , DA.id_ "counter" ] [ text_ "Increment" ] - , D.div [ DA.id_ "mydiv" ] [ text (show <$> counter) ] + , D.div [ DA.id_ "mydiv1" ] [ text (show <$> e1) ] + , D.div [ DA.id_ "mydiv2" ] [ text (show <$> e2) ] + ] + where + myHook :: Poll Int -> Hook (Tuple (Poll Int) (Poll Int)) + myHook e makeHook = Deku.do + e1 <- useRant (add 42 <$> e) + e2 <- useRant (add 48 <$> e) + makeHook (Tuple e1 e2) + +simpleSwitcher :: Nut +simpleSwitcher = Deku.do + setSwitch /\ switch <- useState true + D.div [ DA.id_ "external" ] + [ switch <#~> + if _ then D.span [ DA.id_ "innertrue" ] [ text_ "trueswitch" ] + else D.span [ DA.id_ "innerfalse" ] [ text_ "falseswitch" ] + , D.button + [ DA.id_ "doswitch", DL.click $ switch <#> not >>> setSwitch >>> pure ] + [ text_ "set switch" ] ] -customHooksDoTheirThing :: Nut -customHooksDoTheirThing = Deku.do - setCounter /\ counter <- useState 0 - e1 /\ e2 <- myHook counter +pureWorks :: Nut +pureWorks = Deku.do + D.span [ DA.id_ "hello" ] [ text $ pure "hello" ] + +useStateWorks :: Nut +useStateWorks = Deku.do + p /\ e <- useState "hello" + D.div_ + [ D.span [ DA.id_ "maindiv" ] [ text e ] + , D.button [ DA.id_ "button", DL.click_ \_ -> p "world" ] [ text_ "Switch" ] + ] + +useRantWorks :: Nut +useRantWorks = Deku.do + p /\ e <- useState' + x <- useRant (fold (\b _ -> b + 1) (-1) e) + D.div_ + [ D.span [ DA.id_ "maindiv" ] [ text (show <$> x) ] + , D.span [ DA.id_ "maindiv2" ] [ text (show <$> x) ] + , D.button [ DA.id_ "button", DL.click_ \_ -> p unit ] [ text_ "Switch" ] + ] + +useEffectCanBeSimulatedWithRef :: Nut +useEffectCanBeSimulatedWithRef = Deku.do + let startsAt = 0 + setCounter /\ counter <- useState startsAt + let counter' = counter <#> \i -> if i `mod` 4 == 1 then i + 1 else i + cref <- useRef startsAt counter' D.div_ [ D.button - [ DL.runOn DL.click $ counter <#> add 1 >>> setCounter + [ DL.click_ \_ -> do + cref <#> add 1 >>= setCounter , DA.id_ "counter" ] [ text_ "Increment" ] - , D.div [ DA.id_ "mydiv1" ] [ text (show <$> e1) ] - , D.div [ DA.id_ "mydiv2" ] [ text (show <$> e2) ] + , D.div [ DA.id_ "mydiv" ] + [ text (map show counter') ] + ] + +refToHot :: Nut +refToHot = Deku.do + setLabel /\ label <- useState' + cref <- useRef "foo" label + let + nest f n = Deku.do + setReveal /\ reveal <- useState false + D.div_ + [ D.button + [ DA.id_ $ ("button" <> show n), DL.click_ \_ -> setReveal true ] + [ text_ "reveal" ] + , guard reveal $ f (n + 1) + ] + elt n = Deku.do + setReveal /\ reveal <- useState false + D.div_ + [ D.button + [ DA.id_ $ ("button" <> show n), DL.click_ \_ -> setReveal true ] + [ text_ "reveal" ] + , D.span [ DA.id_ "myspan" ] + [ guardWith + ( (\rr vv -> if rr then Just vv else Nothing) <$> reveal <*> + (effectToPoll cref) + ) + text_ + ] + ] + D.div_ + [ nest (nest (nest (nest (nest (nest elt))))) 0 + , D.button [ DA.id_ "setlabel", DL.click_ \_ -> setLabel "bar" ] + [ text_ "set label" ] + ] + +useHotWorks :: Nut +useHotWorks = Deku.do + setNumber /\ number <- useHot 0.42 + setPresence /\ presence <- useState false + D.div_ + [ D.div [ DA.id_ "hotdiv" ] + [ text $ number <#> show + ] + , D.div_ + [ D.button + [ DA.id_ "ba" + , DL.click_ \_ -> random >>= setNumber + ] + [ text_ "A" ] + , D.button + [ DA.id_ "bb" + , DL.click $ presence <#> not >>> setPresence >>> pure + ] + [ text_ "B" ] + ] + , D.div [ DA.id_ "newdiv" ] + [ guard presence + $ text + $ number <#> show + ] + ] + +useStateWorks2 :: Nut +useStateWorks2 = Deku.do + setNumber /\ number <- useState 0.42 + setPresence /\ presence <- useState false + D.div_ + [ D.div [ DA.id_ "hotdiv" ] + [ text $ number <#> show + ] + , D.div_ + [ D.button + [ DA.id_ "ba" + , DL.click_ \_ -> random >>= setNumber + ] + [ text_ "A" ] + , D.button + [ DA.id_ "bb" + , DL.click $ presence <#> not >>> setPresence >>> pure + ] + [ text_ "B" ] + ] + , D.div [ DA.id_ "newdiv" ] + [ guard presence + $ text + $ number <#> show + ] + ] + +hotIsHot :: Nut +hotIsHot = Deku.do + setLabel /\ label <- useHot "bar" + let + nest f n = Deku.do + setReveal /\ reveal <- useState false + D.div_ + [ D.button + [ DA.id_ $ ("button" <> show n), DL.click_ \_ -> setReveal true ] + [ text_ "reveal" ] + , guard reveal $ f (n + 1) + ] + elt n = Deku.do + setReveal /\ reveal <- useState false + D.div_ + [ D.button + [ DA.id_ $ ("button" <> show n), DL.click_ \_ -> setReveal true ] + [ text_ "reveal" ] + , D.span [ DA.id_ "myspan" ] + [ guardWith + ( (\rr vv -> if rr then Just vv else Nothing) <$> reveal <*> + label + ) + text_ + ] + ] + D.div_ + [ nest (nest (nest (nest (nest (nest elt))))) 0 + , D.button [ DA.id_ "setlabel", DL.click_ \_ -> setLabel "bar" ] + [ text_ "set label" ] ] + +switcherSwitches :: Nut +switcherSwitches = Deku.do + setItem /\ item <- useState 0 + setGoodbyeC /\ goodbyeC <- useState' + iref <- useRef (-1) item + let + gc = do + i <- iref + when (i == 2) do + setGoodbyeC (Just unit) + D.div [ DA.id_ "div0" ] + [ D.div_ + [ D.button [ DA.id_ "home-btn", DL.click_ \_ -> gc *> setItem 0 ] + [ text_ "home" ] + , D.button [ DA.id_ "about-btn", DL.click_ \_ -> gc *> setItem 1 ] + [ text_ "about" ] + , D.button [ DA.id_ "contact-btn", DL.click_ \_ -> gc *> setItem 2 ] + [ text_ "contact" ] + ] + , D.span [ DA.id_ "hack" ] + [ text $ merge + [ filter (_ == 1) item $> "hello", compact goodbyeC $> "goodbye" ] + ] + ] + +lotsOfSwitching :: Nut +lotsOfSwitching = Deku.do + setItem /\ item <- useState true + D.div_ + [ D.div_ + [ D.button + [ DA.id_ "home-btn", DL.click $ item <#> not >>> setItem >>> pure ] + [ text_ "home" ] + ] + , D.span [ DA.id_ "hack" ] + [ item <#~> if _ then text_ "hello" else text_ "goodbye" + ] + ] + +useHotRantWorks :: Nut +useHotRantWorks = Deku.do + thunkMe /\ thunked <- useState unit + setPresence /\ presence <- useState false + let counter = fold (\a _ -> a + 1) 0 thunked + ranted <- useHotRant counter + let + framed id = D.div [ DA.id_ id ] + [ text $ show <$> ranted + ] + D.div_ + [ D.button + [ DA.id_ "update" + , DL.click_ \_ -> thunkMe unit + ] + [ text_ "Update number" ] + , D.button + [ DA.id_ "reveal" + , DL.runOn DL.click $ presence <#> not >>> setPresence + ] + [ text_ "Show another version" ] + , framed "da" + , guard presence $ framed "db" + ] + +-- begin stress test + +randomFromArray :: Array String -> Poll String +randomFromArray arr = poll \e -> makeEvent \k -> + subscribe e \f -> do + index <- randomInt 0 (alen - 1) + k $ f $ fromMaybe "foo" (arr !! index) where - myHook :: Event Int -> Hook (Tuple (Event Int) (Event Int)) - myHook e makeHook = Deku.do - e1 <- useMemoized (add 42 <$> e) - e2 <- useMemoized (add 48 <$> e) - makeHook (Tuple e1 e2) \ No newline at end of file + alen = Array.length arr + +randomAdjectives :: Poll String +randomAdjectives = randomFromArray [ "pretty", "large", "big", "small", "tall", "short", "long", "handsome", "plain", "quaint", "clean", "elegant", "easy", "angry", "crazy", "helpful", "mushy", "odd", "unsightly", "adorable", "important", "inexpensive", "cheap", "expensive", "fancy" ] + +randomColors :: Poll String +randomColors = randomFromArray [ "red", "yellow", "blue", "green", "pink", "brown", "purple", "brown", "white", "black", "orange" ] + +randomNouns :: Poll String +randomNouns = randomFromArray [ "table", "chair", "house", "bbq", "desk", "car", "pony", "cookie", "sandwich", "burger", "pizza", "mouse", "keyboard" ] + +rowReplicator + :: Int -> Poll Unit +rowReplicator n = merge (replicate n $ pure unit) + +makeRow ∷ forall a. { n :: Int, excl :: Int -> Poll a, selectMe :: Int -> Effect Unit, removeMe :: Effect Unit } → Nut +makeRow { n, excl, selectMe, removeMe } = rowTemplate ~~ + { label: + text $ Array.fold + <$> sequence + [ randomAdjectives + , pure " " + , randomNouns + , pure " " + , randomColors + , pure " " + , pure "" <|> folded (excl n $> "!!!") + ] + , select: DL.click_ \_ -> selectMe n + , remove: DL.click_ \_ -> removeMe + } + +bootstrapWith + :: forall r + . { appendRows :: Poll Unit + , rowbox :: Int -> Poll Unit + , selectMe :: Int -> Effect Unit + , removeMe :: Effect Unit -> Effect Unit + , selectbox :: Int -> Poll Unit + , unselectbox :: Int -> Poll Unit + , swap :: Poll Boolean + , n :: Int + | r + } + -> Nut +bootstrapWith { selectMe, removeMe, swap, appendRows, n, rowbox } = Deku.do + { value: index, remove } <- useDynWith (mapWithIndex (\i _ -> Tuple i i) (rowReplicator n <|> keepLatest (appendRows $> rowReplicator 1000))) $ dynOptions + { sendTo = case _ of + 1 -> swap <#> if _ then 1 else 998 + 998 -> swap <#> if _ then 998 else 1 + _ -> empty + + } + makeRow { n: index, excl: rowbox, selectMe, removeMe: removeMe remove } + +tableBody + :: { rowBuilder :: Poll RowBuilder + , appendRows :: Poll Unit + , swap :: Poll Boolean + , pushToRow :: { address :: Int, payload :: Unit } -> Effect Unit + , rowbox :: Int -> Poll Unit + , selectbox :: Int -> Poll Unit + , unselectbox :: Int -> Poll Unit + , selectMe :: Int -> Effect Unit + , removeMe :: Effect Unit -> Effect Unit + } + -> Nut +tableBody i = Deku.do + D.tbody [ DA.id_ "tbody" ] + [ i.rowBuilder <#~> case _ of + C1000 -> bootstrapWith + $ i `union` { n: 1000 } + C10000 -> bootstrapWith + $ i `union` { n: 10000 } + Clear -> mempty + ] + +data RowBuilder = C1000 | C10000 | Clear + +stressTest :: Nut +stressTest = Deku.do + setRowBuilder /\ rowBuilder <- DH.useState' + thunkAppendRows /\ appendRows <- DH.useState' + incrementRows' /\ nRows <- DH.useState Nothing + setSwap /\ swap <- DH.useState' + pushToRow /\ rowbox <- DH.useMailboxed + pushToSelect /\ selectbox <- DH.useMailboxed + pushToUnselect /\ unselectbox <- DH.useMailboxed + setCurrentSelection /\ currentSelection <- DH.useHot Nothing + selectionRef <- DH.useRef Nothing currentSelection + let incrementRows = incrementRows' <<< Just + let clearRows = incrementRows' Nothing + let + selectMe index = do + pushToSelect { address: index, payload: unit } + s <- selectionRef + setCurrentSelection $ Just index + for_ s \i -> do + pushToUnselect { address: i, payload: unit } + removeMe rmEffect = do + rmEffect + setCurrentSelection Nothing + body ~~ + { tbody: tableBody { selectMe, removeMe, selectbox, unselectbox, swap, rowBuilder, appendRows, pushToRow, rowbox } + , c1000: DL.click_ \_ -> incrementRows 1000 *> setRowBuilder C1000 + , c10000: DL.click_ \_ -> incrementRows 10000 *> setRowBuilder C10000 + , append: DL.click_ \_ -> incrementRows 1000 *> thunkAppendRows unit + , clear: DL.click_ \_ -> clearRows *> setRowBuilder Clear + , swap: DL.runOn DL.click $ merge [ pure false, swap ] <#> not >>> setSwap + , update: DL.runOn DL.click $ fold (\a b -> maybe 0 (add a) b) 0 nRows <#> \n -> do + for_ (0 .. (n / 10 - 1)) \i -> do + pushToRow { address: i * 10, payload: unit } + } + +rowTemplate = Proxy :: Proxy """~label~""" + +body = + Proxy + :: Proxy + """
+
+
+
+
+

VanillaJS-"keyed"

+
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+
+ + ~tbody~ +
+ +
+
""" +-- end stress test \ No newline at end of file diff --git a/deku/test/test-optimized.dhall b/deku/test/test-optimized.dhall deleted file mode 100644 index 10d1d8bc..00000000 --- a/deku/test/test-optimized.dhall +++ /dev/null @@ -1,5 +0,0 @@ -let conf = ./test.dhall - -in conf - // { backend = "purs-backend-es build" - } diff --git a/examples/spago.yaml b/examples/spago.yaml deleted file mode 100644 index 49829058..00000000 --- a/examples/spago.yaml +++ /dev/null @@ -1,32 +0,0 @@ -package: - name: examples - dependencies: - - deku - - deku-css - - web-html - - canvas - - exceptions - - node-process - - filterable - - node-fs - - datetime - - affjax-web - - node-buffer - - argonaut - - codec-argonaut - - console - - tuples - - affjax - - either - - integers - - random - - aff - - argonaut-core - - web-uievents - - http-methods - - maybe - - typelevel-prelude - bundle: - module: Deku.Example.HelloWorld - outfile: hello-world/src/index.js - type: app \ No newline at end of file diff --git a/examples/src/canvas/Canvas.js b/examples/src/canvas/Canvas.js deleted file mode 100644 index 527261e8..00000000 --- a/examples/src/canvas/Canvas.js +++ /dev/null @@ -1,4 +0,0 @@ -export const setBodyAs = (str) => () => { - var body = document.getElementsByTagName("BODY")[0]; - body.innerHTML = str; -} \ No newline at end of file diff --git a/examples/src/canvas/Canvas.purs b/examples/src/canvas/Canvas.purs deleted file mode 100644 index 00da6937..00000000 --- a/examples/src/canvas/Canvas.purs +++ /dev/null @@ -1,68 +0,0 @@ -module Deku.Example.SVG where - -import Prelude - -import Control.Monad.ST.Class (liftST) -import Data.Foldable (traverse_) -import Deku.Core (Nut) -import Deku.DOM as D -import Deku.DOM.Attributes as DA -import Deku.DOM.SVG as SVG -import Deku.DOM.SVG.Attributes as SA -import Deku.DOM.Self as Self -import Deku.Pursx ((~~)) -import Deku.Toplevel (hydrate, runInBody, runSSR) -import Effect (Effect) -import Graphics.Canvas (CanvasElement, fillRect, getContext2D, setFillStyle) -import Type.Proxy (Proxy(..)) -import Unsafe.Coerce (unsafeCoerce) -import Web.HTML.HTMLCanvasElement as HTMLCanvasElement - -mySVG :: Nut -mySVG = D.div_ - [ SVG.svg [ DA.height_ "100", DA.width_ "100" ] - [ SVG.circle - [ SA.cx_ "50" - , SA.cy_ "50" - , SA.r_ "40" - , SA.stroke_ "black" - , SA.strokeWidth_ "3" - , SA.fill_ "red" - ] - - [] - ] - ] - -myCanvas :: Nut -myCanvas = D.canvas - [ DA.width_ "400px" - , DA.height_ "400px" - , Self.self_ $ HTMLCanvasElement.fromElement >>> traverse_ \e -> do - ctx <- getContext2D - ( ( unsafeCoerce - :: HTMLCanvasElement.HTMLCanvasElement -> CanvasElement - ) e - ) - setFillStyle ctx "blue" - fillRect ctx { height: 100.0, width: 100.0, x: 0.0, y: 0.0 } - ] - [] - -scene :: Nut -scene = (Proxy :: _ "

hi

~svg~ ~canvas~
") ~~ - { svg: mySVG :: Nut - , canvas: myCanvas :: Nut - } - -foreign import setBodyAs :: String -> Effect Unit - -main :: Effect Unit -main = - if false then do - runInBody scene - else do - str <- liftST (runSSR scene) - setBodyAs str - hydrate scene - diff --git a/examples/src/canvas/index.html b/examples/src/canvas/index.html deleted file mode 100644 index c31955b2..00000000 --- a/examples/src/canvas/index.html +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/examples/src/hello-world/HelloWorld.purs b/examples/src/hello-world/HelloWorld.purs deleted file mode 100644 index f9e5b6a8..00000000 --- a/examples/src/hello-world/HelloWorld.purs +++ /dev/null @@ -1,57 +0,0 @@ -module Deku.Example.HelloWorld where - -import Prelude - -import Control.Alt (alt) -import Data.Foldable (oneOf) -import Data.Maybe (Maybe(..)) -import Data.Profunctor (lcmap) -import Data.Tuple (Tuple(..)) -import Deku.Attribute (xdata) -import Deku.Control as C -import Deku.Core (Nut, bus) -import Deku.Core as CC -import Deku.DOM as D -import Deku.DOM.Attributes as DA -import Deku.DOM.Listeners as DL -import Deku.Toplevel (runInBody) -import Effect (Effect) -import FRP.Event (Event, filterMap, keepLatest, mapAccum) -import Web.HTML (HTMLDivElement) - -counter :: forall a. Event a → Event (Tuple a Int) -counter event = mapAccum f 0 event - where - f a b = Tuple (a + 1) (Tuple b a) - -scene :: Nut -scene = CC.envy $ bus $ \push -> lcmap (alt (pure true)) \event -> do - D.div_ - [ D.div_ - [ D.div - [ DL.injectElementT \( _ :: HTMLDivElement ) -> pure unit - ] - [ C.text (pure "Stops after 4 clicks") ] - , C.text (event <#> if _ then "click " else "kcilc ") - , D.button - [ counter event - # filterMap - (\(Tuple x y) -> if y < 4 then Just x else Nothing) - # map - ( \e -> - oneOf - [ DA.style_ $ "background-color: rgb(160,234,203);" - , DL.click_ \_ -> push (not e) - , pure $ xdata "hello" "world" - ] - - ) - # keepLatest - ] - [ C.text_ "me" ] - ] - , D.input [ DA.autofocus_ "" ] [] - ] - -main :: Effect Unit -main = runInBody scene diff --git a/examples/src/hello-world/index.html b/examples/src/hello-world/index.html deleted file mode 100644 index 56fa58aa..00000000 --- a/examples/src/hello-world/index.html +++ /dev/null @@ -1,15 +0,0 @@ - - - - Deku hello world - - - - - - - - diff --git a/examples/src/insert/Insert.purs b/examples/src/insert/Insert.purs deleted file mode 100644 index c9ec5b0b..00000000 --- a/examples/src/insert/Insert.purs +++ /dev/null @@ -1,45 +0,0 @@ -module Deku.Example.Insert where - -import Prelude - -import Control.Alt ((<|>)) -import Data.DateTime.Instant (Instant, unInstant) -import Data.Newtype (unwrap) -import Data.Tuple.Nested ((/\)) -import Deku.Control (text_) -import Deku.Core (insert, dyn, remove) -import Deku.DOM as D -import Deku.Toplevel (runInBody) -import Effect (Effect) -import FRP.Event (Event, mapAccum) -import FRP.Event as FRP.Event -import FRP.Event.Time as FRP.Event.Time - -interval :: Int -> Event Instant -interval = FRP.Event.Time.interval - -delay :: forall a. Int -> Event a -> Event a -delay n = FRP.Event.delay n - -main :: Effect Unit -main = runInBody - ( dyn $ map - ( \(x /\ c) -> - ( pure - ( insert c - ( D.div_ - [ text_ ("At pos: " <> show c <> " at time " <> show x) ] - ) - ) <|> delay (5050 + (c * 1000)) (pure remove) - ) - ) - ( mapAccum - ( \(a /\ b) x -> - if a < b then - (((a + 1) /\ b) /\ ((unwrap (unInstant x)) /\ (a + 1))) - else ((0 /\ (b + 1)) /\ ((unwrap (unInstant x)) /\ 0)) - ) - (0 /\ 1) - (interval 1000) - ) - ) \ No newline at end of file diff --git a/examples/src/insert/index.html b/examples/src/insert/index.html deleted file mode 100644 index 3c6a565d..00000000 --- a/examples/src/insert/index.html +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/examples/src/nested/Nested.purs b/examples/src/nested/Nested.purs deleted file mode 100644 index bd753229..00000000 --- a/examples/src/nested/Nested.purs +++ /dev/null @@ -1,87 +0,0 @@ -module Deku.Example.Nested where - -import Prelude - -import Control.Alt ((<|>)) -import Data.DateTime.Instant (Instant) -import Data.FastVect.FastVect ((:)) -import Data.FastVect.FastVect as V -import Data.Int (floor) -import Data.Monoid.Additive (Additive(..)) -import Data.Tuple (Tuple(..)) -import Deku.Control (portal, switcher) -import Deku.Control as C -import Deku.Core (Nut, dyn, fixed, insert_, remove, sendToTop) -import Deku.DOM as D -import Deku.DOM.Attributes as DA -import Deku.Toplevel (runInBody) -import Effect (Effect) -import Effect.Random as Random -import FRP.Behavior (ABehavior, behavior, sample_) -import FRP.Event (Event, makeEvent, mapAccum, subscribe) -import FRP.Event as FRP.Event -import FRP.Event.Time as FRP.Event.Time -import Type.Prelude (Proxy(..)) - -interval :: Int -> Event Instant -interval = FRP.Event.Time.interval - -delay :: forall a. Int -> Event a -> Event a -delay n = FRP.Event.delay n - -random :: ABehavior (Event) (Additive Number) -random = behavior \e -> - makeEvent \k -> subscribe e \f -> - (Additive <$> Random.random) >>= k <<< f - -rdm :: ABehavior (Event) String -rdm = map - ( \{ r: Additive r, g: Additive g, b: Additive b } -> "rgb(" - <> show (floor (r * 100.0 + 155.0)) - <> "," - <> show (floor (g * 100.0 + 155.0)) - <> "," - <> show (floor (b * 100.0 + 155.0)) - <> ")" - ) - ({ r: _, g: _, b: _ } <$> random <*> random <*> random) - -counter :: forall a. Event a → Event (Tuple a Int) -counter event = mapAccum f 0 event - where - f a b = Tuple (a + 1) (Tuple b a) - -scene :: Array Nut -scene = - [ D.div_ - [ portal - ( D.video [ DA.controls_ "true", DA.width_ "250"] - [ D.source - [ DA.src_ "https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.webm" - , DA.xtype_ "video/webm" - ] - [] - ] - : V.empty - ) - ( \i -> switcher - ( \rgb -> D.div - [ DA.style_ $ "background-color: " <> rgb <> ";" ] - [ V.index (Proxy :: _ 0) i ] - ) - (sample_ rdm (interval 1000)) - ) - ] - , dyn $ map - ( \rgb -> - pure - ( insert_ $ D.div - [ DA.style_ $ "background-color: " <> rgb <> ";" ] - [ C.text_ "hello" ] - ) <|> delay 1432 (pure sendToTop) <|> delay 2000 (pure remove) - ) - (sample_ rdm (interval 1000)) - ] - -main :: Effect Unit -main = runInBody (fixed scene) diff --git a/examples/src/nested/index.html b/examples/src/nested/index.html deleted file mode 100644 index 3c6a565d..00000000 --- a/examples/src/nested/index.html +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/examples/src/portal/Portal.purs b/examples/src/portal/Portal.purs deleted file mode 100644 index 5c360258..00000000 --- a/examples/src/portal/Portal.purs +++ /dev/null @@ -1,132 +0,0 @@ -module Deku.Example.Portal where - -import Prelude - -import Control.Alt (alt) -import Data.FastVect.FastVect (index, (:)) -import Data.FastVect.FastVect as V -import Data.Profunctor (lcmap) -import Deku.Control (portal, switcher, text_) -import Deku.Core (bus, dyn, insert_) -import Deku.DOM as D -import Deku.DOM.Attributes as DA -import Deku.DOM.Listeners as DL -import Deku.Toplevel (runInBody) -import Effect (Effect) -import FRP.Event (fold) -import Type.Prelude (Proxy(..)) - -main :: Effect Unit -main = runInBody - ( D.div_ - [ text_ "Portal acceptance test" - , D.hr_ [] - , D.div_ - [ text_ "Switching portals should flip between them" - , D.div_ - [ dyn $ bus \push -> lcmap (alt (pure unit)) \event -> pure - $ insert_ - $ portal - ( map - ( \i -> D.video - [ DA.controls_ "true", DA.width_ "250" ] - [ D.source - [ DA.src_ i, DA.xtype_ "video/mp4" ] - [] - ] - ) - ( "https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.mp4" - : "https://www.w3schools.com/jsref/movie.mp4" - : V.empty - ) - ) - \v -> do - let - p0 = index (Proxy :: _ 0) v - p1 = index (Proxy :: _ 1) v - ev i = fold (\a _ -> not a) i event - flips = D.div_ <<< pure - <<< switcher (if _ then p0 else p1) - <<< ev - D.div_ - [ D.button - [ DL.click_ \_ -> push unit ] - [ text_ "Switch videos" ] - , D.div_ - [ flips true, flips false ] - ] - ] - ] - , D.hr_ [] - , D.div_ - [ text_ "Single portals should not accumulate" - , D.div_ - [ dyn $ bus \push -> lcmap (alt (pure unit)) \event -> pure - $ insert_ - $ portal - ( map - ( \i -> D.video - [ DA.controls_ "true", DA.width_ "250" ] - [ D.source - [ DA.src_ i, DA.xtype_ "video/mp4" ] - [] - ] - ) - ( "https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.mp4" - : "https://www.w3schools.com/jsref/movie.mp4" - : V.empty - ) - ) - \v -> do - let - p0 = index (Proxy :: _ 0) v - p1 = index (Proxy :: _ 1) v - ev i = fold (\a _ -> not a) i event - flips = D.div_ <<< pure - <<< switcher (if _ then p0 else p1) - <<< ev - D.div_ - [ D.button - [ DL.click_ \_ -> push unit ] - [ text_ "Toggle videos" ] - , flips true - ] - ] - ] - , D.hr_ [] - , D.div_ - [ text_ "Portal should come in and out" - , D.div_ - [ dyn $ bus \push -> lcmap (alt (pure unit)) \event -> pure - $ insert_ - $ portal - ( map - ( \i -> D.video - [ DA.controls_ "true", DA.width_ "250" ] - [ D.source - [ DA.src_ i, DA.xtype_ "video/mp4" ] - [] - ] - ) - ( "https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.mp4" - : V.empty - ) - ) - \v -> do - let - p0 = index (Proxy :: _ 0) v - ev i = fold (\a _ -> not a) i event - flips = D.div_ <<< pure - <<< switcher (if _ then p0 else D.div_ []) - <<< ev - D.div_ - [ D.button - [ DL.click_ \_ -> push unit ] - [ text_ "Toggle videos" ] - , flips true - ] - ] - ] - , D.hr_ [] - ] - ) diff --git a/examples/src/portal/index.html b/examples/src/portal/index.html deleted file mode 100644 index 3c6a565d..00000000 --- a/examples/src/portal/index.html +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/examples/src/pursx/Pursx.purs b/examples/src/pursx/Pursx.purs deleted file mode 100644 index 309449a3..00000000 --- a/examples/src/pursx/Pursx.purs +++ /dev/null @@ -1,77 +0,0 @@ -module Deku.Example.Pursx where - -import Prelude - -import Control.Alt ((<|>)) -import Control.Plus (empty) -import Deku.Control (text_) -import Deku.Control as C -import Deku.Core (Nut, bus, envy) -import Deku.DOM as D -import Deku.DOM.Attributes as DA -import Deku.DOM.Listeners as DL -import Deku.Pursx ((~~)) -import Deku.Pursx.Anonymous (px, xp) -import Deku.Toplevel (runInBody) -import Effect (Effect) -import FRP.Event (Event) -import Type.Proxy (Proxy(..)) - -myPx = - Proxy - :: Proxy - """
- - ~somethingElse~ - ~aThirdThing~ -
hello world
-
-""" - -myPxInception - :: (Boolean -> Effect Unit) - -> Nut - -> Nut -myPxInception push aThirdThing = myPx ~~ - { btn: DA.style_ "background-color: rgb(133,151,217)" - , somethingElse: - ( D.button - [ DL.click_ \_ -> push false - ] - [ C.text_ "I was dynamically inserted " ] - ) - , aThirdThing: aThirdThing - } - -scene - :: Event Nut -scene = bus \push event -> - D.div empty - [ myPxInception push - $ myPxInception push - $ myPxInception push - $ myPxInception push - $ myPxInception push - $ myPxInception push (C.text_ "boo") - , C.text ((event <|> pure true) <#> if _ then "Oh hi" else "Oh bye") - , px (Proxy :: _ "

hi

") xp - , px (Proxy :: _ "

hello!

hello!

") - xp - , px (Proxy :: _ "
") ((D.h1_ [ text_ "more stuff" ])) - (Proxy :: _ "
") - xp - , px (Proxy :: _ "
") - ( ( px (Proxy :: _ "

hello!

") - xp - ) - ) - (Proxy :: _ "
") - xp - ] - -main :: Effect Unit -main = runInBody (envy scene) diff --git a/examples/src/pursx/index.html b/examples/src/pursx/index.html deleted file mode 100644 index 3c6a565d..00000000 --- a/examples/src/pursx/index.html +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/examples/src/readme-legend/ReadmeLegend.purs b/examples/src/readme-legend/ReadmeLegend.purs deleted file mode 100644 index f7719f1e..00000000 --- a/examples/src/readme-legend/ReadmeLegend.purs +++ /dev/null @@ -1,64 +0,0 @@ -module Deku.Example.ReadmeLegend where - -import Prelude - -import CSS (bold, color, fontWeight, rgb) -import Data.Tuple.Nested ((/\)) -import Deku.Attribute (xdata) -import Deku.CSS (render) -import Deku.Control (text) -import Deku.Core (Nut) -import Deku.DOM as D -import Deku.DOM.Attributes as DA -import Deku.DOM.Listeners as DL -import Deku.Do as Deku -import Deku.Hooks (useState) -import Deku.Pursx ((~~)) -import Deku.Toplevel (runInBody) -import Effect (Effect) -import Type.Proxy (Proxy(..)) - -main :: Effect Unit -main = - -- `Deku.Toplevel` contains runInBody - -- and other functions for hydration and SSR - runInBody myNut - where - -- `Deku.Core` contains the `Nut` type, which is the type - -- of all Deku applications. - myNut :: Nut - myNut = - -- `Deku.Do`` is the rebindable do context that allows you - -- to use hooks in Deku - Deku.do - -- `Deku.Hooks` contains hooks like `useState`, - -- `useDyn`, and `useMemoized` - setCounter /\ counter <- useState 0 - -- `Deku.DOM`, often imported as `D`, contains all DOM elements, - -- attributes, and event handlers - D.div - [ - -- `Deku.Listeners` contains functions for various common - -- listeners like `click` and `keyUp` - DL.runOn DL.click $ counter <#> add 1 >>> setCounter - -- `Deku.CSS` contains `render`, which allows you to take `CSS` from - -- `purescript-css` and use it in a Deku application - , DA.style_ $ render do - color (rgb 42 142 242) - fontWeight bold - -- `Deku.Attribute` contains constructors for - -- uncommon and ad hoc `x-` attributes - , pure (xdata "my-attr" "my-val") - ] - [ - -- `Deku.Control` contains all non-element buiding blocks - -- for applications, including `text` and `<#~>`, which - -- allows you to switch between elements. - text (show <$> counter) - -- `Deku.Pursx` contains the `~~` operator, which allows you to - -- construct typesafe Deku using plain old html. - , (Proxy :: _ "

Now you're a Deku ~adj~

") ~~ - { adj: text - (counter <#> mod 2 >>> eq 0 >>> if _ then "newb" else "master") - } - ] \ No newline at end of file diff --git a/index.test.js b/index.test.js index 39b79ced..4326bcf6 100644 --- a/index.test.js +++ b/index.test.js @@ -1,333 +1,561 @@ -const tests = require('./output/Test.Main'); +const tests = require("./output/Test.Main"); const doTest = (name, closure, onlyWithSSR) => { - (onlyWithSSR === false ? it.only : it)(name + ' without SSR', () => { - closure((myTest, myScript) => { - document.getElementsByTagName('html')[0].innerHTML = ''; - const finished = tests.runNoSSR(myTest)(); - myScript(false); - finished(); + (onlyWithSSR === false ? it.only : it)(name + " without SSR", async () => { + await closure(async (myTest, myScript) => { + if (!myTest) { + throw new Error(`Cannot find test named ${name}`); + } + document.getElementsByTagName("html")[0].innerHTML = + ''; + const finished = tests.runNoSSR(myTest)( + isNaN(onlyWithSSR) ? 0 : onlyWithSSR + )(); + await myScript(false); + // finished(); }); }); - (onlyWithSSR === true ? it.only : it)(name + ' with SSR', () => { - closure((myTest, myScript) => { + (onlyWithSSR === true ? it.only : it)(name + " with SSR", async () => { + await closure(async (myTest, myScript) => { + if (!myTest) { + throw new Error(`Cannot find test named ${name}`); + } const myHtml = tests.ssr(myTest)(); - document.getElementsByTagName('html')[0].innerHTML = myHtml; - const $ = require('jquery'); - $('body').attr('id', 'mybody'); - const finished = tests.runWithSSR(myTest)(); - myScript(true); - finished(); + document.getElementsByTagName("html")[0].innerHTML = myHtml; + document.body.setAttribute("id", "mybody"); + const finished = tests.runWithSSR(myTest)( + isNaN(onlyWithSSR) ? 0 : onlyWithSSR + )(); + await myScript(true); + // finished(); }); }); -} +}; -describe('deku', () => { +describe("deku", () => { afterEach(() => { - document.getElementsByTagName('html')[0].innerHTML = ''; + document.getElementsByTagName("html")[0].innerHTML = ""; }); - doTest('is sane', (f) => f(tests.sanityCheck, () => { - const $ = require('jquery'); - expect($('#hello').text()).toBe('Hello'); - })); - - doTest('has elements in the correct order', (f) => f(tests.elementsInCorrectOrder, () => { - const $ = require('jquery'); - expect($('#span1-0').text()).toBe('span1-0A'); - expect($('#span7-1').text()).toBe('span7-1B'); - expect($('#span9-3').text()).toBe('span9-3D'); - })); - - doTest('has dyn appearing in the correct composable order when used at beginning', (f) => f(tests.dynAppearsCorrectlyAtBeginning, (usingSSR) => { - const $ = require('jquery'); - // text, span, start beacon, end beacon, button - const base = usingSSR ? 6 : 5; - expect($('#div0').contents().length).toBe(base); - expect($($('#div0').contents()[0]).text()).toBe("foo"); - expect($($('#div0').contents()[base - 4]).text()).toBe("bar"); - expect($($('#div0').contents()[base - 1]).text()).toBe("incr"); - $($('#div0').contents()[base - 1]).trigger("click"); - expect($('#div0').contents().length).toBe(base + 1); - // has shifted button by 1 - expect($($('#div0').contents()[base]).text()).toBe("incr"); - // there's a new node now with the number "0" as its text - expect($($('#div0').contents()[base - 2]).text()).toBe("0"); - // index is now 5 as it has moved back by 1 - $($('#div0').contents()[base]).trigger("click"); - expect($('#div0').contents().length).toBe(base + 2); - // has again shifted button by 1 - expect($($('#div0').contents()[base + 1]).text()).toBe("incr"); - // there's a new node now with the number "1" as its text - expect($($('#div0').contents()[base - 2]).text()).toBe("1"); - // the old node is to the right of the new node - expect($($('#div0').contents()[base - 1]).text()).toBe("0"); - })); - - doTest('has dyn appearing in the correct composable order when used at end', (f) => f(tests.dynAppearsCorrectlyAtEnd, (usingSSR) => { - const $ = require('jquery'); - // text, span, start beacon, end beacon, button - const base = usingSSR ? 6 : 5; - expect($('#div0').contents().length).toBe(base); - expect($($('#div0').contents()[0]).text()).toBe("foo"); - expect($($('#div0').contents()[base - 4]).text()).toBe("bar"); - expect($($('#div0').contents()[base - 1]).text()).toBe("incr"); - $($('#div0').contents()[base - 1]).trigger("click"); - expect($('#div0').contents().length).toBe(base + 1); - // has shifted button by 1 - expect($($('#div0').contents()[base]).text()).toBe("incr"); - // there's a new node now with the number "0" as its text - expect($($('#div0').contents()[base - 2]).text()).toBe("0"); - // index is now 5 as it has moved back by 1 - $($('#div0').contents()[base]).trigger("click"); - expect($('#div0').contents().length).toBe(base + 2); - // has again shifted button by 1 - expect($($('#div0').contents()[base + 1]).text()).toBe("incr"); - // there's a new node now with the number "1" as its text - expect($($('#div0').contents()[base - 1]).text()).toBe("1"); - // the old node is to the left of the new node - expect($($('#div0').contents()[base - 2]).text()).toBe("0"); - })); - - - doTest('deeply nested', (f) => f(tests.deeplyNestedPreservesOrder, () => { - const $ = require('jquery'); - expect($('#incr-0').text()).toBe('incr-0'); - $('#incr-0').trigger("click"); - $('#incr-0').trigger("click"); - expect($('#incr-1').text()).toBe('incr-1'); - $('#incr-1').trigger("click"); - $('#incr-1').trigger("click"); - expect($('#incr-2').text()).toBe('incr-2'); - $('#incr-2').trigger("click"); - $('#incr-2').trigger("click"); - // add dyn0-2 with the third click on incr-0 - $('#incr-0').trigger("click"); - // incr-1 is inserted _above_ incr-0 in the test - expect($('#incr-1').index()).toBeLessThan($('#incr-0').index()); - expect($('#incr-2').index()).toBeLessThan($('#incr-1').index()); - expect($('#incr-2').index()).toBeLessThan($('#dyn0-2').index()); - })); - - doTest('domable is a monoid', (f) => f(tests.isAMonoid, () => { - const $ = require('jquery'); - expect($('#mybody').text()).toBe('monoid'); - })); - - doTest('sends to position correctly', (f) => f(tests.sendsToPosition, () => { - const $ = require('jquery'); - expect($('#dyn0').index()).toBeLessThan($('#dyn1').index()); - expect($('#dyn1').index()).toBeLessThan($('#dyn2').index()); - expect($('#dyn2').index()).toBeLessThan($('#dyn3').index()); - expect($('#dyn3').index()).toBeLessThan($('#dyn4').index()); - // for kicks - expect($('#dyn4').index()).toBeGreaterThan($('#dyn0').index()); - $('#pos').trigger("click"); - // 3 is now at 1 - // so the order is 0, 3, 1, 2, 4 - expect($('#dyn0').index()).toBeLessThan($('#dyn3').index()); - expect($('#dyn3').index()).toBeLessThan($('#dyn1').index()); - expect($('#dyn1').index()).toBeLessThan($('#dyn2').index()); - expect($('#dyn2').index()).toBeLessThan($('#dyn4').index()); - // for kicks - expect($('#dyn4').index()).toBeGreaterThan($('#dyn0').index()); - })); - - doTest('sends to position correctly when elt is fixed', (f) => f(tests.sendsToPositionFixed, () => { - const $ = require('jquery'); - expect($('#dyn0a').index()).toBeLessThan($('#dyn1a').index()); - expect($('#dyn1a').index()).toBeLessThan($('#dyn2a').index()); - expect($('#dyn2a').index()).toBeLessThan($('#dyn3a').index()); - expect($('#dyn3a').index()).toBeLessThan($('#dyn4a').index()); - // for kicks - expect($('#dyn4a').index()).toBeGreaterThan($('#dyn0a').index()); - $('#pos').trigger("click"); - // 3 is now at 1 - // so the order is 0, 3, 1, 2, 4 - expect($('#dyn0a').index()).toBeLessThan($('#dyn3a').index()); - expect($('#dyn3a').index()).toBeLessThan($('#dyn1a').index()); - expect($('#dyn1a').index()).toBeLessThan($('#dyn2a').index()); - expect($('#dyn2a').index()).toBeLessThan($('#dyn4a').index()); - // for kicks - expect($('#dyn4a').index()).toBeGreaterThan($('#dyn0a').index()); - })); - - doTest('sends to position correctly', (f) => f(tests.insertsAtCorrectPositions, () => { - const $ = require('jquery'); - expect($('#dyn0').index()).toBeLessThan($('#dyn1').index()); - expect($('#dyn1').index()).toBeLessThan($('#dyn2').index()); - expect($('#dyn2').index()).toBeLessThan($('#dyn3').index()); - expect($('#dyn3').index()).toBeLessThan($('#dyn4').index()); - // for kicks - expect($('#dyn4').index()).toBeGreaterThan($('#dyn0').index()); - })); - - doTest('switcher works for compositional elements', (f) => f(tests.switcherWorksForCompositionalElements, () => { - const $ = require('jquery'); - expect($('#id0').text()).toBe('0-0'); - expect($('#id1').text()).toBe('0-1'); - expect($('#id2').text()).toBe('0-2'); - $('#incr').trigger("click"); - expect($('#id0').text()).toBe('1-0'); - expect($('#id1').text()).toBe('1-1'); - expect($('#id2').text()).toBe('1-2'); - $('#incr').trigger("click"); - expect($('#id0').text()).toBe('2-0'); - expect($('#id1').text()).toBe('2-1'); - expect($('#id2').text()).toBe('2-2'); - })); - - doTest('tabbed navigation with pursx has correct layout', (f) => f(tests.tabbedNavigationWithPursx, () => { - const $ = require('jquery'); - expect($('#home').text()).toBe('home'); - $('#about-btn').trigger('click') - expect($('#home').text()).toBe(''); - expect($('#about').text()).toBe('about deku'); - $('#contact-btn').trigger('click') - expect($('#about').text()).toBe(''); - expect($('#contact').text()).toBe("contact mike at site.com thanks"); - })); - - doTest('portals compose', (f) => f(tests.portalsCompose, () => { - const $ = require('jquery'); - // d0, then abc, then d1, then d2, then the button - expect($('#maindiv').text()).toBe('d0abcd1d2incr'); - $('#incr').trigger("click"); - // shifts the portal - expect($('#maindiv').text()).toBe('d0d1abcd2incr'); - $('#incr').trigger("click"); - // shifts the portal - expect($('#maindiv').text()).toBe('d0d1d2abcincr'); - })); - - doTest('global portals retain portalness when sent out of scope', (f) => f(tests.globalPortalsRetainPortalnessWhenSentOutOfScope, () => { - const $ = require('jquery'); - expect($('#outer-scope').text()).toBe('no dice!'); - expect($('#inner-scope').text()).toBe('foo'); - $('#portal-btn').trigger("click"); - expect($('#outer-scope').text()).toBe('foo'); - expect($('#inner-scope').text()).toBe('no dice!'); - $('#portal-btn').trigger("click"); - // starting from the second click, the top stops receiving events - // which means that the portal should never flip back to it - // we do this in the test to make sure that the portal is - // referentially opaque, meaning that even without an event - // firing it still disappears from its old setting - expect($('#outer-scope').text()).toBe(''); - expect($('#inner-scope').text()).toBe('foo'); - $('#portal-btn').trigger("click"); - expect($('#outer-scope').text()).toBe(''); - expect($('#inner-scope').text()).toBe('no dice!'); - $('#portal-btn').trigger("click"); - expect($('#outer-scope').text()).toBe(''); - expect($('#inner-scope').text()).toBe('foo'); - })); - - doTest('local portals lose portalness when sent out of scope', (f) => f(tests.localPortalsLosePortalnessWhenSentOutOfScope, () => { - const $ = require('jquery'); - expect($('#outer-scope').text()).toBe('no dice!'); - expect($('#inner-scope').text()).toBe('foo'); - $('#portal-btn').trigger("click"); - expect($('#outer-scope').text()).toBe('foo'); - expect($('#inner-scope').text()).toBe('no dice!'); - $('#portal-btn').trigger("click"); - // starting from the second click, the top stops receiving events - // unlike the test above, which is identical except for the - // local/global portal split - // the "foo" should linger in the outer scope - // because a fresh constructor is used - expect($('#outer-scope').text()).toBe('foo'); - expect($('#inner-scope').text()).toBe('foo'); - $('#portal-btn').trigger("click"); - expect($('#outer-scope').text()).toBe('foo'); - expect($('#inner-scope').text()).toBe('no dice!'); - $('#portal-btn').trigger("click"); - expect($('#outer-scope').text()).toBe('foo'); - expect($('#inner-scope').text()).toBe('foo'); - })); - - doTest('pursx composes', (f) => f(tests.pursXComposes, () => { - const $ = require('jquery'); - expect($('#div0').text()).toBe('début milieu après-milieu fin'); - })); - - doTest('lifecycle events work', (f) => f(tests.lifecycle, () => { - const $ = require('jquery'); - $('#about-btn').trigger('click') - expect($('#hack').text()).toBe('hello'); - $('#contact-btn').trigger('click') - expect($('#hack').text()).toBe('hello'); - $('#home-btn').trigger('click') - expect($('#hack').text()).toBe('goodbye'); - })); - - doTest('lifecycle has a difference before and after mounting', (f) => f(tests.lifecycleWillAndDidMount, () => { - const $ = require('jquery'); - expect($('#span1').text()).toBe(''); - expect($('#span2').text()).toBe('42'); - })); - - doTest('attributes are correctly unset', (f) => f(tests.unsetUnsets, () => { - const $ = require('jquery'); - expect($('#span1').attr('style')).toBe('color:red;'); - $('#unsetter').trigger('click'); - expect($('#span1').attr('style')).toBe(undefined); - })); + doTest("is sane", (f) => + f(tests.sanityCheck, () => { + const $ = require("jquery"); + expect($("#hello").text()).toBe("Hello"); + }) + ); + + doTest("two elements render", (f) => + f(tests.twoElements, () => { + const $ = require("jquery"); + expect($("#maindiv").text()).toBe("helloworld"); + }) + ); + + doTest("has elements in the correct order", (f) => + f(tests.elementsInCorrectOrder, () => { + const $ = require("jquery"); + expect($("#span1-0").text()).toBe("span1-0A"); + expect($("#span7-1").text()).toBe("span7-1B"); + expect($("#span9-3").text()).toBe("span9-3D"); + }) + ); + + doTest( + "has dyn appearing in the correct composable order when used at beginning", + (f) => + f(tests.dynAppearsCorrectlyAtBeginning, (usingSSR) => { + const $ = require("jquery"); + // text, span, start beacon, end beacon, button + const base = usingSSR ? 6 : 5; + expect($("#div0").contents().length).toBe(base); + expect($($("#div0").contents()[0]).text()).toBe("foo"); + expect($($("#div0").contents()[base - 4]).text()).toBe("bar"); + expect($($("#div0").contents()[base - 1]).text()).toBe("incr"); + $($("#div0").contents()[base - 1]).trigger("click"); + expect($("#div0").contents().length).toBe(base + 1); + // has shifted button by 1 + expect($($("#div0").contents()[base]).text()).toBe("incr"); + // there's a new node now with the number "0" as its text + expect($($("#div0").contents()[base - 2]).text()).toBe("0"); + // index is now 5 as it has moved back by 1 + $($("#div0").contents()[base]).trigger("click"); + expect($("#div0").contents().length).toBe(base + 2); + // has again shifted button by 1 + expect($($("#div0").contents()[base + 1]).text()).toBe("incr"); + // there's a new node now with the number "1" as its text + expect($($("#div0").contents()[base - 2]).text()).toBe("1"); + // the old node is to the right of the new node + expect($($("#div0").contents()[base - 1]).text()).toBe("0"); + }) + ); + + doTest( + "has dyn appearing in the correct composable order when used at end", + (f) => + f(tests.dynAppearsCorrectlyAtEnd, (usingSSR) => { + const $ = require("jquery"); + // text, span, start beacon, end beacon, button + const base = usingSSR ? 6 : 5; + expect($("#div0").contents().length).toBe(base); + expect($($("#div0").contents()[0]).text()).toBe("foo"); + expect($($("#div0").contents()[base - 4]).text()).toBe("bar"); + expect($($("#div0").contents()[base - 1]).text()).toBe("incr"); + $($("#div0").contents()[base - 1]).trigger("click"); + expect($("#div0").contents().length).toBe(base + 1); + // has shifted button by 1 + expect($($("#div0").contents()[base]).text()).toBe("incr"); + // there's a new node now with the number "0" as its text + expect($($("#div0").contents()[base - 2]).text()).toBe("0"); + // index is now 5 as it has moved back by 1 + $($("#div0").contents()[base]).trigger("click"); + expect($("#div0").contents().length).toBe(base + 2); + // has again shifted button by 1 + expect($($("#div0").contents()[base + 1]).text()).toBe("incr"); + // there's a new node now with the number "1" as its text + expect($($("#div0").contents()[base - 1]).text()).toBe("1"); + // the old node is to the left of the new node + expect($($("#div0").contents()[base - 2]).text()).toBe("0"); + }) + ); + + doTest("deeply nested", (f) => + f(tests.deeplyNestedPreservesOrder, () => { + const $ = require("jquery"); + expect($("#incr-0").text()).toBe("incr-0"); + $("#incr-0").trigger("click"); + $("#incr-0").trigger("click"); + expect($("#incr-1").text()).toBe("incr-1"); + $("#incr-1").trigger("click"); + $("#incr-1").trigger("click"); + expect($("#incr-2").text()).toBe("incr-2"); + $("#incr-2").trigger("click"); + $("#incr-2").trigger("click"); + // add dyn0-2 with the third click on incr-0 + $("#incr-0").trigger("click"); + // incr-1 is inserted _above_ incr-0 in the test + expect($("#incr-1").index()).toBeLessThan($("#incr-0").index()); + expect($("#incr-2").index()).toBeLessThan($("#incr-1").index()); + expect($("#incr-2").index()).toBeLessThan($("#dyn0-2").index()); + }) + ); + + doTest("domable is a monoid", (f) => + f(tests.isAMonoid, () => { + const $ = require("jquery"); + expect($("#mybody").text()).toBe("monoid"); + }) + ); + + doTest("sends to position correctly", (f) => + f(tests.sendsToPosition, () => { + const $ = require("jquery"); + expect($("#dyn0").index()).toBeLessThan($("#dyn1").index()); + expect($("#dyn1").index()).toBeLessThan($("#dyn2").index()); + expect($("#dyn2").index()).toBeLessThan($("#dyn3").index()); + expect($("#dyn3").index()).toBeLessThan($("#dyn4").index()); + // for kicks + expect($("#dyn4").index()).toBeGreaterThan($("#dyn0").index()); + $("#pos").trigger("click"); + // 3 is now at 1 + // so the order is 0, 3, 1, 2, 4 + expect($("#dyn0").index()).toBeLessThan($("#dyn3").index()); + expect($("#dyn3").index()).toBeLessThan($("#dyn1").index()); + expect($("#dyn1").index()).toBeLessThan($("#dyn2").index()); + expect($("#dyn2").index()).toBeLessThan($("#dyn4").index()); + // for kicks + expect($("#dyn4").index()).toBeGreaterThan($("#dyn0").index()); + }) + ); + + doTest("sends to position correctly when elt is fixed", (f) => + f(tests.sendsToPositionFixed, () => { + const $ = require("jquery"); + expect($("#dyn0a").index()).toBeLessThan($("#dyn1a").index()); + expect($("#dyn1a").index()).toBeLessThan($("#dyn2a").index()); + expect($("#dyn2a").index()).toBeLessThan($("#dyn3a").index()); + expect($("#dyn3a").index()).toBeLessThan($("#dyn4a").index()); + // for kicks + expect($("#dyn4a").index()).toBeGreaterThan($("#dyn0a").index()); + $("#pos").trigger("click"); + // 3 is now at 1 + // so the order is 0, 3, 1, 2, 4 + expect($("#dyn0a").index()).toBeLessThan($("#dyn3a").index()); + expect($("#dyn3a").index()).toBeLessThan($("#dyn1a").index()); + expect($("#dyn1a").index()).toBeLessThan($("#dyn2a").index()); + expect($("#dyn2a").index()).toBeLessThan($("#dyn4a").index()); + // for kicks + expect($("#dyn4a").index()).toBeGreaterThan($("#dyn0a").index()); + }) + ); + + doTest("sends to position correctly", (f) => + f(tests.insertsAtCorrectPositions, () => { + const $ = require("jquery"); + expect($("#dyn0").index()).toBeLessThan($("#dyn1").index()); + expect($("#dyn1").index()).toBeLessThan($("#dyn2").index()); + expect($("#dyn2").index()).toBeLessThan($("#dyn3").index()); + expect($("#dyn3").index()).toBeLessThan($("#dyn4").index()); + // for kicks + expect($("#dyn4").index()).toBeGreaterThan($("#dyn0").index()); + }) + ); + + doTest("switcher works for compositional elements", (f) => + f(tests.switcherWorksForCompositionalElements, () => { + const $ = require("jquery"); + expect($("#id0").text()).toBe("0-0"); + expect($("#id1").text()).toBe("0-1"); + expect($("#id2").text()).toBe("0-2"); + $("#incr").trigger("click"); + expect($("#id0").text()).toBe("1-0"); + expect($("#id1").text()).toBe("1-1"); + expect($("#id2").text()).toBe("1-2"); + $("#incr").trigger("click"); + expect($("#id0").text()).toBe("2-0"); + expect($("#id1").text()).toBe("2-1"); + expect($("#id2").text()).toBe("2-2"); + }) + ); + + doTest("tabbed navigation with pursx has correct layout", (f) => + f(tests.tabbedNavigationWithPursx, () => { + const $ = require("jquery"); + expect($("#home").text()).toBe("home"); + $("#about-btn").trigger("click"); + expect($("#home").length === 0); + expect($("#about").text()).toBe("about deku"); + $("#contact-btn").trigger("click"); + expect($("#about").length === 0); + expect($("#contact").text()).toBe("contact mike at site.com thanks"); + }) + ); + + doTest("switchers compose", (f) => + f(tests.switchersCompose, () => { + const $ = require("jquery"); + expect($("#div1a").index()).toBeGreaterThan($("#div0").index()); + expect($("#div1a").index()).toBeLessThan($("#div2").index()); + $("#incr").trigger("click"); + expect($("#div1b").index()).toBeGreaterThan($("#div0").index()); + expect($("#div1b").index()).toBeLessThan($("#div2").index()); + $("#incr").trigger("click"); + expect($("#div1a").index()).toBeGreaterThan($("#div0").index()); + expect($("#div1a").index()).toBeLessThan($("#div2").index()); + }) + ); + + doTest("portals compose", (f) => + f(tests.portalsCompose, () => { + const $ = require("jquery"); + // d0, then abc, then d1, then d2, then the button + expect($("#maindiv").text()).toBe("d0abcd1d2incr"); + $("#incr").trigger("click"); + // shifts the portal + expect($("#maindiv").text()).toBe("d0d1abcd2incr"); + $("#incr").trigger("click"); + // shifts the portal + expect($("#maindiv").text()).toBe("d0d1d2abcincr"); + }) + ); + + doTest("global portals retain portalness when sent out of scope", (f) => + f(tests.globalPortalsRetainPortalnessWhenSentOutOfScope, () => { + const $ = require("jquery"); + $("#push-ported-nut").trigger("click"); + expect($("#outer-scope").text()).toBe("no dice!"); + expect($("#inner-scope").text()).toBe("foo"); + $("#portal-btn").trigger("click"); + expect($("#outer-scope").text()).toBe("foo"); + expect($("#inner-scope").text()).toBe("no dice!"); + $("#portal-btn").trigger("click"); + // starting from the second click, the top stops receiving events + // which means that the portal should never flip back to it + // we do this in the test to make sure that the portal is + // referentially opaque, meaning that even without an event + // firing it still disappears from its old setting + expect($("#outer-scope").text()).toBe(""); + expect($("#inner-scope").text()).toBe("foo"); + $("#portal-btn").trigger("click"); + expect($("#outer-scope").text()).toBe(""); + expect($("#inner-scope").text()).toBe("no dice!"); + $("#portal-btn").trigger("click"); + expect($("#outer-scope").text()).toBe(""); + expect($("#inner-scope").text()).toBe("foo"); + }) + ); + + doTest("local portals lose portalness when sent out of scope", (f) => + f(tests.localPortalsLosePortalnessWhenSentOutOfScope, () => { + const $ = require("jquery"); + $("#push-ported-nut").trigger("click"); + expect($("#outer-scope").text()).toBe("no dice!"); + expect($("#inner-scope").text()).toBe("foo"); + $("#portal-btn").trigger("click"); + expect($("#outer-scope").text()).toBe("foo"); + expect($("#inner-scope").text()).toBe("no dice!"); + $("#portal-btn").trigger("click"); + // starting from the second click, the top stops receiving events + // unlike the test above, which is identical except for the + // local/global portal split + // the "foo" should linger in the outer scope + // because a fresh constructor is used + expect($("#outer-scope").text()).toBe("foo"); + expect($("#inner-scope").text()).toBe("foo"); + $("#portal-btn").trigger("click"); + expect($("#outer-scope").text()).toBe("foo"); + expect($("#inner-scope").text()).toBe("no dice!"); + $("#portal-btn").trigger("click"); + expect($("#outer-scope").text()).toBe("foo"); + expect($("#inner-scope").text()).toBe("foo"); + }) + ); + + doTest("pursx composes", (f) => + f(tests.pursXComposes, () => { + const $ = require("jquery"); + expect($("#div0").text()).toBe("début milieu après-milieu fin"); + }) + ); + + doTest("switcher switches", (f) => + f(tests.switcherSwitches, () => { + const $ = require("jquery"); + $("#about-btn").trigger("click"); + expect($("#hack").text()).toBe("hello"); + $("#contact-btn").trigger("click"); + expect($("#hack").text()).toBe("hello"); + $("#home-btn").trigger("click"); + expect($("#hack").text()).toBe("goodbye"); + }) + ); + + doTest("lots of switching!", (f) => + f(tests.lotsOfSwitching, () => { + const $ = require("jquery"); + expect($("#hack").text()).toBe("hello"); + //// + $("#home-btn").trigger("click"); + expect($("#hack").text()).toBe("goodbye"); + $("#home-btn").trigger("click"); + expect($("#hack").text()).toBe("hello"); + //// + $("#home-btn").trigger("click"); + expect($("#hack").text()).toBe("goodbye"); + $("#home-btn").trigger("click"); + expect($("#hack").text()).toBe("hello"); + }) + ); + + doTest("attributes are correctly unset", (f) => + f(tests.unsetUnsets, () => { + const $ = require("jquery"); + expect($("#span1").attr("style")).toBe("color:red;"); + $("#unsetter").trigger("click"); + expect($("#span1").attr("style")).toBe(undefined); + }) + ); // this test has no assertions - just makes sure that emptiness is // typeset without breaking the engine - doTest('empty text does not break ssr', (f) => f(tests.emptyTextIsSet, () => { - })); - - doTest('useRef has correct behavior', (f) => f(tests.useRefWorks, () => { - const $ = require('jquery'); - expect($('#b0').text()).toBe(''); - expect($('#b1').text()).toBe(''); - expect($('#b2').text()).toBe(''); - expect($('#b3').text()).toBe(''); - expect($('#b4').text()).toBe(''); - $('#b3').trigger('click'); - expect($('#b0').text()).toBe(''); - expect($('#b1').text()).toBe(''); - expect($('#b2').text()).toBe(''); - expect($('#b3').text()).toBe('0'); - expect($('#b4').text()).toBe(''); - $('#counter').trigger('click'); - $('#counter').trigger('click'); - $('#b1').trigger('click'); - expect($('#b0').text()).toBe(''); - expect($('#b1').text()).toBe('2'); - expect($('#b2').text()).toBe(''); - expect($('#b3').text()).toBe('0'); - expect($('#b4').text()).toBe(''); - $('#b3').trigger('click'); - expect($('#b0').text()).toBe(''); - expect($('#b1').text()).toBe('2'); - expect($('#b2').text()).toBe(''); - expect($('#b3').text()).toBe('2'); - expect($('#b4').text()).toBe(''); - })); - - doTest('useEffect has correct behavior', (f) => f(tests.useEffectWorks, () => { - const $ = require('jquery'); - expect($('#mydiv').text()).toBe('0'); - $('#counter').trigger('click'); - expect($('#mydiv').text()).toBe('2'); - $('#counter').trigger('click'); - expect($('#mydiv').text()).toBe('3'); - $('#counter').trigger('click'); - expect($('#mydiv').text()).toBe('4'); - $('#counter').trigger('click'); - expect($('#mydiv').text()).toBe('6'); - })); - - doTest('custom hooks do their thing', (f) => f(tests.customHooksDoTheirThing, () => { - const $ = require('jquery'); - expect($('#mydiv1').text()).toBe('42'); - expect($('#mydiv2').text()).toBe('48'); - $('#counter').trigger('click'); - expect($('#mydiv1').text()).toBe('43'); - expect($('#mydiv2').text()).toBe('49'); - })); -}); + doTest("empty text does not break ssr", (f) => + f(tests.emptyTextIsSet, () => {}) + ); + + doTest("useRef has correct behavior", (f) => + f(tests.useRefWorks, () => { + const $ = require("jquery"); + expect($("#b0").text()).toBe(""); + expect($("#b1").text()).toBe(""); + expect($("#b2").text()).toBe(""); + expect($("#b3").text()).toBe(""); + expect($("#b4").text()).toBe(""); + $("#b3").trigger("click"); + expect($("#b0").text()).toBe(""); + expect($("#b1").text()).toBe(""); + expect($("#b2").text()).toBe(""); + expect($("#b3").text()).toBe("0"); + expect($("#b4").text()).toBe(""); + $("#counter").trigger("click"); + $("#counter").trigger("click"); + $("#b1").trigger("click"); + expect($("#b0").text()).toBe(""); + expect($("#b1").text()).toBe("2"); + expect($("#b2").text()).toBe(""); + expect($("#b3").text()).toBe("0"); + expect($("#b4").text()).toBe(""); + $("#b3").trigger("click"); + expect($("#b0").text()).toBe(""); + expect($("#b1").text()).toBe("2"); + expect($("#b2").text()).toBe(""); + expect($("#b3").text()).toBe("2"); + expect($("#b4").text()).toBe(""); + }) + ); + + doTest("useRef hook can simulate hot events", (f) => + f(tests.refToHot, () => { + const $ = require("jquery"); + // first, set the label to "bar" + $("#setlabel").trigger("click"); + // then, click a bunch of stuff + $("#button0").trigger("click"); + $("#button1").trigger("click"); + $("#button2").trigger("click"); + $("#button3").trigger("click"); + $("#button4").trigger("click"); + $("#button5").trigger("click"); + $("#button6").trigger("click"); + // as the poll is hot, we get the most recent value + expect($("#myspan").text()).toBe("bar"); + }) + ); + + doTest("useHot is hotttt", (f) => + f(tests.hotIsHot, () => { + const $ = require("jquery"); + // first, set the label to "bar" + $("#setlabel").trigger("click"); + // then, click a bunch of stuff + $("#button0").trigger("click"); + $("#button1").trigger("click"); + $("#button2").trigger("click"); + $("#button3").trigger("click"); + $("#button4").trigger("click"); + $("#button5").trigger("click"); + $("#button6").trigger("click"); + // as the poll is hot, we get the most recent value + expect($("#myspan").text()).toBe("bar"); + }) + ); + + doTest("simple switcher", (f) => + f(tests.simpleSwitcher, () => { + const $ = require("jquery"); + expect($("#innertrue").text()).toBe("trueswitch"); + $("#doswitch").trigger("click"); + expect($("#innerfalse").text()).toBe("falseswitch"); + $("#doswitch").trigger("click"); + expect($("#innertrue").text()).toBe("trueswitch"); + }) + ); + doTest("useHot changes its value", (f) => + f(tests.useHotWorks, () => { + const $ = require("jquery"); + expect($("#hotdiv").text()).toBe("0.42"); + $("#ba").trigger("click"); + const nw = $("#hotdiv").text(); + expect(nw).not.toBe("0.42"); + $("#bb").trigger("click"); + expect($("#newdiv").text()).toBe(nw); + }) + ); + + doTest("useState works #2", (f) => + f(tests.useStateWorks2, () => { + const $ = require("jquery"); + expect($("#hotdiv").text()).toBe("0.42"); + $("#ba").trigger("click"); + const nw = $("#hotdiv").text(); + expect(nw).not.toBe("0.42"); + $("#bb").trigger("click"); + expect($("#newdiv").text()).toBe("0.42"); + }) + ); + + doTest("todo mvc", (f) => + f(tests.todoMVC, async () => { + const $ = require("jquery"); + // because of the injectElementT + await new Promise((resolve) => setTimeout(resolve, 42.0)); + $("#add").trigger("click"); + expect($("#item0").text()).toBe("Tasko primo"); + }) + ); + + doTest("useEffect with a ref has correct behavior", (f) => + f(tests.useEffectCanBeSimulatedWithRef, () => { + const $ = require("jquery"); + expect($("#mydiv").text()).toBe("0"); + $("#counter").trigger("click"); + expect($("#mydiv").text()).toBe("2"); + $("#counter").trigger("click"); + expect($("#mydiv").text()).toBe("3"); + $("#counter").trigger("click"); + expect($("#mydiv").text()).toBe("4"); + $("#counter").trigger("click"); + expect($("#mydiv").text()).toBe("6"); + }) + ); + + doTest("custom hooks do their thing", (f) => + f(tests.customHooksDoTheirThing, () => { + const $ = require("jquery"); + $("#counter").trigger("click"); + expect($("#mydiv1").text()).toBe("43"); + expect($("#mydiv2").text()).toBe("49"); + }) + ); + + doTest("used state works", (f) => + f(tests.useStateWorks, () => { + const $ = require("jquery"); + expect($("#maindiv").text()).toBe("hello"); + $("#button").trigger("click"); + expect($("#maindiv").text()).toBe("world"); + }) + ); + + doTest("use rant works", (f) => + f(tests.useRantWorks, () => { + const $ = require("jquery"); + $("#button").trigger("click"); + expect($("#maindiv").text()).toBe("0"); + expect($("#maindiv2").text()).toBe("0"); + $("#button").trigger("click"); + expect($("#maindiv").text()).toBe("1"); + expect($("#maindiv2").text()).toBe("1"); + $("#button").trigger("click"); + expect($("#maindiv").text()).toBe("2"); + expect($("#maindiv2").text()).toBe("2"); + $("#button").trigger("click"); + expect($("#maindiv").text()).toBe("3"); + expect($("#maindiv2").text()).toBe("3"); + $("#button").trigger("click"); + expect($("#maindiv").text()).toBe("4"); + expect($("#maindiv2").text()).toBe("4"); + }) + ); + + doTest("pure works", (f) => + f(tests.pureWorks, () => { + const $ = require("jquery"); + expect($("#hello").text()).toBe("hello"); + }) + ); + doTest("useRant works", (f) => + f(tests.useHotRantWorks, () => { + const $ = require("jquery"); + expect($("#da").text()).toBe("1"); + $("#update").trigger("click"); + expect($("#da").text()).toBe("2"); + $("#update").trigger("click"); + expect($("#da").text()).toBe("3"); + $("#reveal").trigger("click"); + expect($("#da").text()).toBe("3"); + expect($("#db").text()).toBe("3"); + $("#update").trigger("click"); + expect($("#da").text()).toBe("4"); + expect($("#db").text()).toBe("4"); + }) + ); + doTest("stress test doesn't blow up", (f) => + f(tests.stressTest, () => { + const $ = require("jquery"); + $("#run").trigger("click"); + $("#swaprows").trigger("click"); + $("#clear").trigger("click"); + // $("#runlots").trigger("click"); + }) + ); +}); diff --git a/package-lock.json b/package-lock.json index 743ab6cd..1b44a9f6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,7 +19,8 @@ "headless-devtools": "^2.0.1", "jest": "^29.0.3", "jest-environment-jsdom": "^29.0.3", - "jquery": "^3.6.1", + "jquery": "^3.7.0", + "jsdom": "^22.1.0", "netlify-cli": "^8.0.1", "psc-package": "^4.0.1", "pulp": "^16.0.2", @@ -1698,22 +1699,6 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz", - "integrity": "sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/@gar/promisify": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", @@ -2707,9 +2692,9 @@ "dev": true }, "node_modules/acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -4133,23 +4118,17 @@ "dev": true }, "node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-3.0.0.tgz", + "integrity": "sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg==", "dev": true, "dependencies": { - "cssom": "~0.3.6" + "rrweb-cssom": "^0.6.0" }, "engines": { - "node": ">=8" + "node": ">=14" } }, - "node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - }, "node_modules/cyclist": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.2.tgz", @@ -4163,17 +4142,17 @@ "dev": true }, "node_modules/data-urls": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", - "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-4.0.0.tgz", + "integrity": "sha512-/mMTei/JXPqvFqQtfyTowxmJVwr2PVAeCcDxyFf6LhoOu/09TX2OX3kb2wzi4DMXcfj4OItwDOnhl5oziPnT6g==", "dev": true, "dependencies": { "abab": "^2.0.6", "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^11.0.0" + "whatwg-url": "^12.0.0" }, "engines": { - "node": ">=12" + "node": ">=14" } }, "node_modules/debug": { @@ -4205,12 +4184,6 @@ "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", "dev": true }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, "node_modules/deepmerge": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.0.tgz", @@ -4537,54 +4510,6 @@ "esbuild-windows-arm64": "0.14.54" } }, - "node_modules/esbuild-android-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz", - "integrity": "sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-android-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz", - "integrity": "sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-darwin-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz", - "integrity": "sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/esbuild-darwin-arm64": { "version": "0.14.54", "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz", @@ -4601,262 +4526,6 @@ "node": ">=12" } }, - "node_modules/esbuild-freebsd-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz", - "integrity": "sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-freebsd-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz", - "integrity": "sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-32": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz", - "integrity": "sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz", - "integrity": "sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-arm": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz", - "integrity": "sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz", - "integrity": "sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-mips64le": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz", - "integrity": "sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-ppc64le": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz", - "integrity": "sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-riscv64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz", - "integrity": "sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-s390x": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz", - "integrity": "sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-netbsd-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz", - "integrity": "sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-openbsd-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz", - "integrity": "sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-sunos-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz", - "integrity": "sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-32": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz", - "integrity": "sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz", - "integrity": "sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz", - "integrity": "sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -4876,15 +4545,14 @@ } }, "node_modules/escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "dev": true, "dependencies": { "esprima": "^4.0.1", "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" + "esutils": "^2.0.2" }, "bin": { "escodegen": "bin/escodegen.js", @@ -5052,12 +4720,6 @@ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, "node_modules/fast-safe-stringify": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", @@ -6543,6 +6205,117 @@ } } }, + "node_modules/jest-environment-jsdom/node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-jsdom/node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + }, + "node_modules/jest-environment-jsdom/node_modules/data-urls": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", + "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", + "dev": true, + "dependencies": { + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/jest-environment-jsdom/node_modules/jsdom": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", + "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", + "dev": true, + "dependencies": { + "abab": "^2.0.6", + "acorn": "^8.8.1", + "acorn-globals": "^7.0.0", + "cssom": "^0.5.0", + "cssstyle": "^2.3.0", + "data-urls": "^3.0.2", + "decimal.js": "^10.4.2", + "domexception": "^4.0.0", + "escodegen": "^2.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.1", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.2", + "parse5": "^7.1.1", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.2", + "w3c-xmlserializer": "^4.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0", + "ws": "^8.11.0", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jest-environment-jsdom/node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/jest-environment-jsdom/node_modules/tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dev": true, + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/jest-environment-jsdom/node_modules/whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dev": true, + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/jest-environment-node": { "version": "29.4.3", "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.4.3.tgz", @@ -7583,9 +7356,9 @@ } }, "node_modules/jquery": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.3.tgz", - "integrity": "sha512-bZ5Sy3YzKo9Fyc8wH2iIQK4JImJ6R0GWI9kL1/k7Z91ZBNgkRXE6U0JfHIizZbort8ZunhSI3jw9I6253ahKfg==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.0.tgz", + "integrity": "sha512-umpJ0/k8X0MvD1ds0P9SfowREz2LenHsQaxSohMZ5OMNEU2r0tf8pdeEFTHMFxWVxKNyU9rTtK3CWzUCTKJUeQ==", "dev": true }, "node_modules/js-tokens": { @@ -7608,27 +7381,24 @@ } }, "node_modules/jsdom": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", - "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", + "version": "22.1.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-22.1.0.tgz", + "integrity": "sha512-/9AVW7xNbsBv6GfWho4TTNjEo9fe6Zhf9O7s0Fhhr3u+awPwAJMKwAMXnkk5vBxflqLW9hTHX/0cs+P3gW+cQw==", "dev": true, "dependencies": { "abab": "^2.0.6", - "acorn": "^8.8.1", - "acorn-globals": "^7.0.0", - "cssom": "^0.5.0", - "cssstyle": "^2.3.0", - "data-urls": "^3.0.2", - "decimal.js": "^10.4.2", + "cssstyle": "^3.0.0", + "data-urls": "^4.0.0", + "decimal.js": "^10.4.3", "domexception": "^4.0.0", - "escodegen": "^2.0.0", "form-data": "^4.0.0", "html-encoding-sniffer": "^3.0.0", "http-proxy-agent": "^5.0.0", "https-proxy-agent": "^5.0.1", "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.2", - "parse5": "^7.1.1", + "nwsapi": "^2.2.4", + "parse5": "^7.1.2", + "rrweb-cssom": "^0.6.0", "saxes": "^6.0.0", "symbol-tree": "^3.2.4", "tough-cookie": "^4.1.2", @@ -7636,12 +7406,12 @@ "webidl-conversions": "^7.0.0", "whatwg-encoding": "^2.0.0", "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^11.0.0", - "ws": "^8.11.0", + "whatwg-url": "^12.0.1", + "ws": "^8.13.0", "xml-name-validator": "^4.0.0" }, "engines": { - "node": ">=14" + "node": ">=16" }, "peerDependencies": { "canvas": "^2.5.0" @@ -7774,19 +7544,6 @@ "node": ">=6" } }, - "node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", @@ -32926,9 +32683,9 @@ } }, "node_modules/nwsapi": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.2.tgz", - "integrity": "sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==", + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", + "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", "dev": true }, "node_modules/object-assign": { @@ -32989,23 +32746,6 @@ "node": ">=0.4.0" } }, - "node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/os-browserify": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", @@ -33265,15 +33005,6 @@ "node": ">=8" } }, - "node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/pretty-format": { "version": "29.4.3", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.3.tgz", @@ -34097,6 +33828,12 @@ "inherits": "^2.0.1" } }, + "node_modules/rrweb-cssom": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz", + "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==", + "dev": true + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -35081,15 +34818,15 @@ } }, "node_modules/tr46": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", - "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz", + "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==", "dev": true, "dependencies": { - "punycode": "^2.1.1" + "punycode": "^2.3.0" }, "engines": { - "node": ">=12" + "node": ">=14" } }, "node_modules/tr46/node_modules/punycode": { @@ -35131,18 +34868,6 @@ "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", "dev": true }, - "node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/type-detect": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", @@ -35417,16 +35142,16 @@ } }, "node_modules/whatwg-url": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", - "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-12.0.1.tgz", + "integrity": "sha512-Ed/LrqB8EPlGxjS+TrsXcpUond1mhccS3pchLhzSgPCnTimUCKj3IZE75pAs5m6heB2U2TMerKFUXheyHY+VDQ==", "dev": true, "dependencies": { - "tr46": "^3.0.0", + "tr46": "^4.1.1", "webidl-conversions": "^7.0.0" }, "engines": { - "node": ">=12" + "node": ">=14" } }, "node_modules/which": { @@ -35444,15 +35169,6 @@ "node": ">= 8" } }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", @@ -35526,9 +35242,9 @@ } }, "node_modules/ws": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.12.1.tgz", - "integrity": "sha512-1qo+M9Ba+xNhPB+YTWUlK6M17brTut5EXbcBaMRN5pH5dFrXz7lzz1ChFSUq3bOUl8yEvSenhHmYUNJxFzdJew==", + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", "dev": true, "engines": { "node": ">=10.0.0" diff --git a/package.json b/package.json index 973caca7..70185d92 100644 --- a/package.json +++ b/package.json @@ -10,10 +10,6 @@ "build:examples": "spago build -p examples", "snapshot": "npm run bundle:performance && spago -x test/test.dhall run --main Performance.Snapshot.Write", "test": "npm run build && jest", - "test:optimizer-performance": "npm run bundle:optimizer-performance && spago -x test/test.dhall run --main Performance.Main", - "test:performance": "npm run bundle:performance && spago -x test/test.dhall run --main Performance.Main", - "bundle:examples": "spago bundle -p examples", - "bundle:performance": "spago -x test/test.dhall bundle-app --minify --main Performance.Test.App --to test/test.js", "bundle:optimizer-performance": "spago -x test/test-optimized.dhall build && purs-backend-es bundle-app --main Performance.Test.App --to test/test.js", "generate": "npx spago run -p codegen" }, @@ -30,7 +26,8 @@ "headless-devtools": "^2.0.1", "jest": "^29.0.3", "jest-environment-jsdom": "^29.0.3", - "jquery": "^3.6.1", + "jquery": "^3.7.0", + "jsdom": "^22.1.0", "netlify-cli": "^8.0.1", "psc-package": "^4.0.1", "pulp": "^16.0.2", diff --git a/packages.dhall b/packages.dhall deleted file mode 100644 index 6e46867f..00000000 --- a/packages.dhall +++ /dev/null @@ -1,77 +0,0 @@ -let upstream = - https://github.com/purescript/package-sets/releases/download/psc-0.15.7-20230227/packages.dhall - sha256:0168e165b4cdb40ab6f7e01448075680097791c8d98f96d684b20d1eef96f3d0 - -in upstream - with bolson = - { dependencies = - [ "hyrule" - ] - , repo = "https://github.com/mikesol/purescript-bolson.git" - , version = "v0.3.9" - } - with tidy = - { dependencies = - [ "arrays" - , "dodo-printer" - , "foldable-traversable" - , "lists" - , "maybe" - , "ordered-collections" - , "partial" - , "prelude" - , "language-cst-parser" - , "strings" - , "tuples" - ] - , repo = "https://github.com/natefaubion/purescript-tidy.git" - , version = "v0.9.0" - } - with tidy-codegen = - { dependencies = - [ "aff" - , "ansi" - , "arrays" - , "avar" - , "bifunctors" - , "console" - , "control" - , "dodo-printer" - , "effect" - , "either" - , "enums" - , "exceptions" - , "filterable" - , "foldable-traversable" - , "free" - , "identity" - , "integers" - , "language-cst-parser" - , "lazy" - , "lists" - , "maybe" - , "newtype" - , "node-buffer" - , "node-child-process" - , "node-fs-aff" - , "node-path" - , "node-process" - , "node-streams" - , "ordered-collections" - , "parallel" - , "partial" - , "posix-types" - , "prelude" - , "record" - , "safe-coerce" - , "st" - , "strings" - , "tidy" - , "transformers" - , "tuples" - , "type-equality" - , "unicode" - ] - , repo = "https://github.com/natefaubion/purescript-tidy-codegen" - , version = "v3.0.0" - } \ No newline at end of file diff --git a/pursx.py b/pursx.py new file mode 100644 index 00000000..078b4c7f --- /dev/null +++ b/pursx.py @@ -0,0 +1,360 @@ +import string +o = [] +def print_(x): o.append(x) +WHITESPACE = [" ","\\t","\\n"] + +print_('''module Deku.Pursx where + +import Prelude + +import Bolson.Control (behaving, behaving') +import Bolson.Control as Bolson +import Bolson.Core (Element(..), Entity(..)) +import Control.Plus (empty) +import Data.Foldable (for_) +import Data.Maybe (Maybe(..)) +import FRP.Poll (Poll, sample_) +import Data.Reflectable (class Reflectable, reflectType) +import Data.Symbol (class IsSymbol) +import Deku.Attribute (Attribute, unsafeUnAttribute) +import Deku.Control (unsafeSetAttribute) +import Deku.Core (DOMInterpret(..), Node(..), Node', Nut(..), NutF(..), flattenArgs) +import Deku.DOM (class TagToDeku) +import FRP.Poll (poll, sample) +import FRP.Event (merge) +import Foreign.Object as Object +import Prim.Boolean (False, True) +import Prim.Row as Row +import Prim.RowList as RL +import Prim.Symbol as Sym +import Record (get) +import Type.Proxy (Proxy(..)) +''') + +print_('pursx :: forall s. Proxy s') +print_('pursx = Proxy') +print_('class DoVerbForAttr (verb :: Symbol) (tag :: Symbol) (acc :: Symbol) (head :: Symbol) (tail :: Symbol) (pursi :: Row Type) (purso :: Row Type) (newTail :: Symbol) | verb acc head tail pursi -> purso newTail') +print_('instance (TagToDeku tag deku, Row.Cons acc (Array (Poll (Attribute deku))) pursi purso) => DoVerbForAttr verb tag acc verb tail pursi purso tail') +print_('else instance (Sym.Append acc anything acc2, Sym.Cons x y tail, DoVerbForAttr verb tag acc2 x y pursi purso newTail) => DoVerbForAttr verb tag acc anything tail pursi purso newTail') +print_('--') +print_('class DoVerbForDOM (verb :: Symbol) (acc :: Symbol) (head :: Symbol) (tail :: Symbol) (pursi :: Row Type) (purso :: Row Type) (newTail :: Symbol) | verb acc head tail pursi -> purso newTail') +print_('instance (Row.Cons acc (Nut) pursi purso) => DoVerbForDOM verb acc verb tail pursi purso tail') +print_('else instance (Sym.Append acc anything acc2, Sym.Cons x y tail, DoVerbForDOM verb acc2 x y pursi purso newTail) => DoVerbForDOM verb acc anything tail pursi purso newTail') +print_('--') +print_('class IsWhiteSpace (space :: Symbol)') +print_('instance IsWhiteSpace ""') +print_('else instance (Sym.Cons x y s, IsSingleWhiteSpace x, IsWhiteSpace y) => IsWhiteSpace s') +print_('class IsSingleWhiteSpace (s :: Symbol)') +for x in WHITESPACE: + print_('instance IsSingleWhiteSpace "%s"' % (x,)) + +print_('class PXStart (verb :: Symbol) (head :: Symbol) (tail :: Symbol) (purs :: Row Type) | verb head tail -> purs') +for x in WHITESPACE: + print_('instance (Sym.Cons x y tail, PXStart verb x y purs) => PXStart verb "%s" tail purs' % (x,)) +print_("""instance + ( Sym.Cons x y tail + , PXTagPreName verb x y () purso trailing + , IsWhiteSpace trailing + ) => PXStart verb "<" tail purso +""") +print_("--") +print_('class PXTagPreName (verb :: Symbol) (head :: Symbol) (tail :: Symbol) (pursi :: Row Type) (purso :: Row Type) (trailing :: Symbol) | verb head tail pursi -> purso trailing') +for x in WHITESPACE: + print_('instance (Sym.Cons x y tail, PXTagPreName verb x y pursi purso trailing) => PXTagPreName verb "%s" tail pursi purso trailing' % (x,)) +for x in string.ascii_lowercase: + print_('instance (PXTagName verb "" "%s" tail pursi purso trailing) => PXTagPreName verb "%s" tail pursi purso trailing' % (x,x)) +print_('--') +print_('class PXTagName (verb :: Symbol) (tag :: Symbol) (head :: Symbol) (tail :: Symbol) (pursi :: Row Type) (purso :: Row Type) (trailing :: Symbol) | verb tag head tail pursi -> purso trailing') +print_('instance (Sym.Cons q r tail, PXBody verb q r pursi purso trailing, Sym.Cons x y trailing, PreEndTagFromTrailing x y tag newTrailing) => PXTagName verb tag ">" tail pursi purso newTrailing') +for x in string.ascii_lowercase+'-'+string.digits: + print_('instance (Sym.Cons x y tail, Sym.Append tag_ "%s" tag, PXTagName verb tag x y pursi purso trailing) => PXTagName verb tag_ "%s" tail pursi purso trailing' % (x,x)) +for x in WHITESPACE: + print_('instance (Sym.Cons x y tail, PXTagPreAttrName verb False tag x y pursi purso trailing) => PXTagName verb tag "%s" tail pursi purso trailing' % x) +print_('--') +print_('class PreEndTagFromTrailing (head :: Symbol) (tail :: Symbol) (tag :: Symbol) (newTrailing :: Symbol) | head tail -> tag newTrailing') +for x in WHITESPACE: + print_('instance (Sym.Cons x y tail, PreEndTagFromTrailing x y tag trailing) => PreEndTagFromTrailing "%s" tail tag trailing' % x) +for x in string.ascii_lowercase+'-': + print_('instance (EndTagFromTrailing "%s" tail "" tag trailing) => PreEndTagFromTrailing "%s" tail tag trailing' % (x,x)) +print_('--') +print_('class EndTagFromTrailing (head :: Symbol) (tail :: Symbol) (tagAcc :: Symbol) (tag :: Symbol) (newTrailing :: Symbol) | head tail tagAcc -> tag newTrailing') +for x in string.ascii_lowercase+'-'+string.digits: + print_('instance (Sym.Cons x y tail, Sym.Append tag_ "%s" tag, EndTagFromTrailing x y tag otag trailing) => EndTagFromTrailing "%s" tail tag_ otag trailing' % (x,x)) +print_('instance EndTagFromTrailing ">" tail tag tag tail') +print_('--') +print_('class PXTagPreAttrName (verb :: Symbol) (hasAttributed :: Boolean) (tag :: Symbol) (head :: Symbol) (tail :: Symbol) (pursi :: Row Type) (purso :: Row Type) (trailing :: Symbol) | verb hasAttributed tag head tail pursi -> purso trailing') +print_('instance (Sym.Cons ">" trailing tail) => PXTagPreAttrName verb hasAttributed tag "/" tail purs purs trailing') +print_('-- trailing will be by definition whatever comes after the closing tag, ie will be " foo>"') +print_('else instance (Sym.Cons q r tail, PXBody verb q r pursi purso trailing, Sym.Cons x y trailing, PreEndTagFromTrailing x y tag newTrailing) => PXTagPreAttrName verb hasAttributed tag ">" tail pursi purso newTrailing') +print_('--') +for x in WHITESPACE: + print_('else instance (Sym.Cons x y tail, PXTagPreAttrName verb hasAttributed tag x y pursi purso trailing) => PXTagPreAttrName verb hasAttributed tag "%s" tail pursi purso trailing' % x) +for x in string.ascii_letters: + print_('else instance (PXTagAttrName verb hasAttributed tag "%s" tail pursi purso trailing) => PXTagPreAttrName verb hasAttributed tag "%s" tail pursi purso trailing' % (x,x)) +print_('else instance (Sym.Cons x y tail, DoVerbForAttr verb tag "" x y pursi pursx newTail, Sym.Cons xx yy newTail, PXTagPreAttrName verb True tag xx yy pursx purso trailing) => PXTagPreAttrName verb False tag verb tail pursi purso trailing') +print_('--') +print_('class PXTagAttrName (verb :: Symbol) (hasAttributed :: Boolean) (tag :: Symbol) (head :: Symbol) (tail :: Symbol) (pursi :: Row Type) (purso :: Row Type) (trailing :: Symbol) | verb hasAttributed tag head tail pursi -> purso trailing') +for x in string.ascii_lowercase+string.ascii_uppercase+'-'+string.digits: + print_('instance (Sym.Cons x y tail, PXTagAttrName verb hasAttributed tag x y pursi purso trailing) => PXTagAttrName verb hasAttributed tag "%s" tail pursi purso trailing' % x) +print_('instance (Sym.Cons x y tail, PXTagPreAttrValue verb hasAttributed tag x y pursi purso trailing) => PXTagAttrName verb hasAttributed tag "=" tail pursi purso trailing') +for x in WHITESPACE: + print_('instance (Sym.Cons x y tail, PXTagPostAttrName verb hasAttributed tag x y pursi purso trailing) => PXTagAttrName verb hasAttributed tag "%s" tail pursi purso trailing' % x) +print_('--') +print_('class PXTagPostAttrName (verb :: Symbol) (hasAttributed :: Boolean) (tag :: Symbol) (head :: Symbol) (tail :: Symbol) (pursi :: Row Type) (purso :: Row Type) (trailing :: Symbol) | verb hasAttributed tag head tail pursi -> purso trailing') +for x in WHITESPACE: + print_('instance (Sym.Cons x y tail, PXTagPostAttrName verb hasAttributed tag x y pursi purso trailing) => PXTagPostAttrName verb hasAttributed tag "%s" tail pursi purso trailing' % x) +print_('instance (Sym.Cons x y tail, PXTagPreAttrValue verb hasAttributed tag x y pursi purso trailing) => PXTagPostAttrName verb hasAttributed tag "=" tail pursi purso trailing') +print_('--') +print_('class PXTagPreAttrValue (verb :: Symbol) (hasAttributed :: Boolean) (tag :: Symbol) (head :: Symbol) (tail :: Symbol) (pursi :: Row Type) (purso :: Row Type) (trailing :: Symbol) | verb hasAttributed tag head tail pursi -> purso trailing') +for x in WHITESPACE: + print_('instance (Sym.Cons x y tail, PXTagPreAttrValue verb hasAttributed tag x y pursi purso trailing) => PXTagPreAttrValue verb hasAttributed tag "%s" tail pursi purso trailing' % x) +print_('instance (Sym.Cons x y tail, PXTagAttrValue verb hasAttributed tag x y pursi purso trailing) => PXTagPreAttrValue verb hasAttributed tag "\\"" tail pursi purso trailing') +print_('--') +print_('class PXTagAttrValue (verb :: Symbol) (hasAttributed :: Boolean) (tag :: Symbol) (head :: Symbol) (tail :: Symbol) (pursi :: Row Type) (purso :: Row Type) (trailing :: Symbol) | verb hasAttributed tag head tail pursi -> purso trailing') +for x in [y for y in (string.ascii_lowercase+string.ascii_uppercase+string.digits+':,;\'!?@#$%^&*()_-=`~<>/.')]+['\\\\']+WHITESPACE: + print_('instance (Sym.Cons x y tail, PXTagAttrValue verb hasAttributed tag x y pursi purso trailing) => PXTagAttrValue verb hasAttributed tag "%s" tail pursi purso trailing' % x) +print_('instance (Sym.Cons x y tail, PXTagPreAttrName verb hasAttributed tag x y pursi purso trailing) => PXTagAttrValue verb hasAttributed tag "\\"" tail pursi purso trailing') +print_('class PXBody (verb :: Symbol) (head :: Symbol) (tail :: Symbol) (pursi :: Row Type) (purso :: Row Type) (trailing :: Symbol) | verb tail pursi -> purso trailing') +print_(''' +class CommendEndCandidate2 (head :: Symbol) (tail :: Symbol) (trailing :: Symbol) | head tail -> trailing +instance CommendEndCandidate2 ">" tail tail +else instance (Sym.Cons x y tail, SkipUntilCommentEnd x y trailing) => CommendEndCandidate2 anything tail trailing +class CommendEndCandidate1 (head :: Symbol) (tail :: Symbol) (trailing :: Symbol) | head tail -> trailing +instance (Sym.Cons x y tail, CommendEndCandidate2 x y trailing) => CommendEndCandidate1 "-" tail trailing +else instance (Sym.Cons x y tail, SkipUntilCommentEnd x y trailing) => CommendEndCandidate1 anything tail trailing +class SkipUntilCommentEnd (head :: Symbol) (tail :: Symbol) (trailing :: Symbol) | head tail -> trailing +instance (Sym.Cons x y tail, CommendEndCandidate1 x y trailing) => SkipUntilCommentEnd "-" tail trailing +else instance (Sym.Cons x y tail, SkipUntilCommentEnd x y trailing) => SkipUntilCommentEnd anything tail trailing +class CloseOrRepeat (verb :: Symbol) (head :: Symbol) (tail :: Symbol) (pursi :: Row Type) (purso :: Row Type) (trailing :: Symbol) | verb head tail pursi -> purso trailing +instance CloseOrRepeat verb "/" tail purs purs tail +else instance + ( Sym.Cons "-" y tail + , Sym.Cons "-" yy y + , Sym.Cons x yyy yy + , SkipUntilCommentEnd x yyy trailing + , Sym.Cons mm bb trailing + , PXBody verb mm bb pursi purso newTrailing + ) => + CloseOrRepeat verb "!" tail pursi purso newTrailing +else instance (PXTagPreName verb anything tail () pursm trailing, Row.Union pursi pursm pursz, Sym.Cons x y trailing, PXBody verb x y pursz purso newTrailing) => CloseOrRepeat verb anything tail pursi purso newTrailing +instance (Sym.Cons x y tail, CloseOrRepeat verb x y pursi purso trailing) => PXBody verb "<" tail pursi purso trailing +else instance (Sym.Cons x y tail, DoVerbForDOM verb "" x y pursi pursx newTail, Sym.Cons xx yy newTail, PXBody verb xx yy pursx purso trailing) => PXBody verb verb tail pursi purso trailing +else instance (Sym.Cons x y tail, PXBody verb x y pursi purso trailing) => PXBody verb anything tail pursi purso trailing''') +print_(''' + +class + PursxToElement (rl :: RL.RowList Type) (r :: Row Type) + | rl -> r where + pursxToElement + :: String + -> Proxy rl + -> { | r } + -> { cache :: Object.Object Boolean, element :: Nut } + +domableToNode :: Nut -> forall payload. Node payload +domableToNode (Nut df) = step1 df + where + step1 :: forall payload. NutF payload -> Node payload + step1 (NutF (Element' n)) = n + step1 _ = Node $ Element \\_ _ -> poll \\_ -> empty + +instance pursxToElementConsInsert :: + ( Row.Cons key (Nut) r' r + , PursxToElement rest r + , Reflectable key String + , IsSymbol key + ) => + PursxToElement + (RL.Cons key (Nut) rest) + r where + pursxToElement pxScope _ r = + let + { cache, element } = pursxToElement pxScope (Proxy :: Proxy rest) r + in + { cache: Object.insert (reflectType pxk) false cache + , element: Nut + ( NutF + ( Element' $ Node $ Element + \\info di@(DOMInterpret { deferPayload, deleteFromCache }) -> + behaving + \\ee kx subscribe -> do + let Node (Element rest) = domableToNode element + let evt1 = sample (rest info di) ee + let + evt0 = sample + ( __internalDekuFlatten + ((\\(Nut df) -> df) (get pxk r)) + { parent: Just + (reflectType pxk <> "@!%" <> pxScope) + , scope: info.scope + , raiseId: \\_ -> pure unit + , pos: info.pos + , ez: false + , deferralPath: info.deferralPath + , dynFamily: Nothing + } + di + ) + ee + kx $ deferPayload info.deferralPath $ deleteFromCache + { id: reflectType pxk <> "@!%" <> pxScope } + + subscribe (merge [ evt0, evt1 ]) + ) + ) + } + where + pxk = Proxy :: _ key + +else instance pursxToElementConsAttr :: + ( Row.Cons key (Array (Poll (Attribute deku))) r' r + , PursxToElement rest r + , Reflectable key String + , IsSymbol key + ) => + PursxToElement + (RL.Cons key (Array (Poll (Attribute deku))) rest) + r where + pursxToElement pxScope _ r = do + let + { cache, element } = pursxToElement pxScope (Proxy :: Proxy rest) r + Node (Element rest) = domableToNode element + + elt :: forall payload. Node' payload + elt parent di = behaving' \\fff ee _ subscribe -> do + let bhv = rest parent di + subscribe + ( + ( ( \\xx -> fff $ unsafeSetAttribute di + (reflectType pxk <> "@!%" <> pxScope) + xx + ) <$> + ( merge + (map ((map unsafeUnAttribute) >>> flip sample_ ee) (get pxk r)) + ) + ) + ) identity + subscribe (sample bhv ee) identity + { cache: Object.insert (reflectType pxk) true cache + , element: Nut (NutF (Element' (Node (Element elt)))) + } + where + pxk = Proxy :: _ key + +instance pursxToElementNil :: + PursxToElement RL.Nil r where + pursxToElement _ _ _ = + { cache: Object.empty + , element: Nut + ( NutF $ Element' $ Node $ Element \\_ _ -> poll \\_ -> empty + ) + } + +psx + :: forall (html :: Symbol) + . Reflectable html String + => PXStart "~" " " html () + => PursxToElement RL.Nil () + => Proxy html + -> Nut +psx px = makePursx px {} + +makePursx + :: forall (html :: Symbol) r rl + . Reflectable html String + => PXStart "~" " " html r + => RL.RowToList r rl + => PursxToElement rl r + => Proxy html + -> { | r } + -> Nut +makePursx = makePursx' (Proxy :: _ "~") + +makePursx' + :: forall verb (html :: Symbol) r rl + . Reflectable html String + => Reflectable verb String + => PXStart verb " " html r + => RL.RowToList r rl + => PursxToElement rl r + => Proxy verb + -> Proxy html + -> { | r } + -> Nut +makePursx' verb html = unsafeMakePursx' (reflectType verb) (reflectType html) + +unsafeMakePursx + :: forall r rl + . RL.RowToList r rl + => PursxToElement rl r + => String + -> { | r } + -> Nut +unsafeMakePursx = unsafeMakePursx' "~" + +unsafeMakePursx' + :: forall r rl + . RL.RowToList r rl + => PursxToElement rl r + => String + -> String + -> { | r } + -> Nut +unsafeMakePursx' verb html r = Nut ee + where + ee :: forall payload. NutF payload + ee = NutF (Element' (Node (Element go))) + + go :: forall payload. Node' payload + go + z@{ parent, scope, raiseId, dynFamily, pos, deferralPath } + di@ + ( DOMInterpret + { makePursx: mpx + , deferPayload + , ids + , deleteFromCache + , attributeParent + } + ) = + behaving \\eee kx subscribe -> do + me <- show <$> ids + pxScope <- show <$> ids + raiseId me + let + { cache, element: element' } = pursxToElement + pxScope + (Proxy :: _ rl) + r + let Node (Element element) = domableToNode element' + let bhv = element z di + kx $ mpx + { id: me + , parent + , cache + , dynFamily + , pos + , pxScope: pxScope + , scope + , html + , verb + } + for_ parent \\p -> kx $ attributeParent + { id: me, parent: p, pos, dynFamily, ez: false } + kx (deferPayload deferralPath (deleteFromCache { id: me })) + subscribe (sample bhv eee) + +__internalDekuFlatten + :: forall payload + . NutF payload + -> Node' payload +__internalDekuFlatten (NutF c) a b = Bolson.flatten flattenArgs c a b + +infixr 5 makePursx as ~~ +infixr 5 unsafeMakePursx as ~!~ + +''') +with open('src/Deku/Pursx.purs', 'w') as f: + for x in o: f.write(x+'\n') +import subprocess +subprocess.call('npx purs-tidy format-in-place src/Deku/Pursx.purs', shell=True) \ No newline at end of file diff --git a/spago.dhall b/spago.dhall deleted file mode 100644 index 963fe894..00000000 --- a/spago.dhall +++ /dev/null @@ -1,40 +0,0 @@ -{ name = "deku" -, sources = [ "deku/src/**/*.purs", "deku-core/**/*.purs", "deku-dom/**/*.purs", "deku-css/**/*.purs" ] -, dependencies = - [ "aff" - , "arrays" - , "bolson" - , "catenable-lists" - , "control" - , "css" - , "effect" - , "either" - , "fast-vect" - , "filterable" - , "foldable-traversable" - , "foreign-object" - , "free" - , "hyrule" - , "maybe" - , "newtype" - , "ordered-collections" - , "prelude" - , "profunctor" - , "quickcheck" - , "record" - , "safe-coerce" - , "st" - , "strings" - , "stringutils" - , "transformers" - , "tuples" - , "unsafe-coerce" - , "web-dom" - , "web-events" - , "web-html" - , "web-uievents" - ] -, license = "Apache-2.0" -, packages = ./packages.dhall -, repository = "https://github.com/mikesol/purescript-deku" -} \ No newline at end of file diff --git a/spago.yaml b/spago.yaml index 6e6974dc..3fa5973f 100644 --- a/spago.yaml +++ b/spago.yaml @@ -2,9 +2,18 @@ workspace: package_set: registry: 31.0.0 extra_packages: + hyrule: + git: "https://github.com/mikesol/purescript-hyrule.git" + ref: "f388528a9aaa25a5307bf67f6ed12d2097620929" + dependencies: + - effect + - js-timers + - web-html + - unsafe-reference + - web-uievents bolson: - repo: "https://github.com/mikesol/purescript-bolson.git" - version: "v0.3.9" + git: "https://github.com/mikesol/purescript-bolson.git" + ref: "d87900c" dependencies: - hyrule tidy: @@ -24,7 +33,7 @@ workspace: - tuples tidy-codegen: repo: "https://github.com/natefaubion/purescript-tidy-codegen" - version: "type-applications" + version: "main" dependencies: - aff - ansi @@ -68,4 +77,3 @@ workspace: - tuples - type-equality - unicode -