@@ -3,12 +3,15 @@ module Reflex.Dom.Extra where
4import Control.Lens
4import Control.Lens
5import Control.Monad.Fix
5import Control.Monad.Fix
6+import Data.Bitraversable
6import Data.Char
7import Data.Char
7import Data.Either
8import Data.Either
8import Data.Map as M
9import Data.Map as M
9import Data.Maybe
10import Data.Maybe
10import Data.Text as T hiding (zip, map)
11import Data.Text as T hiding (zip, map)
11import Language.Javascript.JSaddle
13import Language.Javascript.JSaddle
14+import Prelude hiding (zip, unzip, zipWith)
12import Reflex.Dom
15import Reflex.Dom
13import JavaScript.Object.Internal as JS
16import JavaScript.Object.Internal as JS
@@ -180,12 +183,14 @@ form :: DomBuilder t m => Map Text Text -> m a -> m a
180form attrs = elAttr "form" attrs
183form attrs = elAttr "form" attrs
182-- | Join event of event into single event.
185-- | Join event of event into single event.
184− :: (Reflex t, MonadHold t m)
186+joinE :: (Reflex t, MonadHold t m) => Event t (Event t a) -> m (Event t a)
185− => Event t (Event t a)
187joinE = switchHold never
187joinE = switchHold never
190+ :: (Reflex t, MonadHold t m)
191+ => Event t (Event t a, Event t b) -> m (Event t a, Event t b)
192+joinEE = bitraverse joinE joinE . Z.unzip
189-- | Separate an event to two sequences based on given predicate.
194-- | Separate an event to two sequences based on given predicate.
190-- The first element of resulting pair keeps events for which the predicate
195-- The first element of resulting pair keeps events for which the predicate
191-- holds, the second -- those for which it doesn't.
196-- holds, the second -- those for which it doesn't.