@@ -53,7 +53,8 @@ class (Applicative m, Monad m) => MonadReflexCreateTrigger t m | m -> t where
5353 newEventWithTrigger :: (EventTrigger t a -> IO (IO ())) -> m (Event t a)
5454 newFanEventWithTrigger :: GCompare k => (forall a. k a -> EventTrigger t a -> IO (IO ())) -> m (EventSelector t k)
5555
56−class (ReflexHost t, MonadReflexCreateTrigger t m) => MonadReflexHost t m | m -> t where
56+class (ReflexHost t, MonadReflexCreateTrigger t m, MonadReadEvent t (ReadPhase m), MonadSample t (ReadPhase m), MonadHold t (ReadPhase m)) => MonadReflexHost t m | m -> t where
57+ type ReadPhase m :: * -> *
5758 -- | Propagate some events firings and read the values of events afterwards.
5859 --
5960 -- This function will create a new frame to fire the given events. It will then update all
@@ -67,7 +68,7 @@ class (ReflexHost t, MonadReflexCreateTrigger t m) => MonadReflexHost t m | m ->
6768 -- The main loop waits for external events to happen (such as keyboard input or a mouse click)
6869 -- and then fires the corresponding events using this function. The read callback can be used
6970 -- to read output events and perform a corresponding response action to the external event.
70− fireEventsAndRead :: [DSum (EventTrigger t)] -> (forall m'. (MonadReadEvent t m') => m' a) -> m a
71+ fireEventsAndRead :: [DSum (EventTrigger t)] -> (ReadPhase m a) -> m a
7172
7273 -- | Subscribe to an event and set it up if needed.
7374 --
@@ -119,6 +120,7 @@ instance MonadReflexCreateTrigger t m => MonadReflexCreateTrigger t (ReaderT r m
119120 newFanEventWithTrigger initializer = lift $ newFanEventWithTrigger initializer
120121
121122instance MonadReflexHost t m => MonadReflexHost t (ReaderT r m) where
123+ type ReadPhase (ReaderT r m) = ReadPhase m
122124 fireEventsAndRead dm a = lift $ fireEventsAndRead dm a
123125 subscribeEvent = lift . subscribeEvent
124126 runHostFrame = lift . runHostFrame
@@ -128,6 +130,7 @@ instance (MonadReflexCreateTrigger t m, Monoid w) => MonadReflexCreateTrigger t
128130 newFanEventWithTrigger initializer = lift $ newFanEventWithTrigger initializer
129131
130132instance (MonadReflexHost t m, Monoid w) => MonadReflexHost t (WriterT w m) where
133+ type ReadPhase (WriterT w m) = ReadPhase m
131134 fireEventsAndRead dm a = lift $ fireEventsAndRead dm a
132135 subscribeEvent = lift . subscribeEvent
133136 runHostFrame = lift . runHostFrame
@@ -137,6 +140,7 @@ instance MonadReflexCreateTrigger t m => MonadReflexCreateTrigger t (StateT s m)
137140 newFanEventWithTrigger initializer = lift $ newFanEventWithTrigger initializer
138141
139142instance MonadReflexHost t m => MonadReflexHost t (StateT s m) where
143+ type ReadPhase (StateT s m) = ReadPhase m
140144 fireEventsAndRead dm a = lift $ fireEventsAndRead dm a
141145 subscribeEvent = lift . subscribeEvent
142146 runHostFrame = lift . runHostFrame
@@ -146,6 +150,7 @@ instance MonadReflexCreateTrigger t m => MonadReflexCreateTrigger t (ContT r m)
146150 newFanEventWithTrigger initializer = lift $ newFanEventWithTrigger initializer
147151
148152instance MonadReflexHost t m => MonadReflexHost t (ContT r m) where
153+ type ReadPhase (ContT r m) = ReadPhase m
149154 fireEventsAndRead dm a = lift $ fireEventsAndRead dm a
150155 subscribeEvent = lift . subscribeEvent
151156 runHostFrame = lift . runHostFrame
@@ -155,6 +160,7 @@ instance MonadReflexCreateTrigger t m => MonadReflexCreateTrigger t (ExceptT e m
155160 newFanEventWithTrigger initializer = lift $ newFanEventWithTrigger initializer
156161
157162instance MonadReflexHost t m => MonadReflexHost t (ExceptT e m) where
163+ type ReadPhase (ExceptT e m) = ReadPhase m
158164 fireEventsAndRead dm a = lift $ fireEventsAndRead dm a
159165 subscribeEvent = lift . subscribeEvent
160166 runHostFrame = lift . runHostFrame
@@ -164,6 +170,7 @@ instance (MonadReflexCreateTrigger t m, Monoid w) => MonadReflexCreateTrigger t
164170 newFanEventWithTrigger initializer = lift $ newFanEventWithTrigger initializer
165171
166172instance (MonadReflexHost t m, Monoid w) => MonadReflexHost t (RWST r w s m) where
173+ type ReadPhase (RWST r w s m) = ReadPhase m
167174 fireEventsAndRead dm a = lift $ fireEventsAndRead dm a
168175 subscribeEvent = lift . subscribeEvent
169176 runHostFrame = lift . runHostFrame