module Temporal.Common.Async where import GHC.Conc (labelThread) import UnliftIO import UnliftIO.Concurrent asyncLabelled :: MonadUnliftIO m => String -> m a -> m (Async a) asyncLabelled :: forall (m :: * -> *) a. MonadUnliftIO m => String -> m a -> m (Async a) asyncLabelled String label m a action = m a -> m (Async a) forall (m :: * -> *) a. MonadUnliftIO m => m a -> m (Async a) async (m a -> m (Async a)) -> m a -> m (Async a) forall a b. (a -> b) -> a -> b $ do asyncId <- m ThreadId forall (m :: * -> *). MonadIO m => m ThreadId myThreadId liftIO $ labelThread asyncId label action forkIOLabelled :: MonadUnliftIO m => String -> m () -> m ThreadId forkIOLabelled :: forall (m :: * -> *). MonadUnliftIO m => String -> m () -> m ThreadId forkIOLabelled String label m () action = m () -> m ThreadId forall (m :: * -> *). MonadUnliftIO m => m () -> m ThreadId UnliftIO.Concurrent.forkIO (m () -> m ThreadId) -> m () -> m ThreadId forall a b. (a -> b) -> a -> b $ do asyncId <- m ThreadId forall (m :: * -> *). MonadIO m => m ThreadId myThreadId liftIO $ labelThread asyncId label action