@@ -125,9 +125,9 @@ instance (Reflex t, MonadHold t m, MonadFix m, MonadAdjust t m, PerformEvent t m
126{-# INLINABLE mapIntMapWithAdjustImpl #-}
126{-# INLINABLE mapIntMapWithAdjustImpl #-}
127mapIntMapWithAdjustImpl :: forall t m v v' p. (Reflex t, MonadFix m, MonadHold t m, Functor p)
127mapIntMapWithAdjustImpl :: forall t m v v' p. (Reflex t, MonadFix m, MonadHold t m, Functor p)
128− => ( (IntMap.Key -> ((Bool, Event t ()), v) -> m v')
128+ => ( (IntMap.Key -> (Event t (), v) -> m v')
129− -> IntMap ((Bool, Event t ()), v)
129+ -> IntMap (Event t (), v)
130− -> Event t (p ((Bool, Event t ()), v))
130+ -> Event t (p (Event t (), v))
131 -> m (IntMap v', Event t (p v'))
131 -> m (IntMap v', Event t (p v'))
133 -> (IntMap.Key -> v -> PostBuildT t m v')
133 -> (IntMap.Key -> v -> PostBuildT t m v')
@@ -136,17 +136,17 @@ mapIntMapWithAdjustImpl :: forall t m v v' p. (Reflex t, MonadFix m, MonadHold t
136 -> PostBuildT t m (IntMap v', Event t (p v'))
136 -> PostBuildT t m (IntMap v', Event t (p v'))
137mapIntMapWithAdjustImpl base f dm0 dm' = do
137mapIntMapWithAdjustImpl base f dm0 dm' = do
138 postBuild <- getPostBuild
138 postBuild <- getPostBuild
139− let loweredDm0 = fmap ((,) (False, postBuild)) dm0
139+ let loweredDm0 = fmap ((,) postBuild) dm0
140− f' :: IntMap.Key -> ((Bool, Event t ()), v) -> m v'
140+ f' :: IntMap.Key -> (Event t (), v) -> m v'
141− f' k ((shouldHeadE, e), v) = do
141+ f' k (e, v) = do
142− eOnce <- if shouldHeadE
143− then headE e --TODO: Avoid doing this headE so many times; once per loweredDm' firing ought to be OK, but it's not totally trivial to do because result' might be firing at the same time, and we don't want *that* to be the postBuild occurrence
145− runPostBuildT (f k v) eOnce
142+ runPostBuildT (f k v) e
146 lift $ do
143 lift $ do
147 rec (result0, result') <- base f' loweredDm0 loweredDm'
144 rec (result0, result') <- base f' loweredDm0 loweredDm'
148− let voidResult' = fmapCheap (\_ -> ()) result'
145+ cohortDone <- numberOccurrencesFrom_ 1 result'
149− let loweredDm' = ffor dm' $ fmap ((,) (True, voidResult'))
146+ numberedDm' <- numberOccurrencesFrom 1 dm'
147+ let postBuild' = fanInt $ fmapCheap (\n -> IntMap.singleton n ()) cohortDone
148+ loweredDm' = flip pushAlways numberedDm' $ \(n, p) -> do
149+ return $ fmap ((,) (selectInt postBuild' n)) p
150 return (result0, result')
150 return (result0, result')
152{-# INLINABLE mapDMapWithAdjustImpl #-}
152{-# INLINABLE mapDMapWithAdjustImpl #-}