From 2514d9d71974526d7a3f007621aea1f3f28c1b27 Mon Sep 17 00:00:00 2001 From: Dmitry Olshansky Date: Thu, 10 Nov 2022 13:56:04 +0100 Subject: [PATCH] add joinEE --- reflex-dom-extra.cabal | 1 + src/Reflex/Dom/Extra.hs | 13 +++++++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/reflex-dom-extra.cabal b/reflex-dom-extra.cabal index f0b75ba..fbf3068 100644 --- a/reflex-dom-extra.cabal +++ b/reflex-dom-extra.cabal @@ -21,6 +21,7 @@ library , jsaddle , lens , reflex-dom + , semialign , text if impl(ghcjs) build-depends: diff --git a/src/Reflex/Dom/Extra.hs b/src/Reflex/Dom/Extra.hs index 501a058..25a55f2 100644 --- a/src/Reflex/Dom/Extra.hs +++ b/src/Reflex/Dom/Extra.hs @@ -3,12 +3,15 @@ module Reflex.Dom.Extra where import Control.Lens import Control.Monad.Fix +import Data.Bitraversable import Data.Char import Data.Either import Data.Map as M import Data.Maybe import Data.Text as T hiding (zip, map) +import Data.Zip as Z import Language.Javascript.JSaddle +import Prelude hiding (zip, unzip, zipWith) import Reflex.Dom import JavaScript.Object.Internal as JS @@ -180,12 +183,14 @@ form :: DomBuilder t m => Map Text Text -> m a -> m a form attrs = elAttr "form" attrs -- | Join event of event into single event. -joinE - :: (Reflex t, MonadHold t m) - => Event t (Event t a) - -> m (Event t a) +joinE :: (Reflex t, MonadHold t m) => Event t (Event t a) -> m (Event t a) joinE = switchHold never +joinEE + :: (Reflex t, MonadHold t m) + => Event t (Event t a, Event t b) -> m (Event t a, Event t b) +joinEE = bitraverse joinE joinE . Z.unzip + -- | Separate an event to two sequences based on given predicate. -- The first element of resulting pair keeps events for which the predicate -- holds, the second -- those for which it doesn't.