on master help sign in
Move the RunInIO type to SVar/Type module
commita7d971200ec379aad2a55102c7861dc53fb82823 authorHarendra Kumar <harendra@composewell.com> dateMon 24 Oct 2022, 08:09 (4 years ago) parent724955c
5 files changed+14−12
core/src/Streamly/Internal/Control/Concurrent.hs+1−7 core/src/Streamly/Internal/Data/SVar/Type.hs+10−1 src/Streamly/Internal/Data/SVar.hs+1−2 src/Streamly/Internal/Data/Stream/Ahead.hs+1−1 src/Streamly/Internal/Data/Stream/Async.hs+1−1
core/src/Streamly/Internal/Control/Concurrent.hs+1−7
@@ -23,6 +23,7 @@ module Streamly.Internal.Control.Concurrent
2323where
2424
2525import Control.Monad.Catch (MonadThrow)
26+import Streamly.Internal.Data.SVar.Type (RunInIO(..))
2627
2728#ifdef USE_UNLIFTIO
2829import Control.Monad.IO.Unlift (MonadUnliftIO(..), UnliftIO(..), askUnliftIO)
@@ -52,13 +53,6 @@ type MonadAsync m = (MonadUnliftIO m, MonadThrow m)
5253type MonadAsync m = (MonadIO m, MonadBaseControl IO m, MonadThrow m)
5354#endif
5455
55−
56−#ifdef USE_UNLIFTIO
57−newtype RunInIO m = RunInIO { runInIO :: forall b. m b -> IO b }
58−#else
59−newtype RunInIO m = RunInIO { runInIO :: forall b. m b -> IO (StM m b) }
60−#endif
61−
6256-- | When we run computations concurrently, we completely isolate the state of
6357-- the concurrent computations from the parent computation. The invariant is
6458-- that we should never be running two concurrent computations in the same
core/src/Streamly/Internal/Data/SVar/Type.hs+10−1
@@ -11,6 +11,7 @@ module Streamly.Internal.Data.SVar.Type
1111 -- * Parent child communication
1212 ThreadAbort (..)
1313 , ChildEvent (..)
14+ , RunInIO(..)
1415 , AheadHeapEntry (..)
1516
1617 -- * SVar
@@ -55,6 +56,9 @@ where
5556import Control.Concurrent (ThreadId)
5657import Control.Concurrent.MVar (MVar)
5758import Control.Exception (SomeException(..), Exception)
59+#ifndef USE_UNLIFTIO
60+import Control.Monad.Trans.Control (MonadBaseControl(StM))
61+#endif
5862import Data.Heap (Heap, Entry(..))
5963import Data.Int (Int64)
6064import Data.IORef (IORef)
@@ -62,7 +66,6 @@ import Data.Kind (Type)
6266import Data.Set (Set)
6367
6468import Streamly.Internal.Data.Time.Units (AbsTime, NanoSecond64(..))
65−import Streamly.Internal.Control.Concurrent (RunInIO)
6669
6770newtype Count = Count Int64
6871 deriving ( Eq
@@ -89,6 +92,12 @@ data ChildEvent a =
8992 ChildYield a
9093 | ChildStop ThreadId (Maybe SomeException)
9194
95+#ifdef USE_UNLIFTIO
96+newtype RunInIO m = RunInIO { runInIO :: forall b. m b -> IO b }
97+#else
98+newtype RunInIO m = RunInIO { runInIO :: forall b. m b -> IO (StM m b) }
99+#endif
100+
92101-- | Sorting out-of-turn outputs in a heap for Ahead style streams
93102data AheadHeapEntry (t :: (Type -> Type) -> Type -> Type) m a =
94103 AheadEntryNull
src/Streamly/Internal/Data/SVar.hs+1−2
@@ -47,8 +47,7 @@ import Control.Monad.IO.Class (MonadIO(liftIO))
4747import Data.Heap (Heap, Entry(..))
4848import Data.IORef (newIORef, readIORef)
4949import Data.IORef (IORef, atomicModifyIORef)
50−import Streamly.Internal.Control.Concurrent
51− (MonadAsync, askRunInIO, RunInIO)
50+import Streamly.Internal.Control.Concurrent (MonadAsync, askRunInIO)
5251import Streamly.Internal.Data.Atomics
5352 (atomicModifyIORefCAS, atomicModifyIORefCAS_, writeBarrier)
5453import Streamly.Internal.Data.Time.Clock (Clock(Monotonic), getTime)
src/Streamly/Internal/Data/Stream/Ahead.hs+1−1
@@ -47,7 +47,7 @@ import GHC.Exts (inline)
4747import qualified Data.Heap as H
4848
4949import Streamly.Internal.Control.Concurrent
50− (MonadRunInIO, MonadAsync, RunInIO(..), askRunInIO, restoreM)
50+ (MonadRunInIO, MonadAsync, askRunInIO, restoreM)
5151import Streamly.Internal.Data.Stream.StreamK.Type (Stream)
5252
5353import qualified Streamly.Internal.Data.Stream.StreamK.Type as K
src/Streamly/Internal/Data/Stream/Async.hs+1−1
@@ -55,7 +55,7 @@ import Prelude hiding (map)
5555import qualified Data.Set as S
5656
5757import Streamly.Internal.Control.Concurrent
58− (MonadRunInIO, MonadAsync, RunInIO(..), askRunInIO, restoreM)
58+ (MonadRunInIO, MonadAsync, askRunInIO, restoreM)
5959import Streamly.Internal.Data.Atomics
6060 (atomicModifyIORefCAS, atomicModifyIORefCAS_)
6161import Streamly.Internal.Data.Stream.StreamK.Type (Stream)