@@ -53,7 +53,8 @@ class (Applicative m, Monad m) => MonadReflexCreateTrigger t m | m -> t where
53 newEventWithTrigger :: (EventTrigger t a -> IO (IO ())) -> m (Event t a)
53 newEventWithTrigger :: (EventTrigger t a -> IO (IO ())) -> m (Event t a)
54 newFanEventWithTrigger :: GCompare k => (forall a. k a -> EventTrigger t a -> IO (IO ())) -> m (EventSelector t k)
54 newFanEventWithTrigger :: GCompare k => (forall a. k a -> EventTrigger t a -> IO (IO ())) -> m (EventSelector t k)
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 :: * -> *
57 -- | Propagate some events firings and read the values of events afterwards.
58 -- | Propagate some events firings and read the values of events afterwards.
59 -- This function will create a new frame to fire the given events. It will then update all
60 -- 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 ->
67 -- The main loop waits for external events to happen (such as keyboard input or a mouse click)
68 -- The main loop waits for external events to happen (such as keyboard input or a mouse click)
68 -- and then fires the corresponding events using this function. The read callback can be used
69 -- and then fires the corresponding events using this function. The read callback can be used
69 -- to read output events and perform a corresponding response action to the external event.
70 -- 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
72 -- | Subscribe to an event and set it up if needed.
73 -- | Subscribe to an event and set it up if needed.
@@ -119,6 +120,7 @@ instance MonadReflexCreateTrigger t m => MonadReflexCreateTrigger t (ReaderT r m
119 newFanEventWithTrigger initializer = lift $ newFanEventWithTrigger initializer
120 newFanEventWithTrigger initializer = lift $ newFanEventWithTrigger initializer
121instance MonadReflexHost t m => MonadReflexHost t (ReaderT r m) where
122instance MonadReflexHost t m => MonadReflexHost t (ReaderT r m) where
123+ type ReadPhase (ReaderT r m) = ReadPhase m
122 fireEventsAndRead dm a = lift $ fireEventsAndRead dm a
124 fireEventsAndRead dm a = lift $ fireEventsAndRead dm a
123 subscribeEvent = lift . subscribeEvent
125 subscribeEvent = lift . subscribeEvent
124 runHostFrame = lift . runHostFrame
126 runHostFrame = lift . runHostFrame
@@ -128,6 +130,7 @@ instance (MonadReflexCreateTrigger t m, Monoid w) => MonadReflexCreateTrigger t
128 newFanEventWithTrigger initializer = lift $ newFanEventWithTrigger initializer
130 newFanEventWithTrigger initializer = lift $ newFanEventWithTrigger initializer
130instance (MonadReflexHost t m, Monoid w) => MonadReflexHost t (WriterT w m) where
132instance (MonadReflexHost t m, Monoid w) => MonadReflexHost t (WriterT w m) where
133+ type ReadPhase (WriterT w m) = ReadPhase m
131 fireEventsAndRead dm a = lift $ fireEventsAndRead dm a
134 fireEventsAndRead dm a = lift $ fireEventsAndRead dm a
132 subscribeEvent = lift . subscribeEvent
135 subscribeEvent = lift . subscribeEvent
133 runHostFrame = lift . runHostFrame
136 runHostFrame = lift . runHostFrame
@@ -137,6 +140,7 @@ instance MonadReflexCreateTrigger t m => MonadReflexCreateTrigger t (StateT s m)
137 newFanEventWithTrigger initializer = lift $ newFanEventWithTrigger initializer
140 newFanEventWithTrigger initializer = lift $ newFanEventWithTrigger initializer
139instance MonadReflexHost t m => MonadReflexHost t (StateT s m) where
142instance MonadReflexHost t m => MonadReflexHost t (StateT s m) where
143+ type ReadPhase (StateT s m) = ReadPhase m
140 fireEventsAndRead dm a = lift $ fireEventsAndRead dm a
144 fireEventsAndRead dm a = lift $ fireEventsAndRead dm a
141 subscribeEvent = lift . subscribeEvent
145 subscribeEvent = lift . subscribeEvent
142 runHostFrame = lift . runHostFrame
146 runHostFrame = lift . runHostFrame
@@ -146,6 +150,7 @@ instance MonadReflexCreateTrigger t m => MonadReflexCreateTrigger t (ContT r m)
146 newFanEventWithTrigger initializer = lift $ newFanEventWithTrigger initializer
150 newFanEventWithTrigger initializer = lift $ newFanEventWithTrigger initializer
148instance MonadReflexHost t m => MonadReflexHost t (ContT r m) where
152instance MonadReflexHost t m => MonadReflexHost t (ContT r m) where
153+ type ReadPhase (ContT r m) = ReadPhase m
149 fireEventsAndRead dm a = lift $ fireEventsAndRead dm a
154 fireEventsAndRead dm a = lift $ fireEventsAndRead dm a
150 subscribeEvent = lift . subscribeEvent
155 subscribeEvent = lift . subscribeEvent
151 runHostFrame = lift . runHostFrame
156 runHostFrame = lift . runHostFrame
@@ -155,6 +160,7 @@ instance MonadReflexCreateTrigger t m => MonadReflexCreateTrigger t (ExceptT e m
155 newFanEventWithTrigger initializer = lift $ newFanEventWithTrigger initializer
160 newFanEventWithTrigger initializer = lift $ newFanEventWithTrigger initializer
157instance MonadReflexHost t m => MonadReflexHost t (ExceptT e m) where
162instance MonadReflexHost t m => MonadReflexHost t (ExceptT e m) where
163+ type ReadPhase (ExceptT e m) = ReadPhase m
158 fireEventsAndRead dm a = lift $ fireEventsAndRead dm a
164 fireEventsAndRead dm a = lift $ fireEventsAndRead dm a
159 subscribeEvent = lift . subscribeEvent
165 subscribeEvent = lift . subscribeEvent
160 runHostFrame = lift . runHostFrame
166 runHostFrame = lift . runHostFrame
@@ -164,6 +170,7 @@ instance (MonadReflexCreateTrigger t m, Monoid w) => MonadReflexCreateTrigger t
164 newFanEventWithTrigger initializer = lift $ newFanEventWithTrigger initializer
170 newFanEventWithTrigger initializer = lift $ newFanEventWithTrigger initializer
166instance (MonadReflexHost t m, Monoid w) => MonadReflexHost t (RWST r w s m) where
172instance (MonadReflexHost t m, Monoid w) => MonadReflexHost t (RWST r w s m) where
173+ type ReadPhase (RWST r w s m) = ReadPhase m
167 fireEventsAndRead dm a = lift $ fireEventsAndRead dm a
174 fireEventsAndRead dm a = lift $ fireEventsAndRead dm a
168 subscribeEvent = lift . subscribeEvent
175 subscribeEvent = lift . subscribeEvent
169 runHostFrame = lift . runHostFrame
176 runHostFrame = lift . runHostFrame