packages feed

ki-unlifted-1.0.0: src/Ki/Unlifted.hs

-- | The `ki` API, generalized to use 'MonadUnliftIO'.
--
-- __Note__: See @[Ki](https://hackage.haskell.org/package/ki/docs/Ki.html)@ for the main module documentation. Any
-- documentation you see here is incidental, and only a result of re-exporting symbols directly from
-- @[Ki](https://hackage.haskell.org/package/ki/docs/Ki.html)@.
module Ki.Unlifted
  ( Ki.Scope,
    Ki.Thread,
    scoped,
    fork,
    forkTry,
    Ki.await,
    Ki.awaitAll,
    fork_,
    forkWith,
    forkWith_,
    forkTryWith,
    Ki.ThreadOptions (..),
    Ki.defaultThreadOptions,
    Ki.ThreadAffinity (..),
    Ki.ByteCount,
    Ki.kilobytes,
    Ki.megabytes,
  )
where

import Control.Exception (Exception)
import Control.Monad.IO.Unlift (MonadUnliftIO (withRunInIO))
import Data.Void (Void)
import qualified Ki
import Prelude

fork :: forall a m. MonadUnliftIO m => Ki.Scope -> m a -> m (Ki.Thread a)
fork scope action =
  withRunInIO \unlift -> Ki.fork scope (unlift action)

fork_ :: MonadUnliftIO m => Ki.Scope -> m Void -> m ()
fork_ scope action =
  withRunInIO \unlift -> Ki.fork_ scope (unlift action)

forkWith :: forall a m. MonadUnliftIO m => Ki.Scope -> Ki.ThreadOptions -> m a -> m (Ki.Thread a)
forkWith scope opts action =
  withRunInIO \unlift -> Ki.forkWith scope opts (unlift action)

forkWith_ :: MonadUnliftIO m => Ki.Scope -> Ki.ThreadOptions -> m Void -> m ()
forkWith_ scope opts action =
  withRunInIO \unlift -> Ki.forkWith_ scope opts (unlift action)

forkTry :: (Exception e, MonadUnliftIO m) => Ki.Scope -> m a -> m (Ki.Thread (Either e a))
forkTry scope action =
  withRunInIO \unlift -> Ki.forkTry scope (unlift action)

forkTryWith ::
  (Exception e, MonadUnliftIO m) =>
  Ki.Scope ->
  Ki.ThreadOptions ->
  m a ->
  m (Ki.Thread (Either e a))
forkTryWith scope opts action =
  withRunInIO \unlift -> Ki.forkTryWith scope opts (unlift action)

scoped :: forall a m. MonadUnliftIO m => (Ki.Scope -> m a) -> m a
scoped action =
  withRunInIO \unlift -> Ki.scoped \scope -> unlift (action scope)