on develop help sign in
Clean up some stuff in DynamicWriter
commit6c5fcb819c6acd149f8168e45efa45d333ae1417 authorRyan Trinkle <ryan.trinkle@gmail.com> dateFri 27 May 2016, 13:46 (10 years ago) parentec6682c
1 file changed+11−10
src/Reflex/Dom/DynamicWriter.hs+11−10
src/Reflex/Dom/DynamicWriter.hs+11−10
@@ -74,11 +74,11 @@ incrementalExtractFunctorDMap = unsafeMapIncremental mapWithFunctorToDMap $ \(Pa
7474mergeIncrementalMap :: (Reflex t, Ord k) => Incremental t PatchMap (Map k (Event t v)) -> Event t (Map k v)
7575mergeIncrementalMap = fmap dmapToMap . mergeIncremental . incrementalExtractFunctorDMap
7676
77−incrementalReplaceableMap :: (Reflex t, MonadHold t m, MonadFix m, Ord k) => Map k (Replaceable t v) -> Event t (PatchMap (Map k (Replaceable t v))) -> m (Incremental t PatchMap (Map k v))
78−incrementalReplaceableMap v0 e = do
79− rec vals <- holdIncremental v0 $ e <> valChanges
80− let valChanges = fmap PatchMap $ mergeIncrementalMap $ mapIncrementalMapValues _replaceable_modify vals
81− return $ mapIncrementalMapValues _replaceable_value vals
77+incrementalReplaceableMap :: (Reflex t, Ord k) => Incremental t PatchMap (Map k (Replaceable t v)) -> Incremental t PatchMap (Map k v)
78+incrementalReplaceableMap m =
79+ let vals = unsafeBuildIncremental (sample $ currentIncremental m) $ updatedIncremental m <> valChanges
80+ valChanges = fmap PatchMap $ mergeIncrementalMap $ mapIncrementalMapValues _replaceable_modify vals
81+ in mapIncrementalMapValues _replaceable_value vals
8282
8383mergeDynIncremental :: (Reflex t, Ord k) => Incremental t PatchMap (Map k (Dynamic t v)) -> Incremental t PatchMap (Map k v)
8484mergeDynIncremental a = unsafeBuildIncremental (mapM (sample . current) =<< sample (currentIncremental a)) $ addedAndRemovedValues <> changedValues
@@ -114,13 +114,13 @@ instance MonadReflexCreateTrigger t m => MonadReflexCreateTrigger t (DynamicWrit
114114runDynamicWriterTInternal :: DynamicWriterT t w m a -> m (a, DynamicWriterAccumulator t w)
115115runDynamicWriterTInternal (DynamicWriterT a) = runStateT a []
116116
117−mconcatIncrementalReplaceableDynMap :: (Reflex t, Monoid v, Ord k) => Incremental t PatchMap (Map k (Dynamic t v)) -> Dynamic t v
118−mconcatIncrementalReplaceableDynMap = fmap (mconcat . Map.elems) . incrementalToDynamic . mergeDynIncremental
117+mconcatIncrementalReplaceableDynMap :: (Reflex t, Monoid v, Ord k) => Incremental t PatchMap (Map k (Replaceable t (Dynamic t v))) -> Dynamic t v
118+mconcatIncrementalReplaceableDynMap = fmap (mconcat . Map.elems) . incrementalToDynamic . mergeDynIncremental . incrementalReplaceableMap
119119
120−runDynamicWriterT :: (Reflex t, MonadHold t m, Monoid w, MonadFix m) => DynamicWriterT t w m a -> m (a, Dynamic t w)
120+runDynamicWriterT :: (Reflex t, MonadHold t m, Monoid w) => DynamicWriterT t w m a -> m (a, Dynamic t w)
121121runDynamicWriterT (DynamicWriterT a) = do
122122 (result, ws) <- runStateT a []
123− i <- incrementalReplaceableMap (Map.fromList $ zip [1 :: Int ..] $ reverse ws) never
123+ i <- holdIncremental (Map.fromList $ zip [1 :: Int ..] $ reverse ws) never
124124 let w = mconcatIncrementalReplaceableDynMap i
125125 return (result, w)
126126
@@ -177,12 +177,13 @@ instance (DomBuilder t m, Monoid w, MonadHold t m, MonadFix m) => DomBuilder t (
177177 let (myNextId, numbered) = mapAccumL (\n v -> (succ n, (n, Just v))) myFirstId cs
178178 return (myNextId, PatchMap $ Map.fromList numbered)
179179 newNextId = fst <$> numberedNewChildren
180− replaceableMap <- incrementalReplaceableMap Map.empty $ snd <$> numberedNewChildren
180+ replaceableMap <- holdIncremental Map.empty $ snd <$> numberedNewChildren
181181 noMoreAdditions <- holdDyn False $ True <$ additionsCeased
182182 let replaceSelf nma i = do
183183 guard nma
184184 case Map.toList i of
185185 [] -> return Nothing -- Delete self
186+ [(_, n)] -> return $ Just n
186187 _ -> mzero
187188 return $ Replaceable (mconcatIncrementalReplaceableDynMap replaceableMap) $ fmapMaybe id $ updated $ zipDynWith replaceSelf noMoreAdditions $ incrementalToDynamic replaceableMap
188189 rec children <- lift $ manageChildren childOutputs $ cfg ^. deleteSelf