Skip to content

Commit 52eee43

Browse files
committed
Rename Data.{Fast,}WeakBag.traverse to Data.{Fast,}WeakBag.traverse_
Renamed Data.FastWeakBag.traverse and Data.WeakBag.traverse to Data.FastWeakBag.traverse_ and Data.WeakBag.traverse_ respectively. This is a more accurate naming for the function as it has no resulting value in the same way Data.Foldable.traverse_, and unlike Data.Traverseable.traverse which has a resulting value. In addition, we do not have to ignore any hlint warnings any more.
1 parent 755a0ce commit 52eee43

File tree

5 files changed

+39
-24
lines changed

5 files changed

+39
-24
lines changed

ChangeLog.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# Revision history for reflex
22

3+
## Unreleased
4+
5+
* Data.WeakBag.traverse and Data.FastWeakBag.traverse have been
6+
renamed to Data.WeakBag.traverse_ and Data.FastWeakBag.traverse_
7+
respectively.
8+
39
## 0.6.2.4
410

511
* Update to monoidal-containers 0.6

src/Data/FastWeakBag.hs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ module Data.FastWeakBag
1818
, isEmpty
1919
, insert
2020
, traverse
21+
, traverse_
2122
, remove
2223
-- * Internal functions
2324
-- These will not always be available.
@@ -116,14 +117,14 @@ foreign import javascript unsafe "(function(){ for(var i = 0; i < $1.tickets.len
116117
isEmpty bag = {-# SCC "isEmpty" #-} IntMap.null <$> readIORef (_weakBag_children bag)
117118
#endif
118119

119-
{-# INLINE traverse #-}
120+
{-# INLINE traverse_ #-}
120121
-- | Visit every node in the given list. If new nodes are appended during the
121122
-- traversal, they will not be visited. Every live node that was in the list
122123
-- when the traversal began will be visited exactly once; however, no guarantee
123124
-- is made about the order of the traversal.
124-
traverse :: forall a m. MonadIO m => FastWeakBag a -> (a -> m ()) -> m ()
125+
traverse_ :: forall a m. MonadIO m => FastWeakBag a -> (a -> m ()) -> m ()
125126
#ifdef GHCJS_FAST_WEAK
126-
traverse wb f = do
127+
traverse_ wb f = do
127128
let go cursor = when (not $ js_isNull cursor) $ do
128129
val <- liftIO $ js_getTicketValue cursor
129130
f $ unsafeFromRawJSVal val
@@ -134,13 +135,17 @@ foreign import javascript unsafe "$r = $1.val;" js_getTicketValue :: JSVal -> IO
134135
--TODO: Fix the race condition where if a cursor is deleted (presumably using 'remove', below) while we're holding it, it can't find its way back to the correct bag
135136
foreign import javascript unsafe "(function(){ for(var i = $1.pos - 1; i >= 0; i--) { if($1.bag.tickets[i] !== null) { return $1.bag.tickets[i]; } }; return null; })()" js_getNext :: FastWeakBagTicket a -> IO JSVal --TODO: Clean up as we go along so this isn't O(n) every time -- Result can be null or a FastWeakBagTicket a
136137
#else
137-
traverse (FastWeakBag _ children) f = {-# SCC "traverse" #-} do
138+
traverse_ (FastWeakBag _ children) f = {-# SCC "traverse_" #-} do
138139
cs <- liftIO $ readIORef children
139140
forM_ cs $ \c -> do
140141
ma <- liftIO $ deRefWeak c
141142
mapM_ f ma
142143
#endif
143144

145+
{-# DEPRECATED traverse "Use 'traverse_' instead" #-}
146+
traverse :: forall a m. MonadIO m => FastWeakBag a -> (a -> m ()) -> m ()
147+
traverse = traverse_
148+
144149
-- | Remove an item from the 'FastWeakBag'; does nothing if invoked multiple times
145150
-- on the same 'FastWeakBagTicket'.
146151
{-# INLINE remove #-}

src/Data/WeakBag.hs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ module Data.WeakBag
1515
, singleton
1616
, insert
1717
, traverse
18+
, traverse_
1819
, remove
1920
-- * Internal functions
2021
-- These will not always be available.
@@ -99,18 +100,22 @@ singleton a wbRef finalizer = {-# SCC "singleton" #-} do
99100
ticket <- insert a bag wbRef finalizer
100101
return (bag, ticket)
101102

102-
{-# INLINE traverse #-}
103+
{-# INLINE traverse_ #-}
103104
-- | Visit every node in the given list. If new nodes are appended during the
104105
-- traversal, they will not be visited. Every live node that was in the list
105106
-- when the traversal began will be visited exactly once; however, no guarantee
106107
-- is made about the order of the traversal.
107-
traverse :: MonadIO m => WeakBag a -> (a -> m ()) -> m ()
108-
traverse (WeakBag _ children) f = {-# SCC "traverse" #-} do
108+
traverse_ :: MonadIO m => WeakBag a -> (a -> m ()) -> m ()
109+
traverse_ (WeakBag _ children) f = {-# SCC "traverse" #-} do
109110
cs <- liftIO $ readIORef children
110111
forM_ cs $ \c -> do
111112
ma <- liftIO $ deRefWeak c
112113
mapM_ f ma
113114

115+
{-# DEPRECATED traverse "Use 'traverse_' instead" #-}
116+
traverse :: MonadIO m => WeakBag a -> (a -> m ()) -> m ()
117+
traverse = traverse_
118+
114119
-- | Remove an item from the 'WeakBag'; does nothing if invoked multiple times
115120
-- on the same 'WeakBagTicket'.
116121
{-# INLINE remove #-}

src/Reflex/Spider/Internal.hs

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -332,9 +332,9 @@ cacheEvent e =
332332
scheduleClear occRef
333333
propagateFast a subscribers
334334
, subscriberInvalidateHeight = \old -> do
335-
FastWeakBag.traverse subscribers $ invalidateSubscriberHeight old
335+
FastWeakBag.traverse_ subscribers $ invalidateSubscriberHeight old
336336
, subscriberRecalculateHeight = \new -> do
337-
FastWeakBag.traverse subscribers $ recalculateSubscriberHeight new
337+
FastWeakBag.traverse_ subscribers $ recalculateSubscriberHeight new
338338
}
339339
when (isJust occ) $ do
340340
liftIO $ writeIORef occRef occ -- Set the initial value of occRef; we don't need to do this if occ is Nothing
@@ -450,12 +450,12 @@ newSubscriberFan subscribed = return $ Subscriber
450450
, subscriberInvalidateHeight = \old -> do
451451
when debugInvalidateHeight $ putStrLn $ "invalidateSubscriberHeight: SubscriberFan" <> showNodeId subscribed
452452
subscribers <- readIORef $ fanSubscribedSubscribers subscribed
453-
forM_ (DMap.toList subscribers) $ \(_ :=> v) -> WeakBag.traverse (_fanSubscribedChildren_list v) $ invalidateSubscriberHeight old
453+
forM_ (DMap.toList subscribers) $ \(_ :=> v) -> WeakBag.traverse_ (_fanSubscribedChildren_list v) $ invalidateSubscriberHeight old
454454
when debugInvalidateHeight $ putStrLn $ "invalidateSubscriberHeight: SubscriberFan" <> showNodeId subscribed <> " done"
455455
, subscriberRecalculateHeight = \new -> do
456456
when debugInvalidateHeight $ putStrLn $ "recalculateSubscriberHeight: SubscriberFan" <> showNodeId subscribed
457457
subscribers <- readIORef $ fanSubscribedSubscribers subscribed
458-
forM_ (DMap.toList subscribers) $ \(_ :=> v) -> WeakBag.traverse (_fanSubscribedChildren_list v) $ recalculateSubscriberHeight new
458+
forM_ (DMap.toList subscribers) $ \(_ :=> v) -> WeakBag.traverse_ (_fanSubscribedChildren_list v) $ recalculateSubscriberHeight new
459459
when debugInvalidateHeight $ putStrLn $ "recalculateSubscriberHeight: SubscriberFan" <> showNodeId subscribed <> " done"
460460
}
461461

@@ -471,7 +471,7 @@ newSubscriberSwitch subscribed = return $ Subscriber
471471
oldHeight <- readIORef $ switchSubscribedHeight subscribed
472472
when (oldHeight /= invalidHeight) $ do
473473
writeIORef (switchSubscribedHeight subscribed) $! invalidHeight
474-
WeakBag.traverse (switchSubscribedSubscribers subscribed) $ invalidateSubscriberHeight oldHeight
474+
WeakBag.traverse_ (switchSubscribedSubscribers subscribed) $ invalidateSubscriberHeight oldHeight
475475
when debugInvalidateHeight $ putStrLn $ "invalidateSubscriberHeight: SubscriberSwitch" <> showNodeId subscribed <> " done"
476476
, subscriberRecalculateHeight = \new -> do
477477
when debugInvalidateHeight $ putStrLn $ "recalculateSubscriberHeight: SubscriberSwitch" <> showNodeId subscribed
@@ -494,8 +494,8 @@ newSubscriberCoincidenceOuter subscribed = return $ Subscriber
494494
Nothing -> do
495495
when (innerHeight > outerHeight) $ liftIO $ do -- If the event fires, it will fire at a later height
496496
writeIORef (coincidenceSubscribedHeight subscribed) $! innerHeight
497-
WeakBag.traverse (coincidenceSubscribedSubscribers subscribed) $ invalidateSubscriberHeight outerHeight
498-
WeakBag.traverse (coincidenceSubscribedSubscribers subscribed) $ recalculateSubscriberHeight innerHeight
497+
WeakBag.traverse_ (coincidenceSubscribedSubscribers subscribed) $ invalidateSubscriberHeight outerHeight
498+
WeakBag.traverse_ (coincidenceSubscribedSubscribers subscribed) $ recalculateSubscriberHeight innerHeight
499499
Just o -> do -- Since it's already firing, no need to adjust height
500500
liftIO $ writeIORef (coincidenceSubscribedOccurrence subscribed) occ
501501
scheduleClear $ coincidenceSubscribedOccurrence subscribed
@@ -542,14 +542,14 @@ propagate :: a -> WeakBag (Subscriber x a) -> EventM x ()
542542
propagate a subscribers = withIncreasedDepth $ do
543543
-- Note: in the following traversal, we do not visit nodes that are added to the list during our traversal; they are new events, which will necessarily have full information already, so there is no need to traverse them
544544
--TODO: Should we check if nodes already have their values before propagating? Maybe we're re-doing work
545-
WeakBag.traverse subscribers $ \s -> subscriberPropagate s a
545+
WeakBag.traverse_ subscribers $ \s -> subscriberPropagate s a
546546

547547
-- | Propagate everything at the current height
548548
propagateFast :: a -> FastWeakBag (Subscriber x a) -> EventM x ()
549549
propagateFast a subscribers = withIncreasedDepth $ do
550550
-- Note: in the following traversal, we do not visit nodes that are added to the list during our traversal; they are new events, which will necessarily have full information already, so there is no need to traverse them
551551
--TODO: Should we check if nodes already have their values before propagating? Maybe we're re-doing work
552-
FastWeakBag.traverse subscribers $ \s -> subscriberPropagate s a
552+
FastWeakBag.traverse_ subscribers $ \s -> subscriberPropagate s a
553553

554554
--------------------------------------------------------------------------------
555555
-- EventSubscribed
@@ -1527,15 +1527,15 @@ fanInt p = unsafePerformIO $ do
15271527
liftIO $ writeIORef (_fanInt_occRef self) m
15281528
scheduleIntClear $ _fanInt_occRef self
15291529
FastMutableIntMap.forIntersectionWithImmutable_ (_fanInt_subscribers self) m $ \b v -> do --TODO: Do we need to know that no subscribers are being added as we traverse?
1530-
FastWeakBag.traverse b $ \s -> do
1530+
FastWeakBag.traverse_ b $ \s -> do
15311531
subscriberPropagate s v
15321532
, subscriberInvalidateHeight = \old -> do
15331533
FastMutableIntMap.for_ (_fanInt_subscribers self) $ \b -> do
1534-
FastWeakBag.traverse b $ \s -> do
1534+
FastWeakBag.traverse_ b $ \s -> do
15351535
subscriberInvalidateHeight s old
15361536
, subscriberRecalculateHeight = \new -> do
15371537
FastMutableIntMap.for_ (_fanInt_subscribers self) $ \b -> do
1538-
FastWeakBag.traverse b $ \s -> do
1538+
FastWeakBag.traverse_ b $ \s -> do
15391539
subscriberRecalculateHeight s new
15401540
}
15411541
liftIO $ do
@@ -2207,7 +2207,7 @@ runFrame a = SpiderHost $ do
22072207
myHeight <- readIORef $ switchSubscribedHeight subscribed
22082208
when (parentHeight /= myHeight) $ do
22092209
writeIORef (switchSubscribedHeight subscribed) $! invalidHeight
2210-
WeakBag.traverse (switchSubscribedSubscribers subscribed) $ invalidateSubscriberHeight myHeight
2210+
WeakBag.traverse_ (switchSubscribedSubscribers subscribed) $ invalidateSubscriberHeight myHeight
22112211
mapM_ _someMergeUpdate_invalidateHeight mergeUpdates --TODO: In addition to when the patch is completely empty, we should also not run this if it has some Nothing values, but none of them have actually had any effect; potentially, we could even check for Just values with no effect (e.g. by comparing their IORefs and ignoring them if they are unchanged); actually, we could just check if the new height is different
22122212
forM_ coincidenceInfos $ \(SomeResetCoincidence subscription mcs) -> do
22132213
unsubscribe subscription
@@ -2248,15 +2248,15 @@ invalidateCoincidenceHeight subscribed = do
22482248
oldHeight <- readIORef $ coincidenceSubscribedHeight subscribed
22492249
when (oldHeight /= invalidHeight) $ do
22502250
writeIORef (coincidenceSubscribedHeight subscribed) $! invalidHeight
2251-
WeakBag.traverse (coincidenceSubscribedSubscribers subscribed) $ invalidateSubscriberHeight oldHeight
2251+
WeakBag.traverse_ (coincidenceSubscribedSubscribers subscribed) $ invalidateSubscriberHeight oldHeight
22522252

22532253
updateSwitchHeight :: Height -> SwitchSubscribed x a -> IO ()
22542254
updateSwitchHeight new subscribed = do
22552255
oldHeight <- readIORef $ switchSubscribedHeight subscribed
22562256
when (oldHeight == invalidHeight) $ do --TODO: This 'when' should probably be an assertion
22572257
when (new /= invalidHeight) $ do --TODO: This 'when' should probably be an assertion
22582258
writeIORef (switchSubscribedHeight subscribed) $! new
2259-
WeakBag.traverse (switchSubscribedSubscribers subscribed) $ recalculateSubscriberHeight new
2259+
WeakBag.traverse_ (switchSubscribedSubscribers subscribed) $ recalculateSubscriberHeight new
22602260

22612261
recalculateCoincidenceHeight :: CoincidenceSubscribed x a -> IO ()
22622262
recalculateCoincidenceHeight subscribed = do
@@ -2265,7 +2265,7 @@ recalculateCoincidenceHeight subscribed = do
22652265
height <- calculateCoincidenceHeight subscribed
22662266
when (height /= invalidHeight) $ do
22672267
writeIORef (coincidenceSubscribedHeight subscribed) $! height
2268-
WeakBag.traverse (coincidenceSubscribedSubscribers subscribed) $ recalculateSubscriberHeight height
2268+
WeakBag.traverse_ (coincidenceSubscribedSubscribers subscribed) $ recalculateSubscriberHeight height
22692269

22702270
calculateSwitchHeight :: SwitchSubscribed x a -> IO Height
22712271
calculateSwitchHeight subscribed = getEventSubscribedHeight . _eventSubscription_subscribed =<< readIORef (switchSubscribedCurrentParent subscribed)

test/hlint.hs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ main = do
2323
, "--ignore=Reduce duplication"
2424
, "--cpp-define=USE_TEMPLATE_HASKELL"
2525
, "--ignore=Use tuple-section"
26-
, "--ignore=Use traverse_"
2726
]
2827
recurseInto = and <$> sequence
2928
[ fileType ==? Directory

0 commit comments

Comments
 (0)