module Halogen.Query.Event where import HPrelude import Halogen.Subscription import Halogen.VDom.DOM.Monad import Web.Event.Event eventListener :: (MonadDOM m) => EventType -> EventTarget -> (Event -> Maybe a) -> Emitter m a eventListener :: forall (m :: * -> *) a. MonadDOM m => EventType -> EventTarget -> (Event -> Maybe a) -> Emitter m a eventListener EventType eventType EventTarget target Event -> Maybe a f = ((a -> m ()) -> m (m ())) -> Emitter m a forall (m :: * -> *) a. Functor m => ((a -> m ()) -> m (m ())) -> Emitter m a makeEmitter (((a -> m ()) -> m (m ())) -> Emitter m a) -> ((a -> m ()) -> m (m ())) -> Emitter m a forall a b. (a -> b) -> a -> b $ \a -> m () push -> do listener <- (Event -> m ()) -> m EventListener forall (m :: * -> *). MonadDOM m => (Event -> m ()) -> m EventListener mkEventListener ((Event -> m ()) -> m EventListener) -> (Event -> m ()) -> m EventListener forall a b. (a -> b) -> a -> b $ \Event ev -> (a -> m ()) -> Maybe a -> m () forall (t :: * -> *) (f :: * -> *) a b. (Foldable t, Applicative f) => (a -> f b) -> t a -> f () traverse_ a -> m () push (Event -> Maybe a f Event ev) addEventListener eventType listener target pure $ removeEventListener eventType listener target