@@ -5,8 +5,13 @@ import Prelude hiding (mapM, mapM_, sequence, sequence_, foldl)
6import Reflex.Class
6import Reflex.Class
8−import Control.Monad.State.Strict hiding (mapM, mapM_, forM, forM_, sequence, sequence_)
8+import Control.Monad.Trans.Class
9−import Control.Monad.Reader hiding (mapM, mapM_, forM, forM_, sequence, sequence_)
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())
10import Data.Dependent.Sum (DSum)
15import Data.Dependent.Sum (DSum)
11import Control.Monad.Ref
16import Control.Monad.Ref
@@ -31,7 +36,7 @@ class (Monad m, ReflexHost t) => MonadReflexCreateTrigger t m | m -> t where
31class (Monad m, ReflexHost t, MonadReflexCreateTrigger t m) => MonadReflexHost t m | m -> t where
36class (Monad m, ReflexHost t, MonadReflexCreateTrigger t m) => MonadReflexHost t m | m -> t where
32 fireEventsAndRead :: [DSum (EventTrigger t)] -> (forall m'. (MonadReadEvent t m') => m' a) -> m a
37 fireEventsAndRead :: [DSum (EventTrigger t)] -> (forall m'. (MonadReadEvent t m') => m' a) -> m a
33 subscribeEvent :: Event t a -> m (EventHandle t a) --TODO: Return a handle, and use them in fireEventsAnRead
38 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+
35 runHostFrame :: HostFrame t a -> m a
40 runHostFrame :: HostFrame t a -> m a
37fireEvents :: MonadReflexHost t m => [DSum (EventTrigger t)] -> m ()
42fireEvents :: MonadReflexHost t m => [DSum (EventTrigger t)] -> m ()
@@ -51,12 +56,51 @@ newEventWithTriggerRef = do
51-- Instances
56-- Instances
52--------------------------------------------------------------------------------
57--------------------------------------------------------------------------------
54−instance (Reflex t, MonadReflexCreateTrigger t m) => MonadReflexCreateTrigger t (ReaderT r m) where
59+instance MonadReflexCreateTrigger t m => MonadReflexCreateTrigger t (ReaderT r m) where
55 newEventWithTrigger initializer = do
60 newEventWithTrigger initializer = do
56 lift $ newEventWithTrigger initializer
61 lift $ newEventWithTrigger initializer
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
68+instance (MonadReflexCreateTrigger t m, Monoid w) => MonadReflexCreateTrigger t (WriterT w m) where
69+ newEventWithTrigger = lift . newEventWithTrigger
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
76+instance MonadReflexCreateTrigger t m => MonadReflexCreateTrigger t (StateT s m) where
77+ newEventWithTrigger = lift . newEventWithTrigger
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
84+instance MonadReflexCreateTrigger t m => MonadReflexCreateTrigger t (ContT r m) where
85+ newEventWithTrigger = lift . newEventWithTrigger
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
92+instance MonadReflexCreateTrigger t m => MonadReflexCreateTrigger t (ExceptT e m) where
93+ newEventWithTrigger = lift . newEventWithTrigger
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
100+instance (MonadReflexCreateTrigger t m, Monoid w) => MonadReflexCreateTrigger t (RWST r w s m) where
101+ newEventWithTrigger = lift . newEventWithTrigger
103+instance (MonadReflexHost t m, Monoid w) => MonadReflexHost t (RWST r w s m) where
59 fireEventsAndRead dm a = lift $ fireEventsAndRead dm a
104 fireEventsAndRead dm a = lift $ fireEventsAndRead dm a
60 subscribeEvent = lift . subscribeEvent
105 subscribeEvent = lift . subscribeEvent
61− runFrame = lift . runFrame
62 runHostFrame = lift . runHostFrame
106 runHostFrame = lift . runHostFrame