--------------------------------- API Annotations --------------------------------- [A] : Added [R] : Removed [C] : Changed [O] : Old definition [N] : New definition [D] : Deprecated --------------------------------- API diff --------------------------------- [C] Streamly.Network.Socket [A] readWith :: MonadIO m => Int -> Socket -> Stream m Word8 [A] readChunksWith :: MonadIO m => Int -> Socket -> Stream m (Array Word8) [C] Streamly.Network.Inet.TCP [D] acceptorOnPortLocal :: MonadIO m => Unfold m PortNumber Socket [D] acceptorOnPort :: MonadIO m => Unfold m PortNumber Socket [A] acceptorLocal :: MonadIO m => Unfold m PortNumber Socket [A] acceptor :: MonadIO m => Unfold m PortNumber Socket [A] acceptOnAddrWith :: MonadIO m => [(SocketOption, Int)] -> (Word8, Word8, Word8, Word8) -> PortNumber -> Stream m Socket [A] acceptLocal :: MonadIO m => PortNumber -> Stream m Socket [A] accept :: MonadIO m => PortNumber -> Stream m Socket [C] Streamly.Data.Stream.Prelude [D] tapCount :: MonadAsync m => (a -> Bool) -> (Stream m Int -> m b) -> Stream m a -> Stream m a [A] parTapCount :: MonadAsync m => (a -> Bool) -> (Stream m Int -> m b) -> Stream m a -> Stream m a [A] Streamly.Data.Fold.Prelude [A] Config [A] toHashMapIO :: (MonadIO m, Hashable k, Ord k) => (a -> k) -> Fold m a b -> Fold m a (HashMap k b) [A] parEval :: MonadAsync m => (Config -> Config) -> Fold m a b -> Fold m a b [A] maxBuffer :: Int -> Config -> Config [A] inspect :: Bool -> Config -> Config [A] boundThreads :: Bool -> Config -> Config --------------------------------- Internal API diff --------------------------------- [C] Streamly.Internal.Network.Inet.TCP [A] acceptorWith :: MonadIO m => [(SocketOption, Int)] -> Unfold m PortNumber Socket [R] acceptorOnPortWith :: MonadIO m => [(SocketOption, Int)] -> Unfold m PortNumber Socket [D] acceptorOnPortLocal :: MonadIO m => Unfold m PortNumber Socket [D] acceptorOnPort :: MonadIO m => Unfold m PortNumber Socket [A] acceptorLocal :: MonadIO m => Unfold m PortNumber Socket [A] acceptor :: MonadIO m => Unfold m PortNumber Socket [R] acceptOnPortLocal :: MonadIO m => PortNumber -> Stream m Socket [R] acceptOnPort :: MonadIO m => PortNumber -> Stream m Socket [A] acceptLocal :: MonadIO m => PortNumber -> Stream m Socket [A] accept :: MonadIO m => PortNumber -> Stream m Socket [R] Streamly.Internal.Data.Unfold.SVar [A] Streamly.Internal.Data.Unfold.Prelude [A] gbracket :: MonadRunInIO m => (a -> m c) -> (c -> m d) -> Unfold m (c, e) b -> (forall s. m s -> m (Either e s)) -> Unfold m c b -> Unfold m a b [A] fromSVar :: MonadAsync m => Unfold m (SVar t m a) a [A] fromProducer :: MonadAsync m => Unfold m (SVar t m a) a [A] finally :: (MonadAsync m, MonadCatch m) => (a -> m c) -> Unfold m a b -> Unfold m a b [A] bracket :: (MonadAsync m, MonadCatch m) => (a -> m c) -> (c -> m d) -> Unfold m c b -> Unfold m a b [A] after :: MonadRunInIO m => (a -> m c) -> Unfold m a b -> Unfold m a b [R] Streamly.Internal.Data.Unfold.Exception [R] Streamly.Internal.Data.Stream.Zip.Concurrent [D] Streamly.Internal.Data.Stream.Zip [C] GHC.Base.Functor [A] instance GHC.Base.Monad m => GHC.Base.Functor (Streamly.Internal.Data.Stream.Zip.ZipConcurrent m) [C] GHC.Base.Applicative [A] instance Streamly.Internal.Control.Concurrent.MonadAsync m => GHC.Base.Applicative (Streamly.Internal.Data.Stream.Zip.ZipConcurrent m) [A] ZipConcurrent [A] [getZipConcurrent] :: ZipConcurrent m a -> Stream m a [A] ZipConcurrent :: Stream m a -> ZipConcurrent m a [R] Streamly.Internal.Data.Stream.Time [R] Streamly.Internal.Data.Stream.SVar.Generate [R] Streamly.Internal.Data.Stream.SVar.Eliminate [A] Streamly.Internal.Data.Stream.Prelude [A] StopWhen [A] FirstStops :: StopWhen [A] AnyStops :: StopWhen [A] AllStop :: StopWhen [A] Rate [A] [rateLow] :: Rate -> Double [A] [rateHigh] :: Rate -> Double [A] [rateGoal] :: Rate -> Double [A] [rateBuffer] :: Rate -> Int [A] Rate :: Double -> Double -> Double -> Int -> Rate [A] Config [A] Channel [A] [yieldRateInfo] :: Channel m a -> Maybe YieldRateInfo [A] [workerThreads] :: Channel m a -> IORef (Set ThreadId) [A] [workerStopMVar] :: Channel m a -> MVar () [A] [workerCount] :: Channel m a -> IORef Int [A] [workLoop] :: Channel m a -> Maybe WorkerInfo -> m () [A] [svarStats] :: Channel m a -> SVarStats [A] [svarRef] :: Channel m a -> Maybe (IORef ()) [A] [svarMrun] :: Channel m a -> RunInIO m [A] [svarInspectMode] :: Channel m a -> Bool [A] [svarCreator] :: Channel m a -> ThreadId [A] [remainingWork] :: Channel m a -> Maybe (IORef Count) [A] [readOutputQ] :: Channel m a -> m [ChildEvent a] [A] [postProcess] :: Channel m a -> m Bool [A] [outputQueue] :: Channel m a -> IORef ([ChildEvent a], Int) [A] [outputDoorBell] :: Channel m a -> MVar () [A] [maxWorkerLimit] :: Channel m a -> Limit [A] [maxBufferLimit] :: Channel m a -> Limit [A] [isWorkDone] :: Channel m a -> IO Bool [A] [isQueueDone] :: Channel m a -> IO Bool [A] [enqueue] :: Channel m a -> Bool -> (RunInIO m, StreamK m a) -> IO () [A] [eagerDispatch] :: Channel m a -> m () [A] [doorBellOnWorkQ] :: Channel m a -> IORef Bool [A] [accountThread] :: Channel m a -> ThreadId -> m () [A] Channel :: RunInIO m -> IORef ([ChildEvent a], Int) -> MVar () -> m [ChildEvent a] -> m Bool -> Limit -> Limit -> Maybe (IORef Count) -> Maybe YieldRateInfo -> (Bool -> (RunInIO m, StreamK m a) -> IO ()) -> m () -> IO Bool -> IO Bool -> IORef Bool -> (Maybe WorkerInfo -> m ()) -> IORef (Set ThreadId) -> IORef Int -> (ThreadId -> m ()) -> MVar () -> Maybe (IORef ()) -> SVarStats -> Bool -> ThreadId -> Channel m a [A] type MonadAsync m = (MonadIO m, MonadBaseControl IO m, MonadThrow m) [A] yield :: Channel m a -> Maybe WorkerInfo -> a -> IO Bool [A] withChannelK :: MonadAsync m => (Config -> Config) -> StreamK m a -> (Channel m b -> StreamK m a -> StreamK m b) -> StreamK m b [A] withChannel :: MonadAsync m => (Config -> Config) -> Stream m a -> (Channel m b -> Stream m a -> Stream m b) -> Stream m b [A] toChannelK :: MonadRunInIO m => Channel m a -> StreamK m a -> m () [A] toChannel :: MonadRunInIO m => Channel m a -> Stream m a -> m () [A] ticksRate :: MonadAsync m => Rate -> Stream m () [A] ticks :: MonadIO m => Double -> Stream m () [A] takeLastInterval :: Double -> Stream m a -> Stream m a [A] takeInterval :: MonadAsync m => Double -> Stream m a -> Stream m a [A] stopWhen :: StopWhen -> Config -> Config [A] stopChannel :: MonadIO m => Channel m a -> m () [A] stop :: Channel m a -> Maybe WorkerInfo -> IO () [A] startChannel :: MonadRunInIO m => Channel m a -> m () [A] sendWorkerWait :: MonadIO m => Bool -> (Channel m a -> IO ()) -> (Channel m a -> m Bool) -> Channel m a -> m () [A] sendWorkerDelayPaced :: Channel m a -> IO () [A] sendWorkerDelay :: Channel m a -> IO () [A] sampleIntervalStart :: MonadAsync m => Double -> Stream m a -> Stream m a [A] sampleIntervalEnd :: MonadAsync m => Double -> Stream m a -> Stream m a [A] sampleBurstStart :: MonadAsync m => Double -> Stream m a -> Stream m a [A] sampleBurstEnd :: MonadAsync m => Double -> Stream m a -> Stream m a [A] sampleBurst :: MonadAsync m => Bool -> Double -> Stream m a -> Stream m a [A] retryD :: forall e m a. (Exception e, Ord e, MonadCatch m) => Map e Int -> (e -> Stream m a) -> Stream m a -> Stream m a [A] retry :: (MonadCatch m, Exception e, Ord e) => Map e Int -> (e -> Stream m a) -> Stream m a -> Stream m a [A] readOutputQPaced :: MonadRunInIO m => Channel m a -> m [ChildEvent a] [A] readOutputQBounded :: MonadRunInIO m => Bool -> Channel m a -> m [ChildEvent a] [A] rate :: Maybe Rate -> Config -> Config [A] pushWorker :: MonadRunInIO m => Count -> Channel m a -> m () [A] postProcessPaced :: MonadRunInIO m => Channel m a -> m Bool [A] postProcessBounded :: MonadRunInIO m => Channel m a -> m Bool [A] periodic :: MonadIO m => m a -> Double -> Stream m a [A] parZipWithM :: MonadAsync m => (Config -> Config) -> (a -> b -> m c) -> Stream m a -> Stream m b -> Stream m c [A] parZipWith :: MonadAsync m => (Config -> Config) -> (a -> b -> c) -> Stream m a -> Stream m b -> Stream m c [A] parTwo :: MonadAsync m => (Config -> Config) -> Stream m a -> Stream m a -> Stream m a [A] parTapCount :: MonadAsync m => (a -> Bool) -> (Stream m Int -> m b) -> Stream m a -> Stream m a [A] parSequence :: MonadAsync m => (Config -> Config) -> Stream m (m a) -> Stream m a [A] parReplicateM :: MonadAsync m => (Config -> Config) -> Int -> m a -> Stream m a [A] parRepeatM :: MonadAsync m => (Config -> Config) -> m a -> Stream m a [A] parMergeByM :: MonadAsync m => (Config -> Config) -> (a -> a -> m Ordering) -> Stream m a -> Stream m a -> Stream m a [A] parMergeBy :: MonadAsync m => (Config -> Config) -> (a -> a -> Ordering) -> Stream m a -> Stream m a -> Stream m a [A] parMapM :: MonadAsync m => (Config -> Config) -> (a -> m b) -> Stream m a -> Stream m b [A] parListOrdered :: MonadAsync m => [Stream m a] -> Stream m a [A] parListLazy :: MonadAsync m => [Stream m a] -> Stream m a [A] parListInterleaved :: MonadAsync m => [Stream m a] -> Stream m a [A] parListEagerMin :: MonadAsync m => [Stream m a] -> Stream m a [A] parListEagerFst :: MonadAsync m => [Stream m a] -> Stream m a [A] parListEager :: MonadAsync m => [Stream m a] -> Stream m a [A] parList :: MonadAsync m => (Config -> Config) -> [Stream m a] -> Stream m a [A] parEval :: MonadAsync m => (Config -> Config) -> Stream m a -> Stream m a [A] parConcatMap :: MonadAsync m => (Config -> Config) -> (a -> Stream m b) -> Stream m a -> Stream m b [A] parConcatIterate :: MonadAsync m => (Config -> Config) -> (a -> Stream m a) -> Stream m a -> Stream m a [A] parConcat :: MonadAsync m => (Config -> Config) -> Stream m (Stream m a) -> Stream m a [A] parApply :: MonadAsync m => (Config -> Config) -> Stream m (a -> b) -> Stream m a -> Stream m b [A] ordered :: Bool -> Config -> Config [A] newInterleaveChannel :: MonadAsync m => (Config -> Config) -> m (Channel m a) [A] newChannel :: MonadAsync m => (Config -> Config) -> m (Channel m a) [A] newAppendChannel :: MonadRunInIO m => (Config -> Config) -> m (Channel m a) [A] minRate :: Double -> Config -> Config [A] maxThreads :: Int -> Config -> Config [A] maxRate :: Double -> Config -> Config [A] maxBuffer :: Int -> Config -> Config [A] intervalsOf :: MonadAsync m => Double -> Fold m a b -> Stream m a -> Stream m b [A] interleaved :: Bool -> Config -> Config [A] interject :: MonadAsync m => m a -> Double -> Stream m a -> Stream m a [A] inspect :: Bool -> Config -> Config [A] groupsOfTimeout :: MonadAsync m => Int -> Double -> Fold m a b -> Stream m a -> Stream m b [A] getStopWhen :: Config -> StopWhen [A] fromChannelK :: MonadAsync m => Channel m a -> StreamK m a [A] fromChannel :: MonadAsync m => Channel m a -> Stream m a [A] fromCallback :: MonadAsync m => ((a -> m ()) -> m ()) -> Stream m a [A] finally :: (MonadAsync m, MonadCatch m) => m b -> Stream m a -> Stream m a [A] eager :: Bool -> Config -> Config [A] dumpSVar :: Channel m a -> IO String [A] dropLastInterval :: Int -> Stream m a -> Stream m a [A] dropInterval :: MonadAsync m => Double -> Stream m a -> Stream m a [A] dispatchWorkerPaced :: MonadRunInIO m => Channel m a -> m Bool [A] dispatchWorker :: MonadRunInIO m => Count -> Channel m a -> m Bool [A] defaultConfig :: Config [A] constRate :: Double -> Config -> Config [A] classifySessionsOf :: (MonadAsync m, Ord k) => (Int -> m Bool) -> Double -> Fold m a b -> Stream m (AbsTime, (k, a)) -> Stream m (k, b) [A] classifySessionsByGeneric :: forall m f a b. (MonadAsync m, IsMap f) => Proxy (f :: Type -> Type) -> Double -> Bool -> (Int -> m Bool) -> Double -> Fold m a b -> Stream m (AbsTime, (Key f, a)) -> Stream m (Key f, b) [A] classifySessionsBy :: (MonadAsync m, Ord k) => Double -> Bool -> (Int -> m Bool) -> Double -> Fold m a b -> Stream m (AbsTime, (k, a)) -> Stream m (k, b) [A] classifyKeepAliveSessions :: (MonadAsync m, Ord k) => (Int -> m Bool) -> Double -> Fold m a b -> Stream m (AbsTime, (k, a)) -> Stream m (k, b) [A] bufferOldestN :: Int -> Stream m a -> Stream m a [A] bufferLatestN :: Int -> Stream m a -> Stream m a [A] bufferLatest :: Stream m a -> Stream m (Maybe a) [A] bracket3D :: (MonadAsync m, MonadCatch m) => m b -> (b -> m c) -> (b -> m d) -> (b -> m e) -> (b -> Stream m a) -> Stream m a [A] bracket3 :: (MonadAsync m, MonadCatch m) => m b -> (b -> m c) -> (b -> m d) -> (b -> m e) -> (b -> Stream m a) -> Stream m a [A] bracket :: (MonadAsync m, MonadCatch m) => m b -> (b -> m c) -> (b -> Stream m a) -> Stream m a [A] avgRate :: Double -> Config -> Config [A] afterD :: MonadRunInIO m => m b -> Stream m a -> Stream m a [A] after :: (MonadIO m, MonadBaseControl IO m) => m b -> Stream m a -> Stream m a [R] Streamly.Internal.Data.Stream.Exception.Lifted [R] Streamly.Internal.Data.Stream.Concurrent.Channel.Type [R] Streamly.Internal.Data.Stream.Concurrent.Channel.Operations [R] Streamly.Internal.Data.Stream.Concurrent.Channel.Interleave [R] Streamly.Internal.Data.Stream.Concurrent.Channel.Dispatcher [R] Streamly.Internal.Data.Stream.Concurrent.Channel.Consumer [R] Streamly.Internal.Data.Stream.Concurrent.Channel.Append [R] Streamly.Internal.Data.Stream.Concurrent.Channel [R] Streamly.Internal.Data.Stream.Concurrent [R] Streamly.Internal.Data.Stream.Channel.Worker [R] Streamly.Internal.Data.Stream.Channel.Types [R] Streamly.Internal.Data.Stream.Channel.Dispatcher [R] Streamly.Internal.Data.SVar.Worker [R] Streamly.Internal.Data.SVar.Pull [R] Streamly.Internal.Data.SVar.Dispatch [D] Streamly.Internal.Data.SVar [A] Work [A] PartialWorker :: Count -> Work [A] ManyWorkers :: Int -> Count -> Work [A] BlockWait :: NanoSecond64 -> Work [A] workerUpdateLatency :: YieldRateInfo -> WorkerInfo -> IO () [A] workerRateControl :: SVar t m a -> YieldRateInfo -> WorkerInfo -> IO Bool [A] withDiagMVar :: SVar t m a -> String -> IO () -> IO () [A] updateYieldCount :: WorkerInfo -> IO Count [A] sendYield :: SVar t m a -> Maybe WorkerInfo -> ChildEvent a -> IO Bool [A] sendWorkerWait :: MonadAsync m => (SVar t m a -> IO ()) -> (SVar t m a -> m Bool) -> SVar t m a -> m () [A] sendWorkerDelayPaced :: SVar t m a -> IO () [A] sendWorkerDelay :: SVar t m a -> IO () [A] sendToProducer :: SVar t m a -> ChildEvent a -> IO Int [A] sendStopToProducer :: MonadIO m => SVar t m a -> m () [A] sendStop :: SVar t m a -> Maybe WorkerInfo -> IO () [A] sendFirstWorker :: MonadAsync m => SVar t m a -> t m a -> m (SVar t m a) [A] send :: SVar t m a -> ChildEvent a -> IO Int [A] ringDoorBell :: SVar t m a -> IO () [A] resetBufferLimit :: SVar t m a -> IO () [A] recordMaxWorkers :: MonadIO m => SVar t m a -> m () [A] readOutputQRaw :: SVar t m a -> IO ([ChildEvent a], Int) [A] readOutputQPaced :: MonadAsync m => SVar t m a -> m [ChildEvent a] [A] readOutputQBounded :: MonadAsync m => SVar t m a -> m [ChildEvent a] [A] readOutputQBasic :: IORef ([ChildEvent a], Int) -> IO ([ChildEvent a], Int) [A] pushWorkerPar :: MonadAsync m => SVar t m a -> (Maybe WorkerInfo -> m ()) -> m () [A] pushWorker :: MonadAsync m => Count -> SVar t m a -> m () [A] printSVar :: SVar t m a -> String -> IO () [A] postProcessPaced :: MonadAsync m => SVar t m a -> m Bool [A] postProcessBounded :: MonadAsync m => SVar t m a -> m Bool [A] modifyThread :: MonadIO m => SVar t m a -> ThreadId -> m () [A] minThreadDelay :: NanoSecond64 [A] isBeyondMaxRate :: SVar t m a -> YieldRateInfo -> IO Bool [A] incrementYieldLimit :: SVar t m a -> IO () [A] incrementBufferLimit :: SVar t m a -> IO () [A] handleFoldException :: SVar t m a -> SomeException -> IO () [A] handleChildException :: SVar t m a -> SomeException -> IO () [A] estimateWorkers :: Limit -> Count -> Count -> NanoSecond64 -> NanoSecond64 -> NanoSecond64 -> LatencyRange -> Work [A] dumpSVar :: SVar t m a -> IO String [A] dispatchWorkerPaced :: MonadAsync m => SVar t m a -> m Bool [A] dispatchWorker :: MonadAsync m => Count -> SVar t m a -> m Bool [A] delThread :: MonadIO m => SVar t m a -> ThreadId -> m () [A] decrementYieldLimit :: SVar t m a -> IO Bool [A] decrementBufferLimit :: SVar t m a -> IO () [A] collectLatency :: SVar t m a -> YieldRateInfo -> Bool -> IO (Count, AbsTime, NanoSecond64) [A] cleanupSVarFromWorker :: SVar t m a -> IO () [A] cleanupSVar :: SVar t m a -> IO () [A] allThreadsDone :: MonadIO m => SVar t m a -> m Bool [C] Streamly.Internal.Data.IsMap.HashMap [C] Streamly.Internal.Data.IsMap.IsMap [C] (Data.HashMap.Internal.HashMap k) [O] instance (Data.Hashable.Class.Hashable k, GHC.Classes.Eq k) => Streamly.Internal.Data.IsMap.IsMap (Data.HashMap.Internal.HashMap k) [N] instance Data.Hashable.Class.Hashable k => Streamly.Internal.Data.IsMap.IsMap (Data.HashMap.Internal.HashMap k) [C] Streamly.Internal.Data.IOFinalizer.Lifted [C] IOFinalizer [R] Streamly.Internal.Data.Fold.SVar [A] Streamly.Internal.Data.Fold.Prelude [A] Config [A] Channel [A] [svarStats] :: Channel m a b -> SVarStats [A] [svarRef] :: Channel m a b -> Maybe (IORef ()) [A] [svarInspectMode] :: Channel m a b -> Bool [A] [svarCreator] :: Channel m a b -> ThreadId [A] [readOutputQ] :: Channel m a b -> m [ChildEvent a] [A] [outputQueue] :: Channel m a b -> IORef ([ChildEvent a], Int) [A] [outputQueueFromConsumer] :: Channel m a b -> IORef ([ChildEvent b], Int) [A] [outputDoorBell] :: Channel m a b -> MVar () [A] [outputDoorBellFromConsumer] :: Channel m a b -> MVar () [A] [maxBufferLimit] :: Channel m a b -> Limit [A] [bufferSpaceDoorBell] :: Channel m a b -> MVar () [A] Channel :: IORef ([ChildEvent a], Int) -> Limit -> MVar () -> m [ChildEvent a] -> IORef ([ChildEvent b], Int) -> MVar () -> MVar () -> Maybe (IORef ()) -> SVarStats -> Bool -> ThreadId -> Channel m a b [A] writeLimited :: MonadIO m => SVar t m a -> Maybe WorkerInfo -> Fold m a () [A] write :: MonadIO m => SVar t m a -> Maybe WorkerInfo -> Fold m a () [A] takeInterval :: MonadAsync m => Double -> Fold m a b -> Fold m a b [A] sendToWorker :: MonadAsync m => Channel m a b -> a -> m (Maybe b) [A] parEval :: MonadAsync m => (Config -> Config) -> Fold m a b -> Fold m a b [A] newChannel :: MonadRunInIO m => (Config -> Config) -> Fold m a b -> m (Channel m a b) [A] maxBuffer :: Int -> Config -> Config [A] intervalsOf :: MonadAsync m => Double -> Fold m a b -> Fold m b c -> Fold m a c [A] inspect :: Bool -> Config -> Config [A] dumpSVar :: Channel m a b -> IO String [A] checkFoldStatus :: MonadAsync m => Channel m a b -> m (Maybe b) [A] boundThreads :: Bool -> Config -> Config [R] Streamly.Internal.Data.Fold.Concurrent.Channel.Type [R] Streamly.Internal.Data.Fold.Concurrent.Channel [R] Streamly.Internal.Data.Fold.Concurrent [R] Streamly.Internal.Data.Fold.Async [A] Streamly.Internal.Data.Channel [A] YieldRateInfo [A] [workerPollingInterval] :: YieldRateInfo -> IORef Count [A] [workerPendingLatency] :: YieldRateInfo -> IORef (Count, Count, NanoSecond64) [A] [workerMeasuredLatency] :: YieldRateInfo -> IORef NanoSecond64 [A] [workerCollectedLatency] :: YieldRateInfo -> IORef (Count, Count, NanoSecond64) [A] [workerBootstrapLatency] :: YieldRateInfo -> Maybe NanoSecond64 [A] [svarRateBuffer] :: YieldRateInfo -> Int [A] [svarLatencyTarget] :: YieldRateInfo -> NanoSecond64 [A] [svarLatencyRange] :: YieldRateInfo -> LatencyRange [A] [svarGainedLostYields] :: YieldRateInfo -> IORef Count [A] [svarAllTimeLatency] :: YieldRateInfo -> IORef (Count, AbsTime) [A] YieldRateInfo :: NanoSecond64 -> LatencyRange -> Int -> IORef Count -> IORef (Count, AbsTime) -> Maybe NanoSecond64 -> IORef Count -> IORef (Count, Count, NanoSecond64) -> IORef (Count, Count, NanoSecond64) -> IORef NanoSecond64 -> YieldRateInfo [A] WorkerInfo [A] [workerYieldMax] :: WorkerInfo -> Count [A] [workerYieldCount] :: WorkerInfo -> IORef Count [A] [workerLatencyStart] :: WorkerInfo -> IORef (Count, AbsTime) [A] WorkerInfo :: Count -> IORef Count -> IORef (Count, AbsTime) -> WorkerInfo [A] Work [A] PartialWorker :: Count -> Work [A] ManyWorkers :: Int -> Count -> Work [A] BlockWait :: NanoSecond64 -> Work [A] ThreadAbort [A] ThreadAbort :: ThreadAbort [A] StopWhen [A] FirstStops :: StopWhen [A] AnyStops :: StopWhen [A] AllStop :: StopWhen [A] SVarStats [A] [totalDispatches] :: SVarStats -> IORef Int [A] [svarStopTime] :: SVarStats -> IORef (Maybe AbsTime) [A] [minWorkerLatency] :: SVarStats -> IORef NanoSecond64 [A] [maxWorkers] :: SVarStats -> IORef Int [A] [maxWorkerLatency] :: SVarStats -> IORef NanoSecond64 [A] [maxWorkQSize] :: SVarStats -> IORef Int [A] [maxOutQSize] :: SVarStats -> IORef Int [A] [maxHeapSize] :: SVarStats -> IORef Int [A] [avgWorkerLatency] :: SVarStats -> IORef (Count, NanoSecond64) [A] SVarStats :: IORef Int -> IORef Int -> IORef Int -> IORef Int -> IORef Int -> IORef (Count, NanoSecond64) -> IORef NanoSecond64 -> IORef NanoSecond64 -> IORef (Maybe AbsTime) -> SVarStats [A] Rate [A] [rateLow] :: Rate -> Double [A] [rateHigh] :: Rate -> Double [A] [rateGoal] :: Rate -> Double [A] [rateBuffer] :: Rate -> Int [A] Rate :: Double -> Double -> Double -> Int -> Rate [A] Limit [A] Unlimited :: Limit [A] Limited :: Word -> Limit [A] LatencyRange [A] [minLatency] :: LatencyRange -> NanoSecond64 [A] [maxLatency] :: LatencyRange -> NanoSecond64 [A] LatencyRange :: NanoSecond64 -> NanoSecond64 -> LatencyRange [A] Config [A] ChildEvent [A] ChildYield :: a -> ChildEvent a [A] ChildStopChannel :: ChildEvent a [A] ChildStop :: ThreadId -> Maybe SomeException -> ChildEvent a [A] Count [A] Count :: Int64 -> Count [A] workerRateControl :: Limit -> IORef Int -> YieldRateInfo -> WorkerInfo -> IO Bool [A] withDiagMVar :: Bool -> IO String -> String -> IO () -> IO () [A] stopWhen :: StopWhen -> Config -> Config [A] setStreamLatency :: Int -> Config -> Config [A] sendYield :: Limit -> Limit -> IORef Int -> Maybe WorkerInfo -> Maybe YieldRateInfo -> IORef ([ChildEvent a], Int) -> MVar () -> ChildEvent a -> IO Bool [A] sendWithDoorBell :: IORef ([ChildEvent a], Int) -> MVar () -> ChildEvent a -> IO Int [A] sendStop :: IORef Int -> Maybe WorkerInfo -> Maybe YieldRateInfo -> IORef ([ChildEvent a], Int) -> MVar () -> IO () [A] ringDoorBell :: IORef Bool -> MVar () -> IO () [A] recordMaxWorkers :: MonadIO m => IORef Int -> SVarStats -> m () [A] readOutputQRaw :: IORef ([ChildEvent a], Int) -> Maybe SVarStats -> IO ([ChildEvent a], Int) [A] readOutputQBasic :: IORef ([ChildEvent a], Int) -> IO ([ChildEvent a], Int) [A] rate :: Maybe Rate -> Config -> Config [A] printSVar :: IO String -> String -> IO () [A] ordered :: Bool -> Config -> Config [A] newSVarStats :: IO SVarStats [A] newRateInfo :: Config -> IO (Maybe YieldRateInfo) [A] modifyThread :: MonadIO m => IORef (Set ThreadId) -> MVar () -> ThreadId -> m () [A] minThreadDelay :: NanoSecond64 [A] minRate :: Double -> Config -> Config [A] maxYields :: Maybe Int64 -> Config -> Config [A] maxThreads :: Int -> Config -> Config [A] maxRate :: Double -> Config -> Config [A] maxBuffer :: Int -> Config -> Config [A] magicMaxBuffer :: Word [A] isBeyondMaxRate :: Limit -> IORef Int -> YieldRateInfo -> IO Bool [A] interleaved :: Bool -> Config -> Config [A] inspect :: Bool -> Config -> Config [A] incrementYieldLimit :: Maybe (IORef Count) -> IO () [A] handleChildException :: IORef ([ChildEvent a], Int) -> MVar () -> SomeException -> IO () [A] getYieldLimit :: Config -> Maybe Count [A] getStreamRate :: Config -> Maybe Rate [A] getStreamLatency :: Config -> Maybe NanoSecond64 [A] getStopWhen :: Config -> StopWhen [A] getOrdered :: Config -> Bool [A] getMaxThreads :: Config -> Limit [A] getMaxBuffer :: Config -> Limit [A] getInterleaved :: Config -> Bool [A] getInspectMode :: Config -> Bool [A] getEagerDispatch :: Config -> Bool [A] getBound :: Config -> Bool [A] estimateWorkers :: Limit -> Count -> Count -> NanoSecond64 -> NanoSecond64 -> NanoSecond64 -> LatencyRange -> Work [A] eager :: Bool -> Config -> Config [A] dumpWorkerCount :: Show a => IORef a -> IO String [A] dumpSVarStats :: Bool -> Maybe YieldRateInfo -> SVarStats -> IO String [A] dumpRunningThreads :: Show a => IORef a -> IO String [A] dumpOutputQ :: (Foldable t, Show a1) => IORef (t a2, a1) -> IO String [A] dumpNeedDoorBell :: Show a => IORef a -> IO String [A] dumpDoorBell :: Show a => MVar a -> IO String [A] dumpCreator :: Show a => a -> String [A] delThread :: MonadIO m => IORef (Set ThreadId) -> ThreadId -> m () [A] defaultConfig :: Config [A] decrementYieldLimit :: Maybe (IORef Count) -> IO Bool [A] constRate :: Double -> Config -> Config [A] collectLatency :: Bool -> SVarStats -> YieldRateInfo -> Bool -> IO (Count, AbsTime, NanoSecond64) [A] cleanupSVar :: IORef (Set ThreadId) -> IO () [A] boundThreads :: Bool -> Config -> Config [A] avgRate :: Double -> Config -> Config [A] allThreadsDone :: MonadIO m => IORef (Set ThreadId) -> m Bool [A] addThread :: MonadIO m => IORef (Set ThreadId) -> ThreadId -> m () [C] Streamly.Internal.Control.ForkLifted [A] doForkWith :: MonadRunInIO m => Bool -> m () -> RunInIO m -> (SomeException -> IO ()) -> m ThreadId