@@ -27,7 +27,6 @@ module Streamly.Internal.Data.Stream.StreamD.Transform
2727 -- * Mapping Effects
2828 , tap
2929 , tapOffsetEvery
30− , tapRate
3130 , pollCounts
3231
3332 -- * Folding
@@ -126,21 +125,17 @@ where
126125
127126#include "inline.hs"
128127
129−import Control.Concurrent (killThread, threadDelay)
130−import Control.Exception (AsyncException)
128+import Control.Concurrent (killThread)
131129import Control.Monad (void, when)
132−import Control.Monad.Catch (MonadCatch, throwM)
133130import Control.Monad.IO.Class (MonadIO(..))
134131import Control.Monad.Trans.Class (MonadTrans(lift))
135−import Data.IORef (newIORef, mkWeakIORef)
136132import Data.Maybe (fromJust, isJust)
137133import Fusion.Plugin.Types (Fuse(..))
138134import GHC.Types (SPEC(..))
139−import qualified Control.Monad.Catch as MC
140135import qualified Data.Set as Set
141136
142137import Streamly.Internal.Control.Concurrent (MonadAsync)
143−import Streamly.Internal.Control.ForkLifted (fork, forkManaged)
138+import Streamly.Internal.Control.ForkLifted (forkManaged)
144139import Streamly.Internal.Data.Fold.Type (Fold(..))
145140import Streamly.Internal.Data.Pipe.Type (Pipe(..), PipeState(..))
146141import Streamly.Internal.Data.SVar.Type (defState, adaptState)
@@ -367,50 +362,6 @@ pollCounts predicate transf fld (Stream step state) = Stream step' Nothing
367362 liftIO $ killThread tid
368363 return Stop
369364
370−{-# INLINE_NORMAL tapRate #-}
371−tapRate ::
372− (MonadAsync m, MonadCatch m)
373− => Double
374− -> (Int -> m b)
375− -> Stream m a
376− -> Stream m a
377−tapRate samplingRate action (Stream step state) = Stream step' Nothing
378− where
379− {-# NOINLINE loop #-}
380− loop countVar prev = do
381− i <-
382− MC.catch
383− (do liftIO $ threadDelay (round $ samplingRate * 1000000)
384− i <- liftIO $ Prim.readIORef countVar
385− let !diff = i - prev
386− void $ action diff
387− return i)
388− (\(e :: AsyncException) -> do
389− i <- liftIO $ Prim.readIORef countVar
390− let !diff = i - prev
391− void $ action diff
392− throwM (MC.toException e))
393− loop countVar i
394−
395− {-# INLINE_LATE step' #-}
396− step' _ Nothing = do
397− countVar <- liftIO $ Prim.newIORef 0
398− tid <- fork $ loop countVar 0
399− ref <- liftIO $ newIORef ()
400− _ <- liftIO $ mkWeakIORef ref (killThread tid)
401− return $ Skip (Just (countVar, tid, state, ref))
402−
403− step' gst (Just (countVar, tid, st, ref)) = do
404− r <- step gst st
405− case r of
406− Yield x s -> do
407− liftIO $ Prim.modifyIORef' countVar (+ 1)
408− return $ Yield x (Just (countVar, tid, s, ref))
409− Skip s -> return $ Skip (Just (countVar, tid, s, ref))
410− Stop -> do
411− liftIO $ killThread tid
412− return Stop
413−
414365------------------------------------------------------------------------------
415366-- Scanning with a Fold
416367------------------------------------------------------------------------------