on develop help sign in
Merge pull request #439 from reflex-frp/mfunctor-instances
41add85Elliot Cameron
reflex.cabal+1
@@ -80,6 +80,7 @@ library
80 dependent-map >= 0.3 && < 0.5,
80 dependent-map >= 0.3 && < 0.5,
81 exception-transformers == 0.4.*,
81 exception-transformers == 0.4.*,
82 lens >= 4.7 && < 5,
82 lens >= 4.7 && < 5,
83+ mmorph >= 1.0 && < 1.2,
83 monad-control >= 1.0.1 && < 1.1,
84 monad-control >= 1.0.1 && < 1.1,
84 mtl >= 2.1 && < 2.3,
85 mtl >= 2.1 && < 2.3,
85 patch >= 0.0.1 && < 0.1,
86 patch >= 0.0.1 && < 0.1,
src/Reflex/BehaviorWriter/Base.hs+13−4
@@ -24,6 +24,7 @@ module Reflex.BehaviorWriter.Base
24import Control.Monad.Exception
24import Control.Monad.Exception
25import Control.Monad.Identity
25import Control.Monad.Identity
26import Control.Monad.IO.Class
26import Control.Monad.IO.Class
27+import Control.Monad.Morph
27import Control.Monad.Reader
28import Control.Monad.Reader
28import Control.Monad.Ref
29import Control.Monad.Ref
29import Control.Monad.State.Strict
30import Control.Monad.State.Strict
@@ -48,7 +49,18 @@ import Reflex.TriggerEvent.Class
48
49
49-- | A basic implementation of 'BehaviorWriter'.
50-- | A basic implementation of 'BehaviorWriter'.
50newtype BehaviorWriterT t w m a = BehaviorWriterT { unBehaviorWriterT :: StateT [Behavior t w] m a }
51newtype BehaviorWriterT t w m a = BehaviorWriterT { unBehaviorWriterT :: StateT [Behavior t w] m a }
51− deriving (Functor, Applicative, Monad, MonadIO, MonadFix, MonadAsyncException, MonadException) -- The list is kept in reverse order
52+ -- The list is kept in reverse order
53+ deriving
54+ ( Functor
55+ , Applicative
56+ , Monad
57+ , MonadTrans
58+ , MFunctor
59+ , MonadIO
60+ , MonadFix
61+ , MonadAsyncException
62+ , MonadException
63+ )
52
64
53-- | Run a 'BehaviorWriterT' action. The behavior writer output will be provided
65-- | Run a 'BehaviorWriterT' action. The behavior writer output will be provided
54-- along with the result of the action.
66-- along with the result of the action.
@@ -73,9 +85,6 @@ withBehaviorWriterT f dw = do
73deriving instance MonadHold t m => MonadHold t (BehaviorWriterT t w m)
85deriving instance MonadHold t m => MonadHold t (BehaviorWriterT t w m)
74deriving instance MonadSample t m => MonadSample t (BehaviorWriterT t w m)
86deriving instance MonadSample t m => MonadSample t (BehaviorWriterT t w m)
75
87
76−instance MonadTrans (BehaviorWriterT t w) where
77− lift = BehaviorWriterT . lift
78−
79instance MonadRef m => MonadRef (BehaviorWriterT t w m) where
88instance MonadRef m => MonadRef (BehaviorWriterT t w m) where
80 type Ref (BehaviorWriterT t w m) = Ref m
89 type Ref (BehaviorWriterT t w m) = Ref m
81 newRef = lift . newRef
90 newRef = lift . newRef
src/Reflex/DynamicWriter/Base.hs+13−4
@@ -22,6 +22,7 @@ module Reflex.DynamicWriter.Base
22import Control.Monad.Exception
22import Control.Monad.Exception
23import Control.Monad.Identity
23import Control.Monad.Identity
24import Control.Monad.IO.Class
24import Control.Monad.IO.Class
25+import Control.Monad.Morph
25import Control.Monad.Primitive
26import Control.Monad.Primitive
26import Control.Monad.Reader
27import Control.Monad.Reader
27import Control.Monad.Ref
28import Control.Monad.Ref
@@ -51,9 +52,6 @@ import Reflex.Query.Class
51import Reflex.Requester.Class
52import Reflex.Requester.Class
52import Reflex.TriggerEvent.Class
53import Reflex.TriggerEvent.Class
53
54
54−instance MonadTrans (DynamicWriterT t w) where
55− lift = DynamicWriterT . lift
56−
57mapIncrementalMapValues :: (Reflex t, Patch (p v), Patch (p v'), PatchTarget (p v) ~ f v, PatchTarget (p v') ~ f v', Functor p, Functor f) => (v -> v') -> Incremental t (p v) -> Incremental t (p v')
55mapIncrementalMapValues :: (Reflex t, Patch (p v), Patch (p v'), PatchTarget (p v) ~ f v, PatchTarget (p v') ~ f v', Functor p, Functor f) => (v -> v') -> Incremental t (p v) -> Incremental t (p v')
58mapIncrementalMapValues f = unsafeMapIncremental (fmap f) (fmap f)
56mapIncrementalMapValues f = unsafeMapIncremental (fmap f) (fmap f)
59
57
@@ -90,7 +88,18 @@ mergeDynIncrementalWithMove a = unsafeBuildIncremental (mapM (sample . current)
90
88
91-- | A basic implementation of 'DynamicWriter'.
89-- | A basic implementation of 'DynamicWriter'.
92newtype DynamicWriterT t w m a = DynamicWriterT { unDynamicWriterT :: StateT [Dynamic t w] m a }
90newtype DynamicWriterT t w m a = DynamicWriterT { unDynamicWriterT :: StateT [Dynamic t w] m a }
93− deriving (Functor, Applicative, Monad, MonadIO, MonadFix, MonadAsyncException, MonadException) -- The list is kept in reverse order
91+ -- The list is kept in reverse order
92+ deriving
93+ ( Functor
94+ , Applicative
95+ , Monad
96+ , MonadTrans
97+ , MFunctor
98+ , MonadIO
99+ , MonadFix
100+ , MonadAsyncException
101+ , MonadException
102+ )
94
103
95deriving instance MonadHold t m => MonadHold t (DynamicWriterT t w m)
104deriving instance MonadHold t m => MonadHold t (DynamicWriterT t w m)
96deriving instance MonadSample t m => MonadSample t (DynamicWriterT t w m)
105deriving instance MonadSample t m => MonadSample t (DynamicWriterT t w m)
src/Reflex/EventWriter/Base.hs+12−4
@@ -35,6 +35,7 @@ import Reflex.TriggerEvent.Class
35
35
36import Control.Monad.Exception
36import Control.Monad.Exception
37import Control.Monad.Identity
37import Control.Monad.Identity
38+import Control.Monad.Morph
38import Control.Monad.Primitive
39import Control.Monad.Primitive
39import Control.Monad.Reader
40import Control.Monad.Reader
40import Control.Monad.Ref
41import Control.Monad.Ref
@@ -97,7 +98,17 @@ data EventWriterState t w = EventWriterState
97
98
98-- | A basic implementation of 'EventWriter'.
99-- | A basic implementation of 'EventWriter'.
99newtype EventWriterT t w m a = EventWriterT { unEventWriterT :: StateT (EventWriterState t w) m a }
100newtype EventWriterT t w m a = EventWriterT { unEventWriterT :: StateT (EventWriterState t w) m a }
100− deriving (Functor, Applicative, Monad, MonadFix, MonadIO, MonadException, MonadAsyncException)
101+ deriving
102+ ( Functor
103+ , Applicative
104+ , Monad
105+ , MonadTrans
106+ , MFunctor
107+ , MonadFix
108+ , MonadIO
109+ , MonadException
110+ , MonadAsyncException
111+ )
101
112
102-- | Run a 'EventWriterT' action.
113-- | Run a 'EventWriterT' action.
103runEventWriterT :: forall t m w a. (Reflex t, Monad m, Semigroup w) => EventWriterT t w m a -> m (a, Event t w)
114runEventWriterT :: forall t m w a. (Reflex t, Monad m, Semigroup w) => EventWriterT t w m a -> m (a, Event t w)
@@ -117,9 +128,6 @@ instance (Reflex t, Monad m, Semigroup w) => EventWriter t w (EventWriterT t w m
117 , _eventWriterState_told = (tellId myId :=> w) : _eventWriterState_told old
128 , _eventWriterState_told = (tellId myId :=> w) : _eventWriterState_told old
118 }
129 }
119
130
120−instance MonadTrans (EventWriterT t w) where
121− lift = EventWriterT . lift
122−
123instance MonadSample t m => MonadSample t (EventWriterT t w m) where
131instance MonadSample t m => MonadSample t (EventWriterT t w m) where
124 sample = lift . sample
132 sample = lift . sample
125
133
src/Reflex/Query/Base.hs+4
@@ -22,6 +22,7 @@ module Reflex.Query.Base
22import Control.Applicative (liftA2)
22import Control.Applicative (liftA2)
23import Control.Monad.Exception
23import Control.Monad.Exception
24import Control.Monad.Fix
24import Control.Monad.Fix
25+import Control.Monad.Morph
25import Control.Monad.Primitive
26import Control.Monad.Primitive
26import Control.Monad.Reader
27import Control.Monad.Reader
27import Control.Monad.Ref
28import Control.Monad.Ref
@@ -239,6 +240,9 @@ instance (Reflex t, MonadFix m, Group q, Additive q, Query q, Eq q, MonadHold t
239instance MonadTrans (QueryT t q) where
240instance MonadTrans (QueryT t q) where
240 lift = QueryT . lift . lift . lift
241 lift = QueryT . lift . lift . lift
241
242
243+instance MFunctor (QueryT t q) where
244+ hoist = mapQueryT
245+
242instance PrimMonad m => PrimMonad (QueryT t q m) where
246instance PrimMonad m => PrimMonad (QueryT t q m) where
243 type PrimState (QueryT t q m) = PrimState m
247 type PrimState (QueryT t q m) = PrimState m
244 primitive = lift . primitive
248 primitive = lift . primitive
src/Reflex/Requester/Base.hs+4
@@ -49,6 +49,7 @@ import Reflex.TriggerEvent.Class
49import Control.Applicative (liftA2)
49import Control.Applicative (liftA2)
50import Control.Monad.Exception
50import Control.Monad.Exception
51import Control.Monad.Identity
51import Control.Monad.Identity
52+import Control.Monad.Morph
52import Control.Monad.Primitive
53import Control.Monad.Primitive
53import Control.Monad.Reader
54import Control.Monad.Reader
54import Control.Monad.Ref
55import Control.Monad.Ref
@@ -317,6 +318,9 @@ responseFromTag (MyTagWrap t) = do
317instance MonadTrans (RequesterT t request response) where
318instance MonadTrans (RequesterT t request response) where
318 lift = RequesterT . lift . lift
319 lift = RequesterT . lift . lift
319
320
321+instance MFunctor (RequesterT t request response) where
322+ hoist f = RequesterT . hoist (hoist f) . unRequesterT
323+
320instance PerformEvent t m => PerformEvent t (RequesterT t request response m) where
324instance PerformEvent t m => PerformEvent t (RequesterT t request response m) where
321 type Performable (RequesterT t request response m) = Performable m
325 type Performable (RequesterT t request response m) = Performable m
322 performEvent_ = lift . performEvent_
326 performEvent_ = lift . performEvent_