@@ -4,6 +4,7 @@ module Reflex.Host.Class where
4import Reflex.Class
4import Reflex.Class
6import Control.Applicative
6import Control.Applicative
7import Control.Monad.Fix
8import Control.Monad.Fix
8import Control.Monad.Trans
9import Control.Monad.Trans
9import Control.Monad.Trans.Reader (ReaderT())
10import Control.Monad.Trans.Reader (ReaderT())
@@ -13,7 +14,7 @@ import Control.Monad.Trans.Except (ExceptT())
13import Control.Monad.Trans.RWS (RWST())
14import Control.Monad.Trans.RWS (RWST())
14import Control.Monad.Trans.State (StateT())
15import Control.Monad.Trans.State (StateT())
15import qualified Control.Monad.Trans.State.Strict as Strict
16import qualified Control.Monad.Trans.State.Strict as Strict
16−import Data.Dependent.Sum (DSum)
17+import Data.Dependent.Sum (DSum (..))
17import Data.Monoid
18import Data.Monoid
18import Data.GADT.Compare
19import Data.GADT.Compare
19import Control.Monad.Ref
20import Control.Monad.Ref
@@ -114,6 +115,25 @@ newEventWithTriggerRef = do
114 return (e, rt)
115 return (e, rt)
115{-# INLINE newEventWithTriggerRef #-}
116{-# INLINE newEventWithTriggerRef #-}
118+fireEventRef :: (MonadReflexHost t m, MonadRef m, Ref m ~ Ref IO) => Ref m (Maybe (EventTrigger t a)) -> a -> m ()
119+fireEventRef mtRef input = do
122+ Nothing -> return ()
123+ Just trigger -> fireEvents [trigger :=> input]
125+fireEventRefAndRead :: (MonadReflexHost t m, MonadRef m, Ref m ~ Ref IO) => Ref m (Maybe (EventTrigger t a)) -> a -> EventHandle t b -> m (Maybe b)
126+fireEventRefAndRead mtRef input e = do
129+ Nothing -> return Nothing -- Since we aren't firing the input, the output can't fire
130+ Just trigger -> fireEventsAndRead [trigger :=> input] $ do
131+ mGetValue <- readEvent e
133+ Nothing -> return Nothing
134+ Just getValue -> liftM Just getValue
117--------------------------------------------------------------------------------
137--------------------------------------------------------------------------------
118-- Instances
138-- Instances
119--------------------------------------------------------------------------------
139--------------------------------------------------------------------------------