on develop help sign in
Simplify DynamicWriter's internal representation
56af6d8Ryan Trinkle
src/Reflex/DynamicWriter.hs+4−5
@@ -71,7 +71,7 @@ data Replaceable t w = Replaceable
71 , _replaceable_modify :: Event t (Maybe (Replaceable t w)) -- "Please delete" is represented with an event of Nothing; all subsequent events will be ignored
71 , _replaceable_modify :: Event t (Maybe (Replaceable t w)) -- "Please delete" is represented with an event of Nothing; all subsequent events will be ignored
72 }
72 }
73
73
74−type DynamicWriterAccumulator t w = [Replaceable t (Dynamic t w)]
74+type DynamicWriterAccumulator t w = [Dynamic t w]
75
75
76newtype DynamicWriterT t w m a = DynamicWriterT { unDynamicWriterT :: StateT (DynamicWriterAccumulator t w) m a } deriving (Functor, Applicative, Monad, MonadIO, MonadFix, MonadHold t, MonadSample t, MonadAsyncException, MonadException) -- The list is kept in reverse order
76newtype DynamicWriterT t w m a = DynamicWriterT { unDynamicWriterT :: StateT (DynamicWriterAccumulator t w) m a } deriving (Functor, Applicative, Monad, MonadIO, MonadFix, MonadHold t, MonadSample t, MonadAsyncException, MonadException) -- The list is kept in reverse order
77
77
@@ -111,17 +111,16 @@ mconcatIncrementalReplaceableDynMap m0 m' additionsCeased = do
111 result = fmap (mconcat . Map.elems) $ incrementalToDynamic $ mergeDynIncremental i
111 result = fmap (mconcat . Map.elems) $ incrementalToDynamic $ mergeDynIncremental i
112 return $ Replaceable result $ fmapMaybe id $ updated $ zipDynWith replaceSelf noMoreAdditions $ incrementalToDynamic vals
112 return $ Replaceable result $ fmapMaybe id $ updated $ zipDynWith replaceSelf noMoreAdditions $ incrementalToDynamic vals
113
113
114−runDynamicWriterT :: (MonadFix m, Reflex t, MonadHold t m, Monoid w) => DynamicWriterT t w m a -> m (a, Dynamic t w)
114+runDynamicWriterT :: (MonadFix m, Reflex t, Monoid w) => DynamicWriterT t w m a -> m (a, Dynamic t w)
115runDynamicWriterT (DynamicWriterT a) = do
115runDynamicWriterT (DynamicWriterT a) = do
116 (result, ws) <- runStateT a []
116 (result, ws) <- runStateT a []
117− Replaceable w _ <- mconcatIncrementalReplaceableDynMap (Map.fromList $ zip [1 :: Int ..] $ reverse ws) never never
118− return (result, w)
117+ return (result, mconcat $ reverse ws)
119
118
120class Monad m => MonadDynamicWriter t w m | m -> t w where
119class Monad m => MonadDynamicWriter t w m | m -> t w where
121 tellDyn :: Dynamic t w -> m ()
120 tellDyn :: Dynamic t w -> m ()
122
121
123instance (Monad m, Reflex t) => MonadDynamicWriter t w (DynamicWriterT t w m) where
122instance (Monad m, Reflex t) => MonadDynamicWriter t w (DynamicWriterT t w m) where
124− tellDyn w = DynamicWriterT $ modify (Replaceable w never :)
123+ tellDyn w = DynamicWriterT $ modify (w :)
125
124
126instance MonadReader r m => MonadReader r (DynamicWriterT t w m) where
125instance MonadReader r m => MonadReader r (DynamicWriterT t w m) where
127 ask = lift ask
126 ask = lift ask