@@ -27,7 +27,6 @@ module Streamly.Internal.Data.Stream.StreamD.Transform
27 -- * Mapping Effects
27 -- * Mapping Effects
29 , tapOffsetEvery
29 , tapOffsetEvery
31 , pollCounts
30 , pollCounts
33 -- * Folding
32 -- * Folding
@@ -126,21 +125,17 @@ where
127#include "inline.hs"
126#include "inline.hs"
129−import Control.Concurrent (killThread, threadDelay)
128+import Control.Concurrent (killThread)
130−import Control.Exception (AsyncException)
131import Control.Monad (void, when)
129import Control.Monad (void, when)
132−import Control.Monad.Catch (MonadCatch, throwM)
133import Control.Monad.IO.Class (MonadIO(..))
130import Control.Monad.IO.Class (MonadIO(..))
134import Control.Monad.Trans.Class (MonadTrans(lift))
131import Control.Monad.Trans.Class (MonadTrans(lift))
135−import Data.IORef (newIORef, mkWeakIORef)
136import Data.Maybe (fromJust, isJust)
132import Data.Maybe (fromJust, isJust)
137import Fusion.Plugin.Types (Fuse(..))
133import Fusion.Plugin.Types (Fuse(..))
138import GHC.Types (SPEC(..))
134import GHC.Types (SPEC(..))
139−import qualified Control.Monad.Catch as MC
140import qualified Data.Set as Set
135import qualified Data.Set as Set
142import Streamly.Internal.Control.Concurrent (MonadAsync)
137import Streamly.Internal.Control.Concurrent (MonadAsync)
143−import Streamly.Internal.Control.ForkLifted (fork, forkManaged)
138+import Streamly.Internal.Control.ForkLifted (forkManaged)
144import Streamly.Internal.Data.Fold.Type (Fold(..))
139import Streamly.Internal.Data.Fold.Type (Fold(..))
145import Streamly.Internal.Data.Pipe.Type (Pipe(..), PipeState(..))
140import Streamly.Internal.Data.Pipe.Type (Pipe(..), PipeState(..))
146import Streamly.Internal.Data.SVar.Type (defState, adaptState)
141import Streamly.Internal.Data.SVar.Type (defState, adaptState)
@@ -367,50 +362,6 @@ pollCounts predicate transf fld (Stream step state) = Stream step' Nothing
367 liftIO $ killThread tid
362 liftIO $ killThread tid
368 return Stop
363 return Stop
370−{-# INLINE_NORMAL tapRate #-}
372− (MonadAsync m, MonadCatch m)
377−tapRate samplingRate action (Stream step state) = Stream step' Nothing
379− {-# NOINLINE loop #-}
380− loop countVar prev = do
383− (do liftIO $ threadDelay (round $ samplingRate * 1000000)
384− i <- liftIO $ Prim.readIORef countVar
385− let !diff = i - prev
388− (\(e :: AsyncException) -> do
389− i <- liftIO $ Prim.readIORef countVar
390− let !diff = i - prev
392− throwM (MC.toException e))
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))
403− step' gst (Just (countVar, tid, st, ref)) = 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))
411− liftIO $ killThread tid
414------------------------------------------------------------------------------
365------------------------------------------------------------------------------
415-- Scanning with a Fold
366-- Scanning with a Fold
416------------------------------------------------------------------------------
367------------------------------------------------------------------------------