@@ -103,6 +103,7 @@ module Streamly.Internal.Data.SVar
103103 , delThread
104104 , modifyThread
105105 , doFork
106+ , fork
106107
107108 , toStreamVar
108109 , SVarStats (..)
@@ -112,9 +113,10 @@ module Streamly.Internal.Data.SVar
112113where
113114
114115import Control.Concurrent
115− (ThreadId, myThreadId, threadDelay, throwTo)
116+ (ThreadId, myThreadId, threadDelay, throwTo, forkIO)
116117import Control.Concurrent.MVar
117− (MVar, newEmptyMVar, tryPutMVar, takeMVar, tryTakeMVar, newMVar, tryReadMVar)
118+ (MVar, newEmptyMVar, tryPutMVar, takeMVar, tryTakeMVar, newMVar,
119+ tryReadMVar)
118120import Control.Exception
119121 (SomeException(..), catch, mask, assert, Exception, catches,
120122 throwIO, Handler(..), BlockedIndefinitelyOnMVar(..),
@@ -122,7 +124,8 @@ import Control.Exception
122124import Control.Monad (when)
123125import Control.Monad.Catch (MonadThrow)
124126import Control.Monad.IO.Class (MonadIO(..))
125−import Control.Monad.Trans.Control (MonadBaseControl, control, StM)
127+import Control.Monad.Trans.Control
128+ (MonadBaseControl, control, StM, liftBaseDiscard)
126129import Streamly.Internal.Data.Atomics
127130 (atomicModifyIORefCAS, atomicModifyIORefCAS_, writeBarrier,
128131 storeLoadBarrier)
@@ -939,6 +942,10 @@ doFork action (RunInIO mrun) exHandler =
939942 exHandler
940943 run (return tid)
941944
945+{-# INLINABLE fork #-}
946+fork :: MonadBaseControl IO m => m () -> m ThreadId
947+fork = liftBaseDiscard forkIO
948+
942949------------------------------------------------------------------------------
943950-- Collecting results from child workers in a streamed fashion
944951------------------------------------------------------------------------------