@@ -5,8 +5,13 @@ import Prelude hiding (mapM, mapM_, sequence, sequence_, foldl)
55
66import Reflex.Class
77
8−import Control.Monad.State.Strict hiding (mapM, mapM_, forM, forM_, sequence, sequence_)
9−import Control.Monad.Reader hiding (mapM, mapM_, forM, forM_, sequence, sequence_)
8+import Control.Monad.Trans.Class
9+import Control.Monad.Reader (ReaderT())
10+import Control.Monad.Writer (WriterT())
11+import Control.Monad.Cont (ContT())
12+import Control.Monad.Except (ExceptT())
13+import Control.Monad.RWS (RWST())
14+import Control.Monad.State (StateT())
1015import Data.Dependent.Sum (DSum)
1116import Control.Monad.Ref
1217
@@ -31,7 +36,7 @@ class (Monad m, ReflexHost t) => MonadReflexCreateTrigger t m | m -> t where
3136class (Monad m, ReflexHost t, MonadReflexCreateTrigger t m) => MonadReflexHost t m | m -> t where
3237 fireEventsAndRead :: [DSum (EventTrigger t)] -> (forall m'. (MonadReadEvent t m') => m' a) -> m a
3338 subscribeEvent :: Event t a -> m (EventHandle t a) --TODO: Return a handle, and use them in fireEventsAnRead
34− runFrame :: PushM t a -> m a
39+
3540 runHostFrame :: HostFrame t a -> m a
3641
3742fireEvents :: MonadReflexHost t m => [DSum (EventTrigger t)] -> m ()
@@ -51,12 +56,51 @@ newEventWithTriggerRef = do
5156-- Instances
5257--------------------------------------------------------------------------------
5358
54−instance (Reflex t, MonadReflexCreateTrigger t m) => MonadReflexCreateTrigger t (ReaderT r m) where
59+instance MonadReflexCreateTrigger t m => MonadReflexCreateTrigger t (ReaderT r m) where
5560 newEventWithTrigger initializer = do
5661 lift $ newEventWithTrigger initializer
5762
58−instance (Reflex t, MonadReflexHost t m) => MonadReflexHost t (ReaderT r m) where
63+instance MonadReflexHost t m => MonadReflexHost t (ReaderT r m) where
64+ fireEventsAndRead dm a = lift $ fireEventsAndRead dm a
65+ subscribeEvent = lift . subscribeEvent
66+ runHostFrame = lift . runHostFrame
67+
68+instance (MonadReflexCreateTrigger t m, Monoid w) => MonadReflexCreateTrigger t (WriterT w m) where
69+ newEventWithTrigger = lift . newEventWithTrigger
70+
71+instance (MonadReflexHost t m, Monoid w) => MonadReflexHost t (WriterT w m) where
72+ fireEventsAndRead dm a = lift $ fireEventsAndRead dm a
73+ subscribeEvent = lift . subscribeEvent
74+ runHostFrame = lift . runHostFrame
75+
76+instance MonadReflexCreateTrigger t m => MonadReflexCreateTrigger t (StateT s m) where
77+ newEventWithTrigger = lift . newEventWithTrigger
78+
79+instance MonadReflexHost t m => MonadReflexHost t (StateT s m) where
80+ fireEventsAndRead dm a = lift $ fireEventsAndRead dm a
81+ subscribeEvent = lift . subscribeEvent
82+ runHostFrame = lift . runHostFrame
83+
84+instance MonadReflexCreateTrigger t m => MonadReflexCreateTrigger t (ContT r m) where
85+ newEventWithTrigger = lift . newEventWithTrigger
86+
87+instance MonadReflexHost t m => MonadReflexHost t (ContT r m) where
88+ fireEventsAndRead dm a = lift $ fireEventsAndRead dm a
89+ subscribeEvent = lift . subscribeEvent
90+ runHostFrame = lift . runHostFrame
91+
92+instance MonadReflexCreateTrigger t m => MonadReflexCreateTrigger t (ExceptT e m) where
93+ newEventWithTrigger = lift . newEventWithTrigger
94+
95+instance MonadReflexHost t m => MonadReflexHost t (ExceptT e m) where
96+ fireEventsAndRead dm a = lift $ fireEventsAndRead dm a
97+ subscribeEvent = lift . subscribeEvent
98+ runHostFrame = lift . runHostFrame
99+
100+instance (MonadReflexCreateTrigger t m, Monoid w) => MonadReflexCreateTrigger t (RWST r w s m) where
101+ newEventWithTrigger = lift . newEventWithTrigger
102+
103+instance (MonadReflexHost t m, Monoid w) => MonadReflexHost t (RWST r w s m) where
59104 fireEventsAndRead dm a = lift $ fireEventsAndRead dm a
60105 subscribeEvent = lift . subscribeEvent
61− runFrame = lift . runFrame
62106 runHostFrame = lift . runHostFrame