Loading...
---------------------------------
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