@@ -125,9 +125,9 @@ instance (Reflex t, MonadHold t m, MonadFix m, MonadAdjust t m, PerformEvent t m
125125
126126{-# INLINABLE mapIntMapWithAdjustImpl #-}
127127mapIntMapWithAdjustImpl :: forall t m v v' p. (Reflex t, MonadFix m, MonadHold t m, Functor p)
128− => ( (IntMap.Key -> ((Bool, Event t ()), v) -> m v')
129− -> IntMap ((Bool, Event t ()), v)
130− -> Event t (p ((Bool, Event t ()), v))
128+ => ( (IntMap.Key -> (Event t (), v) -> m v')
129+ -> IntMap (Event t (), v)
130+ -> Event t (p (Event t (), v))
131131 -> m (IntMap v', Event t (p v'))
132132 )
133133 -> (IntMap.Key -> v -> PostBuildT t m v')
@@ -136,17 +136,17 @@ mapIntMapWithAdjustImpl :: forall t m v v' p. (Reflex t, MonadFix m, MonadHold t
136136 -> PostBuildT t m (IntMap v', Event t (p v'))
137137mapIntMapWithAdjustImpl base f dm0 dm' = do
138138 postBuild <- getPostBuild
139− let loweredDm0 = fmap ((,) (False, postBuild)) dm0
140− f' :: IntMap.Key -> ((Bool, Event t ()), v) -> m v'
141− f' k ((shouldHeadE, 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
144− else return e
145− runPostBuildT (f k v) eOnce
139+ let loweredDm0 = fmap ((,) postBuild) dm0
140+ f' :: IntMap.Key -> (Event t (), v) -> m v'
141+ f' k (e, v) = do
142+ runPostBuildT (f k v) e
146143 lift $ do
147144 rec (result0, result') <- base f' loweredDm0 loweredDm'
148− let voidResult' = fmapCheap (\_ -> ()) result'
149− let loweredDm' = ffor dm' $ fmap ((,) (True, voidResult'))
145+ cohortDone <- numberOccurrencesFrom_ 1 result'
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
150150 return (result0, result')
151151
152152{-# INLINABLE mapDMapWithAdjustImpl #-}